Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы по ОС.doc
Скачиваний:
37
Добавлен:
27.08.2019
Размер:
3.35 Mб
Скачать

2. Ядро ос. Подходы к определению ядра ос (классический и по Василенко). Причины неоднозначности. Режим ядра и режим пользователя. Системный вызов и его реализация (на примере любой ос/архитектуры).

4 Вопрос. Подходы к определению ядра ос

(Из лекций Крищенко)

Существует два подхода к определению ОС:

  1. По функциям (ОС — как система управления ресурсами) (Классический подход)

    1. управление аппаратными ресурсами

    2. распределение аппаратных ресурсов (если их мало)

    3. задачи не должны блокировать друг друга

  2. По составу (из чего состоит) (По Василенко)

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

Определение ОС по Таненбауму (по функциям):

операционные системы выполняют две основные, но практически не связанные между собой функции:

а) - расширение возможностей машины;

б) - управление ресурсами машины;

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

  2. Управление ресурсами включает в себя их мультиплексирование (распределение) двумя способами: во времени и в пространстве. Когда ресурс распределяется во времени, различные пользователи и программы используют его по очереди. Сначала один из них получает доступ к использованию ресурса, потом другой и т. д. Например, несколько программ хотят обратиться к центральному процессору. В этой ситуации операционная система сначала разрешает доступ к процессору одной программе, затем, после того как она поработала достаточное время, другой программе, затем следующей и, в конце концов, опять первой. Определение того, как долго ресурс будет использоваться во времени, кто будет следующим и на какое время ему предоставляется ресурс - это задача операционной системы. Еще один пример временного мультиплексирования - распределение заданий, посылаемых для печати на принтер. Когда задания выстраиваются в очередь для печати на одном принтере, операционной системе каждый раз нужно принимать решение о том, которое из них будет печататься следующим.

Причины неоднозначности заключаются в том, что даже если программа включает в себя все заявленные в составе(2) компоненты она не обязательно реализует функции предъявляемые ОС в пункте(1) и наоборот.

5 вопрос. Режим ядра и режим пользователя. Системный вызов и его реализация на примере Minix 3 для i386

Пользовательский режим - наименее привилегированный режим, он не имеет прямого доступа к оборудованию и у него ограниченный доступ к памяти, для работы

с оборудованием или расширенного доступа к памяти требуется переход в режим ядра посредством системных вызовов или прерываний.

Режим ядра - привилегированный режим. Процессы, которые исполняются в режиме ядра, такие как драйверы устройств и подсистемы типа Диспетчера Памяти, имеют прямой доступ ко всей аппаратуре и памяти.

Различия в работе программ пользовательского режима и режима ядра поддерживаются аппаратными средствами.

Системный вызов и его реализация на примере Minix 3 для i386

Системный вызов - интерфейс между операционной системой и пользовательскими программами.

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

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

Для пояснения механизма системных вызовов рассмотрим системный вызов read, у него 3 параметра:

  • указатель на переменную файла

  • указатель на буфер

  • количество байт, которое нужно прочитать

вызов может выглядеть так:

count = read(fd, buffer, nbytes);

Системный вызов (а затем и библиотечная процедура) возвращает количество действительно прочитанных байт в переменной count. Обычно эта величина совпадает с параметром nbytes, но может быть меньше, если, например, в процессе чтения процедуре встретится символ конца файла.

Если системный вызов не может быть выполнен или из-за неправильных параметров или из-за дисковой ошибки, значение счётчика count устанавливается = -1, а номер ошибки помещается в глобальную переменную errno.

Программа вызывающая системный вызов всегда должна проверять значение errno для проверки корректности работы.

В Minix в общей сложности 53 системных вызова, среди которых: fork(), exit(status), getpid(), getpgrp()... и.т.д

3. Понятие процесса. Адресное пространство процесса. Контекст и дескриптор процесса. Создание и завершение процесса. Граф состояний процесса. Причины перехода между состояниями. Все возможные причины блокировки процесса.