Язык программирования Ассемблер, страница 3

Биты 12 – 18 характеризуют состояние микропроцессора и при работе программ в непривилегированном режиме использоваться не могут. Эти флаги используются для управления микропроцессором. Подробное описание работы данных флагов не входит в задачу данного курса.

Для установки битов регистра флагов следует использовать команды работы с битами (см. ниже). С этой целью необходимо перегрузить содержимое регистра флагов в регистр EAX, затем провести модификацию нужных битов и после этого вернуть содержимое регистра EAX в регистр EFLAGS.

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

3)  Управление памятью PC.

Рассмотрим ограничения, Которые возникают при работе с MS DOS, являющейся базовой операционной системой PC:

I)  АДРЕСУЕМОСТЬ ПАМЯТИ. Хотя в PC AT на основе процессоров 80286 или 80386 можно адресовать до 16МВ памяти, т.к. в них адресный регистр содержит 24 бита, но MS DOS позволяет уверенно работать с единым сегментом длиной не более 1МВ, из которых для пользователя доступно не более 590КВ. Лишь специально созданные пакеты (например, VDISK) обеспечивали работу со всей памятью. Это приведет к существенному ограничению в возможностях разработки больших прикладных программ.

II)  СТАТИЧЕСКОЕ УПРАВЛЕНИЕ ПАМЯТЬЮ. Процессор 8088 не обеспечивает достаточно широкую помощь в управлении памятью со стороны ОС, т.к. в нем обеспечено лишь непосредственное (прямое) управление оперативной памятью (ОЗУ). Этот процессор не способен «перемещать» память прикладной задачи. Начав работу, прикладная задача монополизирует для себя ОЗУ. Если же запускается одновременно несколько прикладных задач, то временно расширять свою память они не могут. Все выделения памяти необходимо проводить статически до начала выполнения запускаемого прикладного пакета. Динамическое управление памятью возможно лишь при специальной организации управления памятью в конкретном пакете.

III)  ЦЕЛОСТНОСТЬ ПАМЯТИ.В процессоре 8088 все 640КВ в ОЗУ рассматриваются как единый непрерывный кусок, в котором нет различий между командами ОС и командами прикладной программы. Т.о. простая программная ошибка способна разрушить всю систему. Когда же нарастает число одновременно работающих прикладных программ, то одновременно нарастает и вероятность конфликтов по памяти, особенно если будут использоваться модули .EXE, полученные на другой машине. Необходимо подчеркнуть, что такого рода ошибки просто невозможно диагностировать. Надежный единственный способ их исправления – переработка ОС под мультипрограммные системы.

IV)  КОНТРОЛЬ I/O. В отношении управления вводом/выводом (I/O) MS DOS скорее «консультант», чем «контролер». Однако процессор 8088 дает привилегию всем операциям I/O, т.е. любая прикладная программа может непосредственно модифицировать состояние любого устройства. Более того, процессор в режиме прикладной задачи может маскировать систему прерываний на неопределенное время. Хотя в ряде случаев это и обеспечивает большую скорость взаимосвязи с периферией, позволило создать ряд интересных прикладных пакетов, но при неосторожном обращении может привести к потере сообщений о внешних событиях (например, к потере сигнала от таймера).

V)  MULTITASKING. MS DOS – моно программная система. Однако прикладная программа может нуждаться в одновременном  выполнении нескольких действий. Такого рода совмещение разработчик может выполнить непосредственно в своей программе, например, используя сигналы от таймера для переключения используемых подзадач. Однако проблема усложняется, если подзадачи используют сервисы OS, которые могут быть не реентерабельными и потому может произойти «срыв», если в момент запроса такой сервис обслуживает другую подзадачу. Отсюда необходимость введения достаточно сложного механизма регулирования в прикладные пакеты, использующие принципы мультипрограммирования. Еще больше проблем появляется при использовании «перекрывающихся I/O», когда одна задача читает информацию с диска, а другая в этот момент пишет на него. В таком случае единственная возможность – это выдать сообщение о невозможности одновременного использования таких программ (это происходит при попытке использовать сетевой сервер с некоторыми версиями программы TOPVIEW). Другая проблема для мультипрограммирования – отсутствие в системах 8088 виртуальной памяти.

