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


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

>> Существенно уменьшить его можно только одним способом - раздобыть каким-то образом .obj-файлы, из которых ядро собирается. OBJ-и дизассемблировать - одно удовольствие.
>
> это тоже идея. Только кто нам даст .obj-и?

Например те, что ядро компилируют. Чем чёрт не шутит.

> IBM?

А почему бы и нет? За соответствующую сумму.
А ещё они (точно так же, за деньги) могут сами проделать все необходимые для виртуализации манипуляции и выдать уже готовое ядро.

> Вот если бы была такая тулза "делинкер" -- на входе .exe, а на выходе .obj и .def :) Только как я понимаю, при линковке информация из .obj-ей теряется, и ее обратно не восстановить

Естественно. Если бы она не терялась, этап преобразования в .obj был бы не нужен, дизассемблер сразу бы из EXE всё брал.

>> Или другой вариант: взять то, что было наработано в рамках osFree TPE, тяжело вздохнуть и начать добавлять туда KEE и прочие новинки. (Для справки: владелец лицензии на OS/2, в принципе, имеет право пользоваться таким ядром.)
>
> Но тогда новым пользователям неоткуда получить лицензии, тем боллее, что IBM скоро может прекратить их продавать. osFree TPE -- крайний вариант, к сожалению.

Ничуть не более крайний, чем любой другой. Ведь мы обсуждает только замену ядра OS/2, а всё остальное у человека откуда возьмётся? Правильно, из IBM-овского дитрибутива, на который он должен иметь лицензию.

>>> 2) изолировать неустойчивые драйверы в отдельную VM
>>
>> У нынешних драйверов не предусмотрена процедура перезапуска. Они рассчитаны на то, что в момент их старта управляемый ими объект находится во вполне определённом состоянии. А после падения драйвера это состояние может оказаться каким угодно. И это так не только для драйверов устройств, а для любых. Как ты себе представляешь, например, перезапуск IFS, если при её падении на диске были открытые файлы?
>
> Да, состояние при этом конечно, не сохраняется. То есть, если например, проигрывается звук и драйвер звуковой карты падает, то после перезапуска VM состояние будет "дефолтным", например, уровень звука сбросится.

Хуже. Драйвер вполне может предполагать, что в момент его старта управляемая железка находится в некотором строго определённом состоянии. Но после падения предыдущего экземпляра эта железка может пребывать совсем в другом состоянии, и повекдение драйвера в такой ситуации непредсказуемо.

> С IFS, конечно, сложнее -- возможна потеря данных. Но по крайней мере, при этом в любом случае система трапается и возможна потеря данных.

Какая система? Та, в которой драйвер (инструментальная), или та, которая этим драйвером пользуется (прикладная)?

> А в случае запуска внутри VM хотя бы нарушится состояние только одной VM, на остальную часть системы это не влияет -- она может продолжать работать.

Может продолжать? Программа в прикладной ОС пытается прочитать очередной кусок ранее открытого ею файла, а с точки зрения находящейся в инструментальной ОС IFS этот файл и не открыт вовсе.

>>>> Так не будет же никакого тестирования нового ядра. Потому что работать в такой схеме будут только IBM-овское ядро и виртуализатор. Никакие функции старого ядра перенаправляться в новое не будут.
>>>
>>> будут, через маппер
>>
>> Ну что ты... Маппер выполняет строго обратную функцию - перенаправляет запросы из основной ОС в виртуализированную. Но не наоборот. Поэтому, если программа в виртуализированной OS/2 попросит, например, выделить ей память, то выделением памяти будет заниматься ядро OS/2, а не новое. И никаким маппером ты этот запрос не перехватишь.
>
> Нет. Программы (кроме самого маппера) запускаются в основной VM. А от VM с драйверами требуется только выполнение ioctl-запросов на драйверы и возврат результатов в основную VM. То есть, выделение памяти, разумеется, будет выполняться новым ядром в основной VM. А выполнять эти запросы старому ядру и не требуется -- его задача просто обслуживать драйвера, и все.

То есть, речь идёт исключительно о запуске драйверов, но не прикладных программ OS/2?
Видишь ли, если у нас есть виртуализированная OS/2, то почему бы не запускать с её помощью ещё и осевые программы. В этом случае можно вообще не заморачиваться с созданием OS/2-совместимой подсистемы в своей ОС (точно так же, как в OS/2 для программ Windows была сделана "виртуализированная Windows 3.1"). Вспомни, я уже писал об этом.

>> Не совсем понятно, что значит "задавать". Загрузка любого значения в сегментный регистр - команда непривилегированная.
>
> Вообще-то да. Сегментные регистры можно загружать (хотя я не был в этом уверен). А вот в GDT добавить селектор может только ядро.

Совершенно верно. А GDT ведает микроядро. Так что ты уж выясни, как они там выкручиваются.

Tue 19 Jun 2007 20:19 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.