Модель памяти FLAT
Схема преобразования адресов процессора i386 и процессоров старших моделей позволяет работать с сегментами очень большого размера - порядка 4 Гбайт. Это намного больше, чем нужно для программирования в среде IBM OS/2 Warp (хотя, кто знает - может быть скоро программисты будут работать с Гбайтными блоками оперативной памяти, ведь во времена процессора i8080 память размером 1 Мбайт считалась очень большой).
В результате можно полностью отказаться от использования сегментированной модели памяти, навязанной Intel в процессоре 8086 и во всех последующих процессорах этой серии для совместимости с теперь уже музейным экспонатом - процессором 8080.
Как это сделать?
Очень просто - достаточно установить базовый адрес, получаемый с помощью сегментных регистров процессора, равным нулю. После этого, одним только изменением 32-разрядного смещения можно адресовать любую область памяти. Заметим, что операционная система по-прежнему может ограничивать размер сегмента, останавливая работу программы, которая по ошибке или намеренно пытается адресовать память за пределами выделенного ей сегмента.
Соответствующая модель памяти называется моделью FLAT или сплошной (несегментированной) моделью памяти.
Эта модель памяти чем-то напоминает модели памяти TINY и SMALL , где для адресации данных и подпрограмм было достаточно указать компоненту смещения. Отличие, однако, заключается в том, что при использовании модели памяти FLAT процессор работает в защищенном режиме и размер сегментов может значительно превосходить 64 Кбайт.
Таким образом, составляя 32-разрядные программы для IBM OS/2 Warp программист может забыть про селекторы, сегментные регистры, модификаторы near и far . Содержимым сегментных регистров управляет операционная система, поэтому у программиста нет необходимости их загружать. Более того, ему категорически запрещено это делать.
В состав программного интерфейса IBM OS/2 входят многочисленные функции, с помощью которых приложение может получать блоки памяти нужного размера и с нужными характеристиками. Подробное описание этих функций будет приведено в главе, посвященной системе управления памятью.