Учебное пособие по дисциплине АПЭВМ Курейчик КП, Минск 2006. Учебное пособие по дисциплине "апэвм" Минск 2006 содержание введение
Скачать 4.42 Mb.
|
32-БИТНЫЕ ПРОЦЕССОРЫ ОБЩИЕ СВЕДЕНИЯ Родоначальником семейства 32-разрядных процессоров для ПЭВМ стал процессор Intel 80386. Этот процессор был значительным шагом вперед по сравнению с предыдущими процессорами этой фирмы. Сохраняя полную совместимость с 16-битными процессорами на уровне команд, он имеет следующие новшества: • 32-разрядные регистры, шины и команды • реализованный на аппаратном уровне механизм работы с виртуальной памятью • механизм защиты памяти, принадлежащей разным задачам - по привилегиям; • расширенные возможности отладки • режим виртуальной машины Virtual86 • повышенная производительность, связанная с улучшенным технологическим процессом производства CH MOS3 и конвейерной обработкой данных Следующий процессор, Intel 80486, стал вдвое более производительным и воплотил в себе следующие нововведения: • встроенный математический сопроцессор • кэш-память размером 8 Кбайт, размещенная на кристалле процессора • Процессор Pentium, пришедший на смену i80486, был еще более насыщен новыми технологическими новинками, которые включали в себя: • суперскалярную архитектуру (несколько команд за один такт) • раздельное кэширование данных и команд • 64-разрядная шину данных • поддержка многопроцессорности (впрочем, ограниченная) • средства задания размера страницы памяти • возможности самодиагностики и управления производительностью Процессоры семейства Pentium II разделились на несколько подсемейств, ориентированных на различные задачи, но общим у них является: • новый набор команд MMX для работы с 64-разрядными данными • кэш-память второго уровня (первый уровень - 64 Кбайт - размещен непосредственно в ядре) размером до 512 Кбайт, работающая на половинной частоте процессора • динамическое исполнение - возможность программирования некоторых микроопераций процессора, перезаписывая особое ПЗУ микрокода Так как аналоги процессоров Pentium не имеют каких-либо значимых отличий с точки зрения архитектуры, то рассмотрены отдельно не будут. 12 ФИЗИЧЕСКАЯ СТРУКТУРА Физическая структура процессора рассмотрена на примере процессора Pentium. Схема приведена ниже. Рис. 3. Физическая структура процессора Pentium. РЕГИСТРЫ Процессоры всех семейств имеют общий набор регистров. РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ EAX AX AH AL EBX BX BH BL 13 ECX CX CH CL EDX DX DH DL ESI SI EDI DI EBP BP ESP SP СЕГМЕНТНЫЕ РЕГИСТРЫ CS DS ES SS FS GS РЕГИСТР ФЛАГОВ AC: флаг проверки выравнивания. При обращении к невыровненному адресу (например, к нечетному при установленном выравнивании на границе слова) генерируется исключение. Только в 486 и выше. VM: virtual mode - флаг виртуального режима процессора. Установка флага в 1 переводит процессор в этот режим. RF: возобновление. При установленном флаге исключительная ситуация не генерирует отладочного исключения, что позволяет выполнить следующую команду. Используется в отладчиках для возможности обработки исключительной ситуации, не позволяя отладчику вызывать самого себя при возникновении исключения. NT: флаг вложенности задачи. Используется для вызовов вложенных задач и возврату к прерванной задаче (обычно при обработке прерываний). IOPL: содержит уровень привилегий ввода-вывода OF 14 DF IF TF SF ZF AF РЕГИСТРЫ УПРАВЛЕНИЯ ПАМЯТЬЮ GDTR: global descriptor table register - регистр глобальной таблицы дескрипторов. Содержит базовый адрес и границу сегмента. Загрузка регистра возможна указанием селектора сегмента, остальная информация берется из таблицы дескрипторов (селектор - индекс в таблице). Большинство защищенных систем не позволяют обращаться к этому регистру. LDTR: local descriptor table register - регистр локальной таблицы дескрипторов. Содержит базовый адрес, границу сегмента и селектор сегмента (индекс в таблице глобальных дескрипторов - GDT). Загрузка регистра возможна указанием селектора сегмента, остальная информация берется из таблицы дескрипторов (селектор - индекс в таблице). Большинство защищенных систем не позволяют обращаться к этому регистру. IDTR TR: task register - регистр задачи. Содержит базовый адрес, границу сегмента. Когда происходит прерывание, вектор прерывания используется как индекс в таблице дескрипторов прерываний для получение адреса шлюза (см. Защищенный Режим). Большинство защищенных систем не позволяют обращаться к этому регистру. РЕГИСТРЫ УПРАВЛЕНИЯ CR0: регистр состояния процессора CR1: зарезервированный регистр CR2: регистр сбоя подкачки страниц. Если при загрузке или выгрузке страниц возникает ошибка, этот регистр содержит линейный адрес команды, вызвавшей ошибку CR3: базовый регистр страничного каталога. Используется при реализации страничного механизма работы с памятью ОТЛАДОЧНЫЕ РЕГИСТРЫ Используются при отладке программ, особенно зашитых в ПЗУ. Все имеют разрядность 32 бита. DR0 -- DR3: линейные адреса контрольных точек останова DR6: 15 состояние отладки DR7: регистр управления отладкой DR4, DR5: зарезервированы ТЕСТОВЫЕ РЕГИСТРЫ TR3 -- TR7: физически зависят от конкретной реализации процессора. Используются для проверки работы кэша и блока ассоциативной трансляции 16 РЕАЛЬНЫЙ РЕЖИМ ОБЩИЕ СВЕДЕНИЯ Реальным называется режим работы процессора после начальной загрузки. Процессоры первого поколения (i8088 и i8086) могли работать только в таком режиме. Процессор i80286 и 32-битные процессоры могут работать и в других режимах (защищенном и виртуальном), но после перезагрузки системы все равно находятся в реальном режиме. Этот режим является базовым режимом для операционной системы DOS, другие системы также используют его перед переключением в другие режимы. РАБОТА С АДРЕСАМИ В реальном режиме линейный (физический) адрес формируется при помощи сегмента и смещения. Сегмент обычно хранится в специальном регистре - сегментном или указывается явно. При формировании 20-разрядного адреса (именно такова разрядность адресной шины первых процессоров) сегмент содержит первые 16 разрядов. Смещение содержит младшие 16 разрядов, 12 из которых добавляются к сегменту. Такая схема получения адреса связана с тем, что в первых процессорах разрядности регистров не хватало для формирования полного адреса. Рис. 4. Схема получения линейного адреса. Логично предположить, что при сложении сегмента и части смещения может возникнуть переполнения. В этом случае процессоры 8088 и 8086 просто отбросят старший, 21-ый бит и адресация будет производится от начала памяти. Старшие процессоры поступят также в случае, если их адресная линия А20 (т.е. 21 бит на адресной шине) блокирована. В противном случае произойдет обращение к памяти за пределами 1-го мегабайта, что используется при работе по интерфейсу HMA. В отличие от других режимов, в реальном режиме вся память является доступной для чтения и записи (кроме областей ROM BIOS) всем программам, что не позволяет организовать безопасную многозадачную работу. 17 ОБРАБОТКА ПРЕРЫВАНИЙ При выполнении инструкции INT или генерации аппаратного (асинхронного) прерывания вызывается системная процедура, адрес которой содержится в таблице векторов прерываний. Для получения нужного индекса в таблице номер прерывания умножается на 4. Из таблицы выбирается дальний указатель (4 байта - сегмент и смещение) на точку входа, сохраняются в стеке CS , IP и флаги, блокируются прерывания (флаг IF), трассировка (флаг TF) и выполняется переход в точку входа. По команде IRET управление возвращается в точку вызова или прерванного управления (в случае асинхронного прерывания). Адрес таблицы прерываний для процессоров 808x всегда один - начало памяти (0000:0000), для старших процессоров он определяется содержимым регистра IDTR. 18 ЗАЩИЩЕННЫЙ РЕЖИМ ОБЩИЕ СВЕДЕНИЯ Перевод процессора в защищенный режим позволяет полностью реализовать все возможности, заложенные в его архитектуру и недоступные в реальном режиме. Сюда можно отнести: Увеличение адресуемого пространства до 4 Гбайт. Возможность работать в виртуальном адресном пространстве. Организация многозадачного режима. Страничная организация памяти. ОБРАБОТКА ПРЕРЫВАНИЙ В реальном режиме для обработки прерываний используется таблица векторов прерываний, расположенная в первом килобайте адресного пространства. Эта таблица состоит из 256 элементов размером 4 байта, которые содержат полный адрес обработчиков прерывания в формате <сегмент:смещение>. Как вы знаете, существуют аппаратные и программные прерывания. Аппаратные прерывания вырабатываются периферийными устройствами, как правило, при завершении ими операции ввода/вывода. Эти прерывания являются асинхронными по отношению к запущенным программам. Программные прерывания вызываются командой INT. Программные прерывания являются синхронными, так как они инициируются самой программой. В ответ на прерывание любого типа в реальном режиме в регистры CS:IP процессора загружается адрес, взятый из соответствующей ячейки таблицы векторов прерываний, после чего управление передается по этому адресу. Обработчик прерываний, выполнив все необходимые действия, возвращает управление прерванной программе, выполняя команду IRET. Программы MS-DOS широко используют программные прерывания для получения обслуживания от MS-DOS и BIOS. Механизм обработки прерываний в защищенном режиме намного сложнее. Для определения адресов обработчиков прерываний в защищенном режиме используется дескрипторная таблица прерываний IDT (Interrupt Descriptor Table ), расположение которой определяется содержимым специального системного регистра. Эта таблица содержит дескрипторы специальных типов - вентили прерываний, вентили исключений и вентили задач. Вентиль прерываний содержат не только логический адрес обработчика прерывания, но и поле доступа. Программа может вызвать прерывание только в том случае, если она имеет для этого достаточный уровень доступа. Таким образом, операционная система, работающая в защищенном режиме, может запретить прикладным программам вызывать некоторые или все программные прерывания. 19 Обычные приложения Windows никогда не должны вызывать программные прерывания, так как для взаимодействия с операционной системой используется другой механизм, основанный на вызове функций из библиотек динамической загрузки. Тем не менее, некоторые прерывания (например, INT 21h) все же можно использовать. Для таких прерываний Windows выполняет трансляцию адресов из формата защищенного режима в формат реального режима. Приложение Windows не должно пытаться изменить дескрипторную таблицу прерываний. Не следует также думать, что эта таблица расположена по адресу 0000h:0000h, селектор 0000h вообще не используется для адресации памяти. Если в этом нет особой необходимости, приложение Windows не должно вызывать программные прерывания. Для работы с файлами, принтером, для вывода на экран следует вызывать функции программного интерфейса операционной системы Windows. РАБОТА С АДРЕСАМИ В защищенном режиме, как и в реальном, логический адрес состоит из двух компонент. Однако эти компоненты называются не сегмент и смещение, а селектор и смещение . Для вычисления физического адреса в процессоре 80286 используются также две таблицы дескрипторов - глобальная таблица дескрипторов GDT (Global Descriptor Table ) и локальная таблица дескрипторов LDT (Local Descroptor Table ). Селектор используется для адресации ячейки одной из таблиц дескрипторов, содержащей помимо прочей информации базовый 24-разрядный адрес сегментов. Для получения физического адреса базовый адрес складывается со смещением, расширенным до 24 разрядов (рис. 5). Рис. 5. Получение физического адреса в процессоре 80286. Согласно этой схеме адресации памяти, селектор содержит номер ячейки таблицы дескрипторов, но не компоненту физического адреса. Программа может задавать не любые значения селекторов, а только те, которые соответствуют существующим ячейкам таблицы дескрипторов. Разумеется, 20 программа может загрузить в сегментный регистр любое значение, однако при попытке обратиться к сегменту памяти с использованием неправильного селектора работа программы будет прервана. Таким образом, несмотря на то, что компоненты адреса остались, как и в реальном режиме, 16-разрядными, новая схема адресации защищенного режима процессора 80286 позволяет адресовать до 16 Мбайт памяти, так как в результате преобразования получается 24-разрядный физический адрес. Кроме индекса, используемого для выбора ячейки дескрипторной таблицы при формировании физического адреса, селектор содержит еще два поля (рис. 6). Рис.6. Формат селектора. Поле TI (Table Indicator ) используется для выбора таблицы дескрипторов. Как мы уже говорили, существуют таблицы дескрипторов двух типов. В любой момент времени может использоваться одна глобальная таблица дескрипторов и одна локальная таблица дескрипторов. Если бит TI равен 0, для выборки базового адреса используется глобальная таблица дескрипторов GDT, если 1 - локальная LDT. Зачем нужно использовать дескрипторные таблицы двух типов? В мультизадачной операционной системе можно использовать одну глобальную таблицу дескрипторов для описания областей памяти, принадлежащей операционной системе и несколько локальных таблиц дескрипторов для каждой задачи. В этом случае при соответствующей настройке базовых адресов можно изолировать адресные пространства операционной системы и отдельных задач. Если сделать так, что каждая задача будет пользоваться только своей таблицей дескрипторов, любая задача сможет адресоваться только к своим сегментам памяти, описанным в соответствующей таблице, и к сегментам памяти, описанным в глобальной таблице дескрипторов. В системе может существовать только одна глобальная таблица дескрипторов. Поле RPL (Requested Privilege Level ) селектора содержит уровень привилегий, запрошенный программой при обращении к сегменту. Программа может обращаться только к таким сегментам, которые имеют соответствующий уровень привилегий. Поэтому программа не может, например, воспользоваться глобальной таблицей дескрипторов для получения доступа к описанным в ней системным сегментам, если она не обладает достаточным уровнем привилегий. На этом основана защита системных данных от разрушения (преднамеренного или в результате программной ошибки) со стороны прикладных программ. Таблица дескрипторов содержит, помимо базового адреса сегмента, другую информацию, описывающую сегмент (рис. 7). Точный формат дескриптора, а также других структур данных и системных регистров, имеющих отношение к работе в защищенном режиме, вы можете найти в 6 томе "Библиотеки системного программиста". 21 Рис. 7. Формат дескриптора сегмента процессора 80286. В частности, дескриптор содержит размер сегмента (предел). При вычислении физического адреса процессор следит за тем, чтобы физический адрес не выходил за пределы, указанные в дескрипторе сегмента. Программа не может обратиться к памяти, лежащей вне пределов, указанных в дескрипторе. Если же она попробует это сделать, ее работа будет прервана. Поэтому, создав, например, сегмент для хранения массива размером 100 байт, вы не сможете записать в него 101 байт или 10 Кбайт данных. Поле доступа содержит уровень привилегий сегмента и информацию о типе сегмента. Существуют сегменты кода, сегменты данных и системные сегменты. Кроме того, для сегмента кода можно запретить операцию чтения, а для сегмента данных - операцию записи. Поэтому операционная система может создать сегменты кода, которые можно выполнять, но нельзя читать, и сегменты данных, защищенные от записи. Что же касается привилегий, в процессорах 80ххх и Pentium существуют четыре уровня привилегий - от 0 до 3, причем наибольшие привилегии соответствуют уровню 0. Уровни привилегий часто называют также кольцами защиты (рис. 8). Рис. 8. Кольца защиты. В кольце 0 обычно работает ядро операционной системы. Кольцо 1 соответствует уровню привилегий драйверов, кольцо 2 - системам, таким как системы управления базами данных. В наименее привилегированном кольце 3 располагаются прикладные программы, запускаемые пользователем. Описанная выше схема распределения привилегий может изменяться от одной операционной системы к другой. В операционной системе Windows 3.1 в нулевом кольце располагаются только виртуальные драйверы, все остальные модули Windows, а также приложения, работают в кольце 3. Процессоры 80386, 80486 и Pentium используют более сложную схему адресации памяти, которая, однако, остается прозрачной для программиста. Преобразование адреса в этих процессорах является многоступенчатым. Программы адресуют память с помощью логического адреса, состоящего из 16- разрядного селектора и 32-разрядного смещения. Так же, как и в процессоре 22 80286, селектор используется для выборки базового адреса сегмента из глобальной или локальной таблицы дескрипторов. Отличие заключается в том, что во-первых, используются 32-разрядные базовый адрес и смещение, а во- вторых, результат сложения называется линейным адресом и используется не для непосредственной адресации памяти, а для дальнейших преобразований (рис. 9). Рис. 9. Преобразование логического адреса в линейный. Старшие десять бит линейного адреса используются как индекс в каталоге таблиц страниц (рис. 10). Рис. 10. Преобразование линейного адреса в физический. В каталоге таблиц страниц хранятся дескрипторы, содержащие помимо другой информации, физические адреса таблиц страниц. Следующие десять бит линейного адреса используются для выбора из таблицы страниц, адрес которой определяется старшими десятью битами линейного адреса. Таблица страниц может описывать до 1024 страниц размером 4096 байт. 23 Младшие двенадцать бит линейного адреса содержат смещение адресуемого байта внутри страницы. Отметим, что преобразование линейного адреса в физический выполняется процессором с помощью каталога таблиц страниц и таблиц страниц , подготовленных операционной системой. Программист, создающий приложения для Windows, никогда не работает с таблицами страниц или каталогом таблиц страниц. Он пользуется логическим адресом в формате <селектор:смещение>, поэтому схема преобразования логического адреса в физический остается для него прозрачной. Операционная система Microsoft Windows версии 3.1 может работать, как вы знаете, в стандартном и расширенном режиме . В первом случае используется схема адресации процессора 80286, даже если в компьютере установлен процессор 80386. Если Windows работает на процессоре 80386, 80486 или Pentium, при наличии достаточного объема оперативной памяти (больше 2 Мбайт) по умолчанию используется расширенный режим работы и, соответственно, схема преобразования адресов процессора 80386. Основное преимущество системы управления памятью расширенного режима работы Windows заключается в использовании виртуальной памяти. Виртуальная память работает на уровне страниц (описанных в каталогах страниц) и совершенно прозрачна для программиста. Операционная система Windows полностью управляет виртуальной памятью. Если программа пытается обратиться к странице, отсутствующей в памяти и выгруженной на диск, происходит прерывание работы программы, страница подгружается с диска, вслед за чем работа программы продолжается. Программа может заказывать для себя блоки памяти огромного размера, адресуясь к ним непосредственно, при этом возникает полная иллюзия работы с оперативной памятью большого размера. Описанная выше схема адресации в защищенном режиме накладывает ограничения на операции, которое приложение Windows может выполнять над селекторами. Приложение Windows не должно выполнять над селекторами арифметические операции и операции сравнения. Программируя для реального режима операционной системы MS-DOS, вы, возможно, при адресации блока памяти большого размера (больше 64 Кбайт) изменяли содержимое сегментных регистров. В защищенном режиме вы не можете делать никаких предположений относительно базового адреса следующего или предыдущего дескриптора в локальной или глобальной таблице дескрипторов. Сказанное не означает, что приложения Windows не могут работать с блоками памяти, занимающими несколько сегментов. В этом случае для адресации вам нужно использовать специальные методы. Однако, если вы составляете приложение на языке программирования С или С++, при определении указателей на блоки памяти размером больше, чем 64 Кбайт, можно воспользоваться ключевым словом huge. Для таких указателей при 24 необходимости будет автоматически выполняться переключение на нужные селекторы. Работа приложения Windows не должна зависеть от уровня привилегий, предоставленного приложению операционной системой, так как в новых версиях Windows этот уровень может измениться. 25 |