КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Системные вызовы. Выполнение системного вызова.Системные вызовы (system calls) - механизм, позволяющий пользовательским программам обращаться к услугам ядра ОС, то есть это интерфейс между операционной системой и пользовательской программой. Концептуально системный вызов похож на обычный вызов подпрограммы. Основное отличие состоит в том, что при системном вызове выполнение программы осуществляется в привилегированном режиме или режиме ядра. Поэтому системные вызовы иногда еще называют программными прерываниями, в отличие от аппаратных прерываний, которые чаще называют просто прерываниями. В большинстве операционных систем системный вызов является результатом выполнения команды программного прерывания (INT). Таким образом, системный вызов - это синхронное событие. По соглашению, код пользовательского режима должен поместить в региср EBX указатель на блок параметров в стеке пользовательского режима. Тогда функция KeSystemService может просто скопировать требуемое число байтов из стека пользовательского режима в стек режима ядра перед вызовом системной функции. Рисунок 4 иллюстрирует это. Как системный вызов вызывается? Поскольку все системные вызовы Windows NT используют одно и тоже программное прерывание 'int 2e' для переключения в режим ядра, как код пользовательского режима информирует код ядра какую именно системную функцию нужно выполнить? Ответ заключается в том, что индекс помещается в регистр EAX перед вызовом инструкции int 2e. В режиме ядра ISR считывает значение регистра EAX и вызывает указанную системную функцию, если все переданные параметры проходят предварительную проверку. Параметры системного вызова (к примеру, те что были переданы в функцию OpenFile) передаются функции ядра в теле ISR. Возврат из системного вызова: Когда работа системного вызова завершается, исполняется инструкция iret. Исполняя эту инструкцию, процессор восстанавливает из стека значения сохраненные значения регистров пользовательского режима и продолжает исполнение с инструкции следующей за инструкцией 'int 2e'.
|