OSDev
http://osdev.su/

Вопрос про MMIO [x86]
http://osdev.su/viewtopic.php?f=5&t=602
Страница 1 из 1

Автор:  Evgeniy [ 19 июл 2012, 15:49 ]
Заголовок сообщения:  Вопрос про MMIO [x86]

Здравствуйте.

Хочу разобраться с таким зверем, как MMIO. По общему описанию понятно, что это способ общения с устройствами через использование некоторых зарезервированных блоков физического адресного пространства (но без расхода под это собственно ОЗУ). Но некоторые вопросы еще остались неясными:

1. Что/кто и как резервирует эти области, и можно ли их перебиндить на другие адреса?
2. Всеми ли устройствами можно манипулировать через MMIO?
3. Есть ли какой-то флаг или режим, игнорирующий обращение к MMIO для кода ядра, если вдруг произошло обращение по одному из забинденных адресов, чтобы исключить обращение к устройствам для тех участков кода, которым это не требуется?
4. Является ли работа с MMIO линейной? т.е. при каждом ли выполнении одной и той же последовательности команд записи и чтения (с момента чистого ресета компьютера) мы будем получать одинаковый результат? (подразумевается, что на одном и том же компьютере, или при эквивалентных конфигурациях)

Автор:  grindars [ 19 июл 2012, 15:59 ]
Заголовок сообщения:  Re: Вопрос про MMIO [x86]

Evgeniy писал(а):
1. Что/кто и как резервирует эти области, и можно ли их перебиндить на другие адреса?


На ПК - BIOS. Можно манипуляциями с чипсетом, но делать так не рекомендую - могут быть неопределенные последствия из-за SMBIOS и прочих резидентных частей биоса.

Evgeniy писал(а):
2. Всеми ли устройствами можно манипулировать через MMIO?

Большинством, не всеми.

Evgeniy писал(а):
3. Есть ли какой-то флаг или режим, игнорирующий обращение к MMIO для кода ядра, если вдруг произошло обращение по одному из забинденных адресов, чтобы исключить обращение к устройствам для тех участков кода, которым это не требуется?

Нет, с точки зрения проца MMIO отличается от памяти только выключенным (с помощью MTRR) кешированием.

Evgeniy писал(а):
4. Является ли работа с MMIO линейной? т.е. при каждом ли выполнении одной и той же последовательности команд записи и чтения (с момента чистого ресета компьютера) мы будем получать одинаковый результат? (подразумевается, что на одном и том же компьютере, или при эквивалентных конфигурациях)

Зависит от устройства, в которому идет обращение. Полагаться на это в общем случае нельзя.

Автор:  pavia [ 19 июл 2012, 16:09 ]
Заголовок сообщения:  Re: Вопрос про MMIO [x86]

Цитата:
1. Что/кто и как резервирует эти области, и можно ли их перебиндить на другие адреса?

Что-Материнка
Кто-BIOS
как- через PCI
Да обычная практика в виду того что расход ОЗУ иногда бывает.

Цитата:
2. Всеми ли устройствами можно манипулировать через MMIO?

Нет. Только PCI и то у тех у которых это реализовано.

3. Нету. Но ты можешь страницами сделать всё что тебе нужно.

4. Да. Даже чтение может изменять значения состояния устройства.

Автор:  Evgeniy [ 19 июл 2012, 16:25 ]
Заголовок сообщения:  Re: Вопрос про MMIO [x86]

Спасибо за столь оперативные ответы.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/