VI)  РАСШИРЯЕМОСТЬ СИСТЕМЫ. По сути дела MS DOS использует только программные прерывания, а процессор лишь ассистирует им, т.к. выдается команда INTx и процессор переходит по адресу соответствующего обработчика прерываний. После выполнения соответствующих действий MS DOS выдает команду IRET (Interrupt RETurn) и управление передается следующей за инструкцией INTx команде. Т.к. система защиты информации отсутствует, то это можно выполнить и другими способами. Эта гибкость, как мы уже говорили, позволила создать ряд интересных прикладных пакетов. Однако, если в системе используется одновременно несколько программ, то имеется вероятность одновременного обращения к одному и тому же вектору прерываний, что делает результат непредсказуемым.

Желание исправить указанные недостатки и постоянно возникающее со стороны пользователей требование к расширению возможностей PC до уровня workstation отразилось в разработке новых моделей процессоров (i80286 и всех последующих моделей) и обслуживающих их OS. Однако, необходимо подчеркнуть, что все эти модели имеют полностью совместимые системы инструкций с моделью i8088, но содержат архитектурные расширения для обеспечения управления памятью большого объема, для управления мультипрограммированием и для защиты I/O.

Начиная с i80286, все процессоры используют 2 режима адресации:

-  РЕАЛЬНЫЙ РЕЖИМ. Это режим адресации процессора Intel8086, в котором может быть адресовано лишь 1МБ оперативной памяти (ОЗУ), т.к. длина адресного регистра 20 бит. В этом режиме адрес сегмента (содержимое регистра CS, DS или SS) поставляются в начальные биты адресного регистра (биты с 0 по 15). Сдвиг же внутри сегмента (регистры IP, BX, DX или SP) поставляются в 4 – 20 биты адресного регистра, что позволяет адресовать сдвиги в различных сегментах с разницей в 16 байт. Отметим, что в этом режиме процессор не участвует в обеспечении защиты памяти, а также в работе ввода/вывода  (это мы уже отмечали выше). В процессорах i486 и более высоких моделей защищенный режим моделируется путем установки бита VM в слове состояния. Установку бита VM автоматически выполняют  операционные системы, такие как Window2000 при работе с небольшими программами (у которых выполнимый модуль не превышает 1МБ). Разработчики отмечают, что использование виртуального режима ускоряют выполнение программы.

-  ЗАЩИЩЕННЫЙ РЕЖИМ (protected mode). В этом режиме реализуются особенности новых процессоров. В этом режиме модель памяти расширяется путем «виртуализации» содержимого регистров сегментов. При этом регистры сегмента содержат не физический адрес сегмента, а лишь его логическую основу (handle), представляющий собой некоторое месторасположение в памяти, и называется селектор. ЦП связывает любой селектор с некоторой структурой данных, называемой дескриптор сегмента, где и содержится все описание сегмента (в частности, для компьютеров i486 и более мощных адресный регистр, длиной 48 бит). Дескрипторы объединяются в дескрипторную таблицу, начальный адрес которой известен ЦП. СЕЛЕКТОР же – это ИНДЕКС (смещение, offset) входа в таблицу.

Рассмотрим содержание таблицы дескрипторов:

-  базовый адрес сегмента (для i486 и старших моделей длиной 48 бит).

-  размер сегмента (слово в 4 байта).

-  Права доступа (8 бит, право на запись, на чтение и на исполнение).

-  DPL – уровень привилегии сегмента, который позволяет ОС

                установить, какая программа может работать с данным

                сегментом, закрыть некоторые программы и данные

                (например, в ядре ОС).

-  executable – индикатор код / данные.

-  conform – согласованный или нет индикатор (показывает, что сегмент

                       доступен для уровней, указанных в DPL или для более

                       высоких.

-  Read/Write – позволяет закрыть коды или данные типа “READ ONLY”.

-  Accessed – загружается при каждой загрузке селектора и используется

                        ОС, чтобы обеспечивать работу алгоритма “least-recently

                         used ” (LRU), которым обеспечивается свопинг памяти.

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