Нереальный режим: преимущества и недостатки

Тема в разделе "WASM.ASSEMBLER", создана пользователем Govnodozer, 17 дек 2009.

  1. Govnodozer

    Govnodozer New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2009
    Сообщения:
    11
    Доброго времени суток!
    Разрываюсь между работой в защищённом и нереальном режиме. Хотел бы узнать, какие преимущества защищенного режима перед нереальным кроме того, что он там контролирует доступ не к той памяти, деление на 0, и т.п.

    Можно ли использовать двуядерность, работая в нереальном режиме?
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Деление на 0 контролируется в любом режиме. В нереальном режиме объём кода всё равно ограничен нижним мегабайтом, поскольку процессор фактически работает в 16-разрядном реальном режиме со всеми вытекающими. Ну и плюс защита, виртуальная память и прочее. Единственное достоинство нереального режима по сравнению с реальным -- доступ к 4 Гбайтам памяти (но только как к данным). Никаких достоинств по сравнению с защищённым он не имеет.
     
  3. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Доступ к функциям BIOS напрямую без использования V86.
     
  4. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Ну разве что это, но, как по мне, это откровенно слабое преимущество. Особых проблем нет сделать V86 или для доступа к БИОС переключаться в реальный режим. Зато в реальном (а значит, и нереальном) режимах будет геморрой с сегментами и ограничения на использование регистров.
     
  5. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    помоему, разумнее использовать защищенный режим и какое нибудь небольшое доступное/открытое ядро (линь/план/qnx или что вам больше по душе. хоть вынь се). преимуществ перед нереальным куча. это и приведенные SII, и лучшая поддержка устройств, и наличие средств разработки/доков/коммунити
     
  6. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Какие это там ограничения на использование регистров интересно?
    Это читерство называется :)
    Ты сравниваешь тёплое с мягким.
    Это не преимущество защищённого режима.
    Ничто не мешает иметь всё то же самое и в нереальном, и даже в реальном режиме.
     
  7. Govnodozer

    Govnodozer New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2009
    Сообщения:
    11
    Собственно, у меня просто вставал вопрос, обязательно ли геморроиться с драйвером IDE, или можно переключиться в нереальный режим, и юзать прерывания БИОС.
    Но если кода более 1 МБ действительно нельзя разместить, то он наверно не подходит =(
     
  8. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    cppasm
    почему читерство? как я понял, чел не хочет использовать полные оси, возможно изза громоздкости, но хочет иметь большое пространство под код и данные. и при этом не заморачиваться на дрово-системные нужды. поэтому и ответ такой. к примеру, ядро qnx ~32кб (если память не изменяет) + дрова какие надо выборочно. ядро плана непожатое весит ~3 метра со всеми дровами. элементарно можно собрать только с нужными поправив карту сборки. как это обстоит с линем - пусть линеры говорят, но проги на обрезке линь ядра пускаемые на голом железе - видел. и они опенсорцовые были
     
  9. Govnodozer

    Govnodozer New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2009
    Сообщения:
    11
    Чел пишет свою ось, и у него проблемы с написанием драйвера под IDE. Но похоже, они постепенно успешно решаются =)
     
  10. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
    Читай разносортные точки доступа/роутеры и прочее мелкое сетевое железо =)
     
  11. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    cppasm
    Нереальный режим -- это обычный реальный, но с "хакнутыми" сегментными регистрами FS и GS. Поэтому на него распространяются все ограничения реального режима. А значит, 1) сегменты кода по-прежнему абсолютно реально 16-разрядные со всеми вытекающими; 2) нет возможности использовать всех регистры для адресации (байт SIB, насколько помню, работает только в защищённом режиме, а в реальном его появление будет вызывать прерывание по недопустимой инструкции).

    Govnodozer
    Лучше разобраться с IDE да написать свои подпрограммы ввода-вывода -- благо, они простые (куда проще, чем, например, более-менее полноценная поддержка USB). А кода действительно больше мегабайта не разместишь: в нереальном режиме же IP и CS остаются прежними (собственно, без этого к BIOS и не обратиться). Причём из этого мегабайта свободно меньше 640 килобайт. В общем, ИМХО, не стоит с ним заморачиваться, а лучше потратить время на изучение железа и написание своих подпрограмм для управления им.
     
  12. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    SII
    А как по вашему тогда обращение ко всем 4Гб получается? :)
     
  13. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Black_mirror
    Очень просто :) 1) В защищённом режиме перенастраиваются сегментные регистры FS и GS: в них грузится база 0 и предел FFFFFFFF, т.е. разрешается доступ ко всему адресному пространству в 4 Гбайта; 2) при обращении к памяти с помощью этих регистров используется префикс размера адреса (его как раз никто не запрещает, как и префикс размера данных, благодаря чему в реальном режиме можно использовать 32-разрядные регистры).
     
  14. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    SII
    А с байтом SIB что происходит? :)
     
  15. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Не надо писать ерунду.
    16-битные сегменты кода не вносят никаких ограничений на использование регистров.
    Это просто 16-битные адреса и опреанды по умолчанию, и всё.
    SIB можно даже в реальном режиме использовать.
    Что тебе в 16-битном коде мешает написать mov eax,[ecx+ebx*2+3]??
     
  16. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Black_mirror
    cppasm
    Насколько я помню, использовать байт SIB в реальном режиме нельзя. Я могу ошибаться, но это надо проверять. Кто хочет, может это сделать, мне -- лениво.
     
  17. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Всё уже давно проверено - можно.
    От смены режима у проца куски не отваливаются чтобы что-то использовать было нельзя :)
     
  18. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    SII, действительно можно использовать и SIB (для этого к команде добавляется байт-префикс размерности адреса) и регистры cs,ds,es,ss, позволяющие адресоваться сразу к 4 гигам, правда, до i80486 лимит cs принудительно сбрасывался в значение 0xFFFF, но кого это сейчас интересует (тут есть ограничения только на диапазон изменения и кратность базы: 0, 0x10, 0x20, ..., 0xFFFF0). Важное преимущество защищенного режима перед нереальным - он официально документирован, в нем работает аппаратная многозадачность, защита памяти на уровне сегментов, гарантирована поддержка и есть возможность вносить изменения в страничную переадресацию и защиту, 32-битный код и адресация данных могут быть нативным (не требующими использования дополнительных префиксов) и т.п. Короче нереальный режим раньше был нужен лишь приложениям, которым требовалось много ресурсов, но они работали под управлением ОС реального режима. Для самой ОС или ОС-подобной программы вопрос о выборе режима работы не является актуальным. Ответ на него очевиден.
     
  19. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Phantom_84
    cppasm

    Ну что ж, значит, ошибался насчёт СИБа. Хотя про "куски не отваливаются" не аргумент: 64-разрядные регистры, например, нельзя использовать не только в реальном, но и в 32-разрядном защищённом (спасибо АМД за мегакривое расширение и без того суперкривой архитектуры), так что подобное не исключено и с другими "кусками" :)

    Что же касается 32-разрядного кода, то любая перезагрузка CS сделает его обычным 16-разрядным, т.е. закроет для кода доступ к памяти свыше 1Мбайта. Ну а любой вызов BIOS связан с перезагрузкой CS.
     
  20. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    Нереальный режим -- это обычный реальный, но с "хакнутыми" сегментными регистрами FS и GS.

    Есть два мнения по поводу сегментных регистров в нереальном режиме:

    1) при перезаписи сегрегов меняется и база, и лимит сегмента, поэтому для адресации 4ГБ можно спокойно настраивать только неиспользуемые регистры FS и GS и ни в коем случае их не переписывать;

    2) при перезаписи сегрегов меняется только база, но не лимит, поэтому можно смело настраивать любые сегреги и переписывать их как угодно.

    Насколько я помню из собственного опыта, и на реальном железе (Athlon XP, Celeron, Pentium M), и в виртуальных машинах (DOSBox, bochs, vmware) действует вторая модель. Откуда же взялась первая? Может ли кто-нибудь назвать реальный процессор, который в URM портит лимит сегментов?