Операционные системы. Макушкина Л.А - 12 стр.

UptoLike

12
процессы p
0
и p
2
, из которых выбирается процесс p
0
. Наконец, последним получит
возможность выполняться процесс p
2
.
Таблица 8
Время
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
p
0
И И И I/O О Г
T=2/2+
3/2=2,5
Г T=2,5 И И И И И И И И И И
p
1
Г Г Г T=2 И И I/O О Г Г Г Г Г Г Г Г Г Г И И
p
2
Г Г Г T=2 Г Г T=2 И
Основную сложность при реализации алгоритма SJF представляет
невозможность точного знания продолжительности очередного CPU burst для
исполняющихся процессов. В пакетных системах количество процессорного
времени, необходимое заданию для выполнения, указывает пользователь при
формировании задания. Мы можем брать эту величину для осуществления
долгосрочного SJF-планирования. Если пользователь укажет больше времени, чем
ему нужно, он будет ждать результата дольше, чем мог бы, так как задание будет
загружено в систему позже. Если же он укажет меньшее количество времени,
задача может не досчитаться до конца. Таким образом, в пакетных системах
решение задачи оценки времени использования процессора перекладывается на
плечи пользователя. При краткосрочном планировании мы можем делать только
прогноз длительности следующего CPU burst, исходя из предыстории работы
процесса. Пусть τ(n) – величина n-го CPU burst, T(n + 1) предсказываемое
значение для n + 1-го CPU burst, некоторая величина в диапазоне от 0 до 1.
Определим рекуррентное соотношение
T(n+1)= τ(n)+(1- )T(n)
T(0) положим произвольной константой. Первое слагаемое учитывает
последнее поведение процесса, тогда как второе слагаемое учитывает его
предысторию. При = 0 мы перестаем следить за последним поведением процесса,
фактически полагая
T(n)= T(n+1)=...=T(0)
т. е. оценивая все CPU burst одинаково, исходя из некоторого начального
предположения.
Положив = 1, мы забываем о предыстории процесса. В этом случае мы
полагаем, что время очередного CPU burst будет совпадать со временем
последнего CPU burst:
T(n+1)= τ(n)
Обычно выбирают = 1/2 для равноценного учета последнего поведения и
предыстории. Надо отметить, что такой выбор удобен и для быстрой организации
вычисления оценки T(n + 1). Для подсчета новой оценки нужно взять старую
оценку, сложить с измеренным временем CPU burst и полученную сумму
разделить на 2, например, сдвинув ее на 1 бит вправо. Полученные оценки T(n + 1)
применяются как продолжительности очередных промежутков времени
непрерывного использования процессора для краткосрочного SJF-планирования.
процессы p0 и p2, из которых выбирается процесс p0. Наконец, последним получит
возможность выполняться процесс p2.
                                                                                                 Таблица 8
В ре мя   1   2   3         4   5           6            7   8   9   10 11 12 13 14 15 16 17 18
                                    T=2/2+
  p0      И   И   И   I/O   О   Г           Г   T=2,5    И   И   И   И   И   И   И   И   И   И
                                    3/2=2,5

  p1      Г   Г   Г   T=2   И   И    I/O   О             Г   Г   Г   Г   Г   Г   Г   Г   Г   Г   И   И


  p2      Г   Г   Г   T=2   Г   Г    T=2   И

   Основную сложность при реализации алгоритма SJF представляет
невозможность точного знания продолжительности очередного CPU burst для
исполняющихся процессов. В пакетных системах количество процессорного
времени, необходимое заданию для выполнения, указывает пользователь при
формировании задания. Мы можем брать эту величину для осуществления
долгосрочного SJF-планирования. Если пользователь укажет больше времени, чем
ему нужно, он будет ждать результата дольше, чем мог бы, так как задание будет
загружено в систему позже. Если же он укажет меньшее количество времени,
задача может не досчитаться до конца. Таким образом, в пакетных системах
решение задачи оценки времени использования процессора перекладывается на
плечи пользователя. При краткосрочном планировании мы можем делать только
прогноз длительности следующего CPU burst, исходя из предыстории работы
процесса. Пусть τ(n) – величина n-го CPU burst, T(n + 1) – предсказываемое
значение для n + 1-го CPU burst, – некоторая величина в диапазоне от 0 до 1.
   Определим рекуррентное соотношение
                               T(n+1)= τ(n)+(1- )T(n)
   T(0) положим произвольной константой. Первое слагаемое учитывает
последнее поведение процесса, тогда как второе слагаемое учитывает его
предысторию. При = 0 мы перестаем следить за последним поведением процесса,
фактически полагая
                                T(n)= T(n+1)=...=T(0)
   т. е. оценивая все CPU burst одинаково, исходя из некоторого начального
предположения.
   Положив = 1, мы забываем о предыстории процесса. В этом случае мы
полагаем, что время очередного CPU burst будет совпадать со временем
последнего CPU burst:
                                    T(n+1)= τ(n)
   Обычно выбирают = 1/2 для равноценного учета последнего поведения и
предыстории. Надо отметить, что такой выбор удобен и для быстрой организации
вычисления оценки T(n + 1). Для подсчета новой оценки нужно взять старую
оценку, сложить с измеренным временем CPU burst и полученную сумму
разделить на 2, например, сдвинув ее на 1 бит вправо. Полученные оценки T(n + 1)
применяются как продолжительности очередных промежутков времени
непрерывного использования процессора для краткосрочного SJF-планирования.



                                                    12