Реализация стратегии диспетчеризации SJF

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    337,72 Кб
  • Опубликовано:
    2012-05-10
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Реализация стратегии диспетчеризации SJF

Введение

Планирование и диспетчеризация процессора - одна из важнейших функций операционной системы.

-             Основные понятия диспетчеризации процессов

-             Критерии диспетчеризации

-             Алгоритмы диспетчеризации

-             Диспетчеризация нескольких процессоров

-             Диспетчеризация в реальном времени

-             Многоуровневые очереди.

Диспетчеризация процессора - распределение его времени между процессами в системе. Цель диспетчеризации - максимальная загрузка процессора, достигаемая с помощью мультипрограммирования.

Исполнение любого процесса можно рассматривать как цикл CPU / I-O - чередование периодов использования процессора и ожидания ввода-вывода. Распределение периодов активности процессора (bursts) и ввода-вывода изображено на рисунке 1.

Последовательность активных фаз процессора и фаз ввода-вывода.

Рисунок 1

На рисунке 2 изображена примерная гистограмма периодов активности процессора, основанная на анализе реального поведения процессов в операционных системах (ОС).

Гистограмма периодов активности процессора

Рисунок 2

Из схемы видно, что чем короче период активности, тем выше частота таких периодов, и наоборот, т.е. частота периодов активности обратно пропорциональна их длительности.

1. Планировщик процессора

Планировщик - компонента ОС, которая выбирает один из нескольких процессов, загруженных в память и готовых к выполнению, и выделяет процессор для одного из них. Решения по диспетчеризации могут быть приняты в случаях, если процесс:

. Переключается из состояния выполнения в состояние ожидания.

. Переключается из состояния выполнения в состояние готовности к выполнению.

. Переключается из состояния ожидания в состояние готовности.

.        Завершается.

Диспетчеризация типов 1 и 4 обозначается термином диспетчеризация без прерывания процесса (non-preemptive).

Диспетчеризация типов 2 и 3 обозначается термином диспетчеризация с прерыванием процесса (preemptive).

1.1 Диспетчер процессора

Диспетчер процессора - компонента ОС, предоставляющая процессор тому процессу, который был выбран планировщиком. Диспетчер выполняет последовательность действий:

-             Переключает контекст

-             Переключает процессор в пользовательский режим

-             Выполняет переход по соответствующему адресу в пользовательскую программу для ее рестарта.

Скрытая активность (латентность) диспетчера (dispatch latency) - время, требуемое для диспетчера, чтобы остановить один процесс и стартовать другой. Разумеется, система должна стремиться минимизировать это время, однако набор критериев диспетчеризации более сложен.

1.2 Критерии диспетчеризации

Имеется пять основных критериев диспетчеризации процессора, которые так или иначе должны учитываться системой.

Использование процессора (CPU utilization) - поддержание его в режиме занятости максимально возможный период времени. Критерий оптимизации: максимизация данного показателя.

Пропускная способность системы (throughput) - (среднее) число процессов, завершающих свое выполнение за единицу времени. Критерий оптимизации: максимизация.

Время обработки процесса (turnaround time) - время, необходимое для исполнения какого-либо процесса. Критерий оптимизации: минимизация.

Время ожидания (waiting time) - время, которое процесс ждет в очереди процессов, готовых к выполнению. Критерий оптимизации: минимизация.

Время ответа (response time) - время, требуемое от момента первого запроса до первого ответа. Критерий оптимизации: минимизация.

Как и при любой оптимизации, независимо от стратегии, удовлетворить всем критериям одновременно невозможно. Далее рассмотрим различные стратегии диспетчеризации и проанализируем их достоинства и недостатки, с точки зрения достижения оптимальности указанных критериев.

1.3 Стратегия First-Come-First-Served (fcfs)

Стратегия First-Come-First-Served (обслуживание в порядке поступления) - наиболее простая стратегия диспетчеризации, при которой ресурсы процессора предоставляются процессам в порядке их поступления (ввода) в систему, независимо от потребляемых ими ресурсов, в частности, от заявленного процессом времени, требуемого для его выполнения. При рассмотрении этой и других стратегий будем использовать диаграммы Ганта (Gantt charts) изображающие имена процессов и временные диапазоны их выполнения, выраженные в некоторых единицах времени.

