Учебный курс Основы операционных систем Лекция 7 кандидат физико-математических наук, доцент Карпов Владимир Ефимович
2 Эквивалентность семафоров, мониторов и сообщений Реализация мониторов через семафоры Semaphore mut_ex = 1; /* Для организации взаимоисключения */ При входе в монитор При нормальном выходе из монитора void mon_enter (void){ P(mut_ex); P(mut_ex);} void mon_exit (void){ V(mut_ex); V(mut_ex);} Semaphore c i = 0; int f i = 0; /* Для каждой условной переменной */ Для операции wait void wait (i){ f i += 1; f i += 1; V(mut_ex); P(c i ); V(mut_ex); P(c i ); f i -= 1; f i -= 1;} Для операции signal void signal_exit (i){ if (f i ) V(c i ); if (f i ) V(c i ); else V(mut_ex); else V(mut_ex);}
3 Эквивалентность семафоров, мониторов и сообщений Реализация сообщений через семафоры буфер Для каждого процесса: Semaphore c i = 0; Очередь на чтение Очередь на запись Один на всех: Semaphore mut_ex = 1; Чтение P(mut_ex) Есть msg? – встать в очередь – V(mut_ex) – V(mut_ex) – P(c i ) – P(c i ) – прочитать – есть кто на запись? – есть кто на запись? – V(mut_ex) – удалить – V(c j ) – V(c j ) Semaphore c j = 0; Один на всех: Semaphore mut_ex = 0; -нет PiPiPiPi -да M1M1M1M1 -нет PjPjPjPj -да Semaphore c j = 1;
4 Эквивалентность семафоров, мониторов и сообщений Реализация сообщений через семафоры буфер Для каждого процесса: Semaphore c i = 0; Очередь на чтение Очередь на запись Один на всех: Semaphore mut_ex = 1; Запись P(mut_ex) Есть место? – встать в очередь – V(mut_ex) – V(mut_ex) – P(c i ) – P(c i ) – записать – есть кто на чтение? – есть кто на чтение? – V(mut_ex) – удалить – V(c j ) – V(c j ) Semaphore c j = 0; Один на всех: Semaphore mut_ex = 0; -нет PjPjPjPj -да M1M1M1M1 -нет PiPiPiPi -да Semaphore c j = 1; M2M2M2M2 M3M3M3M3 M4M4M4M4
5 Эквивалентность семафоров, мониторов и сообщений Реализация семафоров через мониторы Monitor sem { int count; int count; Condition c i ; /* для каждого процесса */ Condition c i ; /* для каждого процесса */ очередь для ожидающих процессов; очередь для ожидающих процессов; void P(void){ void P(void){ if (count == 0) { добавить себя в очередь; if (count == 0) { добавить себя в очередь; c i. wait; c i. wait; } count = count -1; count = count -1; } void V(void){ void V(void){ count = count+1; count = count+1; if(очередь не пуста) { удалить процесс P j из очереди; if(очередь не пуста) { удалить процесс P j из очереди; c j.signal; c j.signal; } } { count = N; } { count = N; }}
6 Эквивалентность семафоров, мониторов и сообщений Реализация семафоров через сообщения send (A, P, P1); send (A, P, P1); receive (P1, msg); receive (P1, msg); P1 Pm A int count = 1; P0P0P0P0 Для ожидания ожидания while(1) { while(1) { receive (A, msg); receive (A, msg); if(это P сообщение){ if(это P сообщение){ if(count > 0) {count = count -1; if(count > 0) {count = count -1; send (Pi, msg); } send (Pi, msg); } else добавить в очередь; else добавить в очередь; } else if(это V сообщение) { else if(это V сообщение) { P1P1P1P1 send (A, V,Pm); send (A, V,Pm); receive (Pm, msg); receive (Pm, msg); PmPmPmPm… send(Pi, msg); send(Pi, msg); if(есть ждущие){ if(есть ждущие){ удалить из очереди; удалить из очереди; send (Pk, msg); } send (Pk, msg); } else count = count+1; else count = count+1; }} P:V: P, P1 int count = 0; P1P1P1P1 msg
7 Часть III. Управление памятью
8 Иерархия памяти Вторичная память Оперативная память Кэш Регистры Стоимость одного бита Время доступа Объем Управляется ОС Управляется менеджером памяти
9 Принцип локальности Большинство реальных программ в течение некоторого отрезка времени работает с небольшим набором адресов памяти – это принцип локальности Принцип локальности связан с особенностями человеческого мышления
10 Проблема разрешения адресов Человеку свойственно символическое мышление. Адреса (имена) переменных описываются идентификаторами, формируя символьное адресное пространство Оперативная физическая память может быть представлена в виде массива ячеек с линейными адресами. Совокупность всех доступных физических адресов в вычислительной системе – это ее физическое адресное пространство Как ? Когда ?
11 Связывание адресов Другие объектные модули модули Загрузчик Двоичный образ в памяти Системные библиотеки Динамические библиотеки ПроцессориБУП Исходная программа Компилятор Объектныймодуль Редактор связей Загрузочный модуль Этап компиляции Этап загрузки Этап выполнения
12 Логическое адресное пространство Символьное адресное пространство – совокупность всех допустимых идентификаторов переменных Логическое адресное пространство – совокупность всех допустимых адресов, с которыми работает процессор Физическое адресное пространство – совокупность всех доступных физических адресов в вычислительной системе
13 Функции ОС и hardware для управления памятью Отображение логического адресного пространства процесса на физическое адресное пространство Отображение логического адресного пространства процесса на физическое адресное пространство Распределение памяти между конкурирующими процессами Распределение памяти между конкурирующими процессами Контроль доступа к адресным пространствам процессов Контроль доступа к адресным пространствам процессов Выгрузка процессов (целиком или частично) во внешнюю память Выгрузка процессов (целиком или частично) во внешнюю память Учет свободной и занятой памяти Учет свободной и занятой памяти
14 Однопрограммная вычислительная система ОС ОС 0 Процесс пользователя
15 Схема с фиксированными разделами ОС 0 Раздел 1 Раздел 2 Раздел 3 Задание 1 Задание 2 Задание 3 Задание 4 Очередь заданий Процесс 1 Процесс 2 Процесс 3
16 Внутренняя фрагментация ОС 0 Раздел 1 Раздел 2 Раздел 3 Процесс 1 Процесс 2 Процесс 3 Внутренняя фрагментация – «потеря» части памяти, выделенной процессу, но не используемой им
17 Способы организации больших программ Оверлейная структура Оверлейная структура Программа разбивается на несколько частей. Постоянно в памяти находится только загрузчик оверлеев, небольшое количество общих данных и процедур, а части загружаются по очереди Динамическая загрузка процедур Динамическая загрузка процедур Процедуры загружаются в память только по мере необходимости, после обращения к ним Оба способа основаны на применении принципа локальности