Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по операционным системам1.doc
Скачиваний:
110
Добавлен:
02.05.2014
Размер:
1.27 Mб
Скачать

Состояния процессов.

В любой ОС процессы могут быть:

  1. активными;

  2. пассивными (куда входят готовые к выполнению и ожидающие).

пассивные

готовые

активные

ожидающие

Структурная схема ядра.

Очередь блокирования

планировщик

Очередь готовых

диспетчер

процессор

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

Реентерабельность – повторная входимость.

Если критический ресурс – программный код (подпрограмма), то все просто (создаются ее копии).

А если критический ресурс – физическое устройство, то здесь могут возникнуть проблемы.

Также реентерабельными могут быть и прерывания (как DOS, так и BIOS). Здесь тоже могут возникнуть серьезные трудности.

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

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

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

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

Стратегия планирования.

  1. без переключения контекста или выполнения до конца;

  2. с переключением (близко к разделению времени);

а) с постоянным шагом (размер тика не меняется);

б) с переменным шагом (размер тика меняется, соответственно).

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

  1. с приоритетом;

а) постоянный;

б) динамический.

Значения очередей следующее:

  • позволяет упорядочить доступ к ресурсам в режиме FIFO (с учетом приоритетов);

  • позволяет обращаться к процессам на абстрактном уровне.

Содержание дескриптора процессов:

  1. имя процесса;

  2. состояние ЭВМ (все регистры, состояния памяти процесса);

  3. данные о состоянии процесса (т.е. он готовый, активный или блокированный);

  4. данные для планирования (указ_очередь, в которой находится процесс, указ_на_сам_проц, указ_след_проц, указ_пред_проц);

  5. сведения о потомках и родителях (сведения о том, из какого процесса был запущен данный процесс и для какого из процессов он является родителем).

Ядро управляется 2-умя способами:

  1. прерываниями (с физического низкого уровня);

  2. примитивами (с высокого уровня).

Примитивы ядра.

Примитивы могут быть 3-ех уровней:

  1. управление процессами;

  2. примитивы синхронизации;

а) простейшая синхронизация;

б) временная (задержка для многозадачного режима);

в) событийная (по событию).

  1. примитивы обмена сообщений;

а) примитивы для синхронизации быстрых и медленных устройств;

б) процесс обмена информации между собой (почтовый ящик).

Все примитивы пишутся по одной и той же схеме:

Начало

  1. пролог; сохранение контекста активного и вхождение в критический участок

  2. контроль; проверка прав и параметров

<тело примитива>

  1. выделение процесса; переключение контекста

Примитивы управления процессами:

  • создать процесс;

  • уничтожить процесс.

Создать процесс:

  1. пролог;

  2. контроль;

  3. создать дескриптор;

  4. включить в очередь;

  5. переназначить.

Уничтожить процесс:

  1. пролог;

  2. контроль;

  3. извлечь из очереди;

  4. разрушить дескриптор;

  5. переназначить.

Эта схема не годится в случае удаления активного процесса, т.к. это опасно. Поэтому рассмотрим другой вариант:

Уничтожить процесс:

  1. пролог;

  2. контроль;

  3. извлечь из очереди;

  4. включить в очередь удаления;

  5. переназначить.

а) специальный процесс (демон);

б) в обработчике прерываний.

Обработчик прерываний:

Начало

Очистить очередь удаления

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

Конец

Простейшая синхронизация;

А

отладка

) отсрочить выполнение

Б) возобновить выполнение

Отсрочить выполнение:

  1. пролог;

  2. контроль;

  3. извлечь из очереди;

  4. включить в очередь приостановленных;

  5. переназначить;

Возобновить выполнение:

  1. пролог;

  2. контроль;

  3. извлечь из очереди приостановленных;

  4. включить в очередь готовых;

  5. переназначить.

Временная синхронизация;

DELAY()  P1

Участок активного ожидания

Недостатки:

  • простаивание процессора;

  • коллизии с обработчиком прерываний по таймеру.

К этому надо бы добавить:

+ реализация режима пассивных ожиданий;

