Структура и основные компоненты вычислительной системы. Лекции
Рефераты >> Программирование и компьютеры >> Структура и основные компоненты вычислительной системы. Лекции

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

Вторая проблема: пусть в вычислительной системе есть принтер, и есть два процесса, которым он нужен. И пусть один из процессов обратился к внешнему устройству с командой напечатать строку (а он печатает, скажем, ведомость на экзамен, а другой процесс печатает, предположим, докладную декану). И первая строчка напечаталась: «Ведомость». После этого другой процесс пишет: «Декану факультета ВМК чл. корр. РАН Д.П. Костомарову», и тоже обращается к устройству печати. Устройство печати печатает вторую строчку, и так далее. В итоге получается документ, который остается только сжечь, так как там напечатан бред. Это первый пример. Второй пример: мы с вами говорили о виртуальной памяти и о том, что таблицы приписки заполняются оперативной системой программно (существуют команды, которые позволяют записать некоторую информацию в таблицу приписки). И пусть, появились два лихих программиста, которые решили отвести себе побольше памяти, и каждый из них исправил соответственно таблицу приписки, выделив себе всю память. Но память-то одна, и получилось нехорошо. И в первом и во втором примере программам пользователя были доступны команды управления компонентами вычислительной системы (в первом случае - команды управления внешним устройством, во втором случае - оперативной памятью), что и привело к некорректности в работе. Это означает, что, пока эти команды доступны, то корректный режим мультипрограммирования организовать невозможно, потому что всегда найдутся два молодца, которые чего-нибудь да испортят (даже не специально, а просто по незнанию).

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

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

Третья проблема: в одной из программ появилась ошибка, программа зациклилась и система зависла. Что в этом случае может помочь? Может помочь некоторое средство, которое будет периодически прерывать выполнение программы. Для нашего примера это должно быть прерывание по таймеру, чтобы один раз в какой-то промежуток времени процесс прерывался, и управление передавалось ОС. Она же сама должна решать, как ей поступить в этом случае.

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

Аппарат подкачки

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

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

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

Теперь вернемся к нашей пирамиде:

 

Прикладные программы

 
 

ОС

Системы программирования
 
 

Управление логическими устройствами

 
 

Управление физическими устройствами

 

Аппаратные средства

Мы


Страница: