Аппаратные интерфейсы ПК

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


В реальном режиме (при отключенной страничной переадресации) логический адрес, формируемый прикладной программой, совпадает с физическим адресом, фигурирующим на шинах расширения. Тут все просто, правда, в стандартном (а не большом) реальном режиме доступен только первый мегабайт адресов (толь­ко устройства в области 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. Для этого в памяти резервируется буфер значительного размера, отображенный на непрерывную область физической памяти, и обмен данными физическое устройство выполняет только с этим буфером. Однако такой буфер рядовое приложение создать не может; он может быть организован лишь драйве­ром устройства. Приложения могут только получать указатели на этот буфер и об­мениваться с ним данными. Таким образом, по пути от приложения к устройству появляется дополнительная «перевалочная база» (буфер драйвера) и дополни­тельная пересылка данных, что приводит к дополнительным затратам времени.


Содержание раздела