архитектура памяти Windows

Тема в разделе "WASM.WIN32", создана пользователем Vic, 4 окт 2008.

  1. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Y_Mur
    В общем-то да. Единственное "но": эта память всё равно остаётся памятью пользовательской программы, просто выделение-освобождение её для этой самой пользовательской программы происходит неявно. Те же ДЛЛки типа user32.dll находятся в виртуальной памяти программы пользователя, хотя память для них была выделена не по запросу программы, а самой системой, и не для своих нужд, а для нужд пользовательской программы (которая без этих ДЛЛ не будет работать).

    Для "фантазирования" -- нет. Просто это может сбить с толку человека, который плохо представляет, как всё это хозяйство работает. Ну а вводить в заблуждение, даже неумышленно, не есть хорошо :)

    defaultplayer
    Скорей, не диапазон адресов принадлежит (сам по себе диапазон -- чисто техническая вещь, определяемая разрядностью и архитектурными особенностями процессора), а именно виртуальная память. Программа может обратиться к своей памяти, но не может к виртуальной памяти ядра -- защита срабатывает, хотя сами адреса действительно отображены.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Y_Mur
    Не совсем так. Есть и другие состояния страниц, в частности "обнуляемая по требованию" - именно в таком состоянии создаются PTE страниц, выделенных MEM_COMMIT. При первом обращении к такой странице возникает page_fault и винда выделяет для нее обнуленную страницу физ.памяти из списка обнуленных страниц. Т.е. на момент обращения к странице никакой "реальной" памяти под нее м.б. не выделено, но в рез-те обработки исключения винда обязана предоставить эту память
    PS: Подробности см. у Руссиновича и\или в статье Great'а
     
  3. defaultplayer

    defaultplayer New Member

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

    Виртуальное адресное пространство - представляет собой диапазон адресов, которые может формировать программа и размер которого зависит от архитектуры проца.

    Виртуальная память - диапазон адресов виртуального адресного пространства, по которым программа может обращаться, тоесть pte для данных адресов не содержит valid=0 prototype=0 (пользователь\супервизор пока опускаем, непонятно как его притулить к данному определению)

    add: наверно понятие "физическая память" нужно рассматривать в зависимости от контекста, тоесть говорить о ней и подразумевать озу или же память на которую проецируются виртуальные адреса, а это уже может быть либо озу либо какой-нить внешний носитель что и делает рихтер
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    defaultplayer
    диапазон адресов == адресное пространство
    память != диапазон адресов

    Виртуальную память тогда уж скорее стоит определить как совокупность ОЗУ + файл подкачки + те страницы о которых написал leo которые уже выделены, но их на самом деле ещё нигде нет ни в ОЗУ ни в файле подкачки ;)
     
  5. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    почему же это не диапазон адресов, я вот что-то немогу понять наверно, SII писал
    и я с этим согласен
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    defaultplayer
    Т.е. диапазон адресов (он же адресное пространство) это пустая коробка, а память это то что в эту коробку кладётся ;)
    А кладутся собственно туда всегда страницы ОЗУ т.е физическая память, но иногда это делается "виртуально" т.е. программа уверена, что у неё в указанном месте кробки память есть, а на самом деле её там нет, а информация из этой памяти лежит не в ОЗУ, а на диске, или вообще нигде как в случае со свежевыделенными нулями ;)
     
  7. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    гг, про пустую коробку понятно, смотрите есть диапазон адресов именуемый виртуальным адресным пространством, так вот в нем к определенным диапазонам можно обращаться а к другим нельзя. Вопрос: как будут называться адреса к которым обращаться можно, а далее нас уже не интересует что на них проецируется, озу, винт либо вообще ничего??
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Дык в том то и дело, что можно обращаться ко всем ;) за исключением тех что заняты осью, только нужно своевременно предупредить об этом ось и она подставит туда реальную физическую память ;), а если она "схалтурит" и выполнит эту заявку только виртуально ;) то возьмёт на себя обязательство исправить недоработки по первому требованию ;)
    Так что имхо определение из #24 хоть и несколько сумбурно, но вполне годится для понятия виртуальная память ;)
     
  9. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    defaultplayer
    Я б назвал допустимыми виртуальными адресами. А недопустимые -- это те, обращение по которым вызовет ошибку (не исключение по отсутствию страницы, обрабатывая которое, ось просто "подсунет" нужную страницу, загрузив её с диска, так что программа ничего и не заметит, а именно ошибку, по которой задача в общем случае должна быть снята). Есно, для задачи весь диапазон виртуальных адресов, зарезервированный для оси, является недопустимым, хотя сформировать соответствующие адреса она может (ведь в простейшем случае для Вин32 виртуальный адрес -- это просто смещение, указываемое в команде, ну а селекторы сегментов всегда одни и те же, поскольку сегментация не используется).
     
  10. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Память - сущность которая запоминает.
    Физическая память - сущность материальная, присутствует в физическом мире. Сюда можно было бы включить своп, но он стоит отдельно. Физическая память состоит из Системной памяти и памяти различных устройств и их портов в/в.
    Виртуальная память - сущность не материальная, но частична, имеет отображение в физическую память.
    Что касается свопинга, то это попытка предоставить больше памяти, чем есть на самом деле, больше чем физической.

    Диапазон это подмножество из адресатного пространства. А адресатное пространство это совокупность все возможных адресов для данной сущности. Термин “адресатного пространства” применяется для широких диапазонов.

    К примеру, адресатное пространство 4ГБ это диапазон от 0 до 0FFFFFFFFh, в этом адресатном диапазоне существуют большое число диапазонов от, к примеру, 0A000h-0AFFh.


    Адресное пространство в виртуальной памяти.
    В виртуальной памяти доступен селектор: смещение, в самой ОС вириальная память может быть и расширенна : др. :задача :селектор :смещение . Организация intel такова что виртуальное адресатное пространство преобразуется в линейное 4ГБ. Хотя перехвати мы переключение селектора мы сможем подсунуть что захотим, что позволяет линейной памяти адресовать гораздо больше.
    Виртуальная память может физически отсутствовать и даже быть не отображена, на то она и виртуальная. Но в конкретный момент времени будет доступна только часть данных. Только часть будут в физической памяти.
    Может быть так что нет ничего в физической памяти, но как только это потребуется система отреагирует и загрузит нужные данные или выдаст сообщение об ошибке.
     
  11. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    мне кажеться так, виртуальная память может быть выделена(та, к которой можно обращаться) а может быть невыделена(к которой нельзя обращаться), та которая выделена может быть спроецирована на физ.память(озу, винт, етк) а может быть нет, поэтому виртуальную память нужно рассматривать как кучу адресов, которыми собственно и оперируют программы, в совокупности со структурами описывающими их (это может быть pte с valid=0 prototype=0, описывающих невыделенную вирт.память либо с prototype=1, когда осью используются еще доп. структуры для описанию состояния физических данных для данного виртуального адреса). Мне кажется это Рихтер и хотел сказать в своем повествовании. Вопрос: например две виртуальных страницы спроецированы на одну страницу физ.памяти(озу), сколько у процесса будет виртуальной памяти а сколько физической? Не ругайтесь если намолол чепухи :)
     
  12. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    кстати этот вот EXEшник и есть физической памятью(не в понимании озу) для зарезервированного региона виртуальных адресов, который будет спроецирован на нее
     
  13. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    в англоязычной литературе, по крайней мере майкрософт и рихтером, используется термин physical storage, так вот переводят его на русский как физическая память, что на мой взгляд неверно, и в конечном итоге искажает истинный смысл повествования в данном контексте. Переводить его следует как "физическое хранилище", тоесть правильно будет сказать: передача региону физического хранилища (ram, page, mmf).

    Цитата из его книги только с заменой "память" на "хранилище": "Образ исполняемого файла (т.е. EXE- или DLL-файл), размещенный на жестком диске и применяемый как физическое хранилище для того или иного региона адресного пространства, называется проецируемым в память файлом (memory-mapped file)."

    И еще, сама майкрософт использует выражения как проецирование виртуальных страниц на физические, так и физические на виртуальные.