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

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

Прерывание – событие, при котором процесс прерывается и управление передается системе обработки прерываний.

Если произошло прерывание, то

  • Управление передается операционной системе;

  • ОС запоминает состояние прерванного процесса;

  • ОС анализирует тип прерывания и передает управление соответствующей программе обработки этого прерывания

Типы прерываний:

  • Прерывания по вызову пользователя. SVC прерывания. Механизм SVC помогает защитить ОС от пользователей. Благодаря этому ОС всегда знает обо всех попытках пользователя пересечь ее границы и может отказаться от выполнения определенных запросов.

  • Прерывания ввода-вывода. Эти прерывания инициируются аппаратурой ввода/вывода.

  • Внешние прерывания. (истечение кванта времени, заданного на таймере прерываний, сигнал от другого процессора в мультипроцессорной системе).

  • Прерывания по рестарту. При нажатии кнопки рестарта.

  • Прерывания по ошибке программы (деление на ноль и т.д.)

  • Прерывания по ошибке машины. Эти прерывания вызываются аппаратными ошибками.

2. Иерархическая структура ос.

Нижний уровень - аппаратура

  • ядро ОС

  • системные программы

  • уровень пользовательских программ

Ядро ОС – это та часть ОС, под управлением которой выполняются все операции, связанные с процессами. Одна из самых важных функций, реализованных в ядре – обработка прерываний, кроме того основные функции ядра: создание и удаление процессов, их переключение, синхронизация, поддержка операций ввода/вывода, работы файловой системы, поддержка механизма возврата при обращении к процедурам.

2.1 Понятие параллельных и асинхронных процессов

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

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

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

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

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

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

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

К программным средствам относится алгоритм Деккера.

2.2 Алгоритм Деккера.

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

Первая версия.

Program N1;

Procedure процесс1;

Begin

While истина do

Begin

While номерпроцесса=2 do;

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

Номерпроцесса:=2;

Прочиеоператорыодин

End;

End;

Procedure процесс2;

Begin

While истина do

Begin

While номерпроцесса=1 do;

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

Номерпроцесса:=1;

Прочиеоператорыдва

End;

End;

Begin

Номерпроцесса:=1;

Parbegin

Процесс1;

Процесс2;

Parend

End.

Parbegin и parend позволяют организовать параллельную работу процессов.

Недостатки первой версии.

  1. Процессдва должен ждать, т.к. процессодин должен выполняться первым

  2. Процессы должны входить и выходить из своих критических участков строго поочередно.

Вторая версия

Program N2;

Procedure процесс1;

Begin

While истина do

Begin

While П2внутри do;

П1внутри:=истина;

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

П1внутри:=ложь;

Прочиеоператорыодин

End;

End;

Procedure процесс2;

Begin

While истина do

Begin

While П1внутри do;

П2внутри:=истина;

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

П2внутри:=ложь;

Прочиеоператорыдва

End;

End;

Begin

П1внутри:=ложь;

П2внутри:=ложь;

Parbegin

Процесс1;

Процесс2;

Parend

End.

Недостаток второй версии.

Т.к. процесс1 и процесс2 – параллельные процессы, то они могут одновременно войти в критические участки.

Алгоритм Деккера.

Procedure процесс1;

Begin

While истина do

Begin

П1хочетвойти:=истина;

While П2хочетвойти do

If избранныйпроцесс=2 then Begin

П1хочетвойти:=ложь;

While избранныйпроцесс=2 do;

П1хочетвойти:=истина

End;

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

Избранныйпроцесс:=2;

П1хочетвойти:=ложь;

Прочиеоператорыодин

End;

End;

Procedure процесс2;

Begin

While истина do

Begin

П2хочетвойти:=истина;

While П1хочетвойти do

If избранныйпроцесс=1 then Begin

П2хочетвойти:=ложь;

While избранныйпроцесс=1 do;

П2хочетвойти:=истина

End;

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

Избранныйпроцесс:=1;

П2хочетвойти:=ложь;

Прочиеоператорыдва

End;

End;

Begin

П1хочетвойти:=ложь;

П2хочетвойти:=ложь;

Ихбранныйпроцесс:=1;

Parbegin

Процесс1;

Процесс2;

Parend

End.