План контрольной работы



Скачать 403.45 Kb.
страница3/3
Дата22.06.2019
Размер403.45 Kb.
ТипКонтрольная работа
1   2   3

с. Управление памятью.
Для загрузки операционная система Windows 98 используют операционную систему MS DOS 7.0 (MS DOS 98), и в случае если в секции [Options] файла MSDOS.SYS имеется строка BootGUI = 0, процессор работает в обычном реальном режиме. Распределение памяти в MS DOS 7.0 такое же, как и в предыдущих версиях DOS. Однако при загрузке интерфейса GUI перед загрузкой ядра Windows 98 процессор переключается в защищенный режим работы и начинает распределять память уже с помощью страничного механизма.

Приложения и подсистемы Windows 98 (за исключением ядра) никогда не работают с физической памятью. Разделение на виртуальную и физическую память является ключевым аспектом работы системы. Приложения и подсистемы Win­dows 98 имеют дело с определенными интерфейсами прикладного программиро­вания и виртуальными адресными пространствами. Базовая система работает как с физической памятью, так и с виртуальными адресными пространствами.

В основе поддержки виртуальных машин и виртуального адресного пространства, которую обеспечивает операционная система Windows 98, лежит работа с реаль­ной (физической) памятью компьютера, ограниченной в своих размерах. Опера­ционная система выгружает неактивные страницы памяти виртуальных адресных пространств выполняющихся процессов из оперативной памяти на диск и загру­жает страницу, запрошенную при выполнении текущей команды. Другими слова­ми, загрузка страницы в оперативную память осуществляется по требованию, как это принято в большинстве операционных систем, использующих страничный механизм организации виртуальной памяти. В то же время, освобождается опера­тивная память от неактивных страниц группами по нескольку страниц за одну операцию. Реализованный в операционной системе Windows 98 алгоритм заме­щения представляет собой стандартную дисциплину LRU (Least Recently Used — дольше других неиспользуемый), заключающуюся в освобож­дении тех страниц физической памяти, которые дольше других не использовались.

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

В отличие от тех мультитерминальных систем, в которых операционная система должна заботиться о равноправном совместном использовании ресурсов, в систе­ме Windows 98 сделано иначе. Поскольку это однопользовательская ОС, она позволяет заполнять память так, как это нужно пользователю и его программам. Динамически загружаемые компоненты системы конкурируют за память с прикладными программами. Если пользователь хочет, чтобы его при­ложение работало быстрее, ему будет позволено занять столько памяти, сколько вообще возможно. Система накладывает ограничение на максимальный объем памяти, который может быть отдан в распоряжение отдельных приложений, — если не следить за этим, становится возможным возникновение тупиковых ситуаций. После того как вся физическая память заполнена, первый же новый запрос на вы­деление памяти инициирует замещение страниц. Интересным побочным эффек­том такого подхода является то, что у приложений нет надежного способа определения объема памяти, доступного в системе. Функция API GlobalMemorySatus() возвращает целый ряд параметров, характеризующих состояние системной памя­ти, однако это не более чем «мгновенный снимок» текущей обстановки — еще один вызов этой функции вполне может дать другие значения.

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

Для того чтобы облегчить управление всем разнообразием типов страниц памяти, каждая активная страница, то есть каждая страница, которая является частью вы­полняющегося в данный момент системного модуля или приложения, снабжена хра­нящимся совместно с ней страничным дескриптором (Page Descriptor, PD). В этом дескрипторе содержатся адреса процедур, которые занимаются перемещением стра­ницы из памяти на диск и обратно. Независимо от того, что именно находится в данной странице, диспетчер физической памяти, чтобы переместить страницу в опе­ративную память или из нее, просто вызывает соответствующую функцию, адрес которой определен в поле дескриптора страницы. В случае, если некоторая страни­ца еще никогда не заполнялась, она называется абсолютно чистой (virgin). Напри­мер, именно так обозначаются страницы, содержащие код, использующий вызовы Win32. После того как с момента размещения страницы в памяти в нее будет в первый раз произведена запись данных, она считается испорченной (tainted) и может быть либо грязной (dirty), либо чистой (clean), в зависимости от того, осуществлялась ли в нее запись с момента последней ее подкачки в физическую память. Если запись в эту страницу производилась, и в этой физической странице требуется разместить иную виртуальную страницу, ее содержимое должно быть сохранено в файле подкачки.

