Уточнение, кто решает сопоставления памяти и сопоставления портов ввода-вывода - PullRequest
1 голос
/ 17 марта 2012

Я немного изучил IO с отображением портов и IO с отображением в памяти, и я выяснил, как работает первый (еще не второй), так что если у вас есть кое-что хорошо объясненное о том, как выполняется IO с отображением в памяти (я слышал, чтоперехват ошибок страниц ОС для перенаправления их на устройства), пожалуйста, дайте мне знать.

В любом случае, мой вопрос: для связи с внутренними часами реального времени (RTS) используется сопоставление портов ввода / вывода, и вам необходимоиспользовать outb (byte_selected, 0x70) и аналогичные функции для порта 0x70 .. кто решил порт 0x70?Как я могу выяснить, где они объявлены?А как насчет ввода-вывода отображения памяти?Кто решает, какие адреса связаны с какими устройствами?И если я добавлю свое собственное устройство в систему, как будет отображаться его память?

У меня все еще много путаницы в связи с OS-hw ..

1 Ответ

1 голос
/ 17 марта 2012

Отображение памяти определяется производителем оборудования и устанавливается на шине.Они не могут быть изменены вообще, и правильные сопоставления должны быть считаны из спецификации оборудования.

Некоторые подключаемые шины, такие как PCI, работают, имея собственное адресное пространство для своих устройств.Они могут определять наличие устройств и их потребности в терминах ввода-вывода и назначать им диапазоны в этом зарезервированном пространстве.Затем процессор может получить к нему доступ через свое собственное пространство, используя регистры PCI, или более эффективно через DMA.См. Эту страницу для получения более подробной информации: http://tldp.org/LDP/tlk/dd/pci.html

Обратите внимание, что не все устройства работают с подключенным вводом / выводом - например, устройства USB не используют ввод / вывод памяти и обмениваются данными с хостом только через четко определенныеUSB-команды.

...