Пространства адресов

Тема в разделе "WASM.BEGINNERS", создана пользователем defaultplayer, 28 дек 2008.

  1. defaultplayer

    defaultplayer New Member

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

    http://msdn.microsoft.com/en-us/library/ms810616.aspx
     
  2. Zitzy

    Zitzy New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2009
    Сообщения:
    28
    но теперь лично для меня все стало на свои места. спасибо большое!
     
  3. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    Zitzy
    поделитесь своими выводами тогда
     
  4. Zitzy

    Zitzy New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2009
    Сообщения:
    28
    я склонен придерживаться версии SII. а кстати, у МС спрашивать никто не пробовал? :)
     
  5. defaultplayer

    defaultplayer New Member

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

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

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

    defaultplayer
    Это не совсем последний аргумент. Вы, вероятно, упустили из вида, что я апеллировал и к ещё одному аргументу: что общепринятым является понимание виртуальных адресов как тех адресов, с которыми непосредственно работает программист. Хотя Майкрософт фактически говорит о том же, когда утверждает, что в функции API передаются виртуальные адреса -- просто делает это в несколько другом виде. Однако тот факт, что Майкрософт пишет о передаче виртуальных адресов, а в реальности передаются смещения, однозначно свидетельствует о том, что виртуальный адрес Майкрософт -- это не линейный адрес ИА-32, а как раз смещение из логического адреса, на чём я постоянно настаиваю. Ну а почему Майкрософт открытым текстом это не пишет, я вроде как говорил неоднократно: её документация написана не под конкретную аппаратную платформу. Хотя лично я бы сделал в ней раздельчик, где такие вещи изложил бы явным образом: на ИА-32 32-разрядной вирутальный адрес -- это смещение из логического адреса в терминах производителя процессора, на ПоверПЦ -- это эффективный адрес, на Альфе виртуальный адрес -- это виртуальный адрес ну и т.д.

    Совершенно верно. А в тех местах, где смещения упоминаются (вроде TEB), речь идёт вроде как раз о специфических вещах, отличающихся от "нормальных" виртуальных адресов. Ну или о смещениях в платформенно-независимом смысле (как о расстояниях между неким объектом в памяти и началом виртуального адресного пространства, а не как о компонентах логического адреса ИА-32, хотя численно это обычно одно и то же) Впрочем, тут я пока ничего утверждать не буду: не вчитывался.

    Zitzy
    Спасибо за ссылку. Теперь ясно, откуда эти 4 Кбайта. Дело в том, что я глубоко TEB не ковырял. Когда-то мне потребовалось раскрутить SEH, и я это сделал, но во всё остальное серьёзно не вникал. Поэтому про эти 4 Кбайта я даже не не помнил -- я не знал о том, что этот "сегмент" имеет такой размер. Мораль: век живи, век учись -- и дураком помрёшь :) Но в любом случае, этот "сегмент" я трактую как структуру данных размером 4 Кбайта, лежащую в самом что ни на есть обычном плоском виртуальном адресном пространстве, а регистр FS "логически" содержит базовый адрес этой структуры. Обратиться к ней можно и другими способами -- по указанному базовому адресу через сегмент DS, например.

    defaultplayer
    Не ответят: они сами этого не знают :) Уже проверено. Нет, в Майкрософт хватает грамотных людей, но они не сидят на техподдержке. На ней сидят консультанты для блондинок... А вообще на такой вопрос абсолютно точно и однозначно могут ответить только архитекторы системы, ну а достучаться до Дэвида Катлера лично мне представляется проблематичным :) Вот если б его по каким делам занесло б в Москву, тогда другое дело... Но к нам приезжают либо технари достаточно низкого ранга, либо бизнес-руководители. Первые не имели к проектированию системы никакого отношения, а потому недостаточно авторитетны, чтобы дать однозначный ответ, ну а вторые вообще в технике разбираются очень слабо.

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

    Здесь упоминаются линейные адреса, есть также рассуждения о линейном адресном пространстве. Однако считать, что в этих случаях речь идёт о линейном адресном пространстве ИА-32, оснований нет: здесь "линейный" означает "последовательный, непрерывный, несегментированный" -- без привязки к технической реализации, что и неудивительно: статья написана в 1992 году, когда ещё отнюдь не было очевидно, что архитектура ИА-32 займёт абсолютно господствующее положение на рынке ПК.

    Прямое указание, что виртуальные адреса в Винде -- 32-разрядные, что не даёт возможности "в лоб" считать ими логические адреса ИА-32. Но опять-таки, следует помнить о независимости Винды от платформы, в отличие от версий 3.1 и более ранних, которые были жёстко привязаны к 8086/80286 (ещё даже не ИА-32, хотя ограниченная поддержка 80386 в 3.0 и 3.1 уже была).

    Вероятно, это именно то место, которое Вас смущает? Моё мнение таково: автор поверхностно описывает здесь работу механизма страничного преобразования адресов, для чего ему, естественно, пришлось "разбить" виртуальный адрес на части -- ведь он описывает не конкретно процессор 80386, а общую идею, лежащую в основе страничного механизма. Применительно к ИА-32 такое описание будет технически некорректным, хотя логически всё будет верно. Мы понимаем, что в случае ИА-32 делится на отдельные поля линейный адрес, но для ОС его не существует: она оперирует преимущественно аппаратно-независимыми категориями, спускаясь "с небес на землю" только в тех случаях, когда это абсолютно необходимо.

    Возьмём такой пример. Программа обратилась к системе, передав ей какой-то виртуальный адрес -- а на самом деле на ИА-32 смещение из состава логического адреса. Оси для чего-то потребовалось проверить запись таблицы страниц. Как она может поступить в этом случае? Вручную, с помощью обычных арифметико-логических команд разбить переданное ей смещение на необходимые поля и отыскать требуемую запись (естественно, при этом будет предполагаться, что это смещение задано для сегмента с нулевой базой, иначе расчёт будет неверным).

    Замечу напоследок, что, хотя автор пишет "вообще", но в качестве примера он неявно использует механизм, принятый в 80386, т.е. на заре архитектуры ИА-32. Для Винды в общем-то безразличны конкретные размеры страниц, число уровней таблиц и т.п. -- при необходимости не составит особых проблем адаптировать её, например, к четырёхуровневой системе с размером страницы в 256 байт (изменению подвергнутся лишь несколько подпрограмм). В то же время сам аппаратный механизм преобразования адресов подвергался улучшениям, отчасти учитываемым в последующих версиях системы (именно поэтому 32-разрядный сервер-2003 может работать с физической памятью объёмом свыше 4 Гбайт), и поэтому схема преобразования адресов даже для ИА-32 сегодня будет не совсем такой, как излагает автор, хотя общая её идея, естественно, останется.

    В общем, данная статья довольно полезна, но относиться к ней надо достаточно осторожно и из-за возраста, и из-за по сути обзорного, а не глубокого разбора управления памятью. Ну и, наконец, это статья конкретного автора, причём вряд ли относящегося к числу архитекторов системы, так что она отражает не объективную реальность как таковую, а его личную точку зрения на неё.
     
  7. defaultplayer

    defaultplayer New Member

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

    вот накопал функцию интересную GetThreadSelectorEntry http://msdn.microsoft.com/en-us/library/ms679363(VS.85).aspx, почитайте внизу ремарк
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    если ты про сочетание "linear virtual address", то так подчеркивается отличие от физического.
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Great
    Нет. Так подчёркивается линейность виртуального АП. :)
     
  10. defaultplayer

    defaultplayer New Member

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

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    defaultplayer
    Вы неправы. Закрытое АП не значит неодинаковое. Точно так же линейные адреса во всех процессах тоже одинаковые. Но через пэйджинг они проецируются на разные физические адреса.
     
  12. defaultplayer

    defaultplayer New Member

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

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    defaultplayer
    Насколько я помню, мы пришли к тому, что не стоит вводить понятие логического АП.
     
  14. defaultplayer

    defaultplayer New Member

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

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    defaultplayer
    Нету. Ни мы, ни Intel его не ввели. Есть логический адрес. А если Вы ввели, то дайте определение логического АП задачи.
     
  16. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    defaultplayer
    Не вижу нестыковки. Сегменты одинаковые. Они даже описывают одну виртуальную память. Только вот физическая разная. Но даже если ты это считаешь "нестыковкой", она никуда не денется от замены слов, о которой вы спорите вот уже пять страниц
     
  18. defaultplayer

    defaultplayer New Member

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

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    defaultplayer
    Great
    l_inc
    Да, там написано "линейный виртуальный адрес" и заодно сказано, что это для ИА-32 (х86). Но из этого не следует, что это линейный адрес в терминах ИА-32 = виртуальному адресу в терминах Винды. Это лишь означает, что адрес, возвращаемый этой функцией, -- последовательно-непрерывный, т.е. "линейный" в прямом смысле слова. В отличие от сегментированного адреса. Хотя понятно, что численно мы получим линейный адрес в терминах ИА-32.

    defaultplayer
    А какое отношение здесь вообще сегменты имеют? Как будет обеспечиваться отдельное виртуальное адресное пространство для каждого процесса на Альфе, где никаких сегментов нет, и есть только прямое преобразование виртуального адреса в физический с помощью страничного механизма? Отдельные виртуальные адресные пространства обеспечиваются отдельными наборами таблиц страниц, а сегментация тут вообще роли никакой не играет.

    ВСЕМ

    Ещё и ещё раз повторяю, господа. Термины "виртуальный адрес" и "виртуальное адресное пространство", появляющиеся у Майкрософт, должны означать принципиально одно и то же на любой аппаратной платформе, поскольку они не "заточены" под ИА-32.
     
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    defaultplayer
    Что-то я здесь ни слова не вижу о том, что это адресное пространство называется логическим. Да и нет у нас в Windows сегментов: через какой бы мы сегментный регистр не обратились к памяти, мы всегда попадём в одно и то же виртуальное адресное пространство.
    И вообще надоело спорить. Моё мнение о логическом АП: либо оно определено, как множество всех виртуальных адресов, и тогда его просто рядом нельзя ставить со словом задача или процесс; либо если существует понятие логическое АП задачи/процесса, то для Windows оно тождественно с виртуальным АП и, разумеется, различно для каждой задачи/процесса; либо оно вообще не определено.
    SII
    Лично я не говорил о том, что из словосочетания: "Линейный виртуальный адрес", — следует тождественность понятий виртуального адреса Windows и линейного адреса IA-32. Вот, что для меня является определяющим:
    Код (Text):
    1.                                        виртуальный адрес     логический адрес      смещение логического адреса      линейный адрес
    2. равенство виртуальному адресу                 да                   нет                     не всегда                        да
    3. способ задания                            одна часть            две части                  одна часть                   одна часть
    4. разрядность                                   32                  16:32                       32                           32
    5. соответствие разных адресов               невозможно             возможно                  возможно                     невозможно
    6.                  одной памяти
    7. соответствие одного адреса                невозможно            невозможно                 возможно                     невозможно
    8.              различной памяти
    Как видно из таблицы (разумеется, таблица приведена для Windows+IA32), полное соответствие наблюдается у виртуального и линейного адреса, а не для какой-либо другой пары.
    А кто сказал, что они означают различное? С точки зрения прикладных программ это и есть одно и то же.