Сделай Сам Свою Работу на 5

Проблемы страничной переадресации





В реальном режиме (при отключенной страничной переадресации) логический адрес, формируемый прикладной программой, совпадает с физическим адресом, фигурирующим на шинах расширения. Тут все просто, правда, в стандартном (а не большом) реальном режиме доступен только первый мегабайт адресов (толь­ко устройства в области UMA).

В защищенном режиме в принципе доступно все физическое адресное простран­
ство, но появляются проблемы, связанные с отображением логических адресов на
физические. Отображением (поддержкой таблиц переадресации) ведает ОС, при­
ложения могут только узнать карту отображений (получить список физических
адресов страниц для какой-то области своей виртуальной памяти). Какие-то об­
ласти могут в данный момент и не присутствовать в ОЗУ (они могут быть выгру^
женными на диск). У драйверов устройств возможностей больше — они могут за­
просить блок памяти с последовательными физическими страницами и потребовать
фиксации определенных страниц (запретить их выгрузку из ОЗУ).


12.5. Процессоры х86________________________________________________ 473

При организации прямого доступа к памяти, как по стандартным каналам DMA, так и используя ведущие устройства шин ISA и PCI, возникает проблема пересе­чения границ страниц. Если приложение хочет выполнить обмен по DMA с обла­стью доступной ей памяти непосредственно, то оно должно запросить у ОС физи­ческий адрес, которому соответствует логический адрес предполагаемого буфера обмена. Именно этот физический адрес должен задаваться устройству, выполня­ющему DMA, при инициализации сеанса обмена (указании начального адреса, длины блока и запуске канала). В каждом сеансе обмена не должна пересекаться граница страницы, которой оперирует блок страничной переадресации, посколь­ку следующая логическая страница может иметь физическое отображение в про­извольном (относительно предыдущей страницы) месте. Чаще всего ОС опери­рует страницами по 4 Кбайт, при этом пересылка больших блоков данных ведется «короткими перебежками», между которыми процессор должен выполнять повтор­ную инициализацию DMA. Эта проблема решается усложнением контроллеров DMA — применением «разбросанной записи» в память (scatter write) и «собира­ющего чтения» памяти (gather read). Контроллеру DMA задается список описате­лей блоков (начальный адрес и длина). Отработав очередной блок памяти, кон­троллер переходит к следующему, и так до конца списка. Такие возможности имеет, например, стандартный контроллер PCI IDE (см. п. 9.2.1). Стандартный контроллер DMA имеет и другую «страничную проблему», связанную с реализа­цией регистров страниц (см. п. 12.4).





Проблема пересечения границ может решаться и иначе, без усложнения кон­троллера DMA. Для этого в памяти резервируется буфер значительного размера, отображенный на непрерывную область физической памяти, и обмен данными физическое устройство выполняет только с этим буфером. Однако такой буфер рядовое приложение создать не может; он может быть организован лишь драйве­ром устройства. Приложения могут только получать указатели на этот буфер и об­мениваться с ним данными. Таким образом, по пути от приложения к устройству появляется дополнительная «перевалочная база» (буфер драйвера) и дополни­тельная пересылка данных, что приводит к дополнительным затратам времени.

Инструкции ввода-вывода

Для обращения программы к пространству ввода-вывода предназначены всего четыре инструкции процессора: IN (ввод из порта в регистр процессора), OUT (вы­вод в порт из регистра процессора), INS (ввод из порта в элемент строки памяти) и OUTS (вывод элемента из строки памяти в порт). Последние две инструкции, появившиеся с процессором 80286, могут использоваться с префиксом повтора REP, что обеспечивает быструю пересылку блоков данных между портом и памя­тью. Обмен данными с портами, при котором применяют строковые инструкции ввода-вывода, получил название PIO(Programmed Input/Output — программиро­ванный ввод-вывод). Скорость такого обмена превышает скорость стандартного канала прямого доступа (DMA), правда, DMA в отличие от PIO почти не занимает процессорного времени.




474 Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера

Разрядность слова, передаваемого за одну инструкцию ввода-вывода, может со­ставлять 8, 16 или 32 бита. В зависимости от «выровненности» адреса по границе слова и разрядности данных используемой шины это слово может передаваться за один или несколько циклов шины с указанием соответствующего нарастающего адреса в каждом цикле обращения к памяти. Инструкции ввода-вывода порожда­ют шинные циклы обмена, в которых вырабатываются сигналы чтения порта/за­писи в порт. На шине ISA это сигналы IORD*и IOWR* соответственно; они и отли­чают пространство ввода-вывода от пространства памяти, где соответствующие операции чтения и записи вырабатывают сигналы MEMRD*и MEMWR*.На шине PCI разделение памяти и пространства ввода-вывода происходит иначе — здесь тип операции кодируется четырехбайтной командой, в зависимости от типа ин­струкции, выполняемой процессором.

Во избежание недоразумений и для экономии шинных циклов рекомендуется выравнивать адреса 16-битных портов по границе слова, а 32-битных — по грани­це двойного слова. Обращения по выровненным адресам выполняется за один цикл системной шины. Обращение по невыровненным адресам выполняется за несколько циклов, причем однозначная последовательность адресов обращений (которая зависит от модели процессора) не гарантируется. Так, например, одна инструкция вывода слова по нечетному адресу приведет к генерации двух смеж­ных шинных циклов записи. При программировании обращений следует учиты­вать специфику устройств ввода-вывода. Если, например, устройство допускает только 16-разрядные обращения, то старший байт его регистров будет доступен лишь при вводе-выводе слова по четному адресу.