Рассмотрим следующий пример. Пусть процессы P1, P2 и P3 введены в систему в указанном порядке со следующими периодами активности:

Процессы

Период активности

P1

24

P2

3

P3

3


Тогда при использовании стратегии FCFS для их диспетчеризации первым получит процессор первый процесс, несмотря на то, что он - наиболее долгий. Распределение процессора между процессами в данном случае изображено на рисунок 3.

Схема диспетчеризации по стратегии FCFS (пример 1)

Рисунок 3

Таким образом, время ожидания для P1 = 0; P2= 24; P3 = 27.

Среднее время ожидания: (0 + 24 + 27)/3 = 17.

Если порядок процессов иной: P2, P3, P1 (последний введенный в систему процесс - самый долгий), то результат их диспетчеризации будет совершенно иным (рисунок 4)

Схема диспетчеризации по стратегии FCFS (пример 2).

Рисунок 4

Время ожидания процессов в данном случае: P1 = 6; P2 = 0; P3 = 3.

Среднее время ожидания: (6 + 0 + 3)/3 = 3

Данный результат много лучше, чем в предыдущем случае.

Эффект, продемонстрированный первым примером, носит название эффекта сопровождения (convoy effect) - увеличение среднего времени ожидания процессов в случаях, если короткий процесс обслуживается после долгого процесса.


2. Стратегия Shortest Job First (SJF)

Стратегия Shortest Job First (SJF, обслуживание самого короткого задания первым) - стратегия диспетчеризации процессора, при которой процессор предоставляется в первую очередь наиболее короткому процессу из имеющихся в системе.

В данном случае с каждым процессом связывается длина его очередного периода активности. Эта длина используется для того, чтобы первым обслужить самый короткий процесс.

Возможны две схемы применения данной стратегии:

1)   Без прерывания процессов - пока процессу предоставляется процесс, он не может быть прерван, пока не истечет его квант времени.

Нетрудно видеть, что стратегия SJF оптимальна, в том смысле, что она обеспечивает минимальное среднее время ожидания для заданного набора процессов.

Рассмотрим пример применения стратегии SJF без прерывания процессов. Пусть набор процессов, времен их появления в системе и времен их активности следующие:

Процесс

Время появления

Время активности

P1

0.0

7

P2

2.0

4

P3

4.0

1

P4

5.0

4


Схема их диспетчеризации по стратегии SJF без прерывания процессов приведена на рисунке 5.

Схема диспетчеризации процессов по стратегии SJF без прерывания.

Рисунок 5

В данном случае среднее время ожидания = (0 + 6 + 3 + 7)/4 = 4.

Теперь применим к тем же процессам стратегию SJF с прерыванием и проанализируем, как изменится среднее время ожидания. Результат применения стратегии изображен на рисунке 6.

Схема диспетчеризации процессов по стратегии SJF с прерываниями.

Рисунок 6

В данном случае принцип прерывания процесса в момент поступления в систему более короткого процесса применяется несколько раз:

-             в момент 2 прерывается процесс 1 и начинает исполняться более короткий процесс 2;

-             в момент 4 прерывается процесс 2 и начинает исполняться более короткий процесс 3.

Из диаграммы видно, что, вследствие применения принципа прерывания процессов, периоды непрерывного выполнения процесса на процессоре могут быть не смежными и перемежаться с периодами выполнения других процессов.

В данном случае среднее время ожидания = (9 + 1 + 0 +2)/4 = 3, т.е. оно, как и следовало предполагать, оказалось меньше, чем без применения принципа прерывания процессов.

3. Использование SJF на практике

.1 Реализация стратегии диспетчеризации SJF

И вот уже объяснив суть Shortest Job First, хотелось бы показать, где собственно используется данная стратегия. Покажем на примере перевода элементов данных из одного источника в другой. Это стратегия существенно снижает среднее время ожидания.

