
- •3 Практические вопросы
- •3.1 Системное программное обеспечение
- •1. В чем особенность создания нового процесса в unix?
- •2. Предположим, что ядро выполняет отложенную запись блока. Что произойдет, когда другой процесс выберет этот блок из его хешочереди ? Из списка свободных буферов ?
- •4. Известно, что в иноде unix-подобных ос не содержится имя файла. Где его хранит система?
- •5. Назовите причины назначения разного уровня приоритетов у прерываний? Как эти приоритеты сказываются на работе системы со стеком контекстных слоев?
- •6. Поясните, какая угроза безопасности хранения данных возникает, если программа изменения прав пользователя не защищена от записи.
- •7. Что следует предпринять программе обработки отказов в том случае, если в системе исчерпаны страницы памяти?
- •8 К файлам терминалов обычно устанавливаются следующие права доступа
- •9. Какие функции unix доступны программисту для создания tcp-соединения? Чем протокол tcp отличается от udp?
- •10. Напишите сценарий для shell меняющий расширения в именах файлов текущего каталога '.C' на '.Cc'
4. Известно, что в иноде unix-подобных ос не содержится имя файла. Где его хранит система?
Файловая система организована в виде дерева с одной исходной вершиной, которая называется корнем (записывается: '/'); каждая вершина в древовидной структуре файловой системы, кроме листьев, является каталогом файлов.
Каталог - это файл, содержимым которого является набор записей, состоящих из номера инода и имени файла, включенного в каталог.
Вообще то, понятие инода (inode) относится к файловой системе, а не к операционной системе, и, уж тем более, имя файла хранит не операционная система, а файловая система.
Поиск файла осуществляется следующим образом:
Суперблок → №инода корневого каталога → корневой каталог → №инода каталога → инод каталога → №инода файла → инод файла → файл
Для более объемного ответа используйте ответ на практический вопрос №3 – можно содрать про обе файловые системы.
5. Назовите причины назначения разного уровня приоритетов у прерываний? Как эти приоритеты сказываются на работе системы со стеком контекстных слоев?
Ядро иногда обязано предупреждать возникновение прерываний во время критических действий, могущих в случае прерывания запортить информацию. Например, во время обработки списка с указателями возникновение прерывания от диска для ядра нежелательно, т.к. при обработке прерывания можно запортить указатели, что можно увидеть на примере в следующей главе. Обычно имеется ряд привилегированных команд, устанавливающих уровень прерывания процессора в слове состояния процессора. Установка уровня прерывания на определенное значение отсекает прерывания этого и более низких уровней, разрешая обработку только прерываний с более высоким приоритетом. На Рисунке показана последовательность уровней прерывания. Если ядро игнорирует прерывания от диска, в этом случае игнорируются и все остальные прерывания, кроме прерываний от часов и машинных сбоев.
По получении сигнала прерывания ядро операционной системы сохраняет свой текущий контекст (застывший образ выполняемого процесса), устанавливает причину прерывания и обрабатывает прерывание. После того, как прерывание будет обработано ядром, прерванный контекст восстановится и работа продолжится так, как будто ничего не случилось.
Устройствам обычно приписываются приоритеты в соответствии с очередностью обработки прерываний. В процессе обработки прерываний ядро учитывает их приоритеты и блокирует обслуживание прерывания с низким приоритетом на время обработки прерывания с более высоким приоритетом.
Обработка прерываний:
Системный вызов
Системный вызов можно рассматривать как внутреннее прерывание операционной системы.
Алгоритм системного вызова: 1. найти запись в таблице системных функций; 2. определить число параметров и скопировать их из адресного пространства задачи; 3. сохранение контекста; 4. запуск системного вызова; 5. номер ошибки записывается в регистр общего назначения; 6. возврат
Ядро помещает контекстный слой, когда возникает прерывание или программа делает системный вызов. Ядро выталкивает контекстный слой, когда происходит завершение обработки прерывания либо возврат в режим задачи.
Переключение контекста
∙ процесс переходит в состояние сна;
∙ процесс делает системный вызов еxit и завершает работу;
∙ процесс переходит в режим задачи после обработки прерывания;
∙ процесс переходит в режим задачи после системного вызова.
Алгоритм переключения контекста:
1. принять решение о необходимости и допустимости переключения контекста;
2. сохранить контекст;
3. выбрать подходящий процесс;
4. восстановить его контекст.