Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционные системы. Часть 2. Учебное пособие
.pdf
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
