RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> > >> Не забывай, что драйверы в твоём проекте грузит OS/2, а привилегии сегментам раздаёт микроядро, ничего про OS/2 не знающее. Оно же понятия не имеет, что вот в этот вот кусочек памяти находится драйвер, которому к портам лазить нужно. > > > > > > Не самО микроядро, а некий сервер (уже получивший эти ресурсы ранее у микроядра и сервера sigma0). > > > > Я полагал, что сервер делает это не сам, а вызывает функцию микроядра MemoryControl. Я не прав? > > MemoryControl() -- это немного из другой оперы. Вообще, микроядро не оперирует сегментами -- оно оперирует страницами памяти -- flexpages. MemoryControl() позволяет задавать атрибуты страниц памяти. Для IA32 это: Default, Uncacheable, Write Combining, Write Through, Write Protected, Write Back. -- как я понял, это относится к кешируемости. К атрибутам сегментов это не имеет отношения. > > > Ладно, в любом случае упомянутый тобой сервер находится точно в таком же положении - он тоже понятия не имеет, кто это к порту ломится. > > Поясняю мысль: есть некий кусок памяти (линейной), выделенной под исполнение виртуальной OS/2. В самОй хостовой системе есть какие-то компоненты, ответственные за этот кусок. Но гостевая OS/2 для них - чёрный ящик, а это значит, что они ничего не знают о принадлежности каждого отдельно взятого байта рассматриваемого куска памяти к тому или иному компоненту OS/2. Для них вся OS/2 - одно монолитное приложение. > > > > Вообще, как я понимаю, при пре-виртуализации (так называется технология паравиртуализации, которую использует afterburner) при помощи afterburner обрабатывается именно ядро и драйвера. Критические для виртуализации инструкции "разрежаются" инструкциями NOP так что при загрузке ОС это свободное место заменяется монитором виртуальной машины (wedge) на код, который вызывает этот самый wedge. Причем, так обрабатываются только ядро и драйвера. Usermode-программы таким образом не обрабатываются. Поэтому, если во время работы ОС внутри VM кто-то вызовет "virtualization-sensitive" инструкцию, то происходит TRAP. Обработчик этого trap'а находится в wedge. Он "поправляет" результат вызвавшей его инструкции, если инструкция находится в ядре или драйвере (которые уже патченные). Если же инструкция, вызвавшая TRAP, находится в "левом" коде (т.е., не патченном), то обработчик TRAP'а завершается не успешно и "левая" программа, в которой находится эта интсрукция, просто трапается. То есть, разделение между ядром и левым кодом простое: левый код не патченный, а ядро и драйверы -- патченные. > > > > Надо придумать, как за саму OS/2 сделать запрос этих портов и прочих ресурсов у сервера-менеджера ресурсов. > > > > Проблема, как мне представляется, не в том, как запросить, а в том, как позволить лазить к портам только конкретному драйверу и запретить всем остальным. > > > > Тут имхо, вопрос в том, как отделить доверяемый код от не-доверяемого. Это делается наверное, просто (отделением патченного (доверяемого) от не-патченного (не-доверяемого) кода). А позволить лазать к портам конкретному драйверу -- такого нет и в существующей OS/2 -- разделение определяется просто тем, какому кольцу привелегий принадлежит программа. Если RING0, то ей все позволено -- она может лазить к любым портам. > > > > (OS/2 не знает, что надо запросить эти ресурсы, но (в случае L4Linux) linux-то как-то знает, что ему надо запросить ресурсы, и запрашивает. Я думаю, аналогично линуксу можно сделать и с OS/2) > > > > Линукс (в том числе и драйверы) патчится на уровне исходных текстов, поэтому гипервизор имеет информацию о том, какой именно модуль обращается за ресурсом. > > > > Неа, в Линуксе точно так же -- все RING0 модули могут лазить к любым ресурсам, а для RING3 -- в большинстве своем -- облом. > > > >>> Пейджер может решить отобразить i/o flexpages в адресное пространство приложения, и тогда доступ к порту появится, и операция in/out будет успешной. > > >> > > >> Но пейджер - он вне OS/2, И он не знает, осевой драйвер это к порту лезет или кто другой. Что делать? Разрешать этот доступ всем без исключения? > > > > > > Нет, OS/2 сама модифицируется (наверное, Afterburner'ом) так, что она запрашивает ресурсы у этого пейджера. > > > > А толку от модификации? Драйверы лазают к портам управляемых ими устройств, ни у кого позволения не спрашивая. > > > > Но за них заранее ресурсы (т.е., порты) должен запросить модуль wedge (монитор виртуальной машины). Если не запросит, то линух трапнется. > > > > Пока насчет 16-битгного кода не все ясно, но, как уже подсказали, микроядро L4/Fiasco позволяет отдавать usermode-программам некоторые селекторы в GDT. > > > > И? У нас ведь проблема: для отдельных частей уже выделенного микроядром большого 32-разрядного сегмента наплодить 16-разрядных алиасов. Это совсем не то же самое, что править дескриптор того большого сегмента. > > > > Пока я тоже ничего конкретно про это сказать не могу (100% этот вопрос еще не прояснили) но это дает надежду, что можно будет использовать селекторы, отличные от FLAT, возможно -- 16-битные.
__, _, __, _,_ _, _
|_ / \ |_) | | |\/|
| \ / | \ | | | |
~ ~ ~ ~ `~' ~ ~
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.