B) Microsoft Windows NT

 

Здесь тоже используется плоская модель памяти. В отличии от Windows 95/98 в гораздо большей степени используется ряд серьезных аппаратных средств защиты, имеющихся в микропроцессоре, а также применено принципиально другое логическое распределение адресного пространства. Все системные программные модули и остальные программные модули самой ОС, выступающие как серверные процессы по отношению к прикладным программам (клиентам), находятся в своих собственных виртуальных адресных пространствах и доступ к ним со стороны прикладных программ невозможен. Логическое распределение адресных пространств приведено на рис.4.

Прикладным программам выделяется 2 Гб локального (собственного) пространства от 64 Кб до 2 Гб (первые 64 Кб полностью недоступны). Они изолированы друг от друга, хотя могут общаться через буфер обмена c помощью механизмов DDE – Dynamic Data Exchange (динамический обмен данными) и OLE – Object Linking and Embedding (связь и внедрение объектов).

Между отметками 2 и 4 Гб находятся ядро ОС, планировщик потоков и диспетчер виртуальной памяти VMM (Virtual Memory Manager – выделение памяти, резервирование, освобождение, подкачка).

Рис. 4. Модель распределения виртуальной памяти в Windows NT

 

Вся виртуальная память в Windows NT подразделяется на классы:

· зарезервированная (reserved) – набор непрерывных адресов, которые диспетчер виртуальных адресов (VMM) выделяет для процесса, но не учитывает в общей квоте памяти процесса, пока она не будет фактически использована;

· память выделена (committed) – если VMM резервирует для нее место в специальном файле Pagefile.sys на тот случай, когда потребуется выгрузить содержимое памяти на диск. Выделенная память ограничивается файлом подкачки;

· доступная (available) – вся остальная память.

 

 

Управление вводом/выводом в операционных системах

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

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

2. Вызывает соответствующее распределение каналов и контроллеров, определяет очередность в/в. Запрос либо выполняется, либо ставится в очередь;

3. Инициирует операции в/в – передает управление соответствующим драйверам;

4. При получении сигналов прерываний по в/в идентифицирует их и передает управление соответствующей программе ISR;

5. Осуществляет передачу сообщений об ошибках, если таковые происходят в процессе управления в/в;

6. Посылает сообщение о завершении операции в/в запросившему эту операцию процессу и снимает его с состояния ожидания в/в.

 

Имеется два основных режима ввода-вывода:

· режим обмена с опросом готовности устройства в/в;

· режим обмена с прерываниями – драйверы в этом режиме имеют секцию запуска, одну или несколько секций продолжения и секцию завершения.

Рассмотрим рис.1.

Рис. 1. Управление вводом/выводом

Центральный процессор посылает устройству управления команду выполнить некоторое действие устройству в/в. УУ исполняет команду, транслируя полученный сигналы в сигналы, понятные устройству в/в. Но быстродействие устройства в/в намного меньше быстродействия ЦП. Поэтому сигнал готовности от УУ устройства в/в центральному процессору о том, что операция в/в выполнена и можно подавать новую, приходится ожидать долго. До тех пор, пока сигнал готовности не появится, драйвер внешних устройств ничего не делает, при этом нерационально используется время ЦП. Гораздо более выгодно, подав команду на в/в, на время забыть об устройстве в/в и перейти на выполнение другой команды, а сигнал готовности рассматривать как запрос на прерывание от устройства в/в.

Устройства с последовательным доступом (например, принтер) не допускают совместного использования. Для организации использования многими параллельно выполняющимися задачами устройств в/в, которые не могут быть разделяемыми, вводится понятие виртуальных устройств (SPOOLing – имитация работы с устройством в режиме «он-лайн»). Спулинг создает видимость параллельного разделения устройств в/в с последовательным доступом. Например, вычислительному процессу предоставляется виртуальный принтер, т.е. поток выводимых данных направляется в специальный файл на диске, а затем, когда принтер освободится, выводится содержимое этого спул-файла.

 

