Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_2.DOC
Скачиваний:
13
Добавлен:
02.05.2019
Размер:
689.66 Кб
Скачать

1.9.Управление памятью

DOS, как и любая другая операционная система, имеет средства управления основной памятью компьютера. В состав основной памяти обычно входят оперативная память (RAM — память с произвольным доступом) и постоянная память (ROM — память только для чтения). Оперативная память предназначена для чтения/записи и хранения данных в процессе работы ЭВМ, в частности, для загрузки и хранения выполнимой програмы, а постоянная память — для долговременного хранения данных и чтения этих данных. Техническая реализация как оперативной, так и постоянной памяти может различаться. Многие из устройств расширения имеют собственную оперативную или постоянную память.

Процессор получает доступ ко всем видам оперативной и постоянной памяти с помощью адресной шины. Разрядность шины определяет величину адресного пространства компьютера, которое, в свою очередь, ограничивает объем используемой основной памяти. Процессор в реальном режиме работы использует для обращения к памяти 20-разрядную адресную шину (линии А0 – А19), что определяет максимальный объем используемой памяти, равный 220 = 1 048 576 байт = 1  Мб. Согласно спецификации IBM одна часть этого одномегабайтного пространства отводится для доступа к оперативной и постоянной памяти компьютера, а вторая часть — для видеопамяти, постоянной памяти компонентов компьютера и областей для специального использования (от 640 Кб до 1 Мб). Первая часть простанства располагается в диапазоне адресов от 0 до 640 Кб (не включительно); она получила название обычной или стандартной (conventional) памяти. Вторая часть в диапазоне адресов от 640 Кб до 1 Мб (не включительно) складывается из нескольких блоков, обеспечивающих доступ к различным видам памяти устройств и образующих т. н. верхние блоки памяти (UMB).

      1. Обычная память

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

В DOS имеется 3 функции управления обычной памятью: выделение блока памяти, изменение размера блока памяти и освобождение блока памяти. Эти функции, так же, как и функции для работы с файлами, в случае ошибки устанавливают флаг CF и возвращают в АХ код ошибки (см. табл. 5).

Функция DOS 48h — Выделить память

Ввод: АН = 48h

ВХ = размер блока в 16-байтных параграфах

Вывод: CF = 0, если блок выделен, при этом:

АХ = сегментный адрес выделенного блока

CF = 1, если произошла ошибка, при этом АХ = код ошибки:

АХ = 7 — блоки управления памятью разрушены

АХ = 8 — недостаточно памяти, при этом:

ВХ = размер максимального доступного блока

Вызвав эту функцию со значением ВХ, равным FFFFh, можно определить размер самого большого доступного блока памяти (вернется в ВХ).

Если процесс запросил и получил память, он становится владельцем выделенного блока (адрес владельца блока хранится в MCB соответствущего блока).

Функция DOS 49h — Освободить память

Ввод: АН = 49h

ES = сегментный адрес освобождаемого блока

Вывод: CF = 0, если блок освобожден

CF = 1, АХ = код ошибки (7 или 9, если в ES содержится неверный адрес)

Процесс может освобождать только те блоки памяти, для которых он является владельцем.

Функция DOS 4Ah — Изменить размер блока памяти

Ввод: АН = 4Ah

ВХ = новый размер в 16-байтных параграфах

ES = сегментный адрес модифицируемого блока

Вывод: CF = 0, если размер блока изменен

CF = 1: AX = код ошибки (7, 8 или 9), причем при АХ = 8:

ВХ = максимальный размер, доступный для этого блока

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

При запуске как СОМ-, так и ЕХЕ-программы загрузчик DOS выделяет этой программе самый боль­шой доступный блок памяти. ЕХЕ-программа может организовывать в этом блоке сегменты и использовать память по своему усмотрению. DOS является однозадачной системой, поэтому выполняющаяся DOS-программа обычно «считает себя» единственным пользователем ресурсов компьютера, в том числе памяти, и использует функции управления памятью достаточно редко. Однако если после запуска программы предполагается функционирование каких-либо других программ, для них не окажется свободной памяти. В таких условиях запущенная программа должна сократить выделенный ей блок памяти до миниму­ма, чтобы освободить память для работы других программ, а уже в дальнейшем запрашивать и освобождать память при необходимости.

В MS-DOS версии 5.0 и выше с помощью этих же трех функций можно управлять памятью в областях UMB. Однако для этого требуется сначала подключить области UMB к менеджеру памяти (например, EMM386) и изменить стратегию выделения памяти с помощью функции DOS 58h.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]