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

В операционных системах типа Windows NT тоже используется плоская модель памяти. Однако схема распределения виртуального адресного пространства рази­тельно отличается от модели памяти Windows 9x. Прежде всего, в отличие от Windows 9x, в гораздо большей степени задействуется ряд серьезных аппаратных средств защиты, имеющихся в микропроцессорах, а также применено принципи­ально другое логическое распределение адресного пространства.

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

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

Прикладным программам выделяется 2 Гбайт локального (собственного) линей­ного (неструктурированного) адресного пространства от границы 64 Кбайт до 2 Гбайт (первые 64 Кбайт полностью недоступны). Прикладные программы изо­лированы друг от друга, хотя могут общаться через буфер обмена (clipboard), ме­ханизмы DDE (Dynamic Data Exchange - динамический обмен данными) и OLE (Object Linking and Embedding - связывание и внедрение объектов).

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

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

Для 16-разрядных прикладных Windows-программ операционные системы типа Windows NT реализуют сеансы Windows on Windows (WOW). В отличие от Windows9x, система Windows NT дает возможность выполнять 16-разрядные Win­dows -программы индивидуально в собственных пространствах памяти или совмест­но в разделяемом адресном пространстве. Почти во всех случаях 16- и 32-разрядные прикладные Windows -программы могут свободно взаимодействовать, используя механизм OLE, независимо от того, выполняются они в отдельной или общей па­мяти. Собственные прикладные программы и сеансы WOW выполняются в режи­ме вытесняющей многозадачности, основанной на управлении отдельными пото­ками. Несколько 16-разрядных прикладных Windows-программ в одном сеансе WOW выполняются в соответствии с кооперативной моделью многозадачности. Windows NT может также открыть в многозадачном режиме несколько сеансов DOS. Поскольку Windows NT имеет полностью 32-разрядную архитектуру, не су­ществует теоретических ограничений на ресурсы компонентов GDI и User. При запуске приложения создается процесссо своей информационной структу­рой. В рамках процесса запускается поток выполнения. При необходимости этот поток может инициировать запуск множества других потоков, которые будут вы­полняться параллельно в рамках одного процесса. Очевидно, что множество запу­щенных процессов также выполняются параллельно, и каждый из процессов мо­жет представлять собой мультизадачное (многопоточное) приложение. Задачи (потоки) в рамках одного процесса выполняются в едином виртуальном адресном пространстве, а процессы выполняются в различных виртуальных адресных про­странствах. Короче, все это почти полностью напоминает Windows 9х. Отображение различных виртуальных адресных пространств исполняющихся про­цессов на физическую память осуществляется по принципам страничной органи­зации виртуальной памяти.

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

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

Диспетчер виртуальной памяти может быстро и относительно легко удовлетво­рить программные прерывания типа страничной ошибки(page fault). Что касается аппаратных прерываний типа страничной ошибки, то они приводят к необходи­мости подкачки нужных страниц(paging), что снижает производительность систе­мы. Мы уже говорили (см. главу 3), что в Windows NT, к большому сожалению, для замещения страниц выбрана дисциплина FIFO, а не более эффективная дис­циплина LRU или LFU, как это сделано в других операционных системах. Когда процесс использует код или данные, находящиеся в физической памяти, система резервирует место для этой страницы в файле подкачки Pagefile.sys на диске. ' Это делается с расчетом на то, что данные потребуется выгрузить на диск. Файл Pagefile.sys представляет собой зарезервированныйблок дискового пространства, который используется для выгрузки страниц, помеченных как «грязные», для ос­вобождения физической памяти. Заметим, что этот файл может быть как непре­рывным, так и фрагментированным; он может быть расположен на системном дис­ке или на любом другом и даже на нескольких дисках. Размер этого страничного файла ограничивает объем данных, которые могут храниться во внешней памяти при использовании механизмов виртуальной памяти. По умолчанию размер фай­ла подкачки в операционных системах Windows NT 4.0 устанавливается равным объему физической памяти плюс 12 Мбайт, однако пользователь имеет возмож­ность изменить его размер по своему усмотрению. В следующих системах (Win­dows 2000/ХР) начальный размер страничного файла подкачки берется ранным полуторакратному объему физической оперативной памяти. То есть, например, для компьютера, имеющего 512 Мбайт оперативной памяти, по умолчанию раз­мер файла PagefiLe.sys равен 768 Мбайт. Проблема нехватки виртуальной памяти часто может быть решена за счет увеличения размера файла подкачки. Файл под­качки может быть не один - система поддерживает до 16 файлов подкачки, поэто­му лучше создать их несколько и разместить на быстрых жестких дисках. В системах Windows NT 4.0 объекты, создаваемые и используемые приложениями и операционной системой, хранятся в так называемых пулах памяти(memory pools). Доступ к этим пулам может быть получен только в привилегированном ре­жиме работы процессора, в котором функционируют компоненты операционной системы. Поэтому для того чтобы объекты, хранящиеся в пулах, стали видимы потокам выполнения приложений, эти потоки должны переключиться в привиле­гированный режим.

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

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

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

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

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

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: