6. Опишите распределение оперативной памяти в MSDOS, Windows9x, WindowsNT.

Предмет: Операционные системы.
Вопрос: №6

***

—————————————————————

Маленькое вступление к распределению оперативной памяти в MSDOS:

Логическая структура памяти ПК обособлена особенностями системы адресации процессоров семейства х86. Процессоры 8086/88, применявшиеся в первых моделях ПК, имели доступное адресное пространство 1 Мбайт (так как использовали 20 разрядную шину адреса). Эти процессоры использовали сегментную модель памяти, унаследованную и следующими моделями в реальном режиме. Согласно этой модели линейный (физический) адрес вычисляется по формуле: Address = segment*10h+offset.

Таким образом, обеспечивается доступ к адресному пространству от 00000h до FFFFFh при помощи пары 16 разрядных регистров.

В реальном режиме процессора, используемом в DOS, применяется та же сегментная модель памяти и формально доступен лишь 1 Мбайт памяти, что является недостаточным для большинства современных приложений. Однако выяснилось, что процессоры 80286 в реальном режиме эмулируют 8086 с ошибкой: если задать адрес seg=FFFFh и offset = FFFFh, то данная формула дает адрес 10FFEFh, но ввиду 20-битного ограничения на шину адреса (которое было в 8086) эта комбинация в физической памяти указывала на 0FFEFh. Таким образом, адресное пространство сворачивалось в кольцо с небольшим «нахлестом». Но начиная с процессора 80286, шина адреса была расширена до 24 бит, а в последствии (в процессорах 386DX, 486 и выше) до 32 бит и даже 36 (P6). И та самая единица, которая отбрасывалась в процессорах 8086/88, теперь попадает на шину адреса, и в результате максимально доступный линейный адрес в реальном режиме достиг 10FFEFh. Дополнительные байты оперативной памяти, адресуемой в реальном режиме, позволили освободить дефицитное пространство оперативной памяти для прикладных программ. Эту область (100000h-10FFEFh), названную высокой памятью HMA (High Memory Area), стали помещать часть ОС и небольшие резидентные программы.

Однако для обеспечения полной совместимости с процессором 8086/88 в схему ПК ввели вентиль линии А20 шины адреса – Gate A20, который либо пропускает сигнал процессора, либо принудительно обнуляет линию А20 системной шины адреса.

32-разрядные процессоры позволяют организовывать режим, иногда называемый «нереальным» или «большим реальным», в котором инструкции выполняются как в реальном, но доступны все 4 Гигабайта памяти. Этот режим часто используется в игровых программах, целиком захватывающих все ресурсы компьютера.

—————————————————————

Тест POST:

Основную часть адресного пространства занимает оперативная память. Объем установленной памяти определяется тестом POST при начальном включении (перезагрузке) компьютера, начиная с младших адресов. Натолкнувшись на отсутствие памяти (ошибку), тест останавливается на достигнутом и сообщает системе объем реально работающей памяти.

Распределение памяти ПК непосредствен-но адресуемой процессором:


memory1

Conventional memoryпри работе в среде ОС типа MS DOS стандартная память является самой дефицитной в ПК. На её небольшой объем (640 Кбайт) претендуют и BIOS, а оставшаяся часть предназначена для прикладного ПО. Стандарная память распределяется:

00000h-003FFh – векторы прерываний;

00400h-004FFh – область переменных BIOS;

00500h-00xxxh – область DOS;

00xxxh-9FFFFh – память, предоставляемая пользователю (до 638 Кбайт). Иногда верхние 128 Кбайт стандартной памяти (область 80000h-9FFFFh) называют Extended Conventional Memory.

Верхняя память (UMA) – объемом 384 Кбайт, имеет области различного назначения, которые могут быть заполнены буферной памятью адаптеров, постоянной памятью или оставаться незаполненными. Эти области доступны DOS для размещения резидентных программ и драйверов через драйвер EMM386, который отображает в них доступную дополнительную память.

Стандартное распределение дополнитель-ной памяти:

A0000h-BFFFFh – Video RAM (128 Кбайт) – видеопамять (обычно используется не полностью);

C0000h-DFFFFh – Adapter ROM, Adapter RAM (128 Кбайт) – резерв для адаптеров, использующих собственные модули ROM BIOS или/и специальное ОЗУ, совместно используемое с системной шиной;

E0000h-EFFFFh – свободная область (64 Кбайт), иногда занятая под System BIOS;

F0000h-FFFFFh – System BIOS (64 Кбайт) – системная BIOS;

FD000h-FDFFFh – ESCD (Extended System Configuration Data) – область энергонеза-висимой памяти, используемая для конфигурирования устройств Plug and Play. Эта область имеется только при наличии PnP BIOS, ее положение и размер жестко не

