Распределение памяти.
Иерархическая организация памяти
Где Seg и Offset — содержимое сегментного и адресного регистров. Таким образом, обеспечивался доступ к адресному пространству Addr = 0 — FFFFFh при помощи пары 16-битных регистров. Заметим, что при Seg = FFFFh и Offset = FFFFh данная формула дает адрес 10FFEFh, но ввиду 20-битного ограничения на шину адреса эта комбинация в физической памяти указывает на 0FFEFh. Таким образом, адресное… Читать ещё >
Распределение памяти. Иерархическая организация памяти (реферат, курсовая, диплом, контрольная)
Логическая структура памяти PC обусловлена особенностями системы адресации процессоров семейства х86. Процессоры 8086/88, применявшиеся в первых моделях PC, имели доступное адресное пространство 1 Мбайт (20 бит шины адреса). Эти процессоры использовали сегментную модель памяти, унаследованную и следующими моделями в реальном режиме. Согласно этой модели исполнительный (линейный) адрес вычисляется по формуле.
Addr = Segx 16 + Offset,.
где Seg и Offset — содержимое сегментного и адресного регистров. Таким образом, обеспечивался доступ к адресному пространству Addr = 0 — FFFFFh при помощи пары 16-битных регистров. Заметим, что при Seg = FFFFh и Offset = FFFFh данная формула дает адрес 10FFEFh, но ввиду 20-битного ограничения на шину адреса эта комбинация в физической памяти указывает на 0FFEFh. Таким образом, адресное пространство как бы сворачивается в кольцо с небольшим «нахлестом». Начиная с процессора 80 286, шина адреса была расширена до 24 бит, а впоследствии (386DX, 486 и выше) до 32 и даже 36 (у процессоров Р6). В реальном режиме процессора, используемом в DOS, применяется та же сегментная модель памяти и формально доступен лишь 1 Мбайт памяти, что является недостаточным для большинства современных приложений. Однако выяснилось, что процессоры 80 286 в реальном режиме эмулируют 8086 с ошибкой: та самая единица в бите А20, которая отбрасывалась в процессорах 8086/88, теперь попадает на шину адреса, и в результате максимально доступный линейный адрес в реальном режиме достиг 10FFEFh. За эту ошибку с радостью ухватились разработчики PC, поскольку дополнительные (64К — 16) байты оперативной памяти, адресуемой в реальном режиме, оказались подарком, позволяющим освободить дефицитное пространство оперативной памяти для прикладных программ. В эту область (10 0000h — 10FFEFh), названную «высокой памятью» —HighMemoryArea (HMA), стали помещать часть операционной системы и небольшие резидентные программы. Однако для обеспечения полной совместимости с процессором 8086/88 в схему PC ввели вентиль линии А20 шины адреса — GateA20, который либо пропускает сигнал от процессора, либо принудительно обнуляет линию А20 системной шины адреса. Более старшие биты такой «заботы» не требуют, поскольку переполнение при суммировании 16-битных компонентов адреса по данной схеме до них не распространяется. Управление, этим вентилем подключили к свободному программно-управляемому выходному биту 1 контроллера клавиатуры 8042, ставшего стандартным элементом архитектуры PC, начиная с AT. Предполагалось, что этим вентилем часто пользоваться не придется. Однако жизнь внесла свои поправки, и оказалось, что переключение вентиля в многозадачных ОС, часто переключающих процессор между защищенным режимом, реальным режимом и режимом V86, контроллером клавиатуры выполняется слишком медленно. Так появились альтернативные методы быстрого переключения вентиля, специфичные для различных реализации системных плат (например, через порт 92h). Кроме того, иногда использовали и аппаратную логику быстрого декодирования команды на переключение бита, поступающую к контроллеру клавиатуры. Для определения способа переключения в утилиту CMOSSetup ввели соответствующие параметры, позволяющие выбрать между стандартным, но медленным способом и менее стандартизованным, но быстрым, в зависимости от используемого ПО.
Поскольку ошибка эмуляции 8086 была радостно принята и широко использована, ее повторили и в 386, и в следующих моделях процессоров. А для упрощения внешних схем в процессоры, начиная с 486, ввели и вентиль GateA20 с соответствующим внешним управляющим выводом.
32-разрядные процессоры позволяют организовать режим, иногда называемый «нереальным» или «большим реальным», в котором инструкции выполняются как в реальном, но доступны все 4 Гбайт памяти. Этот режим часто используется в игровых программах, целиком захватывающих все ресурсы компьютера, не заботясь о «правилах хорошего тона» по отношению к другим исполняемым программам.
Основную часть адресного пространства занимает оперативная память. Объем установленной памяти определяется тестом POST при начальном включении (перезагрузке) компьютера, начиная с младших адресов. Натолкнувшись на отсутствие памяти (ошибку), тест останавливается на достигнутом и сообщает системе объем реально работающей памяти.
Распределение памяти PC, непосредственно адресуемой процессором, приведено на рис. 49 и представляется следующим образом.
00000h-9FFFFh — Conventional (Base) Memory, 640 Кбайт — стандартная (базовая) память, доступная DOS и программам реального режима. В некоторых системах с видео-адаптером MDA верхняя граница сдвигается к AFFFFh (704 Кбайт). Иногда верхние 128 Кбайт стандартной памяти (область 80000h-9FFFFh) называют ExtendedConventionalMemory.
A0000h-FFFFFh — UpperMemoryArea (UMA), 384 Кбайт — верхняя память, зарезервированная для системных нужд. В ней размещаются области буферной памяти адаптеров (например, видеопамять) и постоянная память (BIOS с расширениями). Эта область, обычно используемая не в полном объеме, ставит непреодолимый архитектурный барьер на пути непрерывной (нефрагментированной) памяти, о которой мечтают программисты.
Память выше 10 0000h — ExtendedMemory — дополнительная (расширенная) память, непосредственно доступная только в защищенном (и в «большом реальном») режиме для компьютеров с процессорами 286 и выше. В ней выделяется область 10 0000h-10FFEFh — высокая память, НМА, — единственная область расширенной памяти, доступная 286+ в реальном режиме при открытом вентиле GateA20.
Область памяти выше первогомегабайта в различных источниках называется по-разному. Ее современное английское название — ExtendedMemory — пересекается с названием одной из спецификаций ее использования — ExtendedMemorySpecification. Но название другой спецификации использования — ExpandedMemorySpecification — в прямом переводе на русский язык неотличимо от перевода предыдущего термина (и Extended и Expanded переводятся как «расширенный»). Область всей физической памяти, расположенной в адресном пространстве выше 1 Мбайта, будем называть дополнительной памятью. Ее объем у современных компьютеров указывается строкой ExtendedMemoryxxxxxKbyte в таблице, выводимой после прохождения теста POST, и в меню стандартной конфигурации CMOSSetup.
Вышеприведенное разделение памяти актуально только для приложений и операционных систем реального режима типа MS-DOS. Для ОС защищенного режима (в том числе Windows 9x/NT/2000) доступна вся оперативная память, причем без каких-либо ухищрений вроде EMS и XMS. Однако область UMA с ее традиционными «жителями», сохраняемая ради совместимости, остается барьером на пути к единой однородной памяти.
Стандартная память — ConventionalMemory является самой дефицитной в PC, когда речь идет о работе в среде операционных систем типа MS-DOS. На ее небольшой объем (типовое значение 640 Кбайт) претендуют и BIOS, и ОС реального режима, а остатки отдаются прикладному ПО.
Верхняя память имеет области различного назначения, которые могут быть заполнены буферной памятью адаптеров, постоянной памятью или оставаться незаполненными. Раньше эти «дыры» не использовали из-за сложности «фигурного выпиливания» адресуемого пространства. С появлением механизма страничной переадресации (у процессоров 386 и выше) их стали по возможности заполнять «островками» оперативной памяти, названными блоками верхней памяти UMB (UpperMemoryBlock). Эти области доступны DOS для размещения резидентных программ и драйверов через драйвер EMM386, который отображает в них доступную дополнительную память.
Рисунок 49. Распределение памяти PC.