Основные системные таблицы ввода-вывода

Каждая ОС имеет, по-крайней мере, три системных таблицы:

 

1. Содержит информацию обо всех устройствах в/в, подключенных к вычислительной системе – таблица оборудования, а каждый ее элемент – блок управления устройством в/в (UСB –unit control block)содержит следующую информацию:

a) тип устройства, конкретная модель, символическое имя, характеристика устройства;

b) как это устройство подключено (тип интерфейса, через какой порт, линия запроса прерывания и т.д.):

c) номер и адрес канала в/в:

d) указание на драйвер, указание секции запуска и секции продолжения драйвера:

e) и т.д.

2. Предназначена для реализации еще одного принципа виртуализации устройств в/в – независимости от устройства. Это таблица описания виртуальных логических устройств (DRT – device reference table). Она предназначена для установления связи между виртуальными (логическими) устройствами и реальными устройствами, описанными в таблице оборудования.

3. Необходима для организации обратной связи между ЦП и устройствами в/в – таблица прерываний, указывает для каждого сигнала запроса на прерывание тот элемент UCB, который сопоставлен данному устройству, подключенному к этой линии запроса на прерывание.

 

Теперь еще раз, с учетом изложенных принципов и таблиц, рассмотрим процесс управления вводом/выводом (см. рис. 2).

 

Рис. 2. Процесс управления вводом/выводом

 

От прикладной программы на супервизор программ поступает запрос на операцию в/в. Он проверяет системный вызов и в случае ошибки возвращает задаче соответствующее сообщение. Если запрос корректен, то он перенаправляется в супервизор ввода/вывода. Последний по логическому имени с помощью таблицы DRT находит соответствующий элемент UCB в таблице оборудования. Если устройство уже занято, то описатель задачи помещается в список задач, ожидающих настоящее устройство. Если же устройство свободно, то супервизор ввода/вывода определяет из UCB тип устройства и при необходимости запускает препроцессор, позволяющий получить последовательность управляющих кодов и данных, которую сможет понять и отработать устройство. Затем управление передается соответствующему драйверу на секцию запуска. Драйвер инициализирует операцию управления, обнуляет счетчик тайм-аута и возвращает управление диспетчеру задач с тем, чтобы он поставил на процессор готовую к исполнению задачу. Система работает своим чередом, но когда устройство в/в отработает посланную ему команду, оно выставляет сигнал запроса на прерывания, по которому через таблицу прерываний управление передается на секцию продолжения. Получив новую команду, устройство вновь начинает ее обрабатывать, а управление процессором опять передается диспетчеру задач, и процессор продолжает полезную работу. Таким образом, получается параллельная обработка задач, на фоне которой процессор осуществляет управление операциями ввода/вывода.

 

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

 

Задача, выдавшая запрос на операцию в/в, переводится супервизором в состояние ожидания завершения заказанной операции. Когда супервизор получает от секции завершения сообщение о том, что операция завершилась, он переводит задачу в состояние готовности к выполнению, и она продолжает свою работу. Эта ситуация соответствует синхронному в/в. Он является стандартным для большинства ОС.

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

 

Средняя скорость работы процессора с оперативной памятью на 2-3 порядка выше, чем средняя скорость передачи данных на магнитных дисках в оперативную память. Чтобы сгладить такое сильное несоответствие в производительности основных подсистем, используется буферирование и/или кэширование данных. Простейшим вариантом ускорения дисковых операций чтения данных можно считать использование двойного буферирования. Его суть заключается в том, что пока в один буфер заносятся данные с магнитного диска, из второго буфера, ранее считанные данные могут быть прочитаны и переданы запросившей их задаче. Аналогичный процесс происходит и при записи данных. Буферирование используется во всех ОС, но помимо буферирования применяется и кэширование. Кэширование исключительно полезно, когда программа неоднократно читает с диска одни и те же данные. После того как они будут помешены в кэш, обращений к диску больше не потребуется и скорость работы программы значительно возрастет.