Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Операционные системы. Часть 2. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
121
тупно процессору только в режиме обработки SMI4. Память SMRAM может представлять собой часть физической оператив-
ной памяти DRAM (Dynamic Random Access Memory), а может быть реализована и специальной микросхемой энергонезависи­мой памяти, размер которой варьируется в диапазоне от 32 Кбайт (минимальные потребности SMM) до 4 Гбайт. SMRAM располагается, начиная с адреса SMIBASE (по умолчанию 30000h), и распределяется относительно адреса SMIBASE сле­дующим образом [7]:
– область сохранения контекста FE00h-FFFFh (3FE00h-3FFFFh) — начиная со старших адресов по направлению к младшим. По
прерыванию SMI сохраняются почти все регистры процессора, но сохранение регистров устройства с плавающей точкой не производится;
– точка входа в обработчик (SMI Handler) — 8000h (38000h); – свободная область — 0-7FFFh (30000h-37FFFh).
Память SMRAM должна быть схемотехнически защищена от доступа прикладных программ. Процессор генерирует специ­альный выходной сигнал SMIACT# во время обработки SMI, который и должен являться «ключом» доступа к этой памяти. Ес­ли SMRAM не является энергонезависимой, то системная логика должна обеспечить возможность ее инициализации (записи про­граммного кода обработчика) процессором из обычного режима работы до разрешения появления сигнала SMI#.
2.3.5. Режим Virtual-86
Процессоры архитектуры Intel (начиная с i386) предостав­ляют два способа для запуска программ, созданных для i8086 процессора:
– Реальный режим. – Virtual-8086 режим.
Virtual-8086 режим является специальным типом задачи,
которая запускается в защищенном режиме. Когда операцион­ная система переключается в Virtual-8086 задачу, процессор
4
SMI# (System Management Interrupt). В режим SMM процессор может войти только
по сигналу на входе SMI#. Сигнал SMI# для процессора является немаскируемым пре­рыванием с наивысшим приоритетом.
эмулирует i8086 процессор. Среда выполнения процессора во время состояния эмуляции такая же, как в реальном режиме. Основное различие между двумя режимами — это то, что в Virtual-8086 режиме эмулятор использует некоторые сервисы защищенного режима.
Включение Virtual-8086 режима. Процессор работает в Virtual-8086 режиме, когда VM флаг в регистре EFLAGS уста-
новлен. Этот флаг может быть установлен, когда процессор пе­реключается в новую задачу или возвращается в Virtual-8086 режим после IRET инструкции.
Программное обеспечение не может изменить состояние VM флага непосредственно в регистре EFLAGS. Вместо этого оно изменяет этот флаг в имидже регистра EFLAGS, хранимом в TSS или в стеке, перед выполнением инструкции IRET.
Структура Virtual-8086 задачи. Virtual-8086 задача состоит
из следующих элементов [7]:
– 32-битовый TSS для задачи. – 8086 программа. – Virtual-8086 монитор. – Сервисы 8086 операционной системы.
TSS новой задачи должен быть 32-битовым, так как 16-
битовый TSS не содержит старших битов регистра EFLAGS. Процессор входит в virtual-8086 режим для запуска 8086 про­граммы и возвращается в защищенный режим для запуска virtu-
al-8086 монитора.
Virtual-8086 монитор – это 32-битовый код защищенного
режима, который выполняется на CPL=0. Монитор состоит из инициализации, обработчиков прерываний и исключений, про­цедур эмуляции ввода/вывода.
Транслирование страниц в Virtual-8086 задачах. Так как программа, запущенная в virtual-8086 режиме, может ис­пользовать только 20-битовые линейные адреса, то необходимо, чтобы процессор преобразовывал эти адреса в 32-битовые перед отображением их в физические.
Трансляция страниц может не использоваться для одной virtual-8086 задачи, однако трансляция страниц полезна или не­обходима в следующих ситуациях [7]:
122
– Когда запускаются несколько Virtual-8086 задач. Трансля-
ция страниц позволяет отобразить нижние 1 Мб на разные уча­стки физической памяти.
– При эмуляции отображения 64 Кб за 1 Мб на первые 64Кб. – При разделении сервисов i8086 операционной системы и кода ПЗУ, общих для всех программ i8086. – При перенаправлении или отлавливании ссылок на устрой­ства ввода/вывода отображаемых в память.
Выход из Virtual-8086 режима. Процессор может выйти из virtual-8086 режима только через прерывание или исключе­ние. Далее приводятся ситуации, в которых прерывание или ис­ключение приведет к выходу из virtual-8086 режима [7]: – Процессор обслуживает аппаратные прерывания, приоста­навливая выполнение 8086 приложения. При приеме аппаратно­го прерывания процессор переключается в защищенный режим и либо переключается на задачу, либо передает управление че­рез шлюз прерывания или ловушки.
– Процессор обслуживает исключения, вызванные кодом Virtual-8086 задачи, или обслуживает прерывания, принадлежа­щие этой задаче. – Процессор обслуживает программные прерывания, генери­руемые кодом virtual-8086 задачи (такие, как прерывания MS DOS). – Аппаратный сброс, инициированный через ножки процес-
сора RESET или INIT, является специальным типом прерыва­ния. При сигналах RESER или INIT процессор переключается в реальный режим. – Запуск команды HLT в virtual-8086 режиме вызовет преры­вание основной защиты.
Обработка прерываний и исключений в virtual-8086 режиме. При генерации прерывания или исключения процессор
переключается в защищенный режим и выполняет переход на обработчик защищенного режима. При завершении обработки прерывания процессор возвращает управление назад в 8086­программу. Обработчик прерывания может сам выполнить весь сервис, а может отразить его назад в virtual-8086 задачу для вы­полнения.
123
Начиная с процессоров Pentium, предоставляются допол­нительные возможности, такие, как вызов обработчиков напря­мую, как в реальном режиме, поддержка виртуальных прерыва­ний и т.д.
124
2.4. Управление памятью в ОС Windows
2.4.1. Использование отладчиков
В состав различных операционных систем и сред разра­ботки программного обеспечения входят программы-отладчики. Эти программы позволяют анализировать и оценивать состоя­ние аппаратных и программных средств компьютера в различ­ных стадиях вычислительного процесса. Динамика измерения состояний ресурсов может отслеживаться в пошаговом режиме.
В операционной системе MS DOS таким отладчиком яв­лялась программа Debug, в последних версиях ОС Windows та­кой программой является Ntsd.exe. Программа Debug использу­ется для однопрограммных однопользовательских режимов ра­боты и 16-разрядных приложений. Программа Ntsd.exe предна­значена для работы в многопрограммном многопользователь­ском режиме работы вычислительной системы с 32-разрядными приложениями.
Вызов Debug можно выполнить в командной строке (рис.
2.7). После чего компьютер переходит в режим эмуляции MS DOS (Virtual-8086).
Рис. 2.7. Вызов Debug
Программа вызывается и размещается в памяти компью­тера, начиная с ячейки 100h. Знак «–» является приглашением к вводу команд. Список всех команд можно получить, если в строке приглашения набрать вопросительный знак (рис. 2.8).
125
Рис. 2.8. Вызов списка команд в Debug
Например, команда R предоставляет информацию о теку­щем состоянии всех программно доступных регистров компью­тера (рис.2.9).
Рис. 2.9. Вызов информации по регистрам в Debug
На рисунке 2.9. во второй строке после регистра IP пред­ставлены мнемонические значения разрядов регистра FLAGS, разряды которого используются для ветвления вычислительного процесса. На третьей строке содержится указание об очередной подготовленной для выполнения команде: адрес команды в па­мяти, шестнадцатеричный код представления команды и мне­монический код команды.
С помощью команды Debug можно также просмотреть дамп (диапазон) памяти. Например, набираем команду: D 40:13 (рис. 2.10), что соответствует адресу 0040:0013. Первые знача­щие нули адреса при наборе можно отбросить.
126
Рис. 2.10. Просмотр дампа памяти в Debug
В каждой строке текста содержатся адреса 16 байтов, их шестнадцатеричное и символьное представление в коде ASCII. По набранному адресу в двух байтах в MS DOS содержится ин­формация об объеме основной памяти. Необходимо помнить об
LH-порядке следования байт. То есть полученные значения 80 и 02 меняем местами. Получается объем основной памяти, рав-
ный 0280h Кбайт, что в десятичном представлении соответству­ет 640 Кбайт.
В рассматриваемой программе имеется также возмож­ность для ввода ассемблерных программ в память компьютера и перевода их в машинный код. Введем команду: A 100.
По ней будет установлен начальный адрес в виде xxxx:0100 (xxxx означает произвольное значение регистра CS). После этого можно вводить покомандно всю программу, напри­мер:
XXXX:0100 MOV AL,20
XXXX:0102 MOV BL,16
XXXX:0104 SUB AL,BL
XXXX:0106 RET
По окончанию ввода нужно еще раз нажать клавишу Enter и операция ввода будет прекращена (рис. 2.11).
Рис. 2.11. Ввод ассемблерной программы в Debug
Введем команду дисассемблирования: U 0100,0106, где 100 и 106 обозначают начальный и конечный адреса фрагмента программы, подлежащего переводу в машинный код. На рисун­ке 2.12 представлен результат выполнения введенной команды.
127
Рис. 2.12. Дисассемблирование программы в Debug
Подводя итог, сделаем вывод, что с помощью программы Debug можно рассматривать не только дамп памяти, но также
соответствие ассемблерных и машинных кодов команд про­граммы.
2.4.2. Получение общей информации об использовании памяти
Диспетчер задач Windows позволяет просматривать общее использование памяти на вкладке Быстродействие (рис.
1.12). Здесь к информации о памяти относятся три раздела:
1. Выделение памяти.
2. Физическая память.
3. Память ядра.
В первом разделе содержится три статистических пара­метра виртуальной памяти. Параметр «Всего» — это общий объем виртуальной памяти, используемой как приложениями, так и операционной системой. Параметр «Предел» — это объем доступной виртуальной памяти. И, наконец, параметр «Пик» — наибольший объем памяти, использованный в течение сессии с момента последней загрузки.
Во втором разделе содержатся параметры, несущие ин­формацию о текущем состоянии физической памяти машины. Эта статистика не имеет никакого отношения к файлу подкачки, следовательно, может являться хорошим индикатором ситуа­ций, когда его увеличение не даст эффекта. Параметр «Всего» — это объем памяти, обнаруженный операционной системой на компьютере. Параметр «Доступно» отражает память, доступную для использования процессами. Эта величина не включает в се­бя память, доступную приложениям за счет файла подкачки. Каждое приложение требует определенного объема физической памяти и не может использовать только ресурсы файла подкач­ки. Параметр «Системный кэш» сообщает объем, доступный кэш-памяти системы. Это объем физической памяти, оставлен­ный операционной системой после удовлетворения своих по­требностей.
В третьем разделе отображается информация о потреб­ностях компонентов операционной системы, обладающих наи­высшим приоритетом. Эти компоненты обычно работают с сер­висом низкого уровня, типа прямого доступа к жесткому диску.
128
Параметры «Память ядра» отображают потребности ключевых служб операционной системы. Параметр «Всего» — это объем виртуальной памяти, необходимой операционной системе. Па­раметр «Выгружаемая» несет информацию об общем объеме памяти, использованной системой за счет файла подкачки. Па­раметр «Невыгружаемая» — объем физической памяти, потреб­ляемой операционной системой.
Все приведенные параметры относятся лишь к привилеги­рованным службам, а не ко всему сервису системы в целом. Многие компоненты ОС работают как приложения. В большин­стве случаев параметры вкладки «Память ядра» должны оста­ваться без изменений, если не меняется что-либо в ядре опера­ционной системы (например, устанавливается новое устройство в компьютер).
С помощью «Диспетчера задач» можно также узнать объемы памяти, используемые процессами. Для этого нужно
перейти на вкладку Процессы, которая показывает список ис­полняемых процессов и занимаемую ими память, в том числе физическую память, пиковое, максимальное, использование па­мяти и виртуальную память.
Однако конкретное размещение процесса в виртуальной памяти с помощью «Диспетчера задач» узнать невозможно, нельзя также увидеть свободные, занятые страницы и блоки па­мяти, их размер и атрибуты защиты.
Информация, которую способен вывести «Диспетчер за­дач», не является полной. В ряде случаев ее достаточно для оп­тимизации системы, но есть несколько ограничений, характер­ных для «Диспетчера задач» [13]:
1. Список процессов не полон. В окне «Диспетчера задач» представлены только процессы, зарегистрированные в Windows. В частности, в этот список не включаются драйверы устройств и некоторые системные службы.
2. Требования к памяти отражают текущее состояние процесса. В списке отражены объемы памяти, занимаемые приложениями в текущий момент времени, а не их максимальные значения.
3. Отсутствуют статистические данные. Поскольку в «Диспет- чере задач» не выводятся временные характеристики, а только
129
мгновенная картина потребления памяти, нет возможности от­следить ее изменение.
Более обширную информацию по сравнению с Диспетче­ром задач можно получить утилитой TaskList (рис.2.13).
Рис. 2.13. Запуск утилиты TaskList в окне командной строки
Получить информацию по возможностям утилиты
TaskList можно так же, как и по любой команде, используемой в CMD (рис. 2.14).
130
Рис. 2.14. Вызов помощи по утилите TaskList