Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AOS_otvety_1.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆
  1. Реализация системных вызовов. Использование механизма прерываний для реализации системных вызовов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* через стек

* через РОН

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

* через РОН

* через стек

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Основы синхронизации процессов и потоков

С возникновением мультипрограммирования появилась проблема синхронизации. Эта проблема связана с совместным использованием ресурсов компа разными процессами и потоками.

Средства синхронизации называются еще IPC – inter process communication – это средства межпроцессной коммуникации и межпроцессного обмена данными.

Выполнение потока в мультипрограммной среде всегда носит асинхронный характер – никогда нельзя предугадать, когда именно будет выполняться то или иное действие. Все потоки выполняются независимо и асинхронно друг по отношению к другу.

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

Для синхронизации программист может использовать:

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

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

Средства ОС могут быть функционально специализированными:

- для синхронизации потоков одного процесса

- для синхронизации потоков разных процессов и тд.

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