Например, группа читателей ждут, пока элементы станут доступными в определенном пункте назначения. Автор с ограниченными возможностями подключения (недостаточная пропускная способность, недостача ресурсов сервера или длиннолатентная (latency перевод с англ. задержка) ссылка для его читателей) влияет на издателя, который дает доступ к элементам читателям.

Это работа мотивированна работой инфраструктуры типичной Веб-публикации на сегодняшний день, где содержание элемента автора загружается на AWeb сервер, а не непосредственно к читателю. Если объем данных элементов больше чем пропускная способность линии - как в случае отправки изображения с высоким разрешением или длинных видеоролики, загружаемых через широкополосное соединение или через беспроводную связь мобильного устройства, то автор будет заинтересован в сокращении времени, пока его элементы станут доступны читателям. Принцип работы Веб-публикации подробно показан на рисунке 7. Набор элементов (θ i) загружен на сайт издателя. Издатель информирует автора о популярности(Pi) каждого элемента в отдельности.

Принцип работы Веб-публикации

Рисунок 7

Конкретные примеры этого являются веб-бытовые услуги общего доступа к файлам как. Mac и Steamload, которые позволяют пользователям обмениваться большими файлами, а так же вести хостинг для мультимедийного контента. Содержание распределительной сети (такие как Akamai и интернет Mirror Image) в которой большие файлы копируются на серверы находящиеся в географической близости для пользователей, в том числе и для автора (если у него ограниченная пропускная способность). Если файлы копируются «По требованию», например, по популярности, то для этого файла уделяется производительность, уменьшается время ожидания. Наша стратегия состоит в том, что бы уменьшить время работы (SJF), сделать алгоритм для передачи элемента и рассортировать по популярности. Планировщик вычисляет, основываясь на размерах файлов; сколько читателей запрашивали этот файл. Несколько запросов от одного читателя рассматривается как один.

Мы считаем, что для каждого автора есть конечное множество элементов данных для загрузки. Издатель знает количество элементов (например, получив список всех элементов) и имеет возможность сохранить их все. Кроме того, мы предлагаем неограниченные возможности связи между читателями и издателем, но ограниченные возможности связи между издателем и автором. Таким образом, читатель имеет доступ к любому элементу, он становится доступным для читателя, как только полностью будет загружен на издателя. Время между первым запросом и завершении загрузки назовем как «Время ожидания». Установка всего процесса подробно показана на рисунке 7, где набор элементов показан как (θ i), а популярность показана как (Pi).

Этот принцип имеет смысл когда автор загружает процессы на издателя и процессы не требуют сложных расчетов. Например, когда мы переносим содержимое жесткого диска с объемом 500-Гб через Gigabit Ethernet и передачи нескольких десятков видео, каждое по 10 Мб, через ADSL соединение (максимальная скорость передачи 128 кбит/с), оба потребуют больше часа на передачу. Время передачи такое же как, передача несколько широкоформатных изображении «raw» (перевод с англ сырой), в 8-мегапиксельной камере, через беспроводной сети 3G. Мы не берем в счет пропускную способность канала, но вместо этого экспортируем с более широким спектром время передачи, которые могут связаны с конкретными сценариями, которые перечислены выше.

Мы предлагаем два варианта расписания стратегии. Первый из них, является статистическим, в смысле, что популярность данных элементов фиксирована и известна до начала загрузки. Доказано что планирование SJF на основе отношения размера приводит к минимальному времени ожидания.

Вторая стратегия, позволяет запрашивать данные во время загрузки. С помощью симулятора, мы покажем, что в этом случае планирования SJF на отношении размера файла и популярности, что снижает общее время ожидания, чем планирование на основе размера и популярности поодиночке. И на основе данных их симулятора, мы обнаружили что он снижает общее врем когда только у нас мало элементов (не более шести элементов).

3.2 Статический способ

процессор обслуживание задание стратегия

