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

Int shmctl(int shmid, int command, struct shmid ds *shm_stat);

Этот вызов в точности соответствует вызову msgctl, и параметр command мо­жет, наряду с другими, принимать значения IPC_STAT, IPC_SET и IPC_RMID.

2. Применение семафоров для решения задачи «производитель» - «потребитель» с неограниченным буфером. Решение «спящий парикмахер». (10, 22) – 155

В парикмахерской 2 помещения: рабочая комната и комната для ожидания

• Парикмахер обслуживает клиента, провожает его к выходной двери, затем приглашает очередного клиента из комнаты для ожидания; если клиентов нет, парикмахер садится в кресло и засыпает

• Клиент заходит в комнату для ожидания;

- если в комнате уже есть другие клиенты, новый посетитель занимает очередь и ожидает;

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

- Если парикмахер спит, то посетитель переходит в рабочую комнату и будит парикмахера

ЗП - задержка потребителя.

ЧПБ – число порций в буфере.

РБ – работа с буфером.

begin

integer ЧПБ, РБ, ЗП;

ЧПБ:=0; РБ:=1; ЗП:=0;

parbegin

производитель: begin

n1: производство новой порции;

P(РБ);

добавление новой порции к буферу;

ЧПБ:=ЧПБ+1;

if (ЧПБ=0) then begin V(РБ); V(ЗП); end

else V(РБ);

goto n1;

end;

потребитель: begin

n2: P(РБ);

ЧПБ:=ЧПБ-1;

if (ЧПБ=-1) then begin V(РБ); P(ЗП); P(РБ); end;

взятие порции из буфера;

V(РБ);

обработка взятой порции;

goto n2;

end;

parend;

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

Особенности:

- используются только двоичные семафоры;

- задача взаимного исключения реализуется через семафоры;

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

3. Организация защиты в процессорах ia32

Процессор поддерживает 4 механизма защиты:

1)Защита по размеру сегмента – предотвращает выход за пределы сегмента;

2)Привилегированные команды – есть группа команд, которые могут выполняться только на нулевом уровне привилегий. Команды, связанные с обращением к системным регистрам. Есть группа IOPL команд: команды работают с портами ввода/вывода и команды установки флага прерывания. Они выполняются только когда уровень привилегий больший или равен IOPL;

3)Защита по привилегиям – есть понятие CPL – текущий уровень привилегий процессора (Current Privilege Level). Это уровень, на котором работает процесс в данный момент. Значение в младших битах регистра CS. При обращении к данным или другим системным объектам сравнивает значение текущего уровня привилегий с уровнем привилегий дескриптора (DPL). По результату сравнения процессор выполняет/не выполняет действие. Более того, при обращении к памяти max(CPL,RPL)<=DPL;

4)Проверка на возможность выполнения действий – процессор проверяет возможность действий. Например, программа выполняет запись в сегмент данных, а сегмент только для чтения. Или попытка выполнить команду по отношению к невыполняемому сегменту.

Важным механизмом защиты является то, что передача управления возможна только на текущем уровне привилегий (команды FAR CALL и FAR IMP).

Но системные программы должны передавать пользователю программные права на управление.

Когда пользовательские программы взаимодействуют с операционной системой, возникает потребность передачи управления с низкого уровня привилегий на уровень привилегий операционной системы. Для таких передач есть два способа. Первый более простой и называется использование 1)подчиненных сегментов. Второй более сложный – использование специальных дескрипторов, названных 2)шлюзами вызовов.

1) Сегмент кода определяется как подчиненный, если бит c в байте прав доступа дескриптора сегмента установлен в 1. при обращении к таким сегментам обычное правило защиты CPL = DPL не действует, действует только правило, что CPL >= DPL, т.е. можно передавать управление на более высокий или текущий уровень привилегий. При передаче управления на подчиненный сегмент два младших бита регистра CS не изменяются. Таким образом, выполнение программы будет производиться на том же уровне, на котором выполнялась вызывающая программа.

2) Шлюзы вызова позволяют реализовать фактическое изменение уровня привилегий. Шлюз вызова определяет точку входа программе. Дескриптор шлюза вызова определяет полный указатель (селектор + смещение) точки входа в процедуру назначения, которой передается управление. Дескриптор шлюза вызова – это своеобразный интерфейсный слой между сегментами кода, находящимися на различных уровнях привилегий. Шлюзы вызова определяют разрешенные точки входа в более привилегированный код и являются единственным средством смены уровня привилегии. Дескрипторы шлюзов вызова не определяют никакого адресного пространства, поэтому у них нет полей базы и предела. По своей сути это даже не дескрипторы, но их размещают либо в глобальной дескрипторной таблице, либо, при необходимости, в локальных дескрипторных таблицах. Селекторы для выбора дескрипторов шлюзов вызова необходимо загружать только в сегментный регистр CS и ни в какие другие сегментные регистры. Адресовать шлюз вызова можно только в команде межсегментного вызова far call, использование far jmp запрещено. Сама команда call должна адресовать шлюз вызова, а не сегмент кода назначения.

Реализованный в Intel процессорах косвенный вызов привилегированных процедур имеет несколько преимуществ:

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

2. Шлюзы вызова делают привилегированные процедуры невидимыми для программ на внешних уровнях привилегий.

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

Правила защиты при использовании шлюза вызова

1. ;

2. ;

3. .Это правило предотвращает передачу на более низкий уровень привилегий;

4. .

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