заданы.

В области UMA практически всегда присутствует графический адаптер.

Распространенным потребителем UMA являются также расширения ROM BIOS, расположенные на платах дисковых контроллеров, и микросхемы удаленной загрузки (Boot ROM) на платах адаптеров ЛВС. Обычно они занимают область C8000h –CBFFFh/C9FFFh/C8FFFh (для дисковых контроллеров), но могут и перемещаться при конфигурировании адаптеров.

Память выше 100000h – дополнительная (расширенная)память Extended Memory, непосредственно доступная только в защищенном (и в «большом реальном») режиме для компьютеров с процессорами 286 и выше. В ней выделяется область 100000h-10FFEFh – высокая память НМА – это единственная область расширенной памяти, доступная 286+ в реальном режиме при открытом вентиле Gate A20.

Отображаемая память EMS (Expended Memory Specification) – программная специи-фкация использования дополнительной памяти DOS-программами реального режима. Спецификация LIM EMS – продукт соглашения фирм Lotus, Intel, Microsoft на использование EMS. С помощью специальных аппаратных или программных средств любая область дополнительной памяти может быть отображена на небольшие страницы, расположенные в области UMA. В первоначальном варианте можно было использовать 4 страницы по 16 Кбайт, примыкающие друг к другу, начиная обычно с адреса D0000h (положение страниц можно менять в пределах свободных областей UMA). Обращение прикладных программ к памяти EMS осуще-ствляется через диспетчер памяти, вызываемый по прерыванию Int 67h. Программа, нуждающаяся в дополнительной памяти, должна сначала запросить выделение области, указав ее размер в 16-килобайтных страницах. В ответ на этот запрос, если имеется свободная память, диспетчер сообщает программе номер дескриптора EMS (EMS handler), по которому программа в дальнейшем будет ссылаться на выделенную ей область при управлении отображением. Далее программа через диспетчер назначает отображение требуемой логической страницы из выделенной ей области дополнительной памяти на выбранную физическую страницу, расположенную в области UMA. После этого любые программные обращения процессора к физической странице, расположенной в пределах первого мегабайта, будут в действительности работать с логической страницей дополнительной памяти, расположенной выше первого мегабайта, причем без переключения в защищенный режим. Для работы с иной логической страницей требуется вызов диспетчера для переназначения отображения. В EMS 4.0, эмулируемой на процессорах 386+, появилась возможность увеличения числа доступных физических страниц и отображения дополнительной памяти не только на фиксированные области UMA, но и на любые области памяти.

Расширенная память XMS (Extended Memory Specification) – иная программная спецификация использования дополнитель-

ной памяти DOS-программами, разрабо-танная компаниями Lotus, Intel, Microsoft и AST для компьютеров на процессорах 286 и выше. Эта спецификация позволяет программе получить в распоряжение одну или несколько областей дополнительной памяти, а также использовать область НМА. Распределением областей ведает драйвер HIMEM.SYS. Драйвер позволяет захваты-вать или освобождать область НМА (65520 байт, начиная с 100000h), а также управлять вентилем линии адреса А20. Функции XMS позволяют программе:

– определить размер максимального доступного блока памяти;

– захватить или освободить блок памяти;

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

– запереть блок памяти (запретить копирование) и отпереть его;

– изменить размер выделенного блока.

В ответ на запрос выделения области драйвер выдает номер дескриптора блока (16-битное число XMS handler), по которому выполняются дальнейшие манипуляции с этим блоком. Размер блока может достигать 64 Мбайт. Спецификация XMS позволяет программам реального режима устраивать «склады» данных в дополнительной памяти, которая им непосредственно недоступна, копируя в нее и из нее данные доступных областей первого мегабайта памяти. Доступ к драйверу XMS осуществляется через прерывание Int 2Fh. Заботу о переключении в защищенный режим и обратно для получения доступа к дополнительной памяти берет на себя диспетчер. По умолчанию HIMEM.SYS позволяет использовать до 32 дескрипторов блоков, но это число можно увеличить.

Как видно, спецификации EMS и XMS отличаются по принципу действия: в EMS для доступа к дополнительной памяти выполняется отображение памяти (страничная переадресация), а в XMS – копирование блоков данных. На компьютерах с процессорами 386+ эти спецификации мирно сосуществуют при использовании драйвера HIMEM.SYS, поверх которого может быть загружен и драйвер EMM386.EXE, пользующийся памятью XMS для эмуляции EMS-памяти. Память, доступная EMS и XMS, может выделяться динамически из числа дополнительной. Ключ NOEMS в строке запуска EMM386 запрещает выделение памяти под использование по спецификации

