
- •1 Общие положения
- •1.1 Цели и задачи курса
- •3 Лекция № 2. Структуры данных защищенного режима
- •3.1 Ключевые вопросы
- •3.2 Текст лекции
- •4 Лекция № 3. Привилегии
- •4.1 Ключевые вопросы
- •4.2 Текст лекции
- •5 Лекция № 4. Защита
- •5.1 Ключевые вопросы
- •5.2 Текст лекции
- •6 Лекция № 5. Переключение задач
- •6.1 Ключевые вопросы
- •6.2 Текст лекции
- •7 Лекция № 6. Страничное преобразование
- •7.1 Ключевые вопросы
- •7.2 Текст лекции
- •8 Лекция № 7. Структура Windows 2000
- •8.1 Ключевые вопросы
- •8.2 Текст лекции
- •9 Лекция № 8. Основные компоненты системы
- •9.1 Ключевые вопросы
- •9.2 Текст лекции
- •10 Лекция № 9. Подсистемы окружения и исполнительная система
- •10.1 Ключевые вопросы
- •10.2 Текст лекции
- •11 Лекция № 10. Ядро и подсистема ввода-вывода
- •11.1 Ключевые вопросы
- •11.2 Текст лекции
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение
высшего профессионального образования
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ПРИБОРОСТРОЕНИЯ И ИНФОРМАТИКИ»
Кафедра ИТ-4 «Персональные компьютеры и сети»
УТВЕРЖДАЮ
Заведующий кафедрой ИТ-4
______________/Михайлов Б.М./
"____"_______________2007 г.
ЛЕКЦИИ
ПО ДИСЦИПЛИНЕ
1408 ОРГАНИЗАЦИЯ ВВОДА-ВЫВОДА
для студентов 4 курса факультета ИТ
специальности 230101
«Вычислительные машины, комплексы, системы и сети»
Обсуждены на заседании кафедры
«___» _________________ 2007 г.
Протокол № _____
Разработаны: проф., к.т.н. Рощин А.В.
Москва 2007
1 Общие положения
1.1 Цели и задачи курса
1 Цели, предметы и объекты изучения дисциплины
Цели изучения дисциплины:
Теоретическое и практическое освоение студентами процедур и методов ввода и вывода в защищенном режиме микропроцессоров 80х86, в операционных системах защищенного режима (Windows 95/98/NT/XP).
Формирование у студентов системного базового представления, первичных знаний, умений и навыков, достаточных для дальнейшего продолжения образования и самообразования их в области разработки и эксплуатации операционных систем защищенного режима, умения загружать и выгружать драйверы устройств в таких системах.
Предметы изучения:
Базовые определения и понятия.
Назначение и структура системных базовых структур данных.
Основные задачи исполнительных систем и систем ввода-вывода, а также их компонентов.
Взаимосвязь исполнительных систем и систем ввода-вывода с другими научными дисциплинами и областями практической деятельности человека.
Объекты изучения:
Операционная система защищенного режима, как целое, состоящее из частей, роль, место и связь ее частей как элементов системы.
Основные элементы операционной системы защищенного режима, их структуры, решаемые в них задачи, методы исследования, связь с другими разделами и другими дисциплинами, базовые понятия. Структуры данных, основные операции, выполняемые в процессе ввода-вывода, методы обработки запросов устройств.
Адресные пространства операционной системы, приложений, драйверов, использование сегментного и страничного преобразований, блокирование сегментов и страниц.
Механизм исключений, его роль в создании виртуального окружения, типы исключений, реализация процедур обработки исключений.
Обработка запросов на ввод-вывод, работа диспетчера ввода-вывода.
Программирование драйверов, статическая и динамическая загрузка драйверов.
1.2 Связь с другими дисциплинами
1.3 Рекомендуемая литература
1.3.1 Основная:
а) основная литература
Assembler /В. Юров. – СПб: Издательство «Питер», 2006. – 624 с.:ил.
Рудаков П.И., Финогенов К.Г. Программируем на языке ассемблера IBM PC. В 4-х частях. Ч. 3. Защищенный режим; Ч. 4. Программирование арифметического сопроцессора. – М.: «Энтроп», 2006 – 320 с., ил.
1.3.2 Дополнительная:
Рощин А.В. Организация ввода-вывода. Часть 1. Виртуальные драйверы и виртуальное окружение Windows. – М.: МГАПИ, 2002 – 81 с.
Рощин А.В. Организация ввода-вывода. Часть 2. Драйверы для Windows NT. – М.: МГУПИ, 2006 – 112 с.
Соломон Д., Руссинович М. Внутреннее устройство Microsoft Windows 2000 / Пер. с англ. – СПб: Питер, 2004. – 746 с.: ил.
1.4 Учебно-материальное обеспечение
1 MS Windows 95/98
NuMega SoftIce 4.0 Suite
2 Лекция № 1. Организация памяти в защищенном режиме
Продолжительность: 2 часа (90 мин.)
2.1 Ключевые вопросы
Цель и задачи курса.
Место памяти в работе операционной системы.
Основные понятия и определения: сегменты, страницы, дескрипторы сегментов, права доступа.
Виртуальное адресное пространство.
Трансляция виртуального адреса в линейный и физический.
Сегментное преобразование.
Страничное преобразование.
2.2 Текст лекции
При работе процессора i386+ в защищенном режиме используется два метода организации памяти:
сегментная,
страничная.
Операционная система Windows NT, о которой будет идти речь в дальнейшем, использует оба этих механизма.
В защищенном режиме рассматриваемого семейства процессоров может быть определено до 8192 (213) сегментов, причем, каждый из них может иметь размер до 4 Гбайт (232 байтов). К сожалению, семейство операционных систем Windows минимальным образом использует возможности сегментного режима: это семейство использует плоскую 32-разрядную модель памяти с размером линейного адресного пространства 4 Гбайта.
Процесс формирования линейного адреса в защищенном режиме показан на рисунке 1.1. Формат селектора показан на рисунке 1.2.
Каждый сегмент в процессоре описывается 8-байтной структурой данных – дескриптором сегмента. Дескриптор определяет положение элемента в памяти, размер занимаемой им области (лимит), его назначение и характеристики защиты. Для указания конкретного сегмента внутри таблицы дескрипторов используется 16-разрядный селектор. Он определяет номер записи внутри таблицы дескрипторов. Младшие 2 бита селектора определяют уровень привилегий режима, который может воспользоваться данным дескриптором. Третий бит определяет тип таблицы дескрипторов – глобальная или локальная. Остальные 13 разрядов селектора и определяют максимально возможное количество сегментов, к которым можно обратиться с помощью селектора.
Рисунок 1.1 – Формирование линейного адреса в защищенном режиме
Рисунок 1.2 – Формат селектора сегмента
Дескрипторы расположены в специальной таблице дескрипторов GDT – Global Descriptor Table, расположенной в памяти. Механизм работы с глобальной и локальной таблицами дескрипторов показан на рисунке 1.3.
Рисунок 1.3 – Схема работы с глобальной и локальной таблицами дескрипторов
В Windows NT определено 11 селекторов, из которых наиболее важными являются первые четыре:
Таблица 1.1 – Первые 4 сегмента Windows NT
Селектор Hex (bin) |
Назначение |
База |
Предел |
DPL |
Тип |
08 (001000) |
Code32 |
00000000 |
FFFFFFFF |
0 |
RE |
10 (010000) |
Data32 |
00000000 |
FFFFFFFF |
0 |
RW |
1b (011011) |
Code32 |
00000000 |
FFFFFFFF |
3 |
RE |
23 (100011) |
Data32 |
00000000 |
FFFFFFFF |
3 |
RW |
Каждый из этих четырех селекторов позволяет адресовать все 4 Гбайта линейного адресного пространства, причем трансляция производится в одни и те же физические адреса.
Первые два селектора имеют требуемый уровень привилегий DPL = 0 (наивысший приоритет, DPL – Descriptor Privilege Level, уровень привилегий дескриптора) и используются драйверами и системными компонентами для доступа к системному коду, данным и стеку. (Здесь следует отметить, что из четырех возможных уровней привилегий 0 – 4, предоставляемых данным типом процессоров, в операционных системах Windows используются лишь два уровня – 0 и 3.)
Вторые два селектора используются кодом пользовательского режима для доступа к коду, данным и стеку пользовательского же режима. Эти селекторы являются константами для Windows NT.
Преобразование пары селектор:смещение для указанных селекторов дает 32-битный линейный адрес, совпадающий со значением смещения виртуального адреса. То есть, в данном случае виртуальный и линейный адреса совпадают.
Наличие в дескрипторе поля, определяющего возможность чтения/записи/исполнения кода, может навести на мысль о том, что именно на этом уровне может быть выполнена защита памяти от неверного использования. Например, код прикладной программы в пользовательском режиме находится в сегменте с селектором 1b. Для этого селектора разрешены только операции чтения и исполнения. То есть, используя селектор 1b, программа не сможет модифицировать свой собственный код. Однако, та же программа, обращаясь к данным или стеку (селектор 23) найдет свой код по тому же смещению, что и в сегменте 1b (так как для всех указанных сегментов трансляция производится в одни и те же физические адреса), но режим доступа в данном случае позволяет выполнять операции чтения и записи. Таким образом, базовый способ использования сегментации в операционных системах семейства Windows не обеспечивает надлежащей защиты кода.
Рисунок 1.4 – Схема преобразования виртуального адреса в физический
Схема формирования линейного адреса и преобразования его в физический показана на рисунке 1.4.
После формирования линейного адреса задействуется механизм страничной организации памяти. Здесь следует отметить следующее:
каждый контекст памяти (адресное пространство процесса) представлено собственной таблицей трансляции линейного адреса в физический (адрес соответствующей таблицы загружается в управляющий регистр CR3),
каждый элемент таблицы страниц содержит бит, указывающий на возможность доступа к странице из пользовательского режима (все страницы доступны из режима ядра),
каждый элемент таблицы страниц содержит бит, указывающий на возможность записи в соответствующую страницу памяти.
Не надо забывать, что каждый элемент таблицы страниц содержит также бит, указывающий, представлена ли данная страница в оперативной памяти.
Два бита разрешения доступа и записи формируют следующий набор правил работы со страницами:
страница всегда может быть прочитана из режима ядра,
на страницу может быть произведена запись из режима ядра, только если установлен бит разрешения записи,
страница может быть прочитана из пользовательского режима, только если установлен бит доступа к странице из пользовательского режима,
на страницу может быть произведена запись из режима пользователя, только если установлены оба бита (разрешения записи и доступ из пользовательского режима),
если страница может быть прочитана, она может быть исполнена.
По умолчанию страницы памяти с исполняемым кодом не имеют разрешения на запись. Поэтому при попытке использования селектора данных для модификации кода будет сгенерировано исключение.
Для того, чтобы ядро операционной системы (Windows NT) – компоненты самой операционной системы и драйверы – всегда располагались по фиксированным виртуальным адресам, независимо от текущего контекста памяти, в NT осуществляется одинаковая трансляция для верхних двух гигабайт диапазона виртуальных адресов.
Для защиты кода операционной системы соответствующие элементы таблицы трансляции виртуальных адресов в физические помечены как недоступные из пользовательского режима. |
Соответственно, диапазон виртуальных адресов 2 – 4 Гб называют системным адресным пространством (system address space), а диапазон 0 – 2 Гб – пользовательским адресным пространством (user address space).
Здесь следует избегать путаницы между терминами адресное пространство процесса – контекст памяти процесса – и пользовательское адресное пространство. Пользовательское адресное пространство – это виртуальное адресное пространство, в котором в принципе может находиться любой пользовательский процесс.