Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Сегментная организация памяти

Очереди | Очереди и почтовые ящики в WINDOWS | Тупиковые ситуации | Предотвращение тупиков | Простое непрерывное распределение ОП | Защита памяти | Методы управления свободной памятью | Дисциплины выделения памяти | Разделы с подвижными границами | Своппинг |


Читайте также:
  1. StarGale Техника тренировки проспективной памяти
  2. VI. Организация
  3. XII. Организация защиты дипломной работы.
  4. XXVII. Болезни памяти и философское изобретение
  5. Автономная некоммерческая организация по решению своих учредителей может быть преобразована в фонд.
  6. Анатомо-физиологическая организация анализаторов (органов чувств), обеспечивающих актуализацию ощущений
  7. Архитектурные средства поддержки виртуальной памяти

При сегментной организации памяти программа представляет собой совокупность логических частей или сегментов. Адресация внутри сегмента непрерывна и указывается смещением относительно начала сегмента. Несколько сегментов одной программы могут не составлять непрерывную область памяти, более того, они могут во время исполнения находиться и во внешней памяти.

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

В общем виде ссылка на память в операндах команды имеет вид (s:d), где s - номер сегмента, а d - смещение. Для каждой работы ОС создает таблицу сегментов. Аппаратный регистр таблицы сегментов указывает на начало таблицы сегментов текущей работы. Схема настройки сегментов при сегментной организации памяти представлена на рис. 5.3.

Физическое расположение элемента в таблице сегментов определяется аппаратно прибавлением s к содержимому регистра таблицы сегментов. Физический (исполнительный) адрес

 
 

формируется аппаратно сложением элемента таблицы с d -смещением из программы.

В самом простом случае элемент таблицы содержит одно поле с физическим адресом, распределенным ОС под данный сегмент. В общем случае элемент таблицы содержит три поля:

- признак наличия сегмента в ОП;

- физический адрес сегмента, если он находится в памяти;

- длину сегмента.

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

Если требуемого сегмента нет в ОП, о чем свидетельствует признак, то говорят, что сегмент отсутствует. Аппаратура проинформирует об этом ОС через прерывание, которое вызовет программу подкачки. Эта управляющая программа ведает своппингом.

Машинное представление адресных операндов в ЭВМ при сегментной организации памяти содержит два поля: s и d. Иногда s по умолчанию определяется командой ПЭВМ.

Если сегмент находится в ОП, то ЦП осуществляет доступ к ячейке за два обращения: первое - к таблице сегментов; второе - к самому сегменту.

Иллюстрация преобразования адресного операнда в физический адрес приведена на рис. 5.4.

Хотя каждый сегмент помещается в свой участок памяти, появление нового сегмента и исчезновение старого все же приводит к фрагментации.

Достоинства: не нужен настраивающий загрузчик (COM программы в ПЭВМ).

 
 

Сегментная организация памяти в ПЭВМ

Рассмотренная схема характерная для ПЭВМ в реальном режиме в MS DOS. ОС не использует таблицу сегментов. Значения в регистры сегментов засылаются ОС только при запуске исходя из имеющейся памяти, а также изменяются самой программой. Наиболее простое сегментное распределение в СОМ-программах, когда используется только один общий сегмент для кода, данных и стека. В этом случае не нужен настраивающий загрузчик.

Память в ПЭВМ в реальном режиме организована специфически, искусственно, вопреки теории и уже большому опыту в конструировании и производстве ПЭВМ. Из-за такой непродуманности для использования памяти за пределами 640 Кбайт (общей, стандартной), пришлось разрабатывать дополнительные компоненты к MS DOS и оболочкам Windows (до Windows 95).

Функция управления памятью обычно возлагается на операционную систему. Что касается DOS, то в нее непосредственно встроены только минимальные средства по управлению памятью. Другие же средства реализованы как внешние драйверы, и поэтому пользователь должен подключать их к системе явно.

