ОС - Лекция 2.ppt
- Количество слайдов: 18
ОПЕРАЦИОННЫЕ СИСТЕМЫ Вощинская Гильда Эдгаровна 1
Классификация ОС • По особенности алгоритмов управления ресурсами • По особенности аппаратных платформ • По особенности областей использования • По особенности методов построения 2
Понятие программы 3
Программы не могут быть ОС, т. к • • Предполагается, что ОС эффективно использует ресурсы, т. е. операции должны совмещаться. Система должна отвечать на запросы, момент поступления которых нельзя предсказать заранее. 4
Понятие процесса процедура процессор среда процесс 1. 2. 3. Операции выполняются последовательно. Между шагами процесс может быть прерван. Среда изменяется не только самим процессом, но и другими процессами. процесс - открытая система 5
Реализация процессов Программный процесс однозначно определяет информационная структурадескриптор (вектор состояния): 1. Статус состояния. 2. Защищённая область для сохранения регистров при прерывании. 3. Информация о ресурсах, которыми владеет процесс. 6
Состояние процесса выполняется готов заблокирован 7
Управление процессами • • Создать процесс (создать дескриптор, выделить ресурсы) Запустить процесс (предоставить процессор) Остановить процесс (отобрать процессор) Уничтожить процесс (отобрать ресурсы и дескриптор) 8
Общение между процессами • • Разделение ресурсов(логических и физических) Синхронизация процессов процесс1: temp 1: =count; temp 1: =temp 1+1; count: =temp 1; процесс2: temp 2: =count; temp 2: =temp 2+1; count: =temp 2; 9
Механизм синхронизации 1. 2. Если несколько процессов хотят обратиться к одному и тому же критическому ресурсу, то какой-то из них должен получить разрешение. Не более, чем одному процессу предоставляется критический ресурс. Синхронизация На нижнем уровне на верхнем уровне 10
Синхронизация на нижнем уровне Блокировка памяти 2. Операция «проверка и установка» Test_Set(loc, comm) 1. 3. Семафоры 11
Блокировка памяти. Пример с ошибкой program error_solution; var switch 1, switch 2: boolean; Begin switch 1: =false; switch 2: =false; parbegin process 1: while (true) do begin while(switch 2) do; switch 1: =true; Critical_section 1; switch 1: =false; end; process 2: while (true) do begin while(switch 1) do; switch 2: =true; Critical_section 2; switch 2: =false; end; parend; end. 12
Блокировка памяти Алгоритм Деккера program Dekker; var c 1, c 2: integer; queue: integer; begin c 1: =0; c 2; =0; queue: =1; parbegin process 1: while(true) do begin c 1: =1; while c 2=1 do begin if queue=2 then begin c 1: =0; while queue=2 do; c 1: =1; end; Critical_section 1; c 1: =0; queue: =2; end; process 2: while(true) do begin c 2: =1; while c 1=1 do begin if queue=1 then begin c 2: =0; while queue=1 do; c 2: =1; end; Critical_section 2; c 2: =0; queue: =1; end; parend; end. 13
Операция «проверка и установка» program Example_Test_Set; var comm: integer; loc 1, loc 2: integer; begin comm: =0; parbegin process 1: while(true) do begin repeat Test_Set(loc 1, comm); until loc 1=0; Critical_section 1; comm: =0; end; process 2: while(true) do begin repeat Test_Set(loc 2, comm); until loc 2=0; Critical_section 2; comm: =0; end; parend; end. 14
Семафоры Семафор-это целая переменная S, значения которой могут изменяться специальными операциями P и V. P(S) dec(S); если S>=0 , то процесс продолжает работу если S<0, то процесс блокируется; V(S) inc(S); если S>0 , то процесс продолжает работу; если S<=0, то процесс продолжает работу и из очереди заблокированных процессов запускается один процесс; 15
Синхронизация с помощью семафоров program Example_Semaphore; var S: integer; begin S: =1; parbegin process 1: while(true) do begin P(S); Critical_section 1; V(S); end; process 2: while(true) do begin P(S); Critical_section 2; V(S); end; parend; end. 16
Поставщик-потребитель Поставщик помещает Потребитель забирает сообщения в хвост сообщения из начала очереди заполненных буферов. Поставщик положить если есть буфера. может Потребитель может взять сообщение, если есть свободные заполненные буфера. Поставщик и потребитель не должны одновременно обращаться к буферу. 17
Поставщик-потребитель. Реализация с помощью семафоров program Supplier_Consumer; Consumer: //потребитель var while(true) do presence: integer; //наличие begin filled: integer; //заполнено P(filled); excep: integer; //взаимоисключение P(excep); Begin Receive_mes; //получить presence: =quantity_of_buffers; //кол-во буферов // сообщение filled: =0; excep: =1; V(presence); parbegin V(excep); Supplier: //поставщик Treat_mes; //обработать while(true) do // сообщение begin end; Prepare_mes; //подготовить сообщение parend; P(presence); end. P(excep); Send_mes; //поместить сообщ. в буфер V(filled); V(excep); 18 end;