Управление памятью в DOS
Как известно, система DOS изначально была рассчитана на реальный режим работы процессоров i8086 и i8088. Именно эти процессоры были использованы в первом компьютере IBM PC.
В реальном режиме работы программы адресовались непосредственно к физической памяти, используя двухкомпонентный адрес, состоящий из сегмента и смещения. Как сегмент , так и смещение имели разрядность 16 бит.
Для вычисления физического адреса использовалась простая схема: сегментная компонента сдвигалась влево на 4 бита с заполнением младших бит нулями, а затем к 20-разрядному результату добавлялась 16-разрядное смещение (рис. 1.8).
Рис. 1.8. Адресация памяти в реальном режиме
Схема адресации памяти реального режима имеет много недостатков. Прежде всего, любая программа могла обратиться для чтения или записи в любую область оперативной памяти. Например, она могла разрушить таблицу векторов прерываний или операционную систему. Размер сегмента памяти не превышал 64 Кбайт, что создавало дополнительные трудности при адресации объектов данных большого размера.
Для облегчения программирования предлагалось использовать различные модели памяти, а также ближние и дальние указатели, ближние и дальние функции.
Программа обращалась к DOS для выделения блока памяти заданного размера, однако ничто не мешало ей выполнить запись за пределами выделенного блока памяти. Поэтому система управления памятью DOS существовала лишь номинально, фактически программы должны были сами внимательно следить за использованием памяти.