Это и есть многозадачность. Конечно, можно написать программу, которая будет совмещать в себе обе функции и, следовательно, монопольно владеть всеми ресурсами. Однако на практике это не делается, т.к.' операционные системы и специальные расширители ДОС, работающие в защищенном режиме, берут на себя массу черновой работы, избавляя программиста от множества ненужных хлопот.
Таким образом, важной отличительной особенностью защищенного режима является то, что прикладная программа уже не владеет всеми ресурсами процессора монопольно, как это было в реальном режиме. В частности, чтобы обратиться к тому или иному порту ввода/вывода или получить в свое распоряжение память, она должна обратиться к ядру операционной системы.
Как уже отмечалось, среда ВР готовит программы для работы под управлением трех типов операционных систем: Windows, MS-DOS и так называемого расширителя ДОС. Последний представляет собой набор программ, обеспечивающих интерфейс высокого уровня для программы, работающей в защищенном режиме.
8.2.3. Виртуальная память и перемещение сегментов
В описывающих сегменты дескрипторах имеется признак того, находится ли сегмент в данный момент в оперативной памяти. Если программа обращается к сегменту, который не загружен в память, возникает аппаратное прерывание и управление передается резидентному ядру операционной системы, которая может загрузить образ этого сегмента с диска. Так реализуется механизм виртуальной памяти. Виртуальная память работает подобно оверлею и делает ненужным его использование в защищенном режиме.
При загрузке дискового сегмента ОС проверяет наличие свободного пространства памяти. Если памяти недостаточно, ОС выгружает часть сегментов на диск1 и/или перемещает сегменты так, чтобы освободить требуемый объем. При перемещении сегмента соответствующим образом изменяется связанный с ним дескриптор, однако владеющая сегментом программа обычно не замечает этого изменения, т.к. для доступа к сегменту она использует селектор, указывающий на нужный дескриптор, а содержимое селектора не меняется. Если программа хочет получить доступ к конкретному физическому пространству памяти, она должна предварительно дать знать об этом ОС, которая в этом случае помечает сегмент как неперемещаемый. Такая процедура называется фиксацией сегмента. Фиксация обычно необходима при работе с кучей, т.к. только в этом случае связанный с кучей указатель может использоваться в качестве физического адреса. После завершения обмена данными с сегментом, программа должна снять фиксацию (разблокировать) сегмент, чтобы ОС смогла при необходимости его переместить или выгрузить на диск.
' Выгружаются на диск только сегменты данных. Д?ш сегментов кода вместо выгрузки операционная система помечает сегмент как свободный и использует его пространство для размещения дисковой памяти.