+ избавление от иллюзии, связанной с обработчиком прерываний.

Постановка

указ дескриптор

T=Tn+t

Функцию возвращения из очереди удаляемых берет на себя обработчик прерываний.

Событийная синхронизация;

1) Латентность – скрытность (например, заболевания).

P1

P2

CLI

CLI

Критический участок

За это время система должна быть латентной

STI

STI

t << тик

2)Маскирование (запрет отдельных прерываний).

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

Микросхема PIC  20h, 21h, 22h (через порт 21h фактически и происходит маскирование)

Например, хотим запретить прерывание клавиатуры:

mov al, 00000010b

out 21h, al

  1. Режим взаимного исключения;

Монитор – объект, содержащий:

  • множество переменных (отражающих состояния системы);

  • множество функций (функции изменения переменных).

  1. Когда процесс получает доступ к ресурсу, то это влияет (приводит к) на изменение состояний системы.

  2. Когда процесс запрашивает ресурс через монитор.

Монитор “знает” состояния системы и владеет функциями, способными их изменить, может предоставить этот ресурс либо отказать процессу.

  1. Монитор работает в режиме взаимного исключения (ВИ).

0, критический участок свободен

FLAG =

1, критический участок занят

M: если FLAG = 1, то идти к М

Критический участок

FLAG = 0

Недостатки:

  • такая схема (3) приводит к режиму активного ожидания, т.е. режиму, при котором ожидаются ресурсы процессора;

  • нарушение принципа FIFO;

  • FLAG – тоже общий ресурс  к нему тоже можно осуществить доступ.

Отсюда видно, что эта схема практически неприемлема, а если и приемлема, то безграмотна.

Попробуем ее немного улучшить (попробуем устранить последний недостаток):

M: mov ax, 1

Режим блокировки шины

lock xchg ax, FLAG

Cmp ax, 1

Jz M

Критический участок

FLAG = 0

Семафор Дейкстры (устраняет все 3 недостатка):

Семафор – объект, который состоит из:

  • счетчика семафора;

  • очереди семафора;

  • 2-ух функций семафора (захват семафора, стоящий перед критическим участком и освобождение семафора, стоящий после критического участка).

Захват_семафор()

CLI

DEC счетчик семафора (если счетчик семафора < 0, то дескр_проц отправляется в очередь семафора)

STI

Освоб_семафор()

CLI

INC счетчик семафора (если счетчик семафора <= 0, то дескр_проц, стоящий в очереди семафора 1-ым, отправляется в критический участок)

STI

Пример:

С

1)-3)

четчик семафора = 1 (начальное состояние)

P

P3

1 P2 P3

з

P2

ахв_семаф захв_сем захв_сем

Критический участок

о

4)

св_сем осв_сем осв_сем

1) P1: сч_сем = 0; P1 – в критический участок

2

P3

) P2: сч_сем = -1; P2 – в очередь семафора

3) P3 сч_сем = -2; P3 – в очередь семафора

  1. P1 – закончился; сч_сем = -1; P2 – из очереди семафора в критический участок

  2. P2 – закончился; сч_сем = 0; P3 – из очереди семафора в критический участок

  3. P3 – финишировал; сч_сем = 1; код программы закончил свою работу

Примечание: в этой конструкции значение сч_сем = 1 – эквивалентно тому, что очередь семафора пуста, а критический участок – свободен.

Примитивы сообщения;

Самый медленный способ.

Придерживается следующих функций:

а) синхронизация медленных и быстрых устройств;

б) обмен сообщениями между процессами (подпрограммами).

С точки зрения ОС последовательные файлы – это ничто иное, как буферы к устройствам ввода/вывода.

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

Буфер  кольцевая очередь (см. курс СиАОЭДЭВМ).

Достоинства:

+ операции чтения и записи можно разделить по времени (что приводит к синхронизации).

Недостаток:

  • любой буфер является фиксированным.

Устранение недостатка:

а) содержать в буфере дескриптор очереди, а не сами данные, что уменьшает информативность;

б) дополнить соответствующими динамическими очередями (правда это снизит скорость обработки).