Файл: Учебнометодическое пособие Томск 2016 2 удк 004. 451(075. 8) Ббк 32. 973. 2018. 2я73 к 754 Рецензенты.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 299
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
151 2) обработку событий, связанных с освобождением ожидаемых ресур- сов;
3) обработку отложенных вызовов. Каждый такой вызов представляет собой просьбу самого диспетчера о том, чтобы он был инициирован спустя заданный интервал времени. В частности, через каждую секун- ду диспетчер должен корректировать приоритеты процессов в СГ, че- рез 10 мс корректировать приоритет исполняемого процесса, а по ис- течении кванта времени выполнять замену процесса на ЦП, если эта замена не произошла ранее по другой причине.
В основе обработки отложенных вызовов лежат прерывания от таймера.
Это устройство играет большую роль в механизме функционирования всей си- стемы.
1 ... 10 11 12 13 14 15 16 17 ... 23
5.5 Использование таймера для управления процессами
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Таймер – аппаратное устройство, выдающее сигналы пре-
рывания в ЦП через фиксированный промежуток времени, называ-
емый тиком. В UNIX тик обычно равен 10 мс, но может иметь и
другое значение. Прерывания таймера имеют наивысший приори-
тет среди внешних маскируемых прерываний.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Обработчик прерываний таймера выполняет следующие действия:
1) обновление статистики использования процессора для текущего про- цесса. Отдельно подсчитываются затраты времени ЦП на выполнение процесса в режиме «Ядро» и в режиме «Задача»;
2) проверка превышения квоты процессорного времени, выделяемого процессу (с момента создания до момента завершения). В случае пре- вышения выполняется отправка процессу соответствующего сигнала;
3) обновление системного времени (времени дня), а также некоторых других счетчиков;
4) обработка отложенных вызовов. Заявки на отложенные вызовы по- ступают от подпрограмм ядра;
5) обработка алармов. Заявки на алармы могут поступать от любых про- цессов;
6) пробуждение тех процессов ядра, которые должны выполняться пери- одически, через заданный интервал времени.
152
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Отложенный вызов – выполнение требуемой подпрограммы
ядра через требуемое время.
Аларм – отправка сигнала процессу по истечении заданного
интервала времени.
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Некоторые из перечисленных действий выполняются не на каждом тике.
Если требуемое действие требует некоторых затрат времени ЦП, то оно реали- зуется не самим обработчиком прерываний таймера, а какой-то другой подпро- граммой ядра, вызываемой с помощью отложенных вызовов. Любая подпро- грамма ядра может сделать заявку на отложенный вызов себя или другой подпрограммы ядра, передав на вход подпрограммы обработки отложенных вызовов два параметра: A – стартовый адрес требуемой подпрограммы; t – ве- личину требуемого промежутка времени в тиках.
Данная заявка помещается подпрограммой обработки отложенных вызо- вов в список, отсортированный по времени запуска. При этом каждый элемент содержит кроме адреса A разницу между временем вызова своей подпрограммы и временем вызова подпрограммы для предыдущего элемента. На каждом тике таймера содержимое первого элемента списка уменьшается на единицу.
Как только это значение будет равно 0, производится вызов соответствующей подпрограммы, а также удаление первого элемента списка.
В отличие от отложенных вызовов алармы предназначены для обслужи- вания не подпрограмм ядра (например, диспетчера), а для обслуживания при- кладных процессов. Для того чтобы процесс получил сигнал через требуемый интервал времени, программа этого процесса должна выполнить системный вызов:
ЗАДАТЬ_ВРЕМЯ (t ||), (на Си – alarm), где t– интервал времени (в секундах), по истечении которого процесс получит сигнал.
При выполнении данного системного вызова ядро создаст новую пере- менную – таймер интервала (не путать с аппаратным таймером), содержащую величину заданного интервала, измеренную в тиках. Данная переменная будет уменьшаться обработчиком прерываний таймера на единицу при обработке каждого тика. Как только таймер интервала станет равным нулю, соответству- ющему процессу будет послан сигнал SIGALRM. Следует отметить, что данный системный вызов не блокирует выполнение процесса до получения сигнала че-
153 рез время t, а сразу возвращает ему управление. Чтобы обеспечить такое бло- кирование, системный вызов ЗАДАТЬ_ВРЕМЯследует использовать в програм- ме процесса совместно с системным вызовом:
ПАУЗА (||), (на Си – pause).
Данный вызов приостанавливает выполнение вызывающего процесса до получения любого сигнала. В качестве такого сигнала особенно удобно исполь- зовать сигнал SIGALRM, выдаваемый системным вызовом ЗАДАТЬ_ВРЕМЯ.
Например, пара системных вызовов ЗАДАТЬ_ВРЕМЯи ПАУЗА используются при выполнении команды shell – sleep, осуществляющей задержку про- граммы на заданное число секунд (см. пп. 2.5.5).
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
Контрольные вопросы по главе 5
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
1. Что значит процесс в состоянии «Ядро»?
2. Какими ресурсами процесс не обладает в режиме «Задача»?
3. Какими ресурсами процесс не обладает в режиме «Сон»?
154
6 Управление оперативной памятью
6.1 Основные положения
Важнейшими аппаратными ресурсами ВС являются ЦП и ОП. Управле- ние этими ресурсами выполняется как программно – подпрограммами ядра ОС, так и аппаратно – аппаратурой самого ЦП. При этом программное управление
ЦП и ОП использует и дополняет соответствующее аппаратное управление.
В предыдущих главах пособия были выявлены основные задачи по управлению ЦП:
1) диспетчеризация процессов – распределение времени ЦП между про- цессами. Данная задача решается ядром ОС;
2) замена на ЦП аппаратного контекста процесса. Такая замена приводит к смене выполняемого на ЦП процесса. Ее реализация требуется для решения предыдущей задачи диспетчеризации процессов. Данная за- дача решается аппаратно;
3) переключение ЦП из непривилегированного в привилегированный режим и обратное переключение. Такое переключение требуется для реализации системных вызовов, приводящих к переводу процесса из состояния «Задача» в состояние «Ядро», а также для обратных пе- реходов. Данная задача решается аппаратно;
4) поддержка прерываний. Механизм прерываний чрезвычайно важен для организации взаимодействия между аппаратурой ВС и ее про- граммным обеспечением. Данная задача решается совместно аппара- турой ЦП и подпрограммами ядра ОС.
Перейдем теперь к управлению ОП. Напомним, что реальная ОП любой
ВС представляет собой линейную последовательность пронумерованных ячеек.
Номер ячейки памяти называется ее реальным адресом. Благодаря наличию подсистемы управления памятью, входящей в состав ядра ОС (см. рис. 4.3), а также аппаратуры управления памятью, любая программа имеет дело не с реальной, а с виртуальной ОП. Предоставление такой ОП требует выполнения следующих трех функций:
1) преобразование виртуальных адресов в реальные адреса ячеек ОП;
2) защита областей памяти одного процесса от воздействия других про- цессов;
3) распределение ОП между процессами.
155
При выполнении этих функций роль ОС и роль аппаратуры управления памятью различны. Так как преобразование адресов выполняется во времени очень часто (при выполнении любой машинной команды, имеющей дело с ячейками ОП), то это преобразование реализовано аппаратно. Роль ОС сво- дится только к инициализации регистров и таблиц, используемых для аппарат- ного преобразования адресов и входящих в состав аппаратуры управления па- мятью.
Защита памяти процесса от воздействия других процессов основана на контроле правомочности выполнения каждой операции с ОП. Так как часто- та таких операций очень высока, то аналогично функции преобразования адре- сов контроль правомочности операций с ОП выполняется полностью аппарат- но. Роль ОС сводится к выполнению двух функций, дополняющих аппаратный контроль. Во-первых, она осуществляет инициализацию регистров и таблиц, используемых для такого контроля. Во-вторых, в случае нарушения правомоч- ности доступа к памяти ОС обрабатывает исключение (внутреннее аппаратное прерывание), выдаваемое аппаратурой управления памятью.
В отличие от двух других функций функция распределения памяти вы- полняется во времени достаточно редко и поэтому может быть реализована программно, то есть ядром ОС. Но если мы хотим обеспечить превышение объ- ема виртуальной памяти программы над объемом реальной ОП, выделенной ей, то должны использовать дополнительные элементы аппаратуры управления памятью.
Таким образом, выбор аппаратуры управления памятью оказывает реша- ющее влияние на реализацию всех трех функций управления ОП. При решении своих задач ОС опирается на имеющуюся в ВС аппаратуру управления памя- тью и использует имеющиеся в ней регистры, таблицы и исключения.
В общем случае аппаратура управления памятью включает аппаратуру управления сегментами и аппаратуру управления страницами. Применение этих типов аппаратуры приводит к тому, что преобразование каждого вирту- ального программного адреса в реальный адрес производится не на одном, а на двух этапах (рис. 6.1). Благодаря такому 2-этапному преобразованию адресов каждая из трех перечисленных задач управления ОП также разбивается на две подзадачи.
Дальнейшее изложение решения задач по управлению ОП основано на использовании в качестве ЦП микропроцессора i80386. Данный процессор за- нимает очень важное место в историческом ряде процессоров фирмы Intelпо
156 следующим причинам. Во-первых, это первый 32-битный процессор. Его реги- стры, за исключением некоторых регистров управления памятью, рассматрива- емых нами позже, приведены на рисунке 6.2.
Рис. 6.1 Состав аппаратуры управления памятью
Рис. 6.2 Регистры процессора i80386
32-битные рабочие регистры EAX, EBX, ECX, EDX имеют в качестве младших половин регистры AX, BX, CX, DX, доставшиеся «в наследство» от процессора i8086. Это же относится и к регистрам-указателям ESI, EDI, EBP,
ESP, EIP, а также к регистру флагов EFLAGS. Что касается сегментных реги- стров, то они по-прежнему остались 16-битными. Их число увеличилось на два
(FS и GS). Новыми по сравнению с i8086 являются также управляющие
32-битные регистры CR0, CR1, CR2, CR3. Эти регистры, в отличие от регистра
157
EFLAGS
, отражают не текущее состояние ЦП, определяемое программой, вы- полняемой в данный момент времени на ЦП, а долговременное состояние, об- щее для всех выполняемых на процессоре программ.
Во-вторых, начиная с i80386, аппаратно поддерживается виртуальная па- мять, имеющая объем во много раз больший, чем реальная ОП.
В-третьих, в i80386 реализованы достаточно надежные аппаратные мето- ды защиты информации в ОП.
Несмотря на то что последующие модели процессоров фирмы Intel мно- гократно превосходят i80386 по скорости вычислений, в них по-прежнему реа- лизуются идеи, полученные при его проектировании. Указанное превосходство в скорости достигается в основном за счет «количественных» факторов: увели- чение числа команд, размера и количества регистров, емкости буферов, такто- вой частоты.
Процессор i80386 имеет три режима работы: 1) реальный режим; 2) за- щищенный режим; 3) режим V86. В реальном режиме процессор оказывается сразу же после включения питания или в случае сбоя. В этом режиме процессор очень похож на i8086, выполняя все программы для него (в том числе и саму
MS-DOS).
Отличия: 1) выше скорость выполнения машинных команд; 2) длина всех регистров (кроме сегментных) увеличена до 32 бит.
Режим V86 (виртуальный процессор i8086) имитирует для каждой из не- скольких параллельно выполняемых DOS-программ режим работы i8086.
Бит 0 в CR0 управляет переключением режима процессора: 1–
защищенный режим; 0– реальный режим. Следующая группа машинных ко- манд (используется ассемблерная форма записи) выполняет переключение ЦП из реального в защищенный режим: mov AX, CR0 or
AX,1 mov CR0, AX
В защищенном режиме процессор полностью преобразуется:
1) адресное пространство ОП увеличивается до 4 Гбайт или более, где
1 Г = 1 К
3
, 1 К = 1024;
2) аппаратно поддерживается мультипрограммность: каждой приклад- ной программе назначается своя область памяти, аппаратно защищае- мая от воздействия других прикладных программ. Особо защищается от воздействия прикладных программ область ядра ОС.
158
6.2 Сегментная виртуальная память
6.2.1 Преобразование адресов
Благодаря наличию аппаратуры управления сегментами, любой процесс имеет в своем распоряжении сегментную виртуальную память – конечное множество непрерывных областей памяти (сегментов), доступных программе процесса. В этом случае адрес ячейки ОП всегда задается в программе в виде пары (S,L), где S – идентификатор сегмента, а L – смещение относительно начала сегмента.
При работе ЦП в реальном режиме S представляет собой начальный ад- рес размещения сегмента в ОП (точнее – номер начального параграфа). Так как реальный режим ЦП используется лишь при загрузке мультипрограммной си- стемы, то далее речь будет идти в основном о защищенном режиме.
При работе в защищенном режиме
,
S
T I
, где T – тип таблицы дескрип- торов (0 – GDT,1 – LDT), I – индекс дескриптора сегмента в таблице GDT или
LDT
. Этот индекс есть смещение (в байтах) относительно начала таблицы.
Идентификатор сегмента S для защищенного режима обычно называют селек-
тором сегмента.
GDT – глобальная таблица дескрипторов. В этой таблице находятся де- скрипторы сегментов ядра. Эта таблица общая для всех процессов. При этом процесс, выполняемый в данный момент на ЦП, теоретически может иниции- ровать любой из этих сегментов. Но если он находится в состоянии «Задача», то может вызывать лишь некоторые сегменты ядра, называемые вентилями.
Вызов любого другого сегмента приведет к возникновению исключения и, как следствие, к уничтожению процесса. Если вызван вентиль, то процесс перехо- дит в состояние «Ядро» и ему доступны все сегменты в GDT.
LDT – локальная таблица дескрипторов. Для каждого процесса существу- ет своя единственная LDT. В ней находятся дескрипторы сегментов процесса, используемые им в состоянии «Задача». Количество сегментов в LDT для каж- дого процесса свое. Наиболее часто в эту таблицу включают сегменты: 1) сег- мент кода; 2) сегмент данных; 3) сегмент стека. Реже – сегменты DLL и сегмен- ты разделяемой памяти.
Поле B дескриптора любого сегмента содержит базовый линейный адрес сегмента – адрес размещения в линейной памяти первой ячейки сегмента. Если в ВС нет аппаратуры управления страницами или она выключена (путем сброса