В этом случае мы предполагаем, что популярность каждого элемента фиксирована и известна до начала передачи. Это означает, что планировщику нужно принять решение только один раз, в начале передачи. Репликация файлов из перегруженного сервера для удаленного сервера распространения контента является примером такого сценария. Так как исходный сервер отвечает на рост популярности определенных файлов, его шаблон доступа может быть использован для статистических решений планирования. Определения и доказательства в этом разделе может служить в отправной точке для обсуждения следующих секции динамического планирования.

Рассмотрим множество ϴ, где N задач (элементы будут загружены):

Формула (1)

ϴ=(θ1, θ2,… θn).

Если время начинается в то время, когда множество ϴ готово к передаче в издательство, и если время fi, когда задача θi была загружена, то среднее время ожидания (AWT average waiting time) для всех задач этого множества при графике σ:

формула AWT(2)


Это определение AWT выражает среднее время ожидания для каждого запроса, основываясь на том, сколько ждет читатель до начала загрузки. Для учета элементов запрашиваемых больше чем одним читателем, мы включаем популярность pi элемента θi. То есть количество читателей обслужено им. Выражено здесь на рисунке 9:

Формула AWT (по популярности) (3)


И вместо нахождения среднего по количеству задач, N, усреднить от общего количества ожидающих запросов M рисунок 10:

Усреднить от общего количества


Обратите внимание, что при р = 1 ∀ я, то (3) эквивалентно (2). Не запрошенные элементы (р = 0) не включены в ожидание времени, так что никто не ждет их. Мы предполагаем, что их передача откладывается до тех пор пока не передадутся запрошенные элементы.


Заключение

Мы рассмотрели изменения кратчайшего алгоритма работы первого для планирования передачи набора данных элементов автора с ограниченными возможностями подключения. Мы посмотрели затраты времени с каждой точки зрения, по сути наша стратегия способствует уменьшению времени ожидания наиболее популярных и наименьшего: они становятся доступными как можно скорее, тем самым снижая время ожидания читателей.

Мы доказали, что элементы планирования данных, разместив по популярности и по размеру, и минимизирует среднее время ожидания (AWT), как определенно в (2), при pi не меняется со временем и планируем, один раз до начала передачи. Мы показали, как этот алгоритм работает лучше, чем обычный простой SJF который использует в качестве вычислительных затрат только размер элемента. Кроме того, мы обнаружили, что если элементов много (больше шести), то наша формула не поможет производительности. В будущем мы надеемся, что получиться увеличить количество элементов

Исходя их всех вышеизложенных формул, можно увидеть, что стратегия Shortest Job First существенно уменьшает среднее время ожидания. И реализует движок работы многих веб сайтов, веб-публикации и серверов, таких как youtube.com, tweeter.com, depositfiles.com и т.д.


Список литературы

1.   В.О. Сафонов. Основы современных операционных систем. http://www.untuit.ru

2.      Simone Lupetti, Dmitrii Zagorodnov. Data popularity and shortest-job-first scheduling of network transfer. IKT 2010 project number 146986/431. University of Tromso

Приложение

КОД ПРОГРАММЫ SJF НА ЯЗЫКЕ С++

# include<stdio.h>

# include<alloc.h>node

{int process_no;btime;node *link;

};append (struct node **, int, int);display (struct node *, int);chart (struct node **);main()

{clrscr();node *p;= NULL; /* Empty Linked list */i=1, time;ans = 'y';(ans!= 'n')

{printf («\nEnter Burst Time For Process No.%d:», i);(«%d»,&time);(&p, i, time);(«Any More Process (Y/N)?»);= getche();++;

}();();(«\nThe Order Of Execution Of Process For SJF Algorithm Will be: -»);(p, 1);();(«\nThe Waiting Time Of Process For SJF Algorithm Will be: -»);(p, 2);();(&p);();

}append (struct node **q, int i, int time)

{struct node *r,*temp = *q;= (struct node *) malloc (sizeof(struct node));>process_no = i;>btime = time;

/* If list is empty or new data to be inserted b4 the first node */(*q==NULL || (*q)->btime > time)

{*q = r;

(*q)->link = temp;

}

{/* traverse the entire linked listsearch the position the new node to be inserted */(temp!= NULL)

{if (temp->btime <=time &&(temp->link->btime > time || temp->link ==NULL))

{r->link = temp->link;>link = r;>link = NULL;

}= temp->link;

}

}

}display (struct node *q, int kk)

