Теоретические сведения
Кафедра «Информационная безопасность компьютерных систем»
ЛАБОРАТОРНАЯ РАБОТА №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 Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1259)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |