Операционные системы. Кручинин А.Ю. - 6 стр.

UptoLike

Составители: 

6
Продолжение таблицы 1
19
N=4, M=8, K=1.1, L=1.7
У
20
N=1, M=9, K=0.2, L=0.7
Ф
21
N=9, M=1, K=2, L=0.5
Х
22
N=5, M=4, K=1, L=1
Ц
23
N=6, M=6, K=1.2, L=1.5
Ч
24
N=6, M=3, K=0.8, L=0.9
Ш
25
N=3, M=5, K=1.2, L=1.4
Щ
26
N=2, M=5, K=1, L=1.7
Э
27
N=5, M=3, K=0.8, L=0.4
Ю
28
N=6, M=2, K=1, L=1.2
Я
Перед выполнением курсового проекта студент уточняет номер выполняемого
им варианта ключом к выбору задания является начальная буква фамилии.
Например: студент Сидоров для выполнения курсового проекта выбирает 17 номер.
3 Теоретические сведения для выполнения задания
Рассмотрим некоторые примитивы межпроцессного взаимодействия,
применяющиеся вместо циклов ожидания, в которых лишь напрасно расходуется
процессорное время. Эти примитивы блокируют процессы в случае запрета на вход
в критическую область. Одной из простейших является пара примитивов sleep и
wakeup. Примитив sleep системный запрос, в результате которого вызывающий
процесс блокируется, пока его не запустит другой процесс. У запроса wakeup есть
один параметр – процесс, который следует запустить. Также возможно наличие
одного параметра у обоих запросов адреса ячейки памяти, используемой для
согласования запросов ожидания и запуска.
Два процесса совместно используют буфер ограниченного размера. Один из
них, производитель, помещает данные в буфер, а потребитель считывает их оттуда.
Трудности начинаются в тот момент, когда производитель хочет поместить в буфер
очередную порцию данных и обнаруживает, что буфер полон. Для производителя
решением является ожидание, пока потребитель полностью или частично не очистит
буфер. Аналогично, если потребитель хочет забрать данные из буфера, а буфер пуст,
потребитель уходит в состояние ожидания и выходит из него, как только
производитель положит что-нибудь в буфер и разбудит его.
Это решение кажется достаточно простым, но оно приводит к состояниям
состязания. Нам нужна переменная count для отслеживания количества элементов в
буфере. Если максимальное число элементов, хранящихся в буфере, равно N,
программа производителя должна проверить, не равно ли N значение count прежде,
чем поместить в буфер следующую порцию данных. Если значение count равно N,
то производитель уходит в состояние ожидания; в противном случае производитель
           Продолжение таблицы 1
                 19           N=4, M=8, K=1.1, L=1.7            У
                  20            N=1, M=9, K=0.2, L=0.7          Ф
                  21             N=9, M=1, K=2, L=0.5           Х
                  22              N=5, M=4, K=1, L=1            Ц
                  23            N=6, M=6, K=1.2, L=1.5          Ч
                  24            N=6, M=3, K=0.8, L=0.9         Ш
                  25            N=3, M=5, K=1.2, L=1.4         Щ
                  26             N=2, M=5, K=1, L=1.7           Э
                  27            N=5, M=3, K=0.8, L=0.4         Ю
                  28             N=6, M=2, K=1, L=1.2           Я

     Перед выполнением курсового проекта студент уточняет номер выполняемого
им варианта – ключом к выбору задания является начальная буква фамилии.
Например: студент Сидоров для выполнения курсового проекта выбирает 17 номер.

     3 Теоретические сведения для выполнения задания

      Рассмотрим некоторые примитивы межпроцессного взаимодействия,
применяющиеся вместо циклов ожидания, в которых лишь напрасно расходуется
процессорное время. Эти примитивы блокируют процессы в случае запрета на вход
в критическую область. Одной из простейших является пара примитивов sleep и
wakeup. Примитив sleep – системный запрос, в результате которого вызывающий
процесс блокируется, пока его не запустит другой процесс. У запроса wakeup есть
один параметр – процесс, который следует запустить. Также возможно наличие
одного параметра у обоих запросов – адреса ячейки памяти, используемой для
согласования запросов ожидания и запуска.
      Два процесса совместно используют буфер ограниченного размера. Один из
них, производитель, помещает данные в буфер, а потребитель считывает их оттуда.
Трудности начинаются в тот момент, когда производитель хочет поместить в буфер
очередную порцию данных и обнаруживает, что буфер полон. Для производителя
решением является ожидание, пока потребитель полностью или частично не очистит
буфер. Аналогично, если потребитель хочет забрать данные из буфера, а буфер пуст,
потребитель уходит в состояние ожидания и выходит из него, как только
производитель положит что-нибудь в буфер и разбудит его.
      Это решение кажется достаточно простым, но оно приводит к состояниям
состязания. Нам нужна переменная count для отслеживания количества элементов в
буфере. Если максимальное число элементов, хранящихся в буфере, равно N,
программа производителя должна проверить, не равно ли N значение count прежде,
чем поместить в буфер следующую порцию данных. Если значение count равно N,
то производитель уходит в состояние ожидания; в противном случае производитель
                                                                               6