{struct node *temp;wtime, avg=0, total = 0, count=0;= q;i;(«\n»);(«\n\t\t % c», 218);(i=1; i<33; i++)

{if (i==17)(«%c», 194);(«%c», 196);

}(«%c», 191);(kk==1)

{printf («\n\t\t % c PROCESS NO. %c BURST TIME %c\n», 179,179,179);

}(kk==2)

{printf («\n\t\t % c PROCESS NO. %c WAIT TIME %c\n», 179,179,179);

}(«\t\t % c», 195);(i=1; i<33; i++)

{if (i==17)(«%c», 197);(«%c», 196);

}(«%c», 180);(temp!=NULL)

{count++;(kk==1)

{printf («\n\t\t % c %d. %c %3d %c», 179, temp->process_no, 179, temp->btime, 179);

}(kk==2)

{if (temp ==q) /* First Process In The Ready Queue */

{wtime = 0;+= temp->btime;+=wtime;

}

{wtime = total;+= temp->btime;+=wtime;

}(«\n\t\t % c %d. %c %3d %c», 179, temp->process_no, 179, wtime, 179);

}=temp->link;

}(«\n\t\t % c», 192);(i=1; i<33; i++)

{if (i==17)(«%c», 193);(«%c», 196);

}(«%c», 217);(kk==2)

{printf («\nThe Average Waiting Time (%d % c % d) =%.2f», avg, 246, count, float (avg/float(count)));

}

}chart (struct node **q)

{(«\n»);(«\nThe Glant Chart Is As Follows:-\n»);node *temp,*temp1,*temp2,*temp3,*temp4;= *q; temp1 = *q; temp2 = *q; temp3 = *q; temp4=*q;sum = 0; float sfactor;(temp4!=NULL)

{sum+=temp4->btime;= temp4->link;

}(sum<80)

{sfactor = 1.0;

}

{sfactor = (sum % 80)/float(sum);

}i, k=0;(«%d», k);(temp3!= NULL)

{if((sfactor*temp3->btime) == 0)

{goto harsh;

}(i=-1; i<=(sfactor*temp3->btime); i++)

{printf(«»);

}+=temp3->btime;(«%d», k);:=temp3->link;

}(«\n»);(temp!=NULL)

{if (temp == *q)

{(«%c % c», 218,196);((sfactor*temp->btime) == 0)

{goto last;

}(i=-1; i<=(sfactor*temp->btime); i++)

{printf («%c», 196);

}(temp->link!= NULL)

{printf («%c», 194);

}

{printf («%c», 191);

}

}

{if((sfactor*temp->btime) == 0)

{goto last;

}(i=-1; i<=(sfactor*temp->btime); i++)

}(temp->link!= NULL)

{printf («%c», 194);

}

{printf («%c», 191);

}

}:= temp->link;

}(«\n»);(«%c», 179);(temp1!= NULL)

{if((sfactor*temp1->btime) == 0)

{goto last1;

}(i=0; i<=(sfactor*temp1->btime); i++)

{if (i==int (sfactor*temp1->btime)/2)

{printf («P % d», temp1->process_no);

}(«»);

}(«%c», 179);:= temp1->link;

}(«\n»);(temp2!=NULL)

{if (temp2 == *q)

{printf («%c % c», 192,196);((sfactor*temp2->btime) == 0)

{goto last2;

}(i=-1; i<=(sfactor*temp2->btime); i++)

{printf («%c», 196);

}(temp2->link!= NULL)

{printf («%c», 193);

}

{printf («%c», 217);

}

}

{if((sfactor*temp2->btime) == 0)

{goto last2;

}(i=-1; i<=(sfactor*temp2->btime); i++)

{printf («%c», 196);

}(temp2->link!= NULL)

{printf («%c», 193);

}

{printf («%c», 217);

}

}:=temp2->link;

}

}

Похожие работы на - Реализация стратегии диспетчеризации SJF

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!