Структура памяти. Адресное пространство IBM - совместимых ПК в реальном режиме логически делится на три области:

- область стандартной памяти (СМА - Conventional Memory Area);

- область верхней памяти (UMA - Upper Memory Area);

- область расширенной памяти (XMA - eXtended Memory Area).

СМА имеет диапазон адресов от 0 до 640 Кбайт-1 байт. Ее размер равен 640 Кбайт. В ней логически размещается стандартная память (convertional memory), всегда имеющаяся в ПК. Ее часто называют обычной памятью DOS.

UMA находится в диапазоне адресов от 640 Кбайт до 1 Мбайта-1 байт, ее размер равен 384 Кбайт. В этой области логически содержится вход в видеопамять и постоянная память с BIOS, а также могут размещаться дополнительные модули постоянной и оперативной памяти, конструктивно находящиеся в адаптерах периферийных устройств (ПУ). В настоящее время реально используется лишь небольшая часть UMA, которую по-другому называют резервной (точнее было бы говорить, зарезервированной) памятью или областью старших адресов DOS. Незадействованная память может состоять из одной или нескольких частей. Эти части верхней памяти называют блоками верхней памяти (Upper Memory Blocks - UMBs).

XMA располагается в интервале адресов от 1 Мбайта до UB-1 байт, где UB - количество байтов в адресном пространстве микропроцессора (или самого ПК). Для процессоров 8088/86 UB равно 1М (поэтому XMA ими не поддерживается), для изделий 80286 и 80386SX оно составляет 16 Мбайт, а для процессоров 80386DX и выше - 4 Гбайта.

Сама DOS, без дополнительных драйверов, способна адресовать только 1 Мбайт адресного пространства. Это, скорее, недостаток не самой DOS, а того микропроцессора (8088/86), для которого она была первоначально разработана. Более современные микропроцессоры при работе в среде DOS вынуждены имитировать (эмулировать) процессор 8088/86 со всеми присущими ему ограничениями. Такой режим работы называется реальным. Другой же, защищенный, режим, использует все возможности современных микропроцессоров (особенно возможность адресации всей имеющейся памяти), но методом сегментно-страничной организации, рассмотренной позже.

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

Стандартная память распределяется блоками. Блоком памяти называется ее непрерывный фрагмент, выделяемый для хранения загружаемой на выполнение программы или данных во время ее выполнения. Первые 16 байтов каждого блока памяти отводятся под блок управления памятью (MCB - Memory Control Block). MCB описывает размер блока памяти и указывает владельца (программу, которой выделен этот блок), а также (косвенно) обеспечивает связь со следующим блоком памяти.

Каждый МСВ размещается перед занятым параграфом, в частности непосредственно перед PSP. MCB занимает 16 байтов или один параграф. Все МСВ связаны в цепочку. В MS DOS имеется "якорь" на первый МСВ. Последующий МСВ находится путем смещения на размер текущего блока + длина МСВ (1 параграф). Структура МСВ показана в табл.5.2.

Таблица 5.2

Смещение Длина Содержание
    Статус: ‘M’=4Dh - за этим блоком есть еще блоки памяти; ‘Z’=5Ah - данный блок последний.
    Сегментный указатель на PSP, которому принадлежит блок. Если блок свободный, то в этом поле ставится ноль.
    Число параграфов в блоке.
    Резерв

 

Когда DOS запускает программу, система сначала выделяет блок памяти для копии своего окружения (Environment), которая передается программе, а затем - весь остаток памяти для самой программы.

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

Функции DOS управления памятью. DOS обеспечивает возможность динамического управления стандартной памятью для размещения информационных объектов выполняемой программы. Программа может запросить:

- определение размера наибольшего блока, который можно выделить программе;

- выделение блока памяти заданного размера;

- освобождение блока памяти;

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

Освобождение части памяти, занятой блоком, или расширение блока памяти осуществляется функцией DOS 4Ah.

