krotan писал(а):Работа с памятью не единственная функция emm386
Их действительно несколько и они были грамотно расписаны выше.
1 - основная. Эмуляция EMS-памяти. (которая практически - очень мало кому нужна, как правило эту функцию и не используют за ненадобностью)
2 - дополнительная. Организация блоков UMB. (практически - чуть ли ни единственная ценная функция от EMM)
3 - дополнительная. Предоставляет интерфейс VCPI (устаревший и никому не нужный. Вместо него используют DPMI)
krotan писал(а):он переключает процессор в виртуальный режим работы.
Корректнее - он переключает в защищенный режим, и выполняет DOS как v86-задачу.
Но вовсе не для того о чем вы написали далее...
krotan писал(а):позволяет запустить несколько виртуальных процессоров на одном реальном... таким образом может быть реализована многозадачность...
собственно фэйспалм ради которого пишу ответ... "слышал звон но не знаю где он"..
Если рассматривать в рамках винды - ей это совершенно не нужно, она сама переводит проц в защищенный режим, сама организует память и все необходимые структуры для работы, в т.ч. многозадачность. Ей EMM что есть что нету - до писюна.
Если рассматривать в рамках DOS - EMM никакую "многозадачность" не организует. Всё что он делает - описано выше.
Защищённый режим используется ТОЛЬКО потому, что в нём используя MMU делается ремап адресов участков дальней (>1мб) памяти на адреса в области UMA, таким образом организуя окно для отображения EMS-памяти и похожим принципом работу блоков UMB.
Т.е. это костыль.
Причем порой приносящий больше вреда чем пользы. Есть специфичные DOS-приложения защищённого режима несовместимые с EMM.
Правда с другой стороны есть ещё более редкие и более специфичные программы, которым нужна именно EMS-память и без EMM не обойтись. Но слава богу у меня таких нет в практическом использовании. Вангую - скорее всего тут ни у кого таких нет и слава богу.
Если
не нужен EMS (а кому он нужен?...) то выше в топике был озвучен вариант НЕ-костыльного (аппаратного) решения для обеспечения UMB:
UMBPCI
работающий путем разблокировки участков UMB-памяти путем перепрограммирования чипсета.
Но способ хоть и более "прямой", без ремапа, без лишнего слоя виртуализации в защищенном режиме и связанных с этим проблем,
но имеет свои ограничения и не всегда можно получить хороший результат, тут успех зависит от материнки и чипсета.
(Себе специально подбирал материнку в том числе и с учетом особенностей работы теневой памяти, работы ISA-DMA и её кешируемости)
Если допустить что звезды сошлись удачно для UMBPCI - то единственное преимущество EMM386 (и ему подобных) состоит в том что он умеет ремапить на неиспользуемый в совмеменных VGA диапазон B000-B7FF, а UMBPCI не может разблокировать память в этом диапазоне, т.к. это не теневая память, а ссылается на старый монохромный video ram (пусть и неиспользуемый).
Но это единственное "преимущество" EMM меркнет перед недостатками и тем что сам EMM занимает в базовой (<1мб) памяти больше места.
Можно собрать плюсы и минусы EMM (и ему подобных) и UMBPCI (если повезло с хорошо поддерживаемым чипсетом) в табличку:
EMM плюсы:
- Умеет организовывать память по спецификации EMS (сомнительная нужность)
- Умеет предоставлять api VCPI (сомнительная нужность)
- Умеет делать UMB в диапазоне B000-B7FF (несомненный плюс)
EMM минусы:
- DOS выполняется не в нативном real mode, а как виртуальная v86-mode машина защищенного режима. Может приводить к несовместимости с некоторыми DOS-приложениями
- замедляет работу системы (из-за усложнения работы с памятью через защищенный режим)
- как драйвер занимает больше места в базовой (<1mb) памяти
UMBPCI плюсы:
- Работает в нативном для DOS real-mode. Отсутствуют вероятные несовместимости, высокая скорость.
- как драйвер - занимает всего 176 байт в нижней памяти!
UMBPCI минусы:
- невозможно использовать диапазон B000-B7FF под UMB
- нужно везение с чипсетом. (предполагается что повезло)