Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Реализация системных вызовов. Использование механизма прерываний для реализации системных вызовов




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

 

Требования к реализации системных вызовов:

· Обеспечивать переключение в защищенный режим

· Обладать высокой скоростью вызова процедур ОС

· Обеспечивать единообразное обращение к системным вызовам для всех аппаратных платформ, на которых работает ОС

· Быть легко расширяемой новыми вызовами

· Обеспечивать контроль со стороны ОС за корректным использованием вызовов.

 

Первое требование выполнимо только если реализовывать системные вызовы в виде программных прерываний.

 

(Некоторые из этих требований противоречат друг другу. Например, скорость работы требует векторных прерываний, но они привязывают нас к особенностям аппаратной платформы и не позволяют легко вводить новые прерывания.)

 

ОС может выполнять системные вызовы:

- по децентрализованной схеме

- по централизованной схеме (используется в большинстве ОС)

 

При централизованной обработке системных вызовов в ОС существует ДИСПЕТЧЕР СИСТЕМНЫХ ВЫЗОВОВ.

 

Перед выполнением прерывания приложение передает ОС:

- номер системного вызова (который будет индексом в таблице прерываний, реализующих системные вызовы)

* через стек

* через РОН

- агрументы для системного вызова

* через РОН

* через стек

* через массив

Потом приложение генерирует прерывание с определенным и единственным номером вектора (INT 2Eh – Windows NT, INT 80h - Линукс).

 

Диспетчер прерываний – простая программа, которая:

· Сохраняет содержимое регистров процессора в системный стек

· Проверяет, адекватный ли номер вызова поступил (не вышел ли за границу таблицы системных вызовов)

· Передает управление соответствующей процедуре ОС для реализации системного вызова.

 

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

 

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

 

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

 

Это т.н табличный способ организации системных вызовов, он принят практически во всех ОС, легко расширяем.

 

ОС может выполнять системные вызовы:

- в синхронном режиме

- в асинхронном режиме

 

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

 

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

 

Большинство системных вызовов синхронны, но в последнее время асинхронные вызовы используются все чаще. Это дает больше возможностей разработчиками сложных приложений, кроме того, они особенно нужны в ОС на основе микроядерной архитектуры (в таких ОС часть ОС работает в пользовательском режиме, и этой части нужно свободно организовывать свою работу.)

 

Основы синхронизации процессов и потоков. Понятие гонок. Критическая секция кода и исключение гонок. Блокирующие переменные. Понятие семафора и его использование для целей синхронизации. Синхронизация и проблема тупиков. Синхронизирующие объекты в операционных системах.

 





Поделиться с друзьями:


Дата добавления: 2015-11-23; Мы поможем в написании ваших работ!; просмотров: 630 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Настоящая ответственность бывает только личной. © Фазиль Искандер
==> читать все изречения...

2341 - | 2066 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.