Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Организация ввода-вывода. Лекции.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.84 Mб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение

высшего профессионального образования

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ПРИБОРОСТРОЕНИЯ И ИНФОРМАТИКИ»

Кафедра ИТ-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 Основная:

а) основная литература

  1. Assembler /В. Юров. – СПб: Издательство «Питер», 2006. – 624 с.:ил.

  2. Рудаков П.И., Финогенов К.Г. Программируем на языке ассемблера IBM PC. В 4-х частях. Ч. 3. Защищенный режим; Ч. 4. Программирование арифметического сопроцессора. – М.: «Энтроп», 2006 – 320 с., ил.

1.3.2 Дополнительная:

  1. Рощин А.В. Организация ввода-вывода. Часть 1. Виртуальные драйверы и виртуальное окружение Windows. – М.: МГАПИ, 2002 – 81 с.

  2. Рощин А.В. Организация ввода-вывода. Часть 2. Драйверы для Windows NT. – М.: МГУПИ, 2006 – 112 с.

Соломон Д., Руссинович М. Внутреннее устройство Microsoft Windows 2000 / Пер. с англ. – СПб: Питер, 2004. – 746 с.: ил.

1.4 Учебно-материальное обеспечение

  1. 1 MS Windows 95/98

  2. 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 (наивысший приоритет, DPLDescriptor 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).

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