RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> > > Гм. А тады что такое для тебя 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 мне указывает ;) что длинные указатели таки всплывают на каждом шагу. Причем что паскудно - там, где его не ждешь. Причем, что вдвойне паскудно - чужой код в такое безобразие портировать - упаришься. >
_, _, _, _, _ _, _,_
(_ | / \ |\ | / \ |_/
, ) | , \ / | \| \ / | \
~ ~~~ ~ ~ ~ ~ ~ ~
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.