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


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

> > Я просто не совсем ясно выразился -- возвращать 16-битные вызовы в 32-битную программу (шелл) не надо. 16-битные врапперы вокруг аналогичных 32-битных функций нужны для работы старых программ, в которых имеются 16-битные фрагменты -- это для случая запуска 16-бит в режиме эмуляции.
>
> Вот как раз наоборот: если у нас есть эмулятор, то не нужны 16-битные функции, а если есть 16-битные функции, то не нужна эмуляция. Причём наличие таких точек входа (функций) вовсе не означает поддержку 16-битных программ. Так что это ещё один подход к решению проблемы 16-битных объектов в LX-файлах.

Что-то я не понял. -- То есть как? У нас 32-битное микроядро. 16-битные функции находятся в 16-битных сегментах. А чтобы создать 16-битный сегмент, надо создать его дескриптор в GDT или LDT. "Allocate GDT selector" реализуется в ядре OS/2 как device helper, то есть, это интерфейс ядра. Полностью же 32-битное микроядро таких интерфейсов не предоставляет (по крайней мере, L4). В нем вообще нет поддержки сегментной модели, а есть поддержка страничной памяти (paging). То есть, сегменты спрятаны внутри микроядра и не доступны извне, то есть, прикладным программам.

То есть, 16-битный сегмент создать нельзя, а поэтому, нельзя создать 16-битную функцию. Поэтому 16-битные функции должны работать внутри эмулятора. То есть, сам враппер 16->32 должен быть реализован внутри виртуальной машины и должен вызывать 32-битный аналог этого API извне виртуальной машины.

Или я не прав?


Thu 14 Jun 2007 12:19 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.7.10) 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.