Операционные системы. Многозадачность и многопотоковость, страница 4

Я не стал более подробно останавливаться на мониторах, поскольку доминирующий сейчас Win32 API не уделил, на мой взгляд, достаточного внимания этому механизму. Наиболее полно механизм мониторов представлен в языке АДА. В нем этот механизм получил название рандеву.  Но история повторяется, развитие идет по спирали, поэтому я счел необходимым рассказать Вам о мониторах. Может быть, через несколько лет, в какой-нибудь новой ОС Вы еще встретитесь с ними.

Иерархия памяти.

В заключение раздела ОС я хотел бы некоторое внимание уделить архитектуре памяти современных ОС.

Как мы уже говорили ранее, виртуальное адресное пространство каждого процесса составляет 4 гб. В MS DOS и 16-ти разрядной Windows все процессы располагаются в едином адресном пространстве и один процесс мог “залезть” в адресное пространство другого процесса и испортить находящиеся там данные.

В среде Win32 эта проблема решена за счет выделения каждому процессу личного (private) адресного пространства. Любой адрес, используемый процессом, от 0x00000000 до 0xFFFFFFFF, работает только в адресном пространстве данного процесса.

Приятно отметить, что в Windows NT память, принадлежащая собственно ОС, также скрыта от любого потока. Следовательно, никто посторонний не сможет ее повредить. А в Windows 95 это не реализовано.

Итак, памяти много. Очень много, Единственное, что омрачает эту радость, то, что эта память виртуальная. Другими словами, адресное пространство - это всего лишь диапазон адресов, отведенных процессу, а вовсе не реальное физическое пространство.

Выделение разделов в различных ОС происходит по-разному. Я расскажу о Windows NT, а на зачете поинтересуюсь, как это реализовано в Windows 95.

Процессу выделяется адресное пространство в момент создания, и оно практически свободно. Чтобы воспользоваться какой-либо областью внутри этого адресного пространства, необходимо зарезервировать (reserving) определенный регион. При резервировании система выравнивает регион по четному адресу и учитывает так называемую гранулярность выделения ресурсов. Для Win32 она составляет 64Кб. Кроме того, при резервировании региона система учитывает еще и четную кратность региона размеру страницыпамяти. У нас она равна 4Кб. То есть если Вам понадобится 10Кб, система зарезервирует 12. Как только нужда в зарезервированном регионе отпадет, его следует вернуть.

Для того чтобы действительно получить возможность использовать зарезервированную память, необходимо выделить область физической памяти и увязать ее с регионом. Эта операция называется передачей физической памяти (committing physical storage). При передаче физической памяти нет нужды передавать ее целому региону - можно дать только некоторым страницам (по 4Кб).

Работая в Win32 физическую память следует рассматривать как данные, хранимые в дисковых файлах со страничной структурой. Поэтому когда система передает память, на самом деле она выделяет ее в страничном файле. Следовательно, реально доступная память определяется свободным дисковым пространством. Когда поток пытается обратиться к данным, они могут быть либо в ОП, либо в файле своппинга на диске. Если в ОП, то система “свяжет”адрес данных в виртуальной памяти с физическим адресом в ОП, и тогда поток сможет обратиться к необходимым ему данным. Если страница с данными находится на диске, то попытка доступа к ним приводит к ошибке - page fault. Таким образом процессор уведомляет ОС о своей неудачной попытке. Программа обработки данного прерывания начинает поиск свободной страницы в памяти. Если таковой нет, то освобождает одну из страниц, перемещает ее на диск. После этого находит на диске нужный блок и помещает его в ОП. Далее как мы уже говорили.

Windows NT имеет еще одну приятную возможность - она может использовать страничные файлы на различных физических устройствах - дисках. В этом случае возможно “расслоение” памяти и соответственно, ускоряется доступ к необходимой информации.

Кроме того, сам файл с кодом приложения используется в качестве файла своппинга для этого процесса. Это касается как .EXE, так и .DLL файлов приложения.

На этом мы закончим краткое введение в современные ОС. Я надеюсь, что если не сейчас, то в скором будущем у Вас появятся вопросы, которые подвинут Вас на более глубокое изучение этой поистине бескрайней, а главное, бесконечной темы.