EMS.

—————————————————————

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


memory-windows98

Windows 9х являются 32-разрядными, многопотоковыми ОС с вытесняющей многозадачностью. Основной пользователь-

ский интерфейс этих ОС – графический. Для своей загрузки они используют операционную систему MS DOS 7.Х, и если в файле MSDOS.SYS в секции [Options] прописано «BootGUI = 0», то процессор работает в обычном реальном режиме. Распределение памяти в MS DOS 7.X такое же, как и в предыдущих версиях DOS. Однако при загрузке GUI-интерфейса перед загрузкой ядра Windows 95/98 процессор переключается в защищенный режим  работы и начинает распределять память уже с помощью страничного механизма.

Использование так называемой плоской модели памяти,при которой все возможные сегменты, используемые программистом, совпадают друг с другом и имеют максимально возможный размер, определяемый системными соглашениями данной ОС, приводит к тому, что, с точки зрения программиста, память получается неструктурированной. За счет представле-ния адреса как пары (Р, i) память можно трактовать и как двумерную, то есть «плоскую», и как линейную, что существенно облегчает создание системного программного обеспечения и прикладных программ с помощью соответствующих систем программи-рования.

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

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

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

Системный код Windows 95 размещается выше границы 2 Гбайт. В пространстве с отметками 2 и 3 Гбайт находятся системные библиотеки DLL (Dynamic Link Library – динамически загружаемый библиотечный модуль), используемый несколькими программами.

Заметим, что в 32-битовых микропроцессорах семейства i80x86 имеются четыре уровня защиты, именуемые

кольцами с номерами от 0 до 3.

Кольцо с номером 0 является наиболее привилегированным, то есть максимально защищенным. Компоненты системы Windows 95, относящиеся к кольцу 0, отображаются на виртуальное адресное пространство между 3 и 4 гигабайтами. К этим компонентам относятся собственно ядро Windows, подсистема управления виртуальными машинами, модули файловой системы и виртуальные драйверы (VxD).

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

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

Адреса памяти ниже 4 Мбайт также отображаются в адресное пространство каждой прикладной программы и совместно

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

Минимально допустимый объем оператив-ной памяти ОС Windows 95 равен 4 Мбайт, однако при таком объеме пробуксовка столь велика, что практически работать нельзя.

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

—————————————————————

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


memory-windows-nt

В операционных системах Windows NT тоже используется плоская модель памяти. Заметим, что Windows NT 4,0 Server практически не отличается от Windows NT 4.0 Workstation; разница лишь в наличии у сервера некоторых дополнительных служб, дополнительных утилит для управления доменом и несколько иных значений в настройках системного реестра. Однако схема распределения возможного виртуального адресного пространства в системах Windows NT разительно отличается от модели памяти Windows 95/98.

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

Логическое распределение адресного пространства:

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

Ядро системы и несколько драйверов работают в нулевом кольце защиты в отдельном адресном пространстве.

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

Прикладным программам выделяется 2 Гбайт локального (собственного) линейного (неструктурированного) адресного простран-ства от границы 64 Кбайт до 2 Гбайт (первые 64 Кбайт полностью недоступны). Прикладные программы изолированы друг от друга, хотя могут общаться через буфер обмена (clipboard) и механизмы:

1.) универсальные механизмы динамичес-кого обмена данными DDE (Dynamic Data Exchange);

2.) технологию документно-ориентирован-ной архитектуры приложений OLE (Object Linking and Embedding).

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

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

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

Процессами выделения памяти, ее резервирования, освобождения и подкачки управляет диспетчер виртуальной памяти Windows NT VMM (Virtual Memory Manager).

Каждая виртуальная страница памяти, отображаемая на физическую страницу, переносится в так называемый страничный фрейм (page frame). Прежде чем код или данные можно будет переместить с диска в память, диспетчер виртуальной памяти (модуль VMM) должен найти или создать свободный страничный фрейм или фрейм, заполненный нулями.

Когда процесс использует код или данные, находящиеся в физической памяти, система резервирует место для этой страницы в файле подкачки Pagefile.sys на диске. Файл Pagefile.sys представляет собой зарезервированный блок дискового прост-ранства, который используется для выгрузки страниц, помеченных как «грязные», при необходимости освобождения физической памяти.

В системах Windows NT 4.0 объекты, созда-

ваемые и используемые приложениями и операционной системой, хранятся в так называемых пулах памяти (memory pools).

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

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

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

Вся виртуальная память в Windows NT подразделяется на классы:

1.) зарезервированную (reserved)

2.) выделенную (committed)

3.) доступную (available).

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

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

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