КОМПЬЮТЕРНОЕ ЖЕЛЕЗО
HARDWARE FOR PC

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

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

Hosted by uCoz