Защищенный режим

Автор: Пользователь скрыл имя, 13 Декабря 2011 в 21:28, реферат

Описание работы

По мере повышения нашей зависимости от компьютеров пользователям необходимы все более надежные и защищенные системы, способные выполнять несколько задач одновременно.
Процессоры могут работать в различных режимах. Под термином «режим» подразумевается способы, которым процессор создает (и обеспечивает) для себя рабочую среду. Режим работы процессора задает способ адресации к оперативной памяти и способ управления отдельными задачами. Процессоры персональных компьютеров могут работать в трех режимах: реальном, защищенном и виртуальном режимах.

Содержание

Максимальный режим работы ЦП. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Введение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2
Уровни привилегий. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
Адресация памяти в защищенном режиме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Работа прерываний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
Список литературы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
Компиляция и отладка ассемблерных программ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Общие сведения о языке ассемблера. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Процесс разработки программы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Компиляция программы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Отладка программы. . . . . . . . . . . . . . . . . . . . .

Работа содержит 1 файл

защищенный режим.docx

— 100.21 Кб (Скачать)

     41-43: Тип сегмента (табл.1)  

   44: S – бит системного сегмента (System)

     45-46: DPL – уровень привелегий (Descriptor Privelege Level )    

 47: P – бит присутствия (Present) сегмента в ОЗУ           

                                                                                            

Таблица 1

Тип Назначение  сегмента
000 Сегмент данных только для чтения
001 Сегмент данных для чтения и записи
010 Сегмент стека  только для чтения
011 Сегмент стека  для чтения и записи
100 Сегмент кода с  разрешением только выполнения
101 Сегмент кода с  разрешением выполнения и чтения из него
110 Подчиненный сегмент  кода с разрешением выполнения
111 Подчиненный сегмент  кода с разрешением выполнения и  чтения из него
 

Тетрада флагов (52-55) G,D,X,U имеет формат:  

 

   52: бит U – пользователь (User)  

53: бит X –  зарезервирован  

54: бит D –  размерность (Default size) операндов  

55: бит G –  бит гранулярности (Granularity) 

При адресации  памяти в защищённом режиме команды  ссылаются на сегменты, указывая не их адреса (как в режиме реальных адресов), а описания сегментов (их дескрипторы). Указатель на описание сегмента называется селектор. Другими словами, селектор - это номер дескриптора из таблицы дескрипторов. Адресация производится через пару регистров сегмент:смещение, причём, в качестве сегментного регистра используются обычные CS, SS, DS, ES, FS и GS (последние два появились в ЦП Intel 80386), но в них указывается не адрес сегмента, а селектор дескриптора.  

Селекторы нужны, по крайней мере, по трём причинам: 

  1. Описание  сегмента занимает 8 байт и использовать 8-байтные сегментные регистры было бы крайне неэффективно.
  2. Селекторы имеют размер в 16 бит, благодаря чему их можно использовать в сегментных регистрах и обращаться к памяти можно по-прежнему через пару регистров.
  3. Параметры всех сегментов хранятся в отдельной области памяти, доступ к которой имеет только операционная система. Программа, используя селектор, сможет получить о сегменте совсем немного информации и не сможет изменить параметры сегмента, благодаря чему очень удачно реализуется механизм защиты
 

Адрес памяти можно  указывать не только через пару регистров, но и в переменных, через пару значений селектор:смещение. 

Селектор имеет  следующий формат: 

     Рис. 2. Формат селектора. 

Двухбитовое поле RPL (Requested Privilege Level) содержит номер уровня привилегий, которое имеет текущая программа. Значение этого поля процессор использует для защиты по привилегиям. К одному и тому же дескриптору можно обращаться, используя селекторы с разными значениями RPL, но процессор позволит доступ только при определённых условиях.

