RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : А вот вопрос, однако...


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Юрий Пронякин
To : valerius
Subj : А вот вопрос, однако...

>> Не забывай, что драйверы в твоём проекте грузит OS/2, а привилегии сегментам раздаёт микроядро, ничего про OS/2 не знающее. Оно же понятия не имеет, что вот в этот вот кусочек памяти находится драйвер, которому к портам лазить нужно.
>
> Не самО микроядро, а некий сервер (уже получивший эти ресурсы ранее у микроядра и сервера sigma0).

Я полагал, что сервер делает это не сам, а вызывает функцию микроядра MemoryControl. Я не прав?
Ладно, в любом случае упомянутый тобой сервер находится точно в таком же положении - он тоже понятия не имеет, кто это к порту ломится.
Поясняю мысль: есть некий кусок памяти (линейной), выделенной под исполнение виртуальной OS/2. В самОй хостовой системе есть какие-то компоненты, ответственные за этот кусок. Но гостевая OS/2 для них - чёрный ящик, а это значит, что они ничего не знают о принадлежности каждого отдельно взятого байта рассматриваемого куска памяти к тому или иному компоненту OS/2. Для них вся OS/2 - одно монолитное приложение.

> Надо придумать, как за саму OS/2 сделать запрос этих портов и прочих ресурсов у сервера-менеджера ресурсов.

Проблема, как мне представляется, не в том, как запросить, а в том, как позволить лазить к портам только конкретному драйверу и запретить всем остальным.

> (OS/2 не знает, что надо запросить эти ресурсы, но (в случае L4Linux) linux-то как-то знает, что ему надо запросить ресурсы, и запрашивает. Я думаю, аналогично линуксу можно сделать и с OS/2)

Линукс (в том числе и драйверы) патчится на уровне исходных текстов, поэтому гипервизор имеет информацию о том, какой именно модуль обращается за ресурсом.

>>> Пейджер может решить отобразить i/o flexpages в адресное пространство приложения, и тогда доступ к порту появится, и операция in/out будет успешной.
>>
>> Но пейджер - он вне OS/2, И он не знает, осевой драйвер это к порту лезет или кто другой. Что делать? Разрешать этот доступ всем без исключения?
>
> Нет, OS/2 сама модифицируется (наверное, Afterburner'ом) так, что она запрашивает ресурсы у этого пейджера.

А толку от модификации? Драйверы лазают к портам управляемых ими устройств, ни у кого позволения не спрашивая.

> Как я понимаю, для каждого ресурса (область памяти или кусок пространства портов) сервер-менеджер ресурсов следует политике "серверу, первому запрашивающему ресурс, отдать этот ресурс, а остальным отказать в доступе". Ресурсы в проекте L4Ka Virtualization раздает сервер marzipan resource monitor. В случае Линукса, мы явно указываем, кроме того, сколько памяти отдать линуксу, и ограничиваем прочие ресурсы -- через команднуб строку marzipan. Аналогично можно сделать и с OS/2.

Это ограничить можно, но обрати внимание - я говорю не о том, как не дать доступа к портам никому, кроме OS/2, а о том, как внутри OS/2 позволить лазить к портам толко тем, кому требуется, и не дать это делать никому другому.
На самом деле проблема не столь критична (можно просто считать, что никто посторонний туда не лазает - раз в настоящей OS/2 всё работает), но из того, что OS/2 для виртуализатора - чёрный ящик, вытекает ещё одна проблема, куда как более существенная, и её решения я пока не вижу.

> Пока насчет 16-битгного кода не все ясно, но, как уже подсказали, микроядро L4/Fiasco позволяет отдавать usermode-программам некоторые селекторы в GDT.

И? У нас ведь проблема: для отдельных частей уже выделенного микроядром большого 32-разрядного сегмента наплодить 16-разрядных алиасов. Это совсем не то же самое, что править дескриптор того большого сегмента.


Fri 22 Jun 2007 23:42 Mozilla/5.0 (OS/2; U; Warp 4.5; ru-RU; rv:1.7.12) Gecko/2005




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.