> Если же произвольный код уже выполняется, то при доступе такого кода к
> устройству, поддерживающему DMA, и отсутствии IOMMU, через это устройство можно ограничение
> на доступ к определенной области памяти обойти (попросить устройство записать/считать
> куда/откуда хочется).А вот не совсем...
см. ниже
> По-моему, потенциала там почти нет. Два разных ring 3 процесса (или нити
> в микроядре) могут быть разделены друг от друга не хуже, чем
> будучи на разных кольцах. Раз кольца есть, ими можно пользоваться, но
> и без них было бы почти так же.
Ну, вобщем, да.
> Часть проблемы в том, что то, как к конкретному устройству делать запрос
> об I/O, отличается между устройствами, а значит плохо ложится в такую
> универсальную прослойку - она снова становится "монолитным ядром", содержащим в себе
> кусочки кода, специфичные для драйверов разных устройств.
Счас посмотрел как работает DMA контроллер. Ему в спец. регистр пишется адрес в памяти, куда надо сгружать инфу.
Т.е. где, как и в каком формате в DMA запросе проезжает адрес в памяти - чётко детерминировано. А потому, эта I/O-прослойка будет элементарной.
А чтобы в регистр адреса не писали чего попало - сделать фильтр в I/O-фильтре микроядра, который бы смотрел: есть право доступа у этого драйвера к этой области этой длины или нет (раздачу памяти всё так же контролирует базовая микро-часть).
> P.S. Вижу, кто-то тут "заминусовал" сообщения выше по треду. По-моему, у нас
> нормальная дискуссия по теме, и минусы тут ни к чему, т.к.
> все сообщения являются "сигналом", а не "шумом", несмотря на чуточку разные
> мнения.
Видать сторонники Торвальдса в данном вопросе. Фанаты-маньяки монолита :)