Некоторую сумятицу в стройную систему адресации вводят регистры AT А. Здесь регистр 1FO (1 канал) является 16-битным регистром данных, но в то же время есть и совершенно независимый от него 8-битный регистр 1F1. В Serial ATA эта тема развита — здесь имеются еще четыре 16-битных регистра с адресами (относи­тельно базового адреса блока командных регистров) 2, 3, 4 и 5, которые раньше были 8-битными.

В реальном режиме процессора программе доступно все пространство адресов ввода-вывода. В защищенном режиме 32-разрядных процессоров (частным случаем ко­торого является и виртуальный режим V86) имеется возможность программного ограничения доступного пространства ввода-вывода, определяя его максималь­ный размер (начиная с нулевого адреса и в пределах 64 К), а внутри разрешенной области доступ может быть разрешен или запрещен для каждого конкретного ад­реса. Размер области и карта разрешенных портов (Ю Permission Bitmap) задает­ся операционной системой в дескрипторе сегмента состояния задачи (TSS). При обращении по неразрешенному адресу вырабатывается исключение процессора, а поведение его обработчика определяется операционной системой. Возможно снятие задачи-нарушителя (знаменитое сообщение «приложение... выполнило недо­пустимую операцию и будет закрыто»). Возможен и другой вариант, когда по об­ращению к порту монитор операционной системы выполняет некоторые действия, создавая для программы иллюзию реальной операции ввода-вывода. Таким обра­зом виртуальная машина по операциям ввода-вывода может общаться с виртуаль-


12.5. Процессоры х86________________________________________________ 475

ными устройствами. Заметим, что ОС Windows 9x не особо заботится о виртуа­лизации и защите ввода-вывода; здесь, например, из DOS-окна можно обращать­ся к любым портам, даже к портам устройств, занятых операционной системой.

Прерывания

В процессорах х86 используются аппаратные прерывания, программные преры­вания и исключения. Аппаратные прерывания были описаны выше; кроме того, к ним относится и специфичное (и неиспользуемое прикладными программами) прерывание SMI для входа в режим системного управления (SMM). Программные прерывания по сути прерываниями и не являются — это лишь короткая форма дальнего вызова ограниченного количества процедур, выполняемая инструкцией Int N (N=0-255). Программные прерывания, в частности, используются для вы­зовов сервисов BIOS и DOS. Исключения генерируются процессором и сопроцес­сором, когда при исполнении инструкций возникают особые условия (например, деление на ноль или срабатывание защиты). Исключения занимают векторы пре­рываний 0-31, которые частично пересекаются с векторами аппаратных преры­ваний ведущего контроллера и NMI, а также с векторами сервисов BIOS. В про­цессорах 8086/88 исключения назывались внутренними прерываниями, их было совсем мало. По мере «взросления» процессоров добавлялись новые исключения; исключениями особо богаты современные процессоры при работе в защищенном режиме. На исключениях строится защита и виртуальная память в многозадач­ных ОС защищенного режима.

В реальном режиме прерывания работают довольно просто, и их обработчики могут находиться в любом месте физически адресуемой памяти (ОЗУ или ПЗУ). В таблице прерываний, начинающейся с нулевого адреса, каждый вектор преры­ваний представляется дальним указателем на процедуру обработки (16-байтные смещение и сегмент). Внедрение собственных обработчиков прерываний пред­ставляет собой несложную задачу, если прерывание используется монопольно одним устройством и соответствующим ему единственным модулем ПО. В реаль­ном режиме любая программа может управлять флагом разрешения аппаратных прерываний; некорректное управление флагом может приводить к различным неприятностям — от сбоя системного времени до «зависания» компьютера.

В защищенном режиме прерывания работают гораздо сложнее. Таблица преры­ваний здесь содержит 8-байтные дескрипторы прерываний. Их обработчики долж­ны быть подключены к ядру ОС, постоянно присутствующему в физической па­мяти. Иначе возможна ситуация, когда, например, аппаратное прерывание вызовет обработчик, выгруженный в данный момент на диск менеджером виртуальной памяти. Обработка такого прерывания будет чрезвычайно долгой (потребуется подкачка страницы). Позволять любой программе управлять флагом разрешения прерываний для многозадачных ОС нельзя из соображений общей устойчивости системы. Сам процесс обработки прерываний (и исключений) в защищенном ре­жиме существенно отличается от прерываний реального режима, и в современных процессорах и ОС имеются средства виртуализации прерываний, о чем подроб-


476______ Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера

нее можно прочитать в [6,7]. Заметим, что в ОС Windows 9x каждое окно MS-DOS представляет собой отдельную виртуальную машину с собственной таблицей пре­рываний «реального» вида, и работа с прерываниями в ней практически не отли­чается от работы в «чистой» MS-DOS. Для установки обработчиков прерываний, требуемых программам защищенного режима, используются вызовы специальных сервисов ОС, и обработчик оформляется особым образом в соответствии с согла­шениями этой ОС (не так, как для MS-DOS).

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.