RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> > > Вот как раз наоборот: если у нас есть эмулятор, то не нужны 16-битные функции, а если есть 16-битные функции, то не нужна эмуляция. Причём наличие таких точек входа (функций) вовсе не означает поддержку 16-битных программ. Так что это ещё один подход к решению проблемы 16-битных объектов в LX-файлах. > > > > Что-то я не понял. -- То есть как? У нас 32-битное микроядро. 16-битные функции находятся в 16-битных сегментах. > > Небольшое уточнение: нам в этом случае не нужны 16-битные функции. Нужны 16-битные точки входа в 32-разрядные функции. > > > А чтобы создать 16-битный сегмент, надо создать его дескриптор в GDT или LDT. "Allocate GDT selector" реализуется в ядре OS/2 как device helper, то есть, это интерфейс ядра. Полностью же 32-битное микроядро таких интерфейсов не предоставляет (по крайней мере, L4). > > Ну и что? Интерфейс можно же и добавить. При этом само микроядро останется полностью 32-битным. > > > В нем вообще нет поддержки сегментной модели, а есть поддержка страничной памяти (paging). > > И нам не нужна полноценная поддержка 16-разрядных программ. Достаточно, чтобы работали 16-разрядные кусочки LX-файлов. > > > То есть, 16-битный сегмент создать нельзя, а поэтому, нельзя создать 16-битную функцию. Поэтому 16-битные функции должны работать внутри эмулятора. То есть, сам враппер 16->32 должен быть реализован внутри виртуальной машины и должен вызывать 32-битный аналог этого API извне виртуальной машины. > > > > Или я не прав? > > "Не прав" (если можно так выразиться) в терминологии. В описанном тобой случае мы имеет просто эмулятор. "Враппер" - это тонкая прослойка между вызываемой извне точкой входа и другой функцией, в которой собственно рабочий код и находится; причём прослойка эта выполняется непосредственно процессором. > Вспомни, нам ведь нужно не просто 16-битные точки входа предоставить, нужно организовать выполнение кода в 16-битных объектах. Три способа (полная эмуляция, преобразование в 32 бита и замена типовых мест 32-разрядными заготовками) мы уже рассмотрели. Можно обдумать и четвёртый вариант: ограниченная поддержка 16-разрядного кода. В объёме, минимально достаточном для исполнения кода 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.