В. Столлингс - Операционные системы (1114679), страница 29
Текст из файла (страница 29)
Программы, Работакпцие в режиме ядра, обладают полным контролем над процессором и всеми его командами и регистрами, а также имеют доступ ко всем ячейкам па- мл™ Такой уровень привилегий пользовательским программам не нужен, по- ~тому.. исходя из соображений безопасности, лучше сделать его недоступным для пользовательских программ. В связи с этим возникают два вопроса: каким образом процессор может опреде* в каком режиме должна выполняться данная программа, и как происходит пе ереключение из одного режима в другой7 Что касается ответа на первый вопрос, то з сл адове ~остояния программы имеется бит, в котором указывается режим выполне- внл тт При некоторых событиях происходит изменение этого бита.
Например, если полна (обыч, ~ьзователь вызывает службу операционной системы, устанавливается режим ядра честзе ~чн® это происходит в результате выполнения команд изменения режима). В ка- дят пе тзе примера приведем команду СЬалде Моде (СНМ), с помощью которой происхопереключение режима на машинах УАХ. Когда пользователь вызывает службу опер Рационной системы или когда в результате прерывания управление переходит к цроце дуре операционной системы, эта процедура выполняет команду СНМ, чтобы ючить более привилегированный режим. Перед тем как вернуть управление ьзовательскому процессу, она снова выполняет эту комаццу, переводя процессор 172 Часп 2. П а З.
Описание процессов и управление ими в режим с меньшими привилегиями. Ясли же команду СНМ попытается вып пользовательская программа, зто приведет к передаче управления операционно . теме, и если такое изменение режима пользовательской программой не разре щюизойдет ошибка выполнения. Создание процессов В разделе 3.1 обсуждались события, влекущие за собой создание процессов.
Ознакомившись со структурами данных, связанными с проц г опишем вкратце этапы создания этих процессов. Если операционная система по какой-либо причине (см. табл. 3.1) пр ' решение создать процесс, она может сделать это следующим образом. 1. Присвоить новому процессу уникальный идентификатор. На этом э ' первичную таблицу процессов вносится новая запись.
2. Выделить пространство для процесса. Сюда включаются все элементы процесса. Операционная система должна знать, сколько места нужно для=, зовательского адресного пространства (для программ и данных) и для по тельского стека. Эти значения могут назначаться по умолчанию исходя, процесса, или могут быть установлены на основе запроса пользователя дании задания. Если процесс порождается другим процессом, родите процесс может передать операционной системе необходимые величины, тив их в запрос на создание процесса Если вновь создающийся процесс': использовать какую-то часть адресного пространства совместно с др цессами, необходимо установить соответствующие связи.
И, наконец, Уф выделить место для управляющего блока процесса. 3. Инициализировать управляющий блок процесса. Информация о про держит его идентификатор, а также некоторые другие идентификато пример идентификатор родительского процесса. Информация о состо цессора обычно инициализируется нулевыми значениями, за исклю счетчика команд (который содержит точку входа в программу) и системного стека (задающие границы стека процесса).
Инициализация ляющей информации происходит на основе значений, установленных по',-' чанию„с учетом атрибутов из запроса на создание процесса. НапримеР, ние процесса обычно инициализируется значением "готов" или "'готов и тановлен*'. Что касается приоритета, то по умолчанию он может ' установлен минимальным, если не поступил явный запрос на установку' высокого приоритета. Поначалу процесс может не владеть никакими (типа устройств ввода-вывода или файлов), если не сделан явный з если эти ресурсы не были переданы по наследству от родительского про 4. Установить необходимые связи.
Если операционная система, на поддерживает очередь планируемых заданий в виде списка со свя новый процесс необходимо поместить в список готовых или готовых тановленных процессов. .1й б. Создать или расширить друтие структуры данных. Операционная с может, например, поддерживать для каждого процесса файл с уч пользуемых ресурсов, который позже будет использован для оценки водительности системы. Когда нужно переключать процессы Переключение процесса может произойти в любой момент, когда управление от выполняющегося процесса переходит к операционной системе.
В табл. 3.8 перечислены возможные причины, по которым управление может перейти к операционной системе. ' 'Габлнца 3.8. Механизмы прерывания процесса Механизм Причина Использует Отклик на внешнее асинхрон- ное событие Внешняя по отношению к вы- полнению текущей команды Связана с выполнением текущей команды Ловушка Обработку ошибки нля нсключзтельной ситуации Вызов Функции операционной системы Вызов супервизора Запрос приложения Во-первых, рассмотрим системные прерывания.
Фактически имеются системные прерывания двух видов. Первый вид — обычные прерывания, а втоРой — ловушки ($гар). Прерывания первого вида происходят из-за событий опРеделенного типа, не связанных с выполняющимся процессом и являющихся ~вешними по отношению к нему (таким событием может быть, например, завершение операции ввода-вывода).
Ловушки связаны с ошибкой или исключительной ситуацией, возникшей в результате выполнения текущего процесса. В качестве примера можно привестй попытку получения незаконного доступа к файлу. При обычном прерывании управление передается обработчику прерывая"". который осуществляет некоторые подготовительные действия, а затем— функции операционной системы, отвечающей за прерывания данного вида. Приведем конкретные примеры прерываний.
Прерывание таймера. Операционная система определяет, что текущий процесс выполняется в течение максимально разрешенного промежутка времени- Если это так, то данный процесс нужно переключить в состояние готовности и передать управление другому процессу. ПРеРывание ввода-выводи. Операционная система определяет, что именно произошло, и если это то событие, которого ожидают один или несколько процессов, операционная система переводит все соответствующие блокированные процессы в состояние готовности (соответственно, блокированные , Переключение процессов Казалось бы, Функция переключения процессов проста и понятна.
В какой омент времени выполняющийся процесс прерывается и операционная систе. ма переводит в состояние выполнения другой процесс, передавая ему управлеОднако здесь возникают некоторые вопросы, касающиеся архитектуры операц ионной системы. Во-первых, какие события должны приводить к переключен„„> процессов.
Во-вторых, как установить различие между переключением ямов работы и переключением процессов. И наконец, что нужно делать опеационной системе с различными структурами данных, находящимися под ее управ. ением чтобы переключить процесс. Часть 2. П ,.: ~1ава 3. Описание процессов и управление ими приостановленные процессы она переводит в состояние готовых пр новленных процессов). Затем операционная система должна принять ние: возобновить выполнение текущего процесса или передать управл готовому к выполнению процессу с более высоким приоритетом. Ошибка отсутствия блока в памяти.
Допустим, что процессор должен тнться к слову виртуальной памяти, которое в настоящий момент отс вует в основной памяти. При этом операционная система должна загр в о~новную память блок (страницу или сегмент), в котором содерж ресованное слово. Сразу же после запроса на загрузку блока операцио система может передать управление другому процессу, а процесс, для должения выполнения которого нужно загрузить блок в основную переходит в блокированное состояние.
После загрузки нужного блока ' процесс переходит в состояние готовности. В случае возникновения ловушки (Фгар) операционная система определяет~. гтся ли ошибка или исключительная ситуация фатальной. Если это так, ц(,',:: зняющийся в данный момент процесс переходит в состояние завершающе Равление переходит к другому процессу. В противном случае действия опе $ системы будут зависеть от характера происшедшей ошибки, а также от "' <ции самой операционной системы. Может быть предпринята попытка вы ютановительные процедуры или просто поставить пользователя в известнбр энсшедшей ошибке. Операционная система при этом может как выполнить ючение процессов, так и продолжить выполнение текущего процесса. Наконец, операпнонная система может быть активизирована в результате: ~а супервизора (виреглвог саП), который исходит от выполняемой про пример, пусть в ходе работы пользовательского процесса нужно выполнитв'; аду, для которой требуется операция ввода-вывода, например открытие :сой вызов приведет к тому, что управление перейдет к процедуре, являю :тью кода операционной системы.
Вообще говоря, использование таких си зовов приводит к переходу процесса в блокированное состояние. Переключение режимов В главе 1, "Обзор компьютерных систем", нами рассматривалась цел ~ность включения цикла прерывания в цикл команды. Напомним, что в кла прерывания процессор проверяет, не поступили ли какие-нибудь ~ия, на наличие которых указывает сигнал прерывания. Если никаких п, гнй нет, процессор переходит к циклу выборки, извлекая из памяти оч ю команду, входящую в текущую программу.
Если же имеются необ е прерывания, то процессор выполняет следующие действия. .. Сохраняет контекст текущей программы. ~. Устанавливает в счетчике команд начальный адрес программы — об чика прерываний. ° Переключается из пользовательского режима в режим ядра, чтобы м, было выполнять привилегированные команды, содержащиеся в коде ботки прерывания После этого процессор переходит к циклу выборки и выбирает первую ко программы обработки прерываний, обслуживающей данное прерывание. Может возникнуть вопрос; что входит в состав сохраняемого контекста? т контекст должен содержать информацию, которая может быть изменена в этот к процес цессе работы обработчика прерываний и которая необходима для возобновления Б я выполнения прерванной программы. Таким образом, должна быть сохранена часть ть управляющего блока процесса с информацией о состоянии процессора.
В нее в е входит содержимое счетчика команд и других регистров процессора, а также инФормация 0 стеках Нужно ли сделать что-нибудь еще? Это зависит от дальнейших событий. Обычобработчик прерываний является короткой программой, которая выполняет неолько базовых действий, связанных с прерыванием. Например, эта программа востанавлнвает состояние Флага, сигнализирующего о наличии прерываний. Она мо,цет послать подтверждение о получении прерывания тому элементу аппаратного беспечения, который сгенерировал это прерывание (например, контроллеру ввода- вывода).