Насколько память быстрее под DOS, чем Win32 ?

Тема в разделе "WASM.BEGINNERS", создана пользователем mono recoder, 4 дек 2005.

  1. mono recoder

    mono recoder New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2005
    Сообщения:
    12
    Есть одна задумка(пока только в голове), большая часть рабочего кода, это чтение и запись в память. Скорость выполнения буден не мгновенной.Возможен вариант, что порядка нескольких часов(задача - моделирование некоего процесса). В начале реализую под Win32, но насколько я понимаю менеджер памяти тоже ест прилично,(или я не прав). Насколько под досом(прямая запись и чтение) быстрее будет. Вопрос про скорость памяти.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    mono recoder

    Конечно, под Win32 достаточно много времени уходит на выделение и инициализацию страниц памяти - порядка 10 и более тысяч тиков на одну страницу (на P4 под 98SE и XP SP2), причем как для динамической так и для статической памяти. Но на частоте 1..3ГГц это всего лишь 10..3мкс, поэтому при записи в ОЗУ сотни мегабайт на выделение страниц уйдет лишь несколько десятых долей секунды. Поэтому для блоков памяти в несколько раз меньших объема ОЗУ это не страшно, а для больших размеров лучше сразу ориентироваться на запись данных в файл - иначе можно нарваться на супертормозной свопинг. Ну а если памяти хватает и страницы инициализированы, то менеджер памяти отдыхает и рулит железо (винда правда не спит и периодически норовит прервать идилию, особенно на пеньках с HT ;). Поэтому тут все зависит от задачи - сколько и откуда читаем и сколько и куда пишем и в каком порядке - оптимизация работы с памятью и кэшем (см. мануалы Intel и AMD по оптимизации, труд К.Касперски и т.п.)
     
  3. mono recoder

    mono recoder New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2005
    Сообщения:
    12
    Спасибо за ответ, книжечки эти почитаю как нибудь... но я немного не понимаю механиз страничной переадресации.



    вот нужно мне выполнить код:



    mov ax, PTR WORD [adres]





    Windows должна по идее обработать этот запрос так:

    1.Получить дискриптор моего процесса, чего-то там..

    2.Получить смещение адресного пространства моего процесса( у каждого процесса ведь свое адресное пространство?

    3.Выполнить:



    mov ax, PTR WORD[OFFSET+adres]



    или

    1. получить номер страницы, по adress...

    2. плучить смещение...



    Все равно выходит, что на каждую операцию с памятью система выполняет еще ~7 операций.



    А под DOS можно организовать почти непосредственную работу с физическими адресами. И скорость возрастет многократно!!! 8)))))





    Я наверно чего-то не понял...
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Да, похоже звон ты слышал, но как это работает не представляешь ;)



    Всю страничную переадресацию выполняет процессор, а задача винды лишь подготовить в памяти соответсвующие структуры Page Directory (католог страниц) и Page Table(s) (таблицы страниц) и при переключении задачи перезагрузить в регистр CR3 (он же PDBR) базовый адрес каталога страниц твоего процесса. Проц кэширует записи PD и PT в TLB, поэтому все преобразования адресов выполняются в среднем достаточно быстро, поэтому в плане трансляции режим реальных адресов ничуть не быстрее. Но вот если запись нужной страницы отсутсвует или она помечена как неприсутсвующая в физ.памяти, тогда проц выдает исключение #PF и тут винда бросается выделять память под страницу и возится с этим достаточно долго (но об этом я уже говорил выше)
     
  5. mono recoder

    mono recoder New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2005
    Сообщения:
    12
    Понял в основном. Спасибо.