Недостатки сегментной организации памяти режима реального адреса.
28.02.2013
1. Небольшой размер сегмента - 64 килобайта.
2. Отсутствие аппаратных средств контроля за правильным размещением сегментов. В общем случае могут частично либо полностью перекрываться.
3. Любая программа, в том числе и пользовательская, может обратиться к любому сегменту памяти, в том числе и сегментному, для выполнения операций считывания и записи.
4. Наличие эффекта заворачивания адреса
Сегментная организация памяти в защищенном режиме.
В защищенном режиме может 4 гб в соответствии с разрядностью адресной шины – максимальный размер сегмента. В защищенном режиме реализуется механизм виртуальной памяти, которая обеспечивает поддержку работы множества задач и распределение физической памяти между процессами. В защищенном режиме линейный адрес, который формируется механизмом поддержки сегментной организации, не равен физическому адресу памяти, т.е. является виртуальным. для получения из линейного адреса физический получается страничное преобразование адреса. Каждый сегмент в защищенном режиме характеризуется некоторым объемом информации, которая записывается в специальную системную структуру данных, называемую дескриптором(64 разряда). В системе может быть большое количество дескрипторов.
63 47 0
ЛБА | G | D | X | U | Предел (4 б) | AR | ЛБА |
31 15 0
ЛБА | предел |
7 AR 0
P | DPL (2 б) | S | Тип (3 б) | А |
ЛБА (2,3,4,7) – определяет линейный базовый адрес сегмента в 4-гб линейном пространстве.
20-битное поле ПРЕДЕЛА предназначено для хранения максимально возможного размера адреса смещения, что фактически определяет размер сегмента.
Если G = 0, то единица измерения 1 байт. Следовательно не больше 1 Мб. Если равен 1, то единица измерения – страница (4 Кб), соответственно 1 Мб*4Кб = 4Гб.
Бит D (размер по умолчанию) определяет совместимость с 16-разрядным процессором. При =0, операнды считаются имеющие 16 бит, при =1 – 32-разрядня адресация.
Х – резервный бит.
U – пользовательский бит.
AR – байт прав доступа.
Бит A – доступа. Устанавливается в 1 автоматически. При поддержке использования режима виртуальной памяти.
Поле ТИПА (3 бита) справа налево: 1 бит определяет, что находится в соответствующем сегменте (0 – данные, 1 - код);
· для сегмента данных 2 бит – бит расширения вниз (0 – обычный сегмент данных, 1 – сегмент стека); 3 бит 0 – разрешает чтение-запись, 1 – только чтение (для сегмента стека 3 бит только 0, для данных и 0 и 1).
· для кодового сегмент 2 бит называется битом подчиненности (0 – обычный кодовый, 1 – подчиненный (не имеет собственного уровня привилегий) кодовый сегмент); 3 бит 0 – чтение/исполнение соответствующего кода, 1 – только исполнение.
Бит системы S – предназначен для описания системного объекта, т.е. соответствующий дескриптор описывает системный объект.
Двухбайтное поле привилегии дескриптора DPL - определяет уровень привилегий дескриптора. С каждым сегментом ассоциируется уровень привилегий. Всего 4 уровня:
00 – 0
01 – 1
10 – 2
11 – 3
Наиболее привилегированным является 0 уровень, 3 – уровень пользовательских программ – наименее привилегированный.
Бит Р – бит присутствия. При =1, когда описываемый дескриптором сегмент находится в физической памяти. При выгрузке дескриптора в область файла подкачки, бит сбрасывается в 0. Если генерируется обращение к сегменту, который выгружен на диск, т.е. Р=0, то в этом случае генерируется исключение, в процессе обработки которого сегмент отыскивается и загружается в оперативную память. Нормальный механизм поддержки виртуальной памяти.
Все дескрипторы группируются в дескрипторные таблицы. Отличают глобальную дескрипторную таблицу и локальную дескрипторную таблицу. Глобальная таблица существует в единственном экземпляре и предназначена для поддержки работы системы в целом и работы программ. Локальная дескрипторная таблица может создаваться для каждой задачи, доступ к ней возможен только из задачи.
Команда les помещает базовый адрес источника s в соответствующий регистр es, а адрес смещения в указанный приемник, т.е. соответственно будут помещены не базовые адреса, а селекторы. Размер зависит от выбора адресации.
Mov d, offset s
Mov d, seg (сегментный адрес) s
Страничное преобразование адреса
7.03.2013
В защищенном режиме поддерживается страничное преобразование адреса, связанное с поддержкой механизма, называемого виртуальной памятью, обеспечивающего предоставление памяти задачам гораздо большего объема, чем имеется физической памяти. Аппаратно страничное преобразование поддерживается страничное устройство MMU. В результате страничного преобразования линейный адрес преобразуется к физическому адресу памяти.
При страничном преобразовании используется базовый объект памяти, называемый страницей. Ее размер фиксирован и равен 4 килобайтам. Все адресное пространство сегмента разбивается на 1 мегабайт виртуальных страниц. Вся физическая память разбивается на 4-килобайтные страничные кадры. Любая виртуальная страница может быть загружена в любой страничный кадр. Как правило, объем физической памяти всегда меньше, чем виртуальная страница, поэтому отсутствующие в памяти физические страницы находятся на внешних запоминающих устройствах.
Для поддержки страничного преобразования используются:
1. регистр cl3, старшие 20 бит которого называются регистром каталога страниц PDBR. Это единственный физический адрес, который находится в защищенном режиме.
Каталог страниц представляет собой страницу, состоящую из 1024, 32-разрядных дескрипторов, называемых PDE. Каждый из элементов PDE адресует подчиненную таблицу страниц (2 уровня). Каждая таблица страниц содержит 1024 32-разрядных дескрипторов, каждый из которых содержит адрес страничного кадра. Этот дескриптор называется PTE. Каждый элемент PDE и PTE имеет одинаковую структуру.
Адрес ск | D | A | PCD | PWT | RW | P |
P – бит присутствия, отображена ли страница на страничный кадр
RW – чтение-запись, позволяет защитить страницы уровня пользователя от обращения супервизоров
U/S – системная либо пользовательская таблица
PWT – бит сквозной записи. Указывает разрешена ли сквозная запись в страницу
PCD – запрещение хеширования страниц
А – бит доступа. Используется системой для подсчета частоты обращений страниц
D – устанавливается в 1, когда страница модифицирована.
Для преобразования линейного адреса в физический, сам линейный адрес разбивается на 3 части:
31 21 11 0
смещение |
В процессе виртуального смещения страница должна быть заменена страничным кадром. Старшие 10 бит линейного адреса индексируют. Один из элементов PDE в каталоге страниц средние 10 бит линейного адреса индексируют элемент PTE в соответствующие таблицы страниц 2 уровня. Найденный адрес страничного кадра замещает старшие 20 бит линейного адреса и получается физический адрес памяти.
Логические операции
14.03.13
21.03.13
CMP а, с- сравнение.
Логические поддерживают 4 логические команды:
1. унарная команда – отрицание NOT ор. Инвертирует.
2. AND а, с – побитовая конъюнкция. Меняется значение источника. Биты сравниваются соответственно.
3. OR а, с – побитовая дизъюнкция.
4. XOR – исключающая дизъюнкция. Может использоваться для инвертирования битов, а также часто используется для обнуления регистров.
5. TEST – действия аналогично команде AND за исключением, не изменяет значения операндов, воздействует на флаги SF, ZF, PF.
Команды управления потоком
Различают три разновидности перехода:
1. short – короткий переход. Позволяет формировать однобайтный код программы. Возможна передача управления на +- 127 байт. По умолчанию переход является ближним.
2. Near jmp m
Означает, что метка находится в переделах текущего кодового сегмента. Формируется двухбайтных объектный код.
3. дальний переход – Far. Метка находится в другом кодовом сегменте.
Команды условных переходов
Перед их выполнение используют команды сравнения. Все команды являются ближними.
J[condition] m
Ja
Jb
Команда циклов
Loop m – безусловный цикл. Передает управление при ненулевом значении регистра счетчика. При выполнении команды выполняет декремент регистра счетчика. Может использоваться команда. Также работают только при ненулевом положении счетсика. Loope/loopz – если счетчик не = 0 и zf=1. Loopne/loopnz – если счетчик не = 0 и zf=0.
Команды сканирования битов
04.04.13
Bsf d,s – от младшего бита к старшему
Bsr d,s – от старшего к младшему
S – операнд, в котором размещается значение сканируемых битов. Может находиться как в регистре, так и в памяти. Не может быть однобайтным.
D – приемник, как правило, регистр, куда заносится номер по порядку, т.е. позиция, определяющая порядковый номер первого единичного бита в сканируемом операнде.
Zf – 0 – если найден единичный бит, 1 – если не найден. Состояние остальных флагов неопределенно.
Команды тестирования битов
Bt s,n
Bts s,n – устанавливает указанный бит в 1.
Btr s,n – сбрасывает указанный бит в 0.
Btc s,n – осуществляет конвертирование указанного бита.
Все команды заносят во флаг cf значение бита из операнда-источника, номер которого указан вторым операндом n. в качестве источника может быть использован регистр, либо ячейка памяти (не может быть байтом). В качестве второго операнда регистр либо непосредственное значение.
Команды сдвигов
Назначение команд сдвигов заключается в перемещении содержимого операнда в сторону младших (вправо) либо старших (влево) битов. Различают арифметические и логические сдвиги.
Логические сдвиги –
Shl s,c - влево
Shr s,c – вправо
Осуществляет сдвиг всех битов операнда-источника влево либо вправо. Сдвиг происходит на количество позиций указанных вторым операндом. При этом последний сдвинутый бит дублируется во флаге cf. Количество сдвигов может быть задано либо непосредственным значением, либо регистром-счетчиком cl. Максимальное значение на которое можно сдвинуть 2-слово – 31 бит. Недостающие биты заполняются 0.
Арифметический сдвиг –
Sal s,c – идентичен логическому сдвигу влево
Sar s,c – все биты сдвигаются вправо, однако знаковый бит сдвигаемого операнда дублируется.
Сдвиги с двойной точностью
Shld d,s,c – все биты приемника сдвигаются в сторону старших адресов, при этом младшие биты заполняются последовательно битами вытесняемыми из операнда-источника, результат запоминается в операнде назначения. Cf – значение последнего сдвинутого бита. 3 операнд задает количество сдвигаемых битов cl или непосредственное значение.
Shrd d,s,c
Команды циклических сдвигов
Rol d,c
Ror d,c
Циклические сдвиги через флаг переноса
Rсl d,c
Rсr d,c
При выполнении сдвига флаг cf выступает как продолжение операнда-приемника.
Команда управления потоком
Call name
Осуществляет обращение к процедуре, имя которой задается меткой указанной в качестве операнда. Различают ближний (по ум.) и дальний вызовы (перед именем нужно указать far).
При ближнем вызове в стек программы помещается адрес смещения команды, которая стоит следом за командой call (адрес возврата). В регистр ip/eip указатель команд помещается значение адреса смещения, определяемое именем процедуры, т.е. фактически адрес первой команды процедуры. Команда ret предназначена для возврата из процедуры по ее окончанию. Возврат выполняется следующим образом: из вершины стека извлекается значение, которое процессор считает, что это адрес возврата и помещается в ip/eip. Следующей командой будет выполнена далее идущая команда.
При выполнении дальнего вызова процедуры, т.е. в другой кодовый сегмент, в стек программы помещается адрес кодового сегмента cs, ip/eip.
Команды работы с цепочками (строковые) данных
11.04.2013
Под цепочкой (строкой) понимают непрерывную последовательность байт, слов, двойных слов. Для обработки таких цепочек предназначена специальная группа команд: искать в строке символы, загружать из строки символов, ввод/вывод. Для работы с цепочками используют 2 РОНа для адресации элементов строки источника и приемника. Для адресации источника – si/esi для адресации приемника - di/edi. Некоторые команды в качестве источника могут использовать регистр аккумулятор, а некоторые в качестве приемника. При этом считается, что строка-источник находится в сегменте, адрес которого находится в ds, а строка-приемник находится в сегменте, адресуемым сегментным регистром es. До работы с командами необходимо инициализировать индексные регистры и убедиться, что в ds находится адрес сегмента (селектор) со строкой источника, es – адрес (селектор) со строкой приемника. Любая команда за одно свое выполнение обрабатывает только один элемент цепочки данных. Для многократного повторения команды используют специальные префиксы повторений:
REP
REPE/REPZ – дополнительно завершают выполнение, когда zf = 0.
REPNE/REPNZ – cx!= 0, zf=0.
Количество повторений указывается в регистре счетчике – cx до того как команда начнет выполняться. Каждое однократное выполнение команды уменьшает автоматически содержимое счетчика на единицу, и выполняется до тех пор пока не будет равно 0.
Копирование строк
Movs d,s
Df=0 – влияет на выполнение команд. Флаг направления – обработка цепочки слева направо (в сторону старших адресов), если 1 – направление младших адресов. Sbd (in 1)/ cld (in 0)
Копирует элемент строки источника, адресуемая esi, в позицию строки приемника edi.
D,s – метки, имена переменных, описанные в сегменте данных, при чем в зависимости от директивы, используемой при описании: Movsb (копирование байт), movsw (слов), movsd (двойных слов). Указанные команды могут также использоваться самостоятельно, без операндов (неявно). Данная команда может использоваться с префиксом повторения rep, необходимо инициализировать регистр-счетчик.
1) Lea si, s1
Mov di, offset s2
2) Xor ecx, ecx
Mov cl, 20
3)Push ds
Pop es
4) cld (сбрасывает в 0 флаг df)
Rep movs s2, s1// rep movsb
Команда сравнения элементов строки
Cmps d,s
Выполняет вычитание элемент строки-приемника из элемента строки-источника. При этом модифицирует флаги. Источник и приемник остаются без изменений. Аналогично команде movs выполняются все инициализирующие действия. Может использоваться с префиксами повторений REPE/REPZ или REPNE/REPNZ. Также может быть представлена безоперандными командами cmpsb, cmpsw, cmpsd.
Команда сканирования строк
18.04.2013
25.04.2013
Scas d
Scasb | scasw | scasd
Сканирование заключается в вычитании элемента строки приемника из регистра-аккумулятора.
1.Перед выполнением данной команды необходимо поместить базовый адрес сегмента (селектор), в котором находится строка приемник в регистр es.
2. убедиться, что флаг направления равен нужному значению.
3. записать в аккумулятор сканируемое значение, равное сканируемой строке. В случае использования префиксов повторения необходимо:
- возможное количество повторений поместить в регистр счетчик;
Часто эта команда используется с префиксами повторений REPE/REPZ или REPNE/REPNZ.
4. использовать один из префиксов для выполнения команды (отличного, совпадающего).
Источник
Lods s
Lodb | lodsw | lodsd
Команда выполняет загрузку аккумулятора элементов строки источника. Как правило команда не используется с префиксами повторений. Однако может быть использована в цикле для поочередной загрузки всех элементов строки.
Команда сохранения
Stos d
Stosb | stows | stosd
Приемник. Сохраняет содержимое аккумулятора в зависимости от элемента цепочки в элементе строки приемника. Как правило команда не используется с префиксами повторения. Могут использоваться в цикле.
Прерывания микропроцессоров
Под прерыванием понимают процесс приостановки выполнения активной задачи по причине возникновения ошибки, возникновения особого случая, необходимости обработать запрос, поступающий от внешнего устройства, выполнение команды прерывания int n.
Прерывания можно подразделять на внутренние и внешние.
Внутренние – ошибки, особые случаи и программное прерывание int. Разновидности: командное прерывание, исключения (особые случаи). Каждому прерыванию соответствует номер вектора прерывания. В случае внутренних прерываний особых случаев соответствие устанавливается на стадии проектирования процессоров.
Программное прерывание int _ номер вектора (берется из операнда от 0 до FFH). Номер вектора формирует и передает в процессор контроллер прерываний. При помощи данного вида прерывания может эмулировать любое прерывание, в том числе и аппаратные.
Исключения: ошибки, возникающие при выполнении команд (ошибки времени исполнения) и исключения. Для каждого особого случая предусмотрен соответствующий номер. В любом случае независимо от типа возникающего прерывания в процессоре генерируется номер вектора прерывания. С каждым видом прерывания (номером вектора) ставится в соответствие процедура обработки прерывания. В режиме реального адреса в основной оперативной памяти с нулевого адреса последовательно располагаются так называемые вектора прерывания. Каждый вектор состоит из 4 байт и определяет адрес, место нахождения (точку входу), процедуру обработки прерывания. Адрес представлен в виде 2 величин: адрес смещения и адрес сегмента.
16.05.2013
К внешним прерыванием (аппаратным) относят прерывания, поступающие от внешних устройств, работающих в режиме прерывания по средствам контроллера прерывания. Контроллер имеет входные линии, называемые IRQ – запрос на прерывание, по которым приходят запросы от внешних устройств.
Контроллер выполняет функции диспетчера запросов на прерывание, назначает им уникальный номер (номер вектора прерываний), устанавливает приоритеты обработки, выполняет запросы на обработку к процессору обращений, может маскировать отдельные виды прерываний.
По мимо контроллера используется флаг IF, который при 0 значении запрещает прохождение сигнала в процессор, при единичном разрешает. Используется для установки флага: STI (для установки)/ CLI (для сброса).
При прохождении сигнала процессора контроллер передает номер вектора.
При возникновении прерывания перед переходом процессора на обслуживание прерывания (процедура прерывания) процессор сохраняет адреса возврата, которые представляются регистром ip/eip и сегментным регистром cs (базовый адрес), сохраняется в стеке программы, также в стек попадает регистр флагов. После этого процессор сохранит адреса, соответствующий прерывания вектор по номеру, загружается в регистр cs, ip и регистр флагов. После этого процессор выполняет первую команду процедуры обработки прерывания. Процедура прерывания всегда заканчиваться командой iret. По выполнению процессором команды iret из вершины стека процессор извлекает регистр флагов, ip и cs, т.е. адреса возврата той команды, на которую он должен вернуться. Процессор продолжает свое выполнение.
В защищенном режиме векторная таблица прерываний трансформировалась в дескрипторную таблицу прерываний, в которой вместо векторов находятся шлюзы, по средствам которых происходит передача управления на процедуру обработки прерывания.
При обработке прерывания в стек может попадать код ошибки, анализируя который обработчик может выяснить причиу возникновения этой ошибки. При передаче управления в обработчик может произойти смена стека (уровня управления). В этом случае в новый стек попадают адреса старого стека для возможности возобновления и при необходимости возможного чтения параметров из старого стека.
Дата добавления: 2017-01-13; просмотров: 1058;