Машинная программа. 9 Классификация вычислительных устройств. 11 Основные устройства компьютера, его архитектура. 13

Вид материалаПрограмма
3.2. Принципы работы операционной системы.
3.3. Управление программами.
Подобный материал:
1   ...   6   7   8   9   10   11   12   13   ...   35

3.2. Принципы работы операционной системы.


Любая операционная система предполагает, что всеми ее действиями управляет основная программа операционной системы – ядро операционной системы. Ее также называют диспетчером операционной системы. Эта программа всегда хранится в специальной области внешнего носителя (на ПК – на винчестере). При включении компьютера начинают работать зашитые в ПЗУ программы начальной загрузки компьютера, которые после тестирования основных устройств компьютера считывают диспетчер в оперативную память и передают ему управление. С этого момента вплоть до выключения компьютера его работа определяется диспетчером. Механизм этого управления однотипен.

Диспетчер операционной системы получает команды из внешней среды. Это могут быть текстовые команды, набранные на клавиатуре (как в случае системы MS DOS), или щелчки мышью, как в Windows, или сообщения, полученные от работающих программ. В любом случае диспетчер анализирует команду (или сообщение), находит субъекта этой команды или сообщения (а именно: служебную программу операционной системы (утилиту) или какую-либо пользовательскую программу) и определяет характеристики команды, передающие особенности ее выполнения.

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

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

В операционной системе MS DOS диспетчером является программа с именем COMMAND.COM. На самом деле действие собствено диспетчера не слишком разнообразно и сама программа очень невелика. То же относится к диспетчеру системы Windows (программа с названием WIN.COM).

3.3. Управление программами.


Предположим, пользователь обращается к операционной системе с требованием запустить определенную программу, передав ей заданные параметры. Разберемся, как это должно происходить.

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

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

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

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

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

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

В операционной системе MS DOS ряд функций по управлению запуском программ связан с ее конструктивными особенностями. В этой ОС существует ограничение на общий объем используемого адресного пространства оперативной памяти (640Кб). В поздних версиях можно использовать дополнительную память (адреса от 640Кб до 1Мб). Специальные утилиты DOS позволяют разместить в этой дополнительной памяти служебные программы DOS и драйверы устройств и использовать их правильно. Прикладные программы размещаются в основной памяти (адреса до 640Кб).

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

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

Операционная система Windows использует такой механизм управления оперативной памятью, который позволяет отказаться от ограничений на ее объем. Windows различает виртуальную и реальную оперативную память. Размер виртуальной памяти 4 Гб. Всем работающим под Windows программам предоставляется пространство в виртуальной памяти. В реальной памяти отображается только часть виртуальной памяти, остальная ее часть хранится на диске. Динамические таблицы содержат соответствие между блоками (страницами) виртуальной памяти и их размещением (адресами в реальной памяти или на диске). Если необходимо выполнить ту страницу программы, которая в настоящий момент находится на диске, то эта страница загружается в реальную оперативную память на какое-либо неиспользуемое в настоящий момент место. Предварительно затираемая страница реальной памяти сохраняется на диске. Эта процедура сохранения и чтения страниц называется своппингом (от англ swapping).