4G - 1M под задачу.

Тема в разделе "WASM.SOFTWARE", создана пользователем Gray, 7 апр 2007.

  1. Gray

    Gray New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2004
    Сообщения:
    75
    Адрес:
    Russia
    Коллеги, облагодетельствуйте советом.

    Есть комп с 4 гигабайтами памяти. Есть своя программа на С.
    Хочется отдать ей максимум памяти.

    Под Windows XP больше трех гиг не получается. ( В boot.ini ключи /3GB /Userva=2900 и ключ /largeaddressaware )

    Под FreeBSD тоже больше 3G не получается. ( Если ставить hw.physmemsiz="4G" фря уходит в перезагрузку )

    DR-DOS 7 больше 8М под задачку не отдает.

    Посоветуйте какой-нибудь дос-экстендер способный почти все 4G использовать.
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Врубай протекдед моде сам )
    Будешь сам управлять защищенном режимом как тебе захочется, делай плоскую модель и адресуй все гигы адресного пространства ))

    Есть такая штука, как PAE (Physical Address Extensions), позволяющая адресовать 64 гига через проекции
     
  3. Gray

    Gray New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2004
    Сообщения:
    75
    Адрес:
    Russia
    Была такая мысль, но тогда придется, как минимум, делать свой файловый и консольный интерфейс (программе моей они нужны). Уж больно не хочется тратить время на изобретение велосипеда. Проще подобрать подходящую ОС и/или экстендер. А компилировать, скорее всего, Watcom-ом.

    Увы, при четырех гигах физ памяти, от PAE толку никакого. Беда в том, что старший гигабайт винды под себя занимают.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Great
    64Гб виртуальной памяти.

    Gray
    В обычной системе такого не получится, системе тоже нужна память для себя. Так что только реализовывать своё, с нуля или по исходникам.
     
  5. Gray

    Gray New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2004
    Сообщения:
    75
    Адрес:
    Russia
    IceStudent
    Разумеется. Потому тема и называется "4G - 1M под задачу". Под ОС я готов целый мегабайт оставить. А вот остальное хочется самому использовать.
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Gray
    А тебе непременно хочется все 4Г сразу иметь ? Ведь можно и с проецируемыми окнами работать через FileMapping или AWE
     
  7. Gray

    Gray New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2004
    Сообщения:
    75
    Адрес:
    Russia
    leo
    Да хочется все и сразу, такова специфика задачи. Иначе программа будет крайне медленно работать.
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Gray
    Опять-таки, для обычной системы 1Мб - слишком мало.

    Скорее всего, не в ту сторону идёшь. Меняй алгоритмы/дизайн. А если 4Гб мало станет, что потом станешь делать? Можно, конечно, переписать под x64, там 16 Гб ОЗУ есть (под ХР, 64Гб под 2k3).
     
  9. Gray

    Gray New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2004
    Сообщения:
    75
    Адрес:
    Russia
    IceStudent
    Для всей линейки MSDOS и родственных ей ОС одного мега - более чем достаточно. MSDOS 3.11 вообще прекрасно жил на 512К. Меня вполне устроило бы сочетание MSDOS и какого-нибудь дос экстендера. Пока больше 2 гигов получить под задачу, увы, не удалось.
     
  10. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Включите в DOS линейную адресацию (так наз. Нереальный режим) для FS и/или GS. и память вся будет, и функции DOS/BIOS переписывать не надо.
     
  11. Gray

    Gray New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2004
    Сообщения:
    75
    Адрес:
    Russia
    Проблема решена, но, увы, решение принесло меньше радости, чем ожидалось.
    Прежде всего следует сказать, что для большинства мам получить под задачу 3100-3300 МВ нереально. Дело в том, что 700-900 М старших адресов заняты железом (PCI, Video и т.д.).
    Ужасно много! Только некоторые новые мамы умеют делать Memory Re-maping (В меню BIOS это часто называется Memory Relocating). Таким образом, если при загрузке BIOS выдал 3190 МB, то хотя у вас стоит 4 GB, более 3190 MB отдать под задачу не удастся. Увы, у меня именно такая мама.

    Решение же таково. Грузим чистый MSDOS (без himem.sys или emm386) и запускаем задачу (откомпилированную Visual C++ 6.0 как Win32 Console Application) используя HX DOS extender (http://www.japheth.de). Этот замечательный экстендер умеет виндовые PE executable файлы запускать под досом.
    Только сначала надо HDPMI32 чуть-чуть подправить. В файле PAGEMGR.asm закомментировать кусочек и добавить явное указание имеющегося размера памяти:

    ; cmp ax, 3C00h+1 ;max is 3C00h (15360 kB)
    ; jnc e801_err
    ; movzx eax, ax
    ; shr ax, 2 ;kb -> pages
    ; movzx ebx, bx
    ; shl ebx, 4 ;64kb -> pages
    ; add eax, ebx

    ; page=4096 bytes =4K
    ; BIOS detected 3190M memory
    ; 0C7600h=3190*1024/4

    mov eax,0C7600h


    P.S. Можно работать и с загруженым himem.sys, но тогда программа будет работать на 5-10%
    медленнее.
     
  12. PageFault

    PageFault New Member

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    31
    Gray
    Ставь xp64 и не парься. Это единесвенное правильное решение.
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Gray
    На самом деле там должно быть 512Мбайт или 1024МБ. Можно попробовать поджать, до 128МБайт.
    Основной объем сжирает видео память.

    Если к компьютеру не подключено ни каких устройств со встроенной памятью. Кроме видео карты. То по идее под PCI устройства должно хватить удвоенного размера видео памяти. И все выровнять на границе 128МБ. Так что можно поджать.
    А в конфигурационном пространстве PCI северного моста выставить Top of Low Usable DRAM (TOLUD) - граница которая отвечает за размер используемой памяти все что выше отводиться под устройства.

    Если видео карта содержит много видео памяти, можно отключить и ее. В конфигурационном пространстве PCI видео карты BAR регистр установить в 0. LFB точно(0,9) работать не должен. А вот B0000-AFFFF не знаю.
     
  14. CroX

    CroX New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2006
    Сообщения:
    37
    Gray
    Если не секрет - что же это за задача такая ?
     
  15. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Gray

    Тут вот какая штука получается: физическая памятть в компьютере неразрывна, т.е. с 0 по максимум нет пробелов. Так вот PCI и AGP карты в основном 32 разрядные (я имею в виду выбор адреса на шине), т.о. если установить 4 G в материнку специально для этого не предназначенную, то солидный кусок памяти пропадет (это не свсем так посколку можно менять базовый адрес памяти в VGA карте, а потом восстанавливать его, т.о. получится использовать оставшуюся часть паимяти, но ни одна операционка этого пока не делает). А в спец плате имееттся возможность сделать в физической памяти дыру.
    Второй момент: архитектура х86 позволяет задать логический адрес в 32 бита, а вот физический до 36 и даже 64 бит. Потому либо переходи на Itanium или Opertron, либо "подгружай" память частями в свое пространство.
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    .PROFi
    У меня нет матери с 4ГБ основной памяти. Так что не могу сказать БИОС отводит под PCI устройство 1ГБ или все-таки поджимает. Тут не все так просто, память устройств должны быть выровнена. выравнивание зависит от размера памяти. Если ты выставишь адрес не правильно аппаратура под корректирует. В самом верху лежит БИОС. Так что тут получается серьезная дырка. Между БИОСом с APIС и видео памятью. Если какой либы диапазон будет перекрыт это черева-то ошибками. Так что видео память находиться вверху на своем месте.
    Возможно если ее перенести ниже TOLUD все будет хорошо, а может и нет. Запись 0, должен по идее отключить вообще видео память, но опять таки это не гарантировано, но я у верен в этом 90% процентов.

    Так насчет спец плат. Я знаю о двух категориях мат плат. Те которые не поддерживают 4ГБ. Те которые поддерживают 4ГБ, но часть памятью откушивается под PCI и др устройства.
    А вот про то что есть матери которые позволяют делать дырки в физической памяти не слышал. Можно пример чипсета желательно интеловского?

    Насчет архитектуры x86 позволяет иметь 36 битное физическое адресатное пространство. Используя механизм PAE отображает физическую память. Но есть огромное но. Это все заложено в процессор. А ниже идет северный мост у которого физически 32 линии адреса. Так что разделить основную память и память других устройств не возможно.
    Есть матери у которых есть 64 адрестных линии, но они должны поддерживать возможность сделать дырку в физической памяти.
     
  17. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Pavia

    Так что разделить основную память и память других устройств не возможно.
    Еще и как возможно. Чипсетом где-то с pentium 1 подерживается мепирование BIOSа с адреса 0FFFE0000 на адрес 0E0000, причем это делается аппаратно.
    Что касается плат которые позволяют делать дырки в физической памяти, то они выпускались для Pentium Pro и Xeon, а для рядовых компьютеров такого нет.
     
  18. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    PROFi
    Ты меня не понял. Я говорил что подвинуть видео память некуда. А также что у нас одно адрестное пространство которое делется между основной памятью и устройства. А так как объем основной памяти равен размеру адресного пространства. То разделить устройства и память нельзя, просто адрестного пространства нехватает. Можно только заблокировать одни участки в основной памяти и поместить туда память устройств к примеру BIOS по адрессу 0E0000. Но это специальное исключение для БИОСа и видео памяти. И плюс есть еще верхняя граница, которая на разных материнках программируется по разному.
     
  19. Gray

    Gray New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2004
    Сообщения:
    75
    Адрес:
    Russia
    Pavia
    Увы, в реальности железо сжирает больше памяти. Вот несколько ссылок на эту тему:
    http://asus.ru/ftp/forum/MapOfMemory.gif
    http://www.polywell.com/us/support/faq/4GB_Rev1.pdf
    http://forum.asus.ru/viewtopic.php?t=3335

    Идея, безусловно, хороша. Попробую разобраться в программировании моста.

    PROFi и Pavia

    На материнках с чипсетами Intel 975X, Intel P965 и Intel 955X можно подвинуть адреса
    железа в старшую часть 8 ГБ пространства. См: http://support.microsoft.com/kb/929605
     
  20. Gray

    Gray New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2004
    Сообщения:
    75
    Адрес:
    Russia
    PageFault

    А толку то?
    Во-первых: В этом случае сама операционка сожрет столько памяти под себя, что задачам больше трех гиг памяти не останется.
    Во-вторых: Ни Win64 ни Vista выделяют под одну задачу не более 2GB оперативной памяти. Или я не прав?