Теоретические сведения
Кафедра «Информационная безопасность компьютерных систем»
ЛАБОРАТОРНАЯ РАБОТА №5
СИСТЕМНЫЕ ВЫЗОВЫ по дисциплине «Операционные системы»
Выполнил студент гр. 2088/3 NOT_ME
Руководитель Коноплев А.С.
Санкт-Петербург
Постановка задачи
1. Модифицировать текущий механизм обработки системных вызовов. Обработчик системных вызовов в userprog/syscall.c должен читать номер и аргументы системного вызова из стека и при завершении обработки возвращать значение пользовательской программе, изменяя содержимое регистра eax (необходимо будет использовать указатель стека из структуры intr_frame). Внести соответствующие изменения в функцию syscall_handler(). 2. Реализовать набор системных вызовов. Для внедрения системных вызовов в первую очередь необходимо продумать способы, которыми будут осуществляться чтение и запись в виртуальное пространство пользователя (номер системного вызова и его аргументы находятся в пользовательском стеке). Номера системных вызовов определены в lib/syscall-nr.h. Каркасы функций расположены в lib/user/syscall.c. Таблица 4.2. Системные вызовы ОС Pintos
Теоретические сведения Системные вызовы обеспечивают взаимосвязь между ядром и программами пользователя. Базовая реализация системных вызовов в ОС Pintos размещает аргументы с соответствующим номером системного вызова в регистры и вызывает прерывание 0x30. Это прерывание заставляет процессор остановить выполнение текущего задания, переключиться из режима пользователя в режим ядра и перейти к обработчику прерываний syscall_handler, который определен в userprog/syscall.c. Прерывания служат для оповещения ядра системы о наступлении некоторого события. Многие механизмы операционной системы так или иначе взаимодействуют с прерываниями. В ОС Pintos прерывания можно разделить на две большие группы: · Внутренние прерывания, т.е. прерывания, вызванные событиями в самом процессоре. Такими событиями могут быть системные вызовы, ошибки обращения по недопустимым адресам или деления на ноль. Так как внутренние прерывания вызваны процессором, они являются синхронными или синхронизированными с инструкциями процессора. Функция intr_disable() не осуществляет отключение внутренних прерываний.
В threads/interrupt.h и threads/interrupt.с расположены основные структуры и функции обработки прерываний. Основная работа функции intr_handler() заключается в вызове функции, предназначенной для обработки конкретного прерывания. Если такой функции не существует, intr_handler() завершается ошибкой и выводит информацию на консоль. Когда intr_handler() возвращает значение, ассемблерные функции в threads/intr-stubs.S восстанавливают ранее сохраненное состояние всех регистров процессора и передают управление процессору.
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1260)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |