Распределение оперативной памяти в Microsoft Windows NT


В операционных системах Windows NT тоже используется плоская модель памяти. Заметим, что Windows NT 4.0 server практически не отличается от Windows NT 4.0 workstation; разница лишь в наличии у сервера некоторых дополни­тельных служб, дополнительных утилит для управления доменом и несколько иных значений в настройках системного реестра. Однако схема распределения возможного виртуального адресного пространства в системах Windows NT разительно отличается от модели памяти Windows 95/98. Прежде всего, в отличие от Windows 95/98 в гораздо большей степени используется ряд серьезных аппаратных средств защиты, имеющихся в микропроцессорах, а также применено прин­ципиально другое логическое распределение адресного пространства.

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

Во-вторых, остальные программные модули самой операционной системы, которые выступают как серверные процессы по отношению к прикладным программам (клиентам), функционируют также в своем собственном системном виртуальном адресном пространстве, невидимом для прикладных процессов. Логическое распределение адресных пространств приведено на рис. 2.12.

Прикладным программам выделяется 2 Гбайт локального (собственного) линей­ного (неструктурированного) адресного пространства от границы 64 Кбайт до 2 Гбайт (первые 64 Кбайт полностью недоступны). Прикладные программы изолированы друг от друга, хотя могут общаться через буфер обмена (clipboard), механизмы DDE2 и OLE3. Между отметками 2 и 4 Гбайт расположены низкоуровневые системные компо­ненты Windows NT кольца 0, в том числе ядро, планировщик потоков и диспетчер виртуальной памяти. Системные страницы в этой области наделены привиле­гиями супервизора, которые задаются физическими схемами кольцевой защиты процессора.

В верхней части каждой 2-гигабайтной области прикладной программы разме­щён код системных DLL кольца 3, который выполняет перенаправление вызовов в совершенно изолированное адресное пространство, где содержится уже собст­венно системный код. Этот системный код, выступающий как сервер-процесс (server process), проверяет значения параметров, исполняет запрошенную функ­цию и пересылает результаты назад в адресное пространство прикладной про­граммы. Хотя сервер-процесс сам по себе остается процессом прикладного уровня, он полностью защищён от вызывающей его прикладной программы и изолиро­ван от неё.

 

 

 


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

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

Для 16-разрядных прикладных Windows-программ ОС Windows NT реализует сеансы Windows on Windows (WOW). В отличие от Windows 95/98 ОС Win­dows NT дает возможность выполнять 16-разрядные программы Windows инди­видуально в собственных пространствах памяти или совместно в разделяемом адресном пространстве. Почти во всех случаях 16- и 32-разрядные прикладные программы Windows могут свободно взаимодействовать, используя OLE, неза­висимо от того, выполняются они в отдельной или общей памяти. Собственные прикладные программы и сеансы WOW выполняются в режиме вытесняющей многозадачности, основанной на управлении отдельными потоками. Множест­венные 16-разрядные прикладные программы Windows в одном сеансе WOW выполняются в соответствии с кооперативной моделью многозадачности. Win­dows NT может также выполнять в многозадачном режиме несколько сеансов DOS. Поскольку Windows NT имеет полностью 32-разрядную архитектуру, не существует теоретических ограничений на ресурсы GDI1 и USER.

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

Процессами выделения памяти, её резервирования, освобождения и подкачки управляет диспетчер виртуальной памяти Windows NT (Windows NT virtual memory manager, VMM). В своей работе этот компонент реализует сложную стратегию учёта требований к коду и данным процесса для минимизации досту­па к диску, поскольку реализация виртуальной памяти часто приводит к боль­шому количеству дисковых операций.

Каждая виртуальная страница памяти, отображаемая на физическую страницу, переносится в так называемый страничный фрейм (page frame). Прежде чем код или данные можно будет переместить с диска в память, диспетчер виртуальной памяти (модуль VMM) должен найти или создать свободный страничный фрейм или фрейм, заполненный нулями. Заметим, что заполнение страниц нулями пред­ставляет собой одно из требований стандарта на системы безопасности уровня С2, принятого правительством США. Страничные фреймы должны заполняться нулями для того, чтобы исключить возможность использования их предыдущего содержимого другими процессами. Чтобы фрейм можно было освободить, необ­ходимо скопировать на диск изменения в его странице данных, и только после этого фрейм можно будет повторно использовать. Программы, как правило, не меняют страницы кода. Страницы кода, в которые программы не внесли измене­ний, можно удалить.

Диспетчер виртуальной памяти может быстро и относительно легко удовлетво­рить программные прерывания типа «ошибка страницы» (page fault). Что каса­ется аппаратных прерываний типа «ошибка страницы», то они приводят к подкачке (paging), которая снижает производительность системы. Мы уже говорили о том, что в Windows NT, к большому сожалению, выбрана дисциплина FIFO для замещения страниц, а не более эффективные дисциплины LRU и LFU.

Когда процесс использует код или данные, находящиеся в физической памяти, система резервирует место для этой страницы в файле подкачки Pagefile.sys на диске. Это делается с расчетом на тот случай, что данные потребуется выгрузить на диск. Файл Pagefile.sys представляет собой зарезервированный блок дисково­го пространства, который используется для выгрузки страниц, помеченных как «грязные», при необходимости освобождения физической памяти. Заметим, что этот файл может быть как непрерывным, так и фрагментированным; он может быть расположен на системном диске либо на любом другом и даже на несколь­ких дисках. Размер этого страничного файла ограничивает объём данных, кото­рые могут храниться во внешней памяти при использовании механизмов вирту­альной памяти. По умолчанию размер файла подкачки устанавливается равным объёму физической памяти плюс 12 Мбайт, однако, пользователь имеет возможность изменить его размер по своему усмотрению. Проблема нехватки виртуаль­ной памяти часто может быть решена за счёт увеличения размера файла подкачки.

В системах Windows NT 4.0 объекты, создаваемые и используемые приложения­ми и операционной системой, хранятся в так называемых пулах памяти (memory pools). Доступ к этим пулам может быть получен только в привилегированном режиме работы процессора, в котором работают компоненты операционной сис­темы. Поэтому для того, чтобы объекты, хранящиеся в пулах, стали видимы тре­дам приложений, эти треды должны переключиться в привилегированный режим.

Перемещаемый или нерезидентный пул (paged pool) содержит объекты, которые могут быть при необходимости выгружены на диск. Неперемещаемый или рези­дентный пул (nonpaged pool) содержит объекты, которые должны постоянно на­ходиться в памяти. В частности, к такого рода объектам относятся структуры данных, используемые процедурами обработки прерываний, а также структуры, используемые для предотвращения конфликтов в мультипроцессорных системах.

Исходный размер пулов определяется объёмом физической памяти, доступной Windows NT. Впоследствии размер пула устанавливается динамически и в зави­симости от работающих в системе приложений и сервисов будет изменяться в широком диапазоне.

Вся виртуальная память в Windows NT подразделяется на классы: зарезервиро­ванную (reserved), выделенную (committed) и доступную (available).

¨ Зарезервированная память представляет собой набор непрерывных адресов, которые диспетчер виртуальной памяти (VMM) выделяет для процесса, но не учитывает в общей квоте памяти процесса до тех пор, пока она не будет фактически использована. Когда процессу требуется выполнить запись в па­мять, ему выделяется нужный объём из зарезервированной памяти. Если про­цессу потребуется больший объём памяти, то дополнительная память может быть одновременно зарезервирована и использована, если в системе имеется доступная память

¨ Память выделена, если диспетчер VMM резервирует для неё место в файле Pagefile.sys на тот случай, когда потребуется выгрузить содержимое памяти на диск. Объём выделенной памяти процесса характеризует фактически потребляемый им объём памяти. Выделенная память ограничивается размером файла подкачки. Предельный объём выделенной памяти в системе (commit limit) определяется тем, какой объём памяти можно выделить процессам без увеличения размеров файла подкачки. Если в системе имеется достаточный объём дискового пространства, то файл подкачки может быть увеличен и тем самым будет расширен предельный объём выделенной памяти.

Вся память, которая не является ни выделенной, ни зарезервированной, явля­ется доступной. К доступной относится свободная память, обнуленная память (освобожденная и заполненная нулями), а также память, находящаяся в списке ожидания (standby list), которая была удалена из рабочего набора процесса, но может быть затребована вновь.

Контрольные вопросы и задачи

Вопросы для проверки

Перечислите и поясните основные функции ОС, которые связаны с управлени­ем задачами.

1 Какие дисциплины диспетчеризации задач вы знаете? Опишите их.

2 Что такое «гарантия обслуживания»? Как её можно реализовать?

3 Сравните механизмы диспетчеризации задач в ОС Windows NT и OS/2. В чём заключаются основные различия?

4 Опишите механизм динамической диспетчеризации, реализованный в UNIX-системах.

5 Что такое «виртуальный адрес», «виртуальное адресное пространство»? Чем (в общем случае) определяется максимально возможный объём виртуального адресного пространства программы?

6 Что такое «фрагментация памяти»? Какой метод распределения памяти по­зволяет добиться минимальной фрагментации?

7 Что такое «уплотнение памяти»? Когда оно применяется?

8 Объясните сегментный способ организации виртуальной памяти. Что пред­ставляет собой (в общем случае) дескриптор сегмента?

9 Сравните сегментный и страничный способы организации виртуальной памя­ти. Перечислите достоинства и недостатки каждого.

10 Какие дисциплины применяются для решения задачи замещения страниц? Ка­кие из них являются наиболее эффективными и как они реализуются?

11 Что такое «рабочее множество»? Что позволяет разрешить реализация этого понятия?

12 Изложите принципы распределения памяти в MS-DOS.

13 Что означает термин «плоская модель памяти»? В чём заключаются достоин­ства (и недостатки, если они есть) использования этой модели?

 

ГЛАВА 3



Дата добавления: 2022-02-05; просмотров: 320;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.017 сек.