|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Библиотечная процедура read- и процедура, обрабатывающая системный вызов
Системные вызовы выполняются за серию шагов. 1) вызывающая программа помещает параметры в стек (шаги 1-3) Компиляторы С и С++ помещают пар-ры в стек в обратном порядке (так сложилось исторически, чтобы первым был параметр printf – строка формата) первый и третий пар-ры передаются по значению, а второй передается по ссылке 2) Затем следует вызов библиотечной процедуры (шаг 4) 3) Библиотечная процедура (на ассемблере) помещает номер СВ туда где его ожидает ОС (например в регистр) шаг 5 4) Затем она выполняет команду для переключения из пользовательского режима в режим ядра и начинает выполнение с фиксированного адреса внутри ядра шаг 6 5) Запускаемая программа ядра (супервизор?), проверяет номер СВ и отправляет его нужному обработчику (по таблице указателей на обработчики СВ) шаг 7 6) Работа обработчика СВ шаг 8 7) После завершения управление возвращается в пространство пользователя к библиотечной процедуре к команде следующей за командой переключения в режим ядра шаг 9 8) Эта процедура передаёт управление программе пользователя обычным способом как возврат из вызванной процедуры шаг 10 9) Программа пользователя очищает стек (как это делает после вызова любой процедуры) шаг 11 Последняя команда увеличивает указатель стека ровно настолько, насколько нужно для удаления параметров, помещённых в стек перед запросом read 10) Программа продолжает работу Библиотечная процедура организует работу для запуска обработчика системного вызова. В общем виде процесс системного вызова можно описать следующим образом: - Пользовательская программа запрашивает сервис у операционной системы, осуществляя системный вызов. - библиотеки процедур ОС, загружают машинные регистры определенными параметрами и осуществляют прерывание процессора, после чего управление передается обработчику данного вызова, входящему в ядро операционной системы. Цель таких библиотек — сделать системный вызов похожим на обычный вызов подпрограммы. - при системном вызове задача переходит в привилегированный режим или режим ядра (kernel mode). В этом режиме работает код ядра операционной системы. Ядро операционной системы имеет полный доступ к памяти пользовательской программы и к его контексту. В большинстве операционных систем системный вызов осуществляется командой программного прерывания (INT). Программное прерывание — это синхронное событие, которое может быть повторено при выполнении одного и того же программного кода.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |