Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мои шпоры ОСиСП(1).doc
Скачиваний:
32
Добавлен:
26.09.2019
Размер:
1.63 Mб
Скачать

2. Взаимодействие процессов. Задача взаимного исключения. Вариант 2 (2, 6, 15, 27) – 143

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

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

int flag[2]; begin integer С1,С2;

void P0() С1 := 1; С2 := 1;

{ parbegin

while (1) процесс 1: begin L1: if (С2 = 0) then goto L1;

{ С1 := 0;

while (flag[1]); критический интервал 1;

flag[0]=1; С1 := 1;

критический интервал 1; остаток цикла 1;

flag[0]=0; goto L1;

. end;

} процесс 2: begin L2: if (С1 = 0) then goto L2;

} С2 := 0;

void P1() критический интервал 2;

{ С2 := 1;

while (1) остаток цикла 2;

{ goto L2;

while (flag[0]); end;

flag[1]=1; parend;

критический интервал 2; end;

flag[1]=0;

.

}

}

void main()

{

flag[0]=0;

flag[1]=0;

parbegin(P0,P1);

}

Недостаток. При развитии процессов строго синхронно они могут одновременно войти в критический интервал.

3. Функции микроядра (4, 12, 15, 27) – 126

1 . Низкоуровневое управление памятью. Для реализации в микроядре защиты на уровне процессов в нем должен обеспечиваться контроль над аппаратной организацией адресного пространства. Если микроядро будет отвечать лишь за отображение виртуальной страницы на физическую страницу, то блок управления памятью, включая систему защиты адресного пространства одного процесса от другого, а также алгоритм замены страниц и другие логические схемы страничной организации памяти можно реализовать вне ядра. Модуль виртуальной памяти принимает решение, когда загружать страницу в память, и какую из страниц, находящихся в памяти, следует заменить. Когда приложение обращается к странице, которая отсутствует в основной памяти, возникает прерывание из-за отсутствия страницы и управление перехватывается ядром. Ядро отправляет системе страничной организации памяти сообщение, в котором указывается запрашиваемая страница. Система страничной организации памяти может принять решение о загрузке данной страницы в оперативную память и выделения для этого

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

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

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

Предоставление. Процесс, который владеет адресным пространством, может предоставлять некоторые свои страницы другому процессу. Ядро удаляет эти страницы из адресного пространства первого процесса и передаёт их второму процессу.

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

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

2. Взаимодействие между процессами. Основной формой взаимодействия между процессами (потоками) являются сообщения. Сообщения включают в себя заголовок, в котором указаны идентификаторы процесса отправителя и процесса получателя, а также указатель на блок данных и некоторые управляющие сведения о процессе. Взаимодействие между процессами основывается на относящихся к этим процессам портам. Порт – это очередь сообщений, предназначенная для определённого процесса. С портом связан список возможностей, в которых указано с какими процессами данный процесс может обмениваться информацией. Процесс может разрешить доступ к себе, отправив в ядро сообщение, в котором указана новая возможность порта.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]