Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билетики.pdf
Скачиваний:
1
Добавлен:
05.06.2025
Размер:
6.66 Mб
Скачать

8. Системные вызовы.

Системный вызов - это обращение из кода в User Mode (User Space) к коду ядра.

Системный вызов позволяет приложению обратиться к ОС с просьбой выполнить то

или иное действие, оформленное как процедура (или набор процедур) кодового

сегмента ОС.

Реализация системных вызовов должна обеспечивать:

переключение в привилегированный режим

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

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

возможность расширения набора системных вызовов

контроль со стороны ОС использования системных вызовов

При любом системном вызове приложение выполняет программное прерывание с определенным единственным номером вектора. ОС Linux использует для системных вызовов команду INT 80h, а ОС Windows NT — INT 2Eh. Перед выполнением программного прерывания приложение передает ОС номер системного вызова.

Аргументы системного вызова помещаются в регистры общего назначения.

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

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

Асинхронный системный вызов не приводит к переводу процесса в режим ожидания. После выполнения некоторых начальных системных действий, например запуска операции ввода-вывода, управление возвращается прикладному процессу.

Централизованная схема обработки сист вызова - основанна на существовании диспетчера системных вызовов. Диспетчер системных вызовов обычно

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

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

9. Прерывания (понятие, классификация, обработка прерываний).

Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.

В зависимости от источника прерывания делятся на три больших класса: ●​ внешние; ●​ внутренние;

●​ программные.

Внешние прерывания могут возникать в результате действий пользователя или

оператора за терминалом, или же в результате поступления сигналов от аппаратных устройств — сигналов завершения операций ввода-вывода, вырабатываемых контроллерами внешних устройств компьютера. Данный класс прерываний является асинхронным по отношению к потоку инструкций прерываемой программы. Аппаратура процессора работает так, что асинхронные прерывания возникают между выполнением двух соседних инструкций, при этом система после обработки прерывания продолжает

выполнение процесса, уже начиная со следующей инструкции.

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

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

последовательность инструкций.

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

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

10. Обработка аппаратных прерываний.

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

Маскируемые прерывания поступают в процессор по сигналу INTR и могут быть разрешены или запрещены с помощью специального флага IF (Interrupt Flag), который находится в регистре EFLAGS — это регистр, в котором хранятся различные флаги состояния процессора. Если флаг IF установлен в 1, маскируемые прерывания разрешены; если в 0 — запрещены. Управление этим флагом выполняется с помощью команд CLI (Clear Interrupts)

запрещает прерывания (устанавливает IF = 0), и STI (Set Interrupts) — разрешает (IF = 1). Эти команды можно использовать только на привилегированном уровне, то есть когда код выполняется с высоким уровнем прав. Уровень привилегий называется CPL (Current Privilege Level), и он должен быть не выше IOPL (I/O Privilege Level) — уровня доступа к вводу-выводу. Обычно такие права есть только у ядра операционной системы.

Когда поступает маскируемое прерывание, процессор завершает выполнение

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