Бит TI (Table Indicator) определяет таблицу, из которой выбирается нужный дескриптор. Если бит TI = 0, то обращение производится к глобальной дескрипторной таблице GDT (она одна на всю систему), если TI = 1 - то к текущей локальной дескрипторной таблице LDT (таких может быть много).

Index - это собственный номер дескриптора, от 0 до 8191. Так как поле индекса состоит из 13 бит, то максимальное число дескрипторов, одновременно существующих в системе равно 2 13, т.е. 8192. Это довольно-таки много и вполне удовлетворяет любым системным запросам. На самом деле, число дескрипторов можно значительно увеличить за счёт использования множества дополнительных локальных дескрипторных таблиц. 

Использование селекторов достаточно просто. Для  тех дескрипторов, которые будут  определены заранее, например, сегментов  кода, стека и данных, селекторы  подготавливаются как константы  и затем используются для загрузки в сегментные регистры. Для дескрипторов, которые программа будет динамически  создавать, селекторы придётся определять в переменных и загружать в  сегментные регистры из памяти либо конструировать "на ходу", или даже как константы - всё зависит от конкретных условий.

Обращение к  дескрипторной таблице процессор  производит только в момент загрузки в сегментный регистр нового селектора. После этого содержимое дескриптора  копируется в так называемый "теневой  регистр", к которому имеет доступ только сам процессор и из которого оно в дальнейшем используется. Любое  последующее обращение к сегменту будет происходить с помощью  теневого регистра, без обращения  к дескрипторной таблице и  не потребует лишних тактов на циклы  чтения памяти. Правда, эти такты  тратятся каждый раз, когда вы загружаете новый селектор, но это не высокая  плата за защиту дескрипторов от недозволенного доступа.

При загрузке недопустимого  значения селектора процессор будет  генерировать исключение, даже если вы не обращались через него к памяти. 

Работа  прерываний 

В защищённом режиме работа прерываний происходит следующим образом:       

Во-первых, вводится новый класс прерываний, генерируемых самим процессором при нарушениях условий защиты - так называемые исключения (exceptions). Число возможных вектором прерываний по-прежнему равно 256, но 32 из них - от 00h до 1Fh используются исключениями.

Во-вторых, вместо дальних адресов в таблице прерываний используются дескрипторы специальных системных объектов, так называемых шлюзов.        

В-третьих, сама таблица прерываний, которая называется IDT (Interrupt Descriptors Table), может находится по любому адресу памяти.

Все эти особенности  появились в процессоре Intel80386 и  в полном объёме, с небольшими дополнениями, используются во всех 32-разрядных процессорах. Прерывания с векторами от 00 до 1Fh, т.е. исключения - это основа защищённого режима. Благодаря исключениям процессор автоматически реагирует на любые попытки нарушить защиту системы и позволяет их корректно обработать. Благодаря разделению кода и данных по уровням привилегий, обработчики прерываний можно надёжно изолировать от других программ.  В грамотно построенной операционной системе никакая программа не сможет перехватить прерывание, изменить код или даже просто прочитать его, выйти за предел отведённых ей адресов и пр. Благодаря исключениям, операционная система может контролировать любые нарушения условий, поставленных ею. Когда срабатывает прерывание, процессор должен передать управление соответствующей процедуре-обработчику. В режиме реальных адресов это происходит сразу - из памяти выбирается вектор и по dw:dw адресу происходит переход. В защищённом режиме ситуация обстоит сложнее - перед передачей управления процессор производит множество проверок возможности доступа к обработчику прерывания - обеспечивает защиту. 

Адрес, по которому произойдёт переход на обработчик прерывания, находится в дескрипторе прерывания. Каждому вектору прерыванию соответствует свой дескриптор, все они (до 256) объединяются в специальную таблицу дескрипторов прерываний (IDT) и по формату похожи на дескрипторы сегментов. 
 
 
 
 
 
 
 

    Список  использованной литературы: 

    1. http://dgs-srl.com/evmt5.html
    2. http://citforum.ru/hardware/memory/mem_0505.shtml
    3. Г.В. Орловский "Введение в архитектуру микропроцессора 80386", Санкт-Петербург, 1992 г.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Компиляция  и отладка ассемблерных программ.