Использование так называемой плоской модели памяти, когда программист может использовать только один сегмент кода и один сегмент данных, которые имеют максимально возможные размеры, определяемые системными соглашениями опе­рационной системы, приводит к тому, что с точки зрения программиста память получается неструктурированной. Программы используют классическую малую (small) модель памяти. Каждая прикладная программа определяется 32-раз­рядными адресами, в которых сегмент кода имеет то же значение, что и сегменты данных. Единственный сегмент программы отображается непосредственно в об­ласть виртуального линейного адресного пространства, которая, в свою очередь, состоит из 4-килобайтных страниц. Каждая страница может располагаться где угод­но в оперативной памяти (естественно, в том месте, где ее разместит диспетчер памяти, который сам находится в невыгружаемой области) или быть «сброшена» на диск, если не запрещено использовать страничный файл.

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

В Windows 98 каждая 32-разрядная прикладная программа выполняется в собственном адресном пространстве, но все они используют совместно один и тот же 32-разрядный системный код. Доступ к чужим адресным пространствам в прин­ципе возможен. Другими словами, виртуальные адресные пространства не задей­ствуют всех аппаратных средств защиты, заложенных в микропроцессор. В резуль­тате неправильно написанная 32-разрядная прикладная программа может привести к аварийному сбою всей системы. Все 16-разрядные прикладные программы Win­dows разделяют общее адресное пространство, поэтому они так же уязвимы друг для друга, как и в среде Windows 3.х.

Собственно системный код Windows 98 размещается выше границы 2 Гбайт. В про­странстве с отметками 2 и 3 Гбайт находятся системные библиотеки DLL, использу­емые несколькими программами. В 32-разрядных микропроцессорах семейства i80x86 имеется четыре уровня защиты, именуемые кольцами с номерами от 0 до 3. Кольцо с номером 0 является наиболее привилегированным, то есть мак­симально защищенным. Компоненты операционной системы Windows 98, относя­щиеся к кольцу 0, отображаются на виртуальное адресное пространство между 3 и 4 Гбайт. К этим компонентам относятся собственно ядро Windows, подсистема управления виртуальными машинами, модули файловой системы и драйверы вир­туальных устройств (VxD).

Область памяти между 2 и 4 Гбайт адресного пространства каждой 32-разрядной прикладной программы совместно используется всеми 32-разрядными приклад­ными программами. Такая организация позволяет обслуживать вызовы API не­посредственно в адресном пространстве прикладной программы и ограничивает размер рабочего множества. Однако за это приходится расплачиваться снижени­ем надежности. Ничто не может помешать программе, содержащей ошибку, про­извести запись в адреса, принадлежащие системным библиотекам DLL, и вызвать крах всей системы.

В области между 2 и 3 Гбайт также находятся все запускаемые 16-разрядные при­кладные программы Windows. С целью обеспечения совместимости эти программы выполняются в совместно используемом адресном пространстве, где они мо­гут испортить друг друга так же, как и в Windows 3.x.

Адреса памяти ниже 4 Мбайт также отображаются в адресное пространство каж­дой прикладной программы и совместно используются всеми процессами. Благо­даря этому становится возможной совместимость с существующими драйверами реального режима, которым необходим доступ к этим адресам. Это делает еще одну область памяти не защищенной от случайной записи. К самым нижним адресам (менее 64 Кбайт) этого адресного пространства 32-разрядные прикладные програм­мы обращаться не могут, что дает возможность перехватывать неверные указате­ли, но 16-разрядные программы, которые, возможно, содержат ошибки, могут за­писывать туда данные.

Вышеизложенную модель распределения памяти можно проиллюстрировать с помощью рисунка:


4 Гбайт

Системные компоненты, относящиеся к кольцу защиты 0

Адреса между 2 и 4 Гбайт отображаются в адресное пространство каждой 32-разрядной программы и используются совместно

3 Гбайт

Системные библиотеки DLL, прикладные программы Win16, совместно используемые библиотеки DLL

2 Гбайт

Прикладные 32-разрядные программы

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

4 Мбайт

Компоненты реального режима

Эта область используется всеми процессами

64 Кбайт






На протяжении всего времени работы системы Windows 98 для каждого ресурса поддерживают счетчик обращений к нему. По мере того как приложения исполь­зуют тот или иной ресурс, Windows 98 увеличивают значение соответствующего счетчика, а по завершении работы приложения уменьшают его. Значение счет­чика, равное нулю, свидетельствует о том, что ресурс больше не используется, а значит, система может удалить ресурс и освободить память, которую он зани­мал.



4. Список использованных ресурсов:


    1. http://linux-ve.chat.ru/book/contents.htm

    2. http://www.oduv.ru/doc/1/linux_khg_06.shtml.htm

    3. http://ssl.stu.neva.ru/ssl/publications/magazine/2002/2/4/fomin.pdf

    4. Гордеев А.В. Операционные системы. – СПб.: Питер, 2004. 415 с.



Поделитесь с Вашими друзьями:
1   2   3


База данных защищена авторским правом ©vossta.ru 2019
обратиться к администрации

    Главная страница