После того, как излишняя память освобождена и взята под управление MS DOS, ею можно пользоваться через функции динамического распределения памяти: 48h - дать память и 49h - освободить распределенный блок памяти.

Чтобы узнать наибольший доступный размер памяти, запрашивают объем памяти, который наверняка не может быть обеспечен. В этом случае функция закончится с ошибкой, но она возвратит максимальный размер доступной памяти.

Функция 49h освобождает память целиком от блока.

Верхняя память. Как уже говорилось, в UMA обычно остаются "дыры". Память, находящаяся по адресам "дыр" в UMA, называется верхней (upper memory) или UMB - памятью (Upper Memory Blocks - блоки верхней памяти). Очевидно, верхняя память состоит из нескольких фрагментов, называемых регионами.

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

Верхняя память выделяется блоками. Блок не может быть больше региона, в котором он формируется. В любом регионе может быть создано несколько блоков.

Некоторые функции управления верхней памятью реализует HIMEM.SYS. Если этот драйвер подключен к системе, то можно считать, что имеется область адресного пространства микропроцессора, охватывающая диапазон адресов от 1 Мбайта до 1 Мбайта+64 Кбайт-17 байт, и называемая областью высокой памяти (HMA - High Memory Area).

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

Однако всеобъемлющая поддержка верхней памяти осуществляется в DOS не этим, а другим драйвером EMM386.EXE или QEMM386.

Расширенная память. ПК с микропроцессорами не ниже 80286 могут адресовать память емкостью, существенно превышающей 640 Кбайт. Для более полного использования расширенной памяти фирмой Microsoft совместно с фирмами Lotus, Intel и AST предложена спецификация расширенной памяти (XMS - eXtented Memory Specification). Эта спецификация определяет правила доступа как к самой расширенной памяти, так и к верхней памяти, за счет нее создаваемой.

Программный драйвер, реализующий спецификацию XMS, позволяет пересылать данные из стандартной памяти в расширенную и обратно. Размещение выполняемых программ в расширенной памяти данной спецификацией не предусматривается. Такой драйвер называется администратором расширенной памяти (XMM - eXtended Memory Manager). Одним из наиболее известных XMM является драйвер HIMEM.SYS.

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

Выделение расширенной памяти осуществляется блоками (EMB - Extended Memory Block) и по специальному запросу от программ. Автоматически расширенная память программам также не предоставляется. Программа, запросившая блок расширенной памяти, получает в свое распоряжение обработчик и пользуется им при доступе к блоку памяти.

Чтобы обеспечить поддержку полной структуры памяти на ПК с микропроцессором 80386, 80486 или Pentium, требуется подключить к системе драйверы HIMEM.SYS и EMM386.EXE с ключом RAM.

Драйвер HIMEM.SYS. Драйвер HIMEM.SYS предназначен для управления расширенной и высокой памятью. Он выполняет две основные функции:

- обеспечивает доступ выполняемых программ к расширенной памяти в соответствии со спецификацией XMS и реализует другие функции по управлению ею;

- формирует высокую память и управляет ею.

Таким образом, драйвер HIMEM.SYS - это ХММ, обеспечивающий бесконфликтное совместное использование расширенной памяти несколькими программами и драйверами так, чтобы никакие из них не смогли одновременно задействовать в своих целях один и тот же фрагмент (блок).

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

Драйвер EMM386.EXE. Драйвер EMM386.EXE предназначен для управления верхней памятью. Он реализует две основные функции:

- эмуляцию отображаемой памяти (такая память на современных моделях не используется, она полностью заменена расширенной памятью);

- формирование верхней памяти и управление ею.

Обмен с памятью использует окна в XMS-памяти.

Он способен сам осуществить сканирование UMA с целью поиска "дыр" под окно.


Дата добавления: 2015-10-02; просмотров: 69 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Виртуальная память| Страничная организация памяти

mybiblioteka.su - 2015-2024 год. (0.014 сек.)