Общие сведения о языке  Ассемблера.

Машинный  язык – это комбинации, в виде строго организованных последовательностей нулей и единиц. Таким образом, внешне являясь полиглотом, компьютер понимает только один язык — язык машинных команд.

Ассемблер стал следующей ступенью в развитии программирования, поскольку дал возможность писать программы намного быстрее и легче, нежели это происходило на языках машинных кодов, хотя по легкости, ему далеко до языков высокого уровня. Язык ассемблера – это символический аналог машинного языка. Этот язык точно отражает все особенности машинного языка. Именно поэтому, в отличие от языков высокого уровня, язык ассемблера для каждого типа компьютеров свой. Главным его достоинством является то, что на языке ассемблера все элементы программы представлены в символической форме. Преобразование символических имен команд в их двоичные коды возлагаются на специальную программу – ассемблер, которая освобождает программиста от трудоемкой работы и исключает неизбежные при этом ошибки.

Символические имена, вводимые при программировании на языке ассемблера, как правило, отражают семантику программы, а  аббревиатура команд – их основную функцию.

Например:  

PARAM – параметр;

TABLE – таблица;

MASK – маска;

ADD – сложение;

SUB – вычитание;

MUL – умножение 

Язык ассемблера позволяет эффективно писать и отлаживать значительно более сложные программы, чем машинный язык (до 1 - 4 Кбайт ).

Языки ассемблера являются машинно-ориентированными, т. е. зависимыми от машинного языка и структуры соответствующего микропроцессора, так как в них каждой команде микропроцессора присваивается определенное символическое имя.

Языки ассемблера обеспечивают существенное повышение  производительности труда программистов  по сравнению с машинными языками  и в то же время сохраняют возможность  использовать все программно-доступные  аппаратные ресурсы микропроцессора. Это дает возможность квалифицированным  программистам составлять программы, выполняемые за более короткое время  и занимающие меньший объем памяти по сравнению с программами, создаваемыми на языке высокого уровня.

В связи с  этим практически все программы  управления устройствами ввода/вывода (драйверы ) пишутся на языке ассемблера не смотря на наличие достаточно большой номенклатуры языков высокого уровня. 

С помощью языка  ассемблера программист может задать следующие параметры: 

  1. мнемонику ( символическое имя ) каждой команды машинного языка микропроцессора;
  2. стандартный формат для строк программы, описываемой на ассемблере;
  3. формат для указания различных способов адресации и вариантов команд;
  4. формат для указания символьных констант и констант целочисленного типа в различных системах счисления;
  5. псевдокоманды, управляющие процессом ассемблирования (трансляции) программы.

На языке ассемблера программа записывается построчно, т. е. для каждой команды отводится  одна строка.

Для микро –  ЭВМ, построенных на базе наиболее распространенных типов микропроцессоров, может существовать несколько вариантов языка ассемблера, однако практическое распространение  обычно имеет один – это так  называемый стандартный язык ассемблера.  

Каждая строка написанной на языке ассемблера программы  содержит четыре поля:

МЕТКА КОД ОПЕРАНД КОММЕНТАРИЙ 

Поле МЕТКА не является обязательным, оно помечает адрес той ячейки памяти, в которой размещен первый байт отмеченной команды. Метки используются в качестве адресов перехода команд передачи управления, и благодаря их наличию программист может не оперировать абсолютными адресами, а использовать символические адреса, что значительно удобнее. Метка может иметь длину от одного до шести символов, первым из которых должна быть буква. Во многих ассемблерах допускается использование меток любой длины, но распознаются только первые шесть символов. Метка не должна содержать пробелов и знаков пунктуации. В некоторых ассемблерах за последним символом метки должно следовать двоеточие.

Информация о работе Защищенный режим