Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Примерные ответы.docx
Скачиваний:
9
Добавлен:
24.09.2019
Размер:
358.54 Кб
Скачать

13. Прерывания, сигналы и семафоры

1) Прерывания

Прерывание – сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.

Запросы на прерывания могут возникать

– внутри самой ЭВМ

запросы при возникновении в ЭВМ таких событий, как появление ошибки в работе ее аппаратуры, переполнение разрядной сетки, попытка деления на 0, выход из установленной для данной программы области памяти, затребование периферийным устройством операции ввода-вывода, завершение операции ввода-вывода периферийным устройством или возникновение при этой операции особой ситуации и др.

– во внешней среде ЭВМ

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

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

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

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

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

Обработка страничного прерывания:

1.Аппаратное обеспечение переключает систему в режим ядра, сохраняя счетчик команд в стеке.

2.Запускается программа, сохраняющая основные регистры и другую изменяющуюся информацию, защищая ее от разрушения ОС.

3.ОС обнаруживает возникновение прерывания и пытается найти нужную виртуальную страницу.

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

5.Если выбранный блок «грязный», его содержимое выгружается на диск, блок помечается как занятый, а на время записи контекст программы меняется на другой процесс.

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

7.Как только страница поступила в память, обновляется таблица страниц, а блок помечается как находящийся в нормальном состоянии.

8.Прерванная команда возвращается к тому состоянию, с которого она начиналась, а значение счетчика команд корректируется так, чтобы указывать на эту команду.

9.Прерванный процесс вносится в график и ОС возвращает управление ассемблерной процедуре, вызывавшей ее.

10.Процедура перезагружает регистры и другую информацию и возвращает управление в пространство пользователя.

***

2) Сигналы

Процессы могут общаться с помощью программных прерываний — один процесс может послать другому сигнал.

Процесс может получить сигнал от:

1.hardware (при возникновении исключительной ситуации);

2.другого процесса, выполнившего системный вызов передачи сигнала;

3.операционной системы (при наступлении некоторых событий);

4.терминала (при нажатии определенной комбинации клавиш);

5.системы управления заданиями.

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

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

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

***

3) Семафоры

Понятие семафорного механизма было введено Э. Дейкстрой в 1965г.

Семафор – целочисленная переменная, с которой ассоциирована очередь ожидающих процессов. Над семафором возможно проведение только двух операций - “открытия” и “закрытия”, названных соответственно P- и V-операциями. Операции над семафорами являются неделимыми (непрерываемыми), поэтому их часто называют примитивами. Пытаясь пройти через семафор, процесс пытается вычесть из значения переменной 1. Если значение переменной больше или равно 1, процесс проходит сквозь семафор успешно (семафор открыт). Если переменная равна нулю (семафор закрыт), процесс останавливается и ставится в очередь. Таким образом, семафор выполняет роль вспомогательного критического ресурса. Закрытие семафора соответствует захвату ресурса, доступ к которому контролируется этим семафором. Процесс, закрывший семафор, захватывает ресурс. Если ресурс захвачен, остальные процессы вынуждены ждать его освобождения. Закончив работу с ресурсом, процесс увеличивает значение семафора на единицу, открывая его. При этом первый из стоявших в очереди процессов активизируется, вычитает из значения семафора единицу, и снова закрывает семафор. Если же очередь была пуста, то ничего не происходит, просто семафор остается открытым. Тогда первый процесс, подошедший к семафору, успешно пройдет через него.