RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Следующий шаг. Немного конкретики.


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

> > Гм. А тады что такое для тебя large? ;)
> Более одного DS :)

А мужики-то и не знают...

> > А в чем собственно выгода-то? Заменить page table проще, чем развлекаться с переключением LDT.
> LLDT делается только при переключении на задачу. А переключая таблицы нужно ещё и анулировать соответствующие коде. Ещё неизвестно, что хуже.

Их необязательно переключать - можно и переписать :) Что быстрее.

> > В общем плиз, сухой остаток выгод в студию ;)
> Задача _полностью_ изолирована в своих сегментах. Т.е. её образ можно перебросить на другой компьютер и начать исполнять "там", не опасаясь "вредного влияния улицы".

А чем плохо задачу полностью изолировать в своих страницах?

> Разделяемая память полностью подконтрольна системы, поскольку не способа передать указатель между задачами без системного вызова.

Брр. А во flat модели что не так? Ну передал указатель (опять таки только через системный вызов) - а в другой задаче эти страницы не отмаплены или отмаплены на другое место самой этой другой задачи. В чем принципиальное отличие?

> Если какая-то задача начнёт использовать такой указатель, не поставив в известность систему - ну что ж, ей же хуже. Ей, а не всем вокруг.

Дык оно и сейчас так.

> > 1) префиксы не во всех командах возможны,
> Насколько я помню, нельзя перекрыть только сегмент приёмник строковой команды.
> Собственно префиксы требуются, если для адресации локальных данных нити (функции) не используется BP/SP :)

Совершенно распространенная ситуация - передаем в API указатель на локальную переменную функции. Меня это уже совершенно затрахало в случае SS != DS.

> > да и тормозят они изрядно
> Изрядно это сколько?

Один такт на префикс. Что зачастую равно времени выполнения самой команды. Это не считая загрузки в сегментный регистр нового значения, что вообще катастрофически долго. Кроме того, операндов часто бывает два, префикс сегментный может быть только один.

> > 2) значительно снижаются возможности оптимизации с точки зрения register allocation.
> Почему, собственно.

Патамучта у x86 РОНы привязаны к конкретным сегментным регистрам. Неортогональная система команд, панимаешь... Инструкция (абстрактный пример) mov eax, [ebp-8] может оказаться в два раза короче, чем
mov eax, ss:[ebx-8] и выполняться в три раза быстрее. Такая вот загогулина.

> > 3) компилятор один фиг надо переделывать.
> Его один фиг надо переделывать.
> Как минимум, потому, что объектная модель должна быть свойством системы, а не компилятора.
> Ну их хотелось бы, чтобы реализация класса _действительно_ скрывалась, а не как сейчас.

Займись? ;)

> > Причем местами нехило.
> Где например? И почему?

Патамучта кодогенератор меняется, и весьма ощутимо. К примеру GCC не понимает сегменты. Ваабще.

> > Причем не один компилятор. Кто возьмется?
> Пока не знаю.

Может того, узнать сначала ;)

> > > Ну ES надо перегружать, если строки в стек копируем. И что?
> > гы, а указатели все длинными становятся - это сахар?
> С чего это вдруг, если единственный сегмент данных и (для каждой нити) единственный сегмент стека.

С того, что если ты передаешь в другую функу указатель на переменную/буфер, этой другой функе нехило бы знать, в какой сегмент этот указатель указывает.

> > > > (да и DS != CS тоже не сахар).
> > > CS вообще должен быть execute-only :)
> > Он таки execute-read на x86.
> Э-э-э ... Флаг расписаный во всяких доках не работает или его просто никто не выставляет?

Никто не выставляет, удобно константы (например jump table для switch) в коде хранить.

> Большей частью программа будет оперировать NEAR32 и, возможно, NEAR16.
> FAR32/FAR16 потребуются разве что для вызова функций, требующих более высоких привилегий, чем RING3.

Дык, ответь мне пожалуйста, вот к примеру функция printf какие указатели будет получать в виде параметров?
На мой взгляд таки FAR32, так как удобно понимаешь-ли иметь возможность передавать указатели как на локальные переменные (которые в стеке), так и на глобальные (которые в сегменте данных). Причем, что характерно, эту функцию printf придется-таки самому писать, т.к. существующие в большинстве своем такой изыск не воспринимают.

> > > Селекторы задача получает на момент создания. Впоследствии могут только добавляться SS-селекторы.
> > > Ничего особо нетривиального я тут не вижу.
> Есть сплошной кусок пространства, который нарезается ломтиками поменьше.

Это замечательно, трудность в том, что количество селекторов ограничено. Причем, подлость такая, они вечно кончаются не вовремя. То есть обычно их хватает за глаза, но закладываться на это нельзя.

> > Насчет нетривиальности - это я под впечатлением менеджера селекторов OS/2.
> Надо полагать, что большая часть финтов и фокусов связана с 16-битным защищённым режимом?

Большая часть связана с существованием (и попыткой избежать этого существования) алиасов - то бишь перекрывающихся сегментов.

> Геморрой будет всегда, его можно лишь выбирать. Не всегда :)
> > Начиная с несовместимости с любым существующим кодом
> Это как #define'ить

Ага. Берешь какой-нибудь апач или мозиллу - и начинаешь в каждом файле сорцов чего-нибудь дефайнить. Весьма эротично.

> > и заканчивая тормозами на использовании far-указателей.
> Тормоза на обработке аппаратных прерываний и/или смене кольца тебя не смущают?

Нет. Для смены кольца есть соответственные инструкции, которые делают сие весьма быстро. Для прерываний тоже процессоры оптимизируются. А вот для длинных указателей - нет.

> Длинные указатели, как я уже указывал :) требуются крайне редко.

Опыт писания под модель памяти с SS != DS мне указывает ;) что длинные указатели таки всплывают на каждом шагу. Причем что паскудно - там, где его не ждешь. Причем, что вдвойне паскудно - чужой код в такое безобразие портировать - упаришься.


Fri 15 Jun 2007 14:32 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.3) Gecko/2003031




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.