Регистры адреса страниц в диспетчере памяти процессора используются для
Регистр процессора - сверхбыстрая оперативная память внутри процессора, предназначенная прежде всего для хранения промежуточных результатов вычисления.
По типу приёма и выдачи информации различают 2 типа регистров:
- С последовательным приёмом и выдачей информации — сдвиговые регистры.
- С параллельным приёмом и выдачей информации — параллельные регистры.
По назначению регистры различаются на:
- аккумулятор — используется для хранения промежуточных результатов арифметических и логических операций и инструкций ввода-вывода;
- флаговые — хранят признаки результатов арифметических и логических операций;
- общего назначения — хранят операнды арифметических и логических выражений, индексы и адреса;
- индексные — хранят индексы исходных и целевых элементов массива;
- указательные — хранят указатели на специальные области памяти (указатель текущей операции, указатель базы, указатель стека);
- сегментные — хранят адреса и селекторы сегментов памяти;
· управляющие — хранят информацию, управляющую состоянием процессора, а также адреса системных таблиц.
Начиная с 80386 процессоры Intel предоставляют 16 основных регистров для пользовательских программ плюс еще 11 регистров для работы с мультимедийными приложениями (MMX(Multimedia Extension)) и числами с плавающей запятой (FPU/NPX (Float Point Unit / Numerical Processor Extension)). Все команды так или иначе изменяют значения регистров, и всегда быстрее и удобнее обращаться к регистру, чем к памяти.
Из реального (но не из виртуального) режима помимо основных регистров доступны так же регистры управления памятью (GDTR, IDTR, TR, LDTR), регистры управления (CR0, CR1 – CR4), отладочные регистры (DR0 – DR7) и машинно-специфичные регистры, но они не применяются для решения повседневных задач.
Регистры общего назначения.
Остальные четыре регистра – ESI (индекс источника), EDI (индекс приемника), EBP (указатель базы), ESP (указатель стека) - имеют более конкретное назначение и применяются для хранения всевозможных временных переменных. Регистры ESI и EDI необходимы в строковых операциях, EBP и ESP – при работе со стеком. Так же как в случае с регистрами EAX – EDX, младшие половины этих четырех регистров называются SI, DI, BP и SP соответственно, и в процессорах до 80386 только они и присутствовали.
(Регистры общего назначения)
Сегментные регистры.
При использовании сегментированных моделей памяти для формирования любого адреса нужны два числа – адрес начала сегмента и смещение искомого байта относительно этого начала (в бессегментной модели памяти flat адреса начала всех сегментов равны). Операционные системы (кроме DOS) могут размещать сегменты, с которыми работает программа пользователя, в разных местах памяти и даже временно записывать их на диск, если памяти не хватает. Так как сегменты способны оказаться где угодно, программа обращается к ним, применяя вместо настоящего адреса начала сегмента 16-битное число, называемое селектором. В процессорах Intel предусмотрены шесть 16-битных регистров – CS, DS, ES, FS, GS, SS, где хранятся селекторы. Это означает, что в любой момент можно изменить параметры, записанные в этих регистрах.
В отличие от DS, ES, GS, FS, которые называются регистрами сегментов данных, CS и SS отвечают за сегменты двух особенных типов – сегмента кода и сегмент стека. Первый содержит программу, исполняющуюся в данный момент, следовательно, запись нового селектора в этот регистр приводит к тому, что далее будет исполнена не следующая по тексту программы команда, а команда из кода, находящегося в другом сегменте, с тем же смещением. Смещение очередной выполняемой команды всегда хранится в специальном регистре EIP (указатель инструкции, 16-битная форма IP), запись в который также приведет к тому, что далее будет исполнена какая-нибудь другая команда. На самом деле все команды передачи управления – перехода, условного перехода, цикла, вызова подпрограммы и т. п. – и осуществляют эту самую запись в CS и EIP.
Стек.
Стек – организованный специальным образом участок памяти, который используется для временного хранения переменных, передачи параметров вызываемым подпрограммам и сохранения адреса возврата при вызове процедур и прерываний. Легче всего представить стек в виде стопки листов бумаги (это одно из значений слова «stack» в английском языке) – вы можете класть и забирать листы только с вершины стопки. Поэтому, если записать в стек числа 1, 2, 3, то при чтении они окажутся в обратном порядке – 3, 2, 1. Стек располагается в сегменте памяти, описываемом регистром SS, и текущее смещение вершины стека отражено в регистре ESP, причем во время записи значение этого смещения уменьшается, то есть он «растет вниз» от максимально возможного адреса. Такое расположение стека «вверх ногами» может быть необходимым, к примеру, в бессегментной модели памяти, когда все сегменты, включая сегменты стека и кода, занимают одну и туже область – память целиком. Тогда программа исполняется в нижней области памяти, в области малых адресов, и EIP растет, а стек располагается в верхней области памяти, и ESP уменьшается. При вызове подпрограммы параметры в большинстве случаев помешают в стек, а в EBP записывают текущее значение ESP. Если подпрограмма использует стек для хранения локальных переменных, ESP изменится, но EBP можно будет использовать для того, чтобы считывать значения параметров напрямую из стека (их смещения запишутся как EBP + номер параметра).
Регистр флагов.
Еще один важный регистр, использующийся при выполнении большинства команд, - регистр флагов. Его младшие 16 бит, представлявшие собой весь этот регистр до процессора 80386, называются FLAGS. В E FLAGS каждый бит является флагом, то есть устанавливается в 1 при определенных условиях или установка его в 1 изменяет поведение процессора. Все флаги, расположенные в старшем слове регистра, имеют отношение к управлению защищенным режимом, поэтому будем рассматривать только регистр FLAGS.
- CF – флаг переноса. Устанавливается в 1, если результат предыдущей операции не уместился в приемнике и произошел перенос старшего бита или если требуется заем (при вычитании), в противном случае – в 0. Например, после сложения слова 0FFFFh и 1, если регистр, в который надо поместить результат, - слово, в него будет записано 0000h и флаг CF=1.
- PF – флаг четности. Устанавливается в 1, если младший байт результата предыдущей команды содержит четное число битов, равных 1, и в 0, если нечетное. Это не тоже самое, что делимость на два. Число делится на 2 без остатка, если его самый младший бит равен нулю, и не делится, когда он равен 1.
- AF – флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошел перенос (или заем) из третьего бита в четвертый. Этот флаг используется автоматически командами двоично-десятичной коррекции.
- ZF – флаг нуля. Устанавливается в 1, если результат предыдущей команды – ноль.
- SF – флаг знака. Он всегда равен старшему биту результата.
- TF – флаг ловушки. Он был предусмотрен для работы отладчиков, не использующих защищенный режим. Установка его в 1 приводит к тому, что после выполнения каждой программной команды управление временно передается отладчику (вызывается прерывание 1 – описание команды INT).
- IF – флаг прерываний. Сброс этого флага приводит к тому, что процессор перестает обрабатывать прерывания от внешних устройств (описание команды INT). Обычно его сбрасывают на короткое время для выполнения критических участков кода.
- DF – флаг направления. Он контролирует поведения команд обработки строк: когда он установлен в 1, строки обрабатываются в сторону уменьшения адресов, когда DF=0 – наоборот.
- OF – флаг переполнения. Он устанавливается в 1, если результат предыдущей арифметической операции над числами со знаком выходит за допустимые для них пределы. Например, если при сложении двух положительных чисел получается число со старшим битом, равным единице, то есть отрицательное, и наоборот.
Флаги IOPL (уровень привилегий ввода-вывода) и NT (вложенная задача) применяются в защищенном режиме.
12.1. Ввод-вывод по опросу готовности устройства
Готовность или неготовность внешнего устройства к вводу-выводу проверяется в
· регистре состояния внешнего устройства
Для программно-управляемого ввода/вывода по опросу флага готовности характерны:
ü Простота программирования
ü Низкая эффективность использования процессора
ü Простота аппаратной реализации
Для того , чтобы осуществить передачу одного байта данных внешнему устройству в режиме ввода-вывода по опросу флага готовности внешнего устройства, необходимо:
ü Переслать байт в регистр данных внешнего устройства
ü Проверить разряд готовности в регистре состояния внешнего устройства
Каким образом в программным путем можно определить готовность внешнего устройства к обмену информацией?
ü Проверяется состояние соответствующего разряда в регистре состояния внешнего устройства
При передаче массива данных во внешнее устройство в режиме ввода-вывода по опросу флага готовности внешнего устройства контроль количества переданных байтов или слов осуществляет
ü Выполняемая процессором программа
Прием или передача данных осуществляется через
· регистр данных внешнего устройства
Режим ввода-вывода данных по опросу готовности внешнего устройства осуществляется:
ü по инициативе выполняемой процессором программы
ü под управлением выполняемой процессором программы
Состоянием разряда (флага) готовности внешнего устройства в его регистре состояния управляет:
ü внешнее устройство
Что такое регистр данных внешнего устройства?
ü Регистр, находящийся в интерфейсе внешнего устройства, через который осуществляется прием или передача данных
Что такое регистр состояния внешнего устройства?
ü Регистр, находящийся в интерфейсе внешнего устройства, с помощью которого осуществляется проверка готовности внешнего устройства к приему или передаче данных
ü Регистр, находящийся в интерфейсе внешнего устройства, с помощью которого можно разрешить или запретить прерывание внешнему устройству
12.2. Ввод-вывод в режиме прерывания
Адрес возврата из прерывания запоминается
При переходе в режим прерывания процессор запоминает в стеке:
ü Текущее содержимое регистра состояния процессора
ü Текущее содержимое регистра-счетчика команд
При получении от внешнего устройства сигнала требования прерывания процессор
· Продолжает выполнение текущей команды до ее завершения
Состояние разряда разрешения/запрета прерывания внешнего устройства в его регистре состояния устанавливается:
ü A . из программы соответствующей командой
Что делает внешнее устройство при получении от процессора сигнала предоставления прерывания?
ü Передает процессору адрес своего вектора прерывания
Что необходимо сделать для того, чтобы запретить прерывание ВСЕМ внешним устройствам?
ü Установить состояние высокого приоритета процессора в его регистре состояния
Что произойдет, если два внешних устройства одновременно затребуют прерывание?
ü Требование прерывания от устройства с более низким приоритетом будет проигнорировано
ü Прерывание будет предоставлено устройству с более высоким приоритетом
Что происходит при выполнении команды возврат из прерывания?
ü Адрес возврата в прерванную программу из вершины стека пересылается в регистр-счетчик команд процессора
ü Выталкивается из стека и записывается в регистр состояния процессора прежнее слово состояния процессора
Что такое "вложенное" прерывание?
ü Прерывание, которое происходит во время обслуживания другого прерывания
Что такое вектор прерывания?
ü Ячейки памяти, закрепленные за определенным внешним устройством
ü Ячейки памяти, в одной из которых указан адрес программы обслуживания прерывания от конкретного устройства
ü Ячейки памяти, в одной из которых указано слово состояния процессора
Ввод-вывод данных в режиме прерывания осуществляется:
ü под управлением выполняемой процессором программы
ü по инициативе внешнего устройства
Для чего при реализации механизма прерывания необходим стек?
ü Для запоминания текущего содержимого регистра состояния процессора
ü Для реализации вложенных прерываний
ü Для запоминания текущего содержимого регистра-счетчика команд
Какие операции необходимо осуществить в программе, для того, чтобы обеспечить возможность работы с внешним устройством в режиме прерывания?
ü Установить в первой ячейке вектора прерывания адрес программы обслуживания прерывания
ü Установить разряд разрешения прерывания в регистре состояния внешнего устройства в состояние "разрешено"
ü Установить во второй ячейке вектора прерывания значение слова состояния процессора
ü Разместить в памяти программу обслуживания прерывания
ü Установить в регистре указателе стека адрес вершины стека
Какие принципиальные проблемы должны решаться при реализации ввода/вывода в режиме прерывания программы?
ü Нужен механизм, обеспечивающий переход процессора на выполнение программы обслуживания именно того устройства, которое затребовало прерывание
ü Нежелательна жесткая привязка программы обслуживания к определенному месту в памяти ЭВМ
ü Необходим механизм, позволяющий программным путем запрещать или разрешать прерывания всем или некоторым внешним устройствам, когда это необходимо
ü Необходимо разрешать конфликтные ситуации, возникающие при одновременном требовании прерывания несколькими внешними устройствами
ü Работа основной (прерываемой) программы должна приостанавливаться без какого-либо ущерба для ее выполнения
Каким образом можно запретить прерывание конкретному внешнему устройству?
ü Сбросить в нуль разряд приоритета в регистре состояния внешнего устройства
Каким образом при окончании обслуживания внешнего устройства, вызвавшего прерывание, осуществляется возврат в прерванную программу?
ü Выполняется команда возврат из прерывания
Каким образом процессор узнает адрес, по которому в памяти ЭВМ находится программа обслуживания внешнего устройства, затребовавшего прерывание?
ü Считывает этот адрес из первой ячейки вектора прерывания внешнего устройства
Можно ли для возврата из подпрограммы использовать команду возврат из прерывания?
Можно ли для возврата из прерывания использовать команду возврат из подпрограммы?
Откуда появляется информация в векторе прерывания?
· B . Устанавливается программным путем
По сравнению с вводом выводом по опросу флага готовности для режима прерывания характерны:
ü Более сложная аппаратная реализация
ü Более высокая эффективность использования процессора
ü Более сложное программирование
После выполнения какого действия процессор посылает внешнему устройству сигнал предоставления прерывания?
· После запоминания в стеке текущего содержимого регистра-счетчика команд и регистра состояния процессора
Можно ли для возврата из прерывания использовать команду возврат из подпрограммы?
ü Нельзя, потому, что эта команда не обеспечивает полного восстановления прежнего (т.е. до прерывания) состояния процессора
При включении питания компьютера разряд разрешения/запрета прерывания для внешнего устройства в регистре состояния его интерфейса автоматически устанавливается в состояние:
При передаче массива данных во внешнее устройство в режиме прерывания контроль количества переданных байтов осуществляет
ü Выполняемая процессором программа
Установите правильную последовательность действий, происходящих при акте предоставления прерывания внешнему устройству
Внешнее устройство посылает процессору сигнал требования прерывания
Процессор получает от внешнего устройства сигнал запроса прерывания
Процессор завершает выполняемую команду
Процессор запоминает в стеке содержимое регистра счетчика команд и регистра состояния
Процессор посылает внешнему устройству сигнал предоставления прерывания
Внешнее устройство получает от процессора сигнал предоставления прерывания
Внешнее устройство передает процессору адрес своего вектора прерывания
Процессор получает от внешнего устройства адрес его вектора прерывания
Процессор пересылает в регистр счетчик команд содержимое первой ячейки вектора прерывания
Процессор пересылает в свой регистр состояния содержимое второй ячейки вектора прерывания
Процессор считывает и выполняет первую команду программы обслуживания прерывания
Последовательность действий, выполняемых при предоставлении прерывания внешнему устройству.
Используемые сокращения:
ВУ - внешнее устройство,
ОЗУ - оперативное запоминающее устройство,
ТрПр - сигнал требования прерывания,
ПрПр - сигнал предоставления прерывания,
ТрПДП - сигнал требования прямого доступа к памяти,
ПрПДП - сигнал предоставления прямого доступа к памяти,
ТрПДВУ - сигнал требования прямого доступа к внешнему устройству,
ПрПДВУ - сигнал предоставления прямого доступа к внешнему устройству.
1. посылает сигнал
2. получает от сигнал
3. Процессор выполняемую команду
4. Процессор запоминает в содержимое своего и содержимое
5. посылает сигнал
6. получает от сигнал
7. передает адрес своего
8. получает от адрес его
9. пересылает в свой содержимое первой ячейки
10. пересылает в свой содержимое второй ячейки
11.Процессор считывает и выполняет первую команду
Адрес возврата из подпрограммы запоминается
Вложенные подпрограммы это подпрограммы,
ü вызываемые из других подпрограмм
Для возврата из подпрограммы
· нельзя использовать команду условного перехода
Для возврата из подпрограммы
· нельзя использовать команду безусловного перехода
Для перехода к подпрограмме
· нельзя использовать команду условного перехода
Для перехода к подпрограмме
· нельзя использовать команду безусловного перехода
ü программный модуль, к которому можно обращаться из любого места программы любое число раз
При выполнении команды возврат из подпрограммы
ü адрес возврата выталкивается из вершины стека и помещается в регистр-счетчик команд
При выполнении команды вызов подпрограммы
ü задаваемый в команде адрес входа в подпрограмму помещается в регистр-счетчик команд
ü содержимое регистра-счетчика команд процессора пересылается в стек
12.4. Ввод-вывод в режиме прямого доступа к памяти
В режиме прямого доступа к памяти управление вводом-выводом осуществляется:
ü Внешним устройством
Для каких из перечисленных внешних устройств целесообразно использовать ввод/вывод информации в режиме прямого доступа к памяти?
ü Внешнее запоминающее устройство
Для перехода к режиму предоставления внешнему устройству прямого доступа к памяти
ü Процессор не должен сохранять свое текущее состояние
ü Процессор не должен доводить выполнение текущей команды до конца
По сравнению с другими режимами для ввода-вывода в режиме прямого доступа к памяти характерно:
ü Более высокая скорость передачи данных
ü Более сложная аппаратная реализация
ü Более высокая эффективность использования процессора
После выполнения каких действий процессор посылает внешнему устройству сигнал предоставления прямого доступа к памяти?
· После завершения процессором очередного цикла обращения к каналу (к оперативной памяти)
При передаче массива данных во внешнее устройство в режиме прямого доступа к памяти контроль количества переданных байтов или слов осуществляет
ü Контроллер внешнего устройства
При передаче массива данных во внешнее устройство в режиме прямого доступа к памяти формирование адресов ячеек памяти, из которых осуществляется пересылка данных, осуществляет
ü Контроллер внешнего устройства
При приеме массива данных из внешнего устройства в режиме прямого доступа к памяти контроль количества переданных байтов или слов осуществляет
ü Контроллер внешнего устройства
Целесообразно ли использовать для ввода данных с клавиатуры режим прямого доступа к памяти?
Целесообразно ли использовать для обмена данными с жестким диском режим прямого доступа к памяти?
Что делает внешнее устройство после получения от процессора сигнала предоставления прямого доступа к памяти?
· Осуществляет управление магистралями компьютера и его памятью для передачи данных
Что должен "уметь" делать контроллер прямого доступа к памяти?
ü Формировать сигнал требования прямого доступа
ü Формировать адреса ячеек памяти с данными
ü Посчитывать число переданных байтов
Что означает аббревиатура DMA?
· D . Прямой доступ к памяти
12.5. Ввод-вывод - сравнение режимов
Расположите перечисленные режимы ввода/вывода в порядке возрастания скорости передачи данных
По опросу готовности внешнего устройства
Прямой доступ к памяти
Расположите перечисленные режимы ввода/вывода в порядке возрастания степени их пригодности для обмена данными с внешними запоминающими устройствами
По опросу готовности внешнего устройства
Прямой доступ к памяти
Расположите перечисленные режимы ввода/вывода в порядке возрастания степени их пригодности для обмена данными со сканером
По опросу готовности внешнего устройства
Прямой доступ к памяти
Расположите перечисленные режимы ввода/вывода в порядке возрастания степени их пригодности для передачи больших массивов данных
По опросу готовности внешнего устройства
Прямой доступ к памяти
Расположите перечисленные режимы ввода/вывода в порядке возрастания степени их пригодности для передачи данных для отображения на экране монитора
По опросу готовности внешнего устройства
Прямой доступ к памяти
Расположите перечисленные режимы ввода/вывода в порядке увеличения сложности их реализации
По опросу готовности внешнего устройства
Прямой доступ к памяти
Расположите перечисленные режимы ввода/вывода в порядке увеличения эффективности использования процессорного времени
По опросу готовности внешнего устройства
Прямой доступ к памяти
Какой режим ввода вывода целесообразно использовать для обмена данными с видеомонитором?
· Режим прямого доступа к памяти
Какой режим ввода-вывода целесообразно использовать для обмена данными с жестким диском?
· Режим прямого доступа к памяти
Какой режим ввода вывода целесообразно использовать для обмена данными с клавиатурой?
Какой режим ввода вывода целесообразно использовать для обмена данными со сканером?
Большинство систем виртуальной памяти используют технику, называемую страничной организацией памяти [32, 37]. Любой процесс, реализуемый в компьютере, может обратиться к множеству адресов в памяти. Адреса могут формироваться с применением индексации, базовых регистров, сегментных регистров и другими путями. Эти программно формируемые адреса, называемые виртуальными адресами, формируют виртуальное адресное пространство . На компьютерах без виртуальной памяти виртуальные адреса подаются непосредственно на шину памяти и вызывают для чтения или записи слово в физической памяти с тем же самым адресом.
Когда используется виртуальная память , виртуальные адреса не передаются напрямую шиной памяти. Вместо этого они передаются диспетчеру памяти ( MMU – Memory Management Unit), который отображает виртуальные адреса на физические адреса памяти, как показано на рис. 6.9. Здесь диспетчер памяти показан как часть микросхемы процессора, как обычно и бывает чаще всего. Но логически он мог бы быть отдельной микросхемой, как было в недавнем прошлом.
Все имеющееся в настоящее время множество реализаций виртуальной памяти различается в основном способом структуризации виртуального адресного пространства.
В настоящее время выделяют три метода реализации виртуальной памяти.
- Страничная виртуальная память организует перемещение данных между основной памятью и диском страницами – частями виртуального адресного пространства фиксированного и сравнительно небольшого размера.
- Сегментная виртуальная память предусматривает перемещение данных сегментами – частями виртуального адресного пространства произвольного размера, полученного с учетом смыслового значения данных.
- Сегментно- страничная виртуальная память использует двухуровневое деление: виртуальное адресное пространство делится на сегменты, а затем сегменты делятся на страницы. Единицей перемещения данных является страница.
Для временного хранения сегментов и страниц на диске отводится специальная область либо специальный файл (страничный файл или файл подкачки – paging file ). Текущий размер страничного файла является важным параметром, оказывающим влияние на возможности операционной системы: чем больше страничный файл , тем больше приложений может одновременно выполнять ОС (при фиксированном размере оперативной памяти). Однако необходимо понимать, что увеличение числа одновременно работающих приложений за счет увеличения размера страничного файла замедляет их работу, так как значительная часть времени при этом тратится на перемещение данных на диск и обратно.
Размер страничного файла в современных ОС является настраиваемым параметром, который выбирается администратором системы для достижения компромисса между уровнем программирования и быстродействием системы.
При страничной организации виртуальное адресное пространство каждого процесса делится на части одинакового, фиксированного для данной системы размера, называемые виртуальными страницами ( Virtual pages). В общем случае размер виртуального адресного пространства не кратен размеру страницы, поэтому последняя страница дополняется фиксированной областью.
Вся оперативная память машины также делится на части такого же размера, называемые физическими страницами (или блоками, или кадрами). Размер страницы выбирается равным степени двойки: 1024, 2048, 4096 байт и т.д. Это позволяет упростить механизм преобразования адресов.
При создании процесса ОС загружает в операционную память несколько его виртуальных страниц (начальные страницы кодового сегмента и сегмента данных). Копия всего виртуального адресного пространства процесса находится на диске. Смежные виртуальные страницы не обязательно находятся в смежных физических страницах. Для каждого процесса ОС создает таблицу страниц – информационную структуру, содержащую записи обо всех виртуальных страницах процесса (рис. 6.10).
Запись таблицы ( дескриптор страницы) включает следующую информацию:
- номер физической страницы (N ф.с.), в которую загружена данная виртуальная страница ;
- признак присутствия Р, устанавливаемый в единицу, если данная страница находится в оперативной памяти;
- признак модификации страницы D, который устанавливается в единицу всякий раз, когда производится запись по адресу, относящемуся к данной странице;
- признак обращения А к странице, называемый также битом доступа, который устанавливается в единицу при каждом обращении по адресу, относящемуся к данной странице;
- другие управляющие биты, служащие, например, для целей защиты или совместного использования памяти на уровне страниц.
Перечисленные признаки в большинстве моделей процессов устанавливаются аппаратно схемами процессора при выполнении операций с памятью. Информация из таблицы страниц используется для решения вопроса о необходимости перемещения той или иной страницы между памятью и диском, а также для преобразования виртуального адреса в физический. Сами таблицы страниц, так же как и описываемые ими страницы, размещаются в оперативной памяти.
Поскольку процесс может задействовать большой объем виртуальной памяти (например, в Windows 2000 он равен 2 32 = 4 Гбайт), при использовании страницы объемом 4 Кбайт (2 12 ) потребуется 2 20 записей в таблице страниц для каждого процесса. Понятно, что выделять такое количество оперативной памяти под таблицы страниц нецелесообразно. Для преодоления этой проблемы большинство схем виртуальной памяти хранит таблицы страниц не в реальной, а в виртуальной памяти. Это означает, что сами таблицы страниц становятся объектами страничной организации. При работе процесса как минимум часть его таблицы страниц должна располагаться в основной памяти, в том числе запись о странице, выполняющейся в настоящий момент. Адрес таблицы страниц включается в контекст процесса . При активизации очередного процесса ОС загружает адрес его таблицы страниц в специальный регистр .
При каждом обращении к памяти выполняется поиск номера виртуальной страницы , содержащей требуемый адрес , затем по этому номеру определяется нужный элемент таблицы страниц и из него извлекается описывающая страницу информация . Далее анализируется признак присутствия, и если данная виртуальная страница находится в оперативной памяти, то выполняется преобразование виртуального адреса в физический. Если же нужная виртуальная страница в данный момент выгружена на диск , то происходит страничное прерывание .
Выполняющий процесс переводится в состояние ожидания, активизируя процесс из очереди процессов, находящихся в состоянии готовности. Параллельно программа обработки страничного прерывания находит на диске требуемую виртуальную страницу и пытается ее загрузить в оперативную память . Если в памяти имеется свободная физическая страница , то загрузка выполняется немедленно. Если же свободных страниц нет, то на основании принятой в данной системе стратегии замещения страниц решается вопрос о том, какую страницу следует выгрузить из оперативной памяти.
После того как выбрана страница, которая должна покинуть оперативную память , обнуляется ее бит присутствия и анализируется ее признак модификации. Если удаляемая страница за время последнего требования в оперативной памяти была модифицирована, то ее новая версия должна быть переписана на диск . Если нет, то принимается во внимание, что на диске уже имеется предыдущая копия этой виртуальной страницы , и никакой записи на диск не производится. Физическая страница объявляется свободной. Из соображений безопасности в некоторых системах освобождаемая страница обнуляется, чтобы невозможно было использовать содержимое выгруженной страницы. Для хранения информации о положении вытесненной страницы в страничном файле ОС может задействовать специальные поля таблицы страниц.
Виртуальный адрес при страничном распределении может быть представлен в виде пары ( P, Sv ), где Р – номер виртуальной страницы процесса ( нумерация страниц начинается с 0), а Sv – смещение в пределах виртуальной страницы (рис. 6.11). Физический адрес также может быть представлен в виде пары ( N, Sf ), где N – номер физической страницы, а Sf – смещение а пределах физической страницы. Задача подсистемы виртуальной памяти состоит в отображении пары значений ( P, Sv ) в пару ( N, Sf ).
Чтобы понять механизм реализации этого отображения, следует остановиться на двух базисных свойствах страничной организации. Как уже отмечалось, объем страницы, как виртуальной, так и физической, выбирается равным степени двойки – 2 к ( k = 8 и более). Отсюда следует, что смещение Sv и Sf может быть получено отделением k младших разделов в двоичной записи виртуального и, соответственно, физического адреса страницы. При этом оставшиеся старшие разделы адреса представляют собой двоичную запись номера виртуальной и, соответственно, физической страницы. Дополнив эти номера к нулям, можно получить начальный адрес виртуальной и физической страниц.
Второе свойство – линейность адресного пространства виртуальной и физической страницы – приводит к тому, что Sf = Sv. Отсюда следует простая схема преобразования виртуального адреса в физический.
При обращении к памяти по некоторому виртуальному адресу ( P, Sv ) аппаратные схемы процессора выполняют следующие действия.
- Из специального регистра процессора извлекается начальный адрес АТ таблицы страниц активного процесса. С помощью сумматора по значениям АТ, Р, L (длина отдельной записи в таблице страниц) определяется адрес нужной записи в таблице страниц:
В итоге полученный физический адрес оперативной памяти представляется парой значений ( N, Sf ).
Рассмотрим пример, поясняющий основные характеристики организации страничной виртуальной памяти. Пусть компьютер имеет оперативную память объемом Еоп = 256 Мбайт , размер страницы выбран равным Естр= 4 Кбайт . В этом случае количество физических страниц равно
Для отображения физического адреса произвольного байта оперативной памяти потребуется K = log2 256*20 2 0 = 28 двоичных разрядов.
Число разрядов для отображения смещения в странице M = log2 4 Кбайт = log2 4096 = 12 .
Если процессор имеет 32-разрядную структуру, то на номер виртуальной страницы отводится 32-12=20 двоичных разрядов. Таким образом, число виртуальных страниц равно Nв = 220 (примерно 1 млн виртуальных страниц ).
Для каждой виртуальной страницы в таблице страниц должна быть запись , содержащая номер виртуальной страницы (20 двоичных разрядов), начальный адрес соответствующей ей физической страницы плюс дополнительные разряды, характеризующие свойства страницы (присутствие, модификация, обращение и т.п.), на которые потребуется 1 байт . Поскольку адрес начала физической страницы кратен 4096, то на него достаточно 28 – 12 = 16 двоичных разрядов (остальные 12 разрядов заполняются нулями). Таким образом, одна запись таблицы страниц займет 20 + 16 + 8 = 44 двоичных разрядов или 6 байт . Общий объем таблицы страниц составит 6 * Nв = 6 Мбайт .
Реально при выборе структуры записи таблицы страниц нужно учитывать следующие факторы. Современные компьютеры позволяют наращивать объем оперативной памяти (например, в ПК она может почти достигать объема виртуальной памяти и даже более). Поэтому на адрес физической страницы в нашем примере следует выделить 32-12 = 20 двоичных разрядов. С другой стороны, нет необходимости в записи (дескрипторе) виртуальной страницы иметь поле с номером виртуальной страницы (20 разрядов), так как адрес нужной записи можно вычислять, как это было рассмотрено выше. Следовательно, в нашем примере длина записи должна быть равной 32 - 12 + 8 = 28 двоичным разрядам, т.е. с округлением до целого числа байт – 4 байт . Таким образом, для каждого выполняющегося в компьютере процесса ОС должна создать страничную таблицу размером 4 * Nв байт = 5 * 2 20 = 4 Мбайт .
Процедура преобразования виртуального адреса в физический без принятия специальных мер ( кэширование активных страниц) занимает один цикл оперативной памяти, который затрачивается на считывание номера физической страницы из таблицы страниц. Поэтому любое обращение к ОП будет занимать 2 цикла вместо одного при работе без виртуальной памяти. Другим фактором, влияющим на производительность систем, являются затраты времени на обработку страничных прерываний. При неправильно выбранной стратегии замещения страниц может возникнуть ситуация, когда система тратит большую часть времени впустую на подкачку страниц из оперативной памяти на диск и обратно.
Как уже упоминалось, внутренние регистры процессора представляют собой сверхоперативную память небольшого размера, которая предназначена для временного хранения служебной информации или данных. Количество регистров в разных процессорах может быть от 6—8 до нескольких десятков. Регистры могут быть универсальными и специализированными. Специализированные регистры, которые присутствуют в большинстве процессоров, — это регистр - счетчик команд , регистр состояния ( PSW ), регистр указателя стека. Остальные регистры процессора могут быть как универсальными, так и специализированными.
Например, в 16-разрядном процессоре Т-11 фирмы DEC было 8 регистров общего назначения (РОН) и один регистр состояния . Все регистры имели по 16 разрядов. Из регистров общего назначения один отводился под счетчик команд , другой — под указатель стека . Все остальные регистры общего назначения полностью взаимозаменяемы, то есть имеют универсальное назначение, могут хранить как данные, так и адреса (указатели), индексы и т.д. Максимально допустимый объем памяти для данного процессора составлял 64 Кбайт ( адрес памяти 16-разрядный).
В 16-разрядном процессоре MC68000 фирмы Motorola было 19 регистров: 16-разрядный регистр состояния , 32-разрядный регистр счетчика команд , 9 регистров адреса (32-разрядных) и 8 регистров данных (32-разрядных). Два регистра адреса отведены под указатели стека. Максимально допустимый объем адресуемой памяти — 16 Мбайт (внешняя шина адреса 24-разрядная). Все 8 регистров данных взаимозаменяемы. 7 регистров адреса – тоже взаимозаменяемы.
В 16-разрядном процессоре Intel 8086, который стал базовым в линии процессоров, используемых в персональных компьютерах, реализован принципиально другой подход. Каждый регистр этого процессора имеет свое особое назначение, и заменять друг друга регистры могут только частично или же не могут вообще. Остановимся на особенностях этого процессора подробнее.
Процессор 8086 имеет 14 регистров разрядностью по 16 бит . Из них четыре регистра ( AX , BX , CX , DX ) — это регистры данных, каждый из которых помимо хранения операндов и результатов операций имеет еще и свое специфическое назначение:
- регистр AX — умножение, деление, обмен с устройствами ввода/вывода (команды ввода и вывода);
- регистр BX — базовый регистр в вычислениях адреса;
- регистр CX — счетчик циклов;
- регистр DX — определение адреса ввода/вывода.
Для регистров данных существует возможность раздельного использования обоих байтов (например, для регистра AX они имеют обозначения AL – младший байт и AH — старший байт ).
Следующие четыре внутренних регистра процессора — это сегментные регистры, каждый из которых определяет положение одного из рабочих сегментов (рис. 3.10):
- регистр CS (Code Segment) соответствует сегменту команд, исполняемых в данный момент;
- регистр DS (Data Segment) соответствует сегменту данных, с которыми работает процессор;
- регистр ES (Extra Segment) соответствует дополнительному сегменту данных;
- регистр SS (Stack Segment) соответствует сегменту стека.
В принципе, все эти сегменты могут и перекрываться для оптимального использования пространства памяти. Например, если программа занимает только часть сегмента, то сегмент данных может начинаться сразу после завершения работы программы (с точностью 16 байт ), а не после окончания всего сегмента программы.
Следующие пять регистров процессора ( SP — Stack Pointer , BP — Base Pointer , SI — Source Index , DI — Destination Index , IP —Instruction Pointer ) служат указателями (то есть определяют смещение в пределах сегмента). Например, счетчик команд процессора образуется парой регистров CS и IP , а указатель стека — парой регистров SP и SS . Регистры SI , DI используются в строковых операциях, то есть при последовательной обработке нескольких ячеек памяти одной командой.
Последний регистр FLAGS — это регистр состояния процессора ( PSW ). Из его 16 разрядов используются только девять (рис. 3.11): CF ( Carry Flag ) — флаг переноса при арифметических операциях, PF ( Parity Flag ) — флаг четности результата, AF ( Auxiliary Flag ) — флаг дополнительного переноса, ZF (Zero Flag ) — флаг нулевого результата, SF ( Sign Flag ) — флаг знака (совпадает со старшим битом результата), TF ( Trap Flag ) — флаг пошагового режима (используется при отладке), IF (Interrupt-enable Flag ) — флаг разрешения аппаратных прерываний, DF ( Direction Flag ) — флаг направления при строковых операциях, OF ( Overflow Flag ) — флаг переполнения.
Биты регистра состояния устанавливаются или очищаются в зависимости от результата исполнения предыдущей команды и используются некоторыми командами процессора. Биты регистра состояния могут также устанавливаться и очищаться специальными командами процессора (о системе команд процессора будет рассказано в следующем разделе).
Во многих процессорах выделяется специальный регистр , называемый аккумулятором (то есть накопителем). При этом, как правило, только этот регистр -аккумулятор может участвовать во всех операциях, только через него может производиться взаимодействие с устройствами ввода/вывода. Иногда в него же помещается результат любой выполненной команды (в этом случае говорят даже об "аккумуляторной" архитектуре процессора). Например, в процессоре 8086 регистр данных АХ можно считать своеобразным аккумулятором, так как именно он обязательно участвует в командах умножения и деления, а также только через него можно пересылать данные в устройство ввода/вывода и из устройства ввода/вывода. Выделение специального регистра-аккумулятора упрощает структуру процессора и ускоряет пересылки кодов внутри процессора, но в некоторых случаях замедляет работу системы в целом, так как весь поток информации должен пройти через один регистр -аккумулятор. В случае, когда несколько регистров процессора полностью взаимозаменяемы, таких проблем не возникает.
Аннотация: Цель лекции: рассмотреть состав, назначение и особенности использования различных групп регистров, входящих в состав универсального микропроцессора. Состав, структура и назначение регистров микропроцессора являются важной чертой его архитектуры и во многом определяют его функциональные возможности. Поэтому изучение этого вопроса весьма важно для понимания дальнейшего материала.
Регистровая структура универсального микропроцессора
В универсальном 32-разрядном микропроцессоре выделяют следующие группы регистров:
- основные функциональные регистры;
- регистры процессора с плавающей точкой;
- системные регистры;
- регистры отладки и тестирования.
Первые две группы регистров используются прикладными программами, последние две группы - системными программами , имеющими наивысший уровень привилегий .
Рассмотрим каждую из этих групп подробнее.
Основные функциональные регистры
В состав регистров этой группы входят:
- регистры общего назначения;
- регистр указателя команд;
- регистр флагов ;
- сегментные регистры .
Состав и структура регистров общего назначения представлены на рис. 2.1.
Блок состоит из восьми 32-разрядных регистров. К каждому из них можно обращаться как к одному двойному слову (32 разряда).
Все эти регистры используются для хранения промежуточных результатов вычислений и составных частей адреса при различных режимах адресации операндов, расположенных в памяти.
Кроме того, ряд регистров этого блока имеют свое, присущее только им назначение:
- EAX/AX/AL - регистр-аккумулятор, используется для сокращения длины команды при работе с непосредственными операндами;
- AX/AL - приемник (источник) данных в командах ввода (вывода) данных из (в) внешнего устройства;
- DX - определяет адрес ВУ в командах ввода (вывода) данных;
- ECX - используется в качестве счетчика циклов в командах циклов ;
- BP , SP - используются при работе со стеком;
- ESI , EDI ( DI , SI ) - определяют положение строк в памяти в командах обработки строк.
Регистр указателя команд и регистр флагов имеют длину 32 разряда.
Младшее слово каждого из этих регистров (разряды 0-15) функционально соответствует аналогичным разрядам в 16-разрядном микропроцессоре (рис. 2.2).
Регистр указателя команд EIP хранит смещение адреса команд относительно начала сегмента кода (сегмента команд).
Регистр флагов EFLAGS содержит признаки результата выполненной команды, а также разряды, управляющие работой микропроцессора: обработкой маскированных прерываний, последовательностью вызываемых задач, вводом-выводом и рядом других действий. Из этих флагов рассмотрим только наиболее значимые и интересные с точки зрения дальнейшего изучения работы микропроцессора.
К битам состояния регистра флагов относятся:
- ZF - признак нуля результата ( ZF = 1 , если все разряды результата равны 0);
- SF - знак результата ( SF = 1 , если старший разряд результата равен 1, то есть если результат отрицательный);
- OF - признак переполнения ( OF = 1 , если при выполнении арифметических операций над числами со знаком происходит переполнение разрядной сетки);
- CF - флаг переноса ( CF = 1 , если выполнение операции сложения приводит к переносу за пределы разрядной сетки), устанавливается также в некоторых других операциях;
- PF - признак четности (дополняет до нечетного числа единиц младший байт результата);
- AF - флаг полупереноса (используется при операциях над двоичнодесятичными числами);
- DF - устанавливается пользователем и определяет порядок обработки строк символов в соответствующих командах: декремент (при DF = 1 ) или инкремент (при DF = 0 ) содержимого индексных регистров ESI , EDI ( SI , DI ) после обработки одного символа.
В состав флагов управления входят:
- IF - флаг прерываний (при IF = 1 разрешается обработка маскированных аппаратных прерываний );
- TF - флаг ловушки , или трассировки (при ТF = 1 после выполнения каждой команды возникает прерывание, используемое отладчиками;);
- NТ - бит вложенной задачи (показывает, что данная задача была вызвана из другой программы, аналогично подпрограмме, и возврат из этой задачи должен проводиться по механизму переключения задач);
- IOPL - 2-разрядное поле уровня привилегий ввода/вывода (определяет уровень привилегий программ, которым разрешено выполнение операции ввода-вывода);
- VM - режим виртуального микропроцессора i8086 (при работе микропроцессора в защищенном режиме установка VM = 1 вызывает переключение в режим виртуального микропроцессора i8086; в этом случае микропроцессор функционирует как быстрый МП i8086, но реализует механизмы защиты памяти , страничной адресации и ряд других дополнительных возможностей; бит VM может быть установлен только в защищенном режиме).
Блок сегментных регистров состоит из шести 16-разрядных регистров, которые указывают на различные сегменты , расположенные в памяти компьютера:
- CS ( Code Segment ) - сегмент кода программы;
- DS ( Data Segment ) - сегмент данных;
- SS ( Stack Segment ) - сегмент стека;
- ES , FS , GS - дополнительные сегменты данных.
При работе микропроцессора в реальном режиме в сегментном регистре содержатся старшие 16 разрядов 20-разрядного базового адреса сегмента. Физический адрес начала сегмента получается умножением этой величины на 16:
Получающийся 20-разрядный адрес позволяет адресовать память емкостью 2 20 байт = 1 Мбайт. При этом сегменты имеют постоянную длину 2 16 байт . Разработчики первых персональных компьютеров полагали, что оперативная память , большая чем 1 Мбайт, никогда не потребуется пользователю, поэтому вся архитектура строилась исходя именно из этого положения.
При переходе к 32-разрядной архитектуре стало необходимым обеспечить возможность адресации памяти емкостью до 2 32 байт . Кроме того, введение защищенного режима работы микропроцессора потребовало хранения большого количества дополнительной информации о сегменте: его длине, которая стала переменной, уровне привилегий, его типе и т. д. Простое увеличение разрядности сегментных регистров до 32 бит не обеспечило бы возможности хранения всей этой информации. Поэтому все данные о сегменте стали размещаться в специальных структурах - дескрипторах (описателях) сегментов, которые хранятся в таблицах дескрипторов, расположенных в памяти, а сегментные регистры , сохранив свою первоначальную длину в 16 разрядов, содержат так называемый селектор ( указатель ), который используется для того, чтобы найти нужный дескриптор в этих таблицах.
Читайте также: