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

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

  1. SII

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

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

    И в конце концов признал, что погорячился (см. мой ответ Вам).

    Ну а поскольку я вернулся после выполнения чёрных дел и у меня появилось немного времени, хочу обратить внимание ещё на один момент, который прошлый раз упустил в спешке.

    Майкрософт пишет (по приведённой Вами ссылке):

    Сразу замечу, что мне непонятно, почему Вы заключили, что "Понятие виртуального адресного пространства вводится Microsoft на основе введённого Intel понятия виртуальной памяти". В разделе MSDN, на который Вы ссылаетесь, нет ни слова о том, что Майкрософт опирается на понятие, введённое Интел. Более того, если мы обратимся к истории Винды, то вспомним, что она предназначалась сразу для нескольких платформ, а не только для ИА-32, поэтому опираться на одну конкретную Майкрософт просто не могла.

    Но дело не только в этом. Важно ещё и то, что Майкрософт даёт совершенно корректное определение виртуального адресного пространства, но опирается при этом на термин "виртуальный адрес", определения коего у Майкрософт я не вижу. Правда, она пишет в этом же разделе следующее:

    Но это не является определением виртуального адреса, это лишь указывает одно из его свойств (что он не соответствует действительному физическому положению объекта в памяти) и объясняет, каким именно техническим путём ОС преобразует виртуальный адрес в физический. Кроме того, я нигде не вижу описания того, откуда берётся виртуальный адрес. Он как бы есть, и всё тут.

    И вот ещё. На первой странице defaultplayer задаётся вопросом: "однозначно интел пишет, логический в линейный, линейный в физический, откуда взялся термин виртуальный". Попробую ответить на него.

    Во-первых, надо учесть, что Майкрософт создавала свою операционную систему в расчёте на достаточно произвольную архитектуру процессора, от которой требовались лишь две вещи: 32-разрядность и наличие страничной организации памяти.

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

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

    А вот с теми адресами, с которыми имеет дело программа и программист, не всё так просто. Общепринятым, встречающмися на многих программно-аппаратных платформах, является именование их "виртуальными адресами". Выдумывать собственный термин Майкрософту особого смысла не было, поэтому она и говорит везде о виртуальных адресах: этот термин благополучно "ложится" и на PowerPC, и на Alpha, и на MIPS, и на IA-32, и на что угодно -- в силу как раз того, что им общепринято обозначать адреса, с которыми работает программа. (Опять отклоняясь в сторону, замечу, что у нас на заре появления виртуальной памяти пытались использовать термин "математический адрес", но он не прижился, и в обиход вошла калька с английского.)

    Недоумение же defaultplayer, вероятно, объясняется тем, что он невольно зациклился именно на архитектуре ИА-32. В самом деле, Майкрософт пишет, что "A virtual address does not represent the actual physical location of an object in memory; instead, the system maintains a page table for each process, which is an internal data structure used to translate virtual addresses into their corresponding physical addresses" -- то есть прямо говорит об использовании страничного механизма для преобразования виртуального адреса в физический. Но defaultplayer'у из документации Интел прекрасно (и совершенно справедливо) известно, что страничный механизм ИА-32 осуществляет преобразование линейных адресов в физические. Из этого defaultplayer и делает вывод, что линейный адрес в терминологии Интел -- это виртуальный адрес в терминологии Майкрософт. А вот этот-то вывод, на мой взгляд, и не является верным. Майкрософт использует термин "виртуальный адрес" во вполне общепринятом смысле, для обозначения тех адресов, с которыми работает программа и программист, но не конкретизирует его на "техническом" уровне (не пишет, в частности, что виртуальный адрес -- это пара "селектор сегмента:смещение") в силу универсальности Винды и недопустимости из-за этого жёсткого связывания понятий операционной системы с понятиями, специфическими для конкретной аппаратной платформы.
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    defaultplayer
    А Вы можете показать, где именно? :derisive:
    Наверное, именно поэтому. :)
    Я раньше исправился. :) Но с другой стороны Intel также пишет "If paging is used, the paging mechanism can map a single linear address space (contained in a single segment) into virtual memory". Как можно что-то проецировать в механизм? ИМХО Intel использует понятие virtual memory иногда обозначая "virtual memory environment" (и это есть абстракция), а иногда, как пэйджинг (тогда это метод).
     
  3. SII

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

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

    Пока я писал свой опус, Вы успели подкорректировать своё сообщение :) Что ж, обычное явление, поэтому продолжу здесь.

    Заметьте, что тут Интел именно что недвусмысленно пишет, что "этот метод отображения линейного адресного пространства известен как виртуальная память или странично-зависимая виртуальная память" (перевод достаточно вольный, так что претензии принимаются :) ).

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

    В общем-то, действительно не признаю :) Потому что понятие "виртуальная память" намного более древнее, чем сама Интел, поэтому любой вменяемый разработчик должен придерживаться уже сложившихся понятий и менять их только в силу крайней необходимости.

    Поясню на примере. Анонсируя Систему 360 в 1964 году, IBM использовала термин "байт" для обозначения группы из 8 битов, которая адресуется в памяти как единое целое (до этого применялись самые разные способы, но обычно адресовались целые слова разной длины -- были и 18 бит, и 37, и 53, и 60 -- это только то, что я точно помню). Как мы знаем, через некоторое время этот термин стал общеупотребительным и широко используется и сейчас. Так вот, если бы некая фирма в наши дни, создав свой процессор, обозначила бы термином "байт" группу из, например, 4 или 16 битов, было бы это разумным решением или нет?

    То же самое касается и виртуальной памяти. Разработчик процессора может придумывать свои аппаратные механизмы, которых ни у кого не было (реализация сегментации ИА-32 довольно сильно отличается от таковой, например, в Z8000, что делает её по сути уникальным механизмом, хотя сама идея, лежащая в её основе, не нова). Но он не должен менять смысл уже устоявшейся общепринятой терминологии. Именно поэтому я и отказываю Интел (и любому другому) в праве придумывать собственное определение виртуальной памяти, не согласующееся с устоявшимся использованием этого термина.

    Насчёт логического адреса в терминологии Интел я согласен. По поводу виртуального -- нет, см. мой предыдущий пост (я его писал одновременно с Вашим, поэтому мы друг друга и не увидели).

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

    Кстати, об FS написать забыл-таки :) Так вот, фактически Винда его использует в качестве базового регистра, содержащего смещение некоей области данных внутри адресного пространства процесса. Обратиться к этой области можно и без FS, только надо знать смещение. Недаром в 64-разрядном режиме, где сегментацию отменили, FS и GS работают как дополнительные базовые регистры. Что же касается реализации этого механизма на других платформах, там для хранения смещения данной области памяти (уже в чистом виде, поскольку сегментации нет) будет использован какой-либо из имеющихся регистров процессора. Какой -- не знаю, поскольку Винду на других платформах не видел.
     
  4. defaultplayer

    defaultplayer New Member

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

    да, я поспешил отправить цитату
    вы неверно перевели
    ".... механизм пэйджинга может отобразить единственное линейное адресное пространство...."
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SII
    :) А вот тут вступает в силу то, что я написал в посте 51 о своём праве давать определения. Это всего лишь моя интерпретация. Т.к., как Вы верно заметили, Microsoft формального и точного определения виртуального АП и виртуального адреса не даёт, я позволил себе вольность самостоятельно написать: "Размещённое в виртуальной памяти" (т.е. я сам основывался на понятии виртуальной памяти, введённом Intel). И, учитывая, всё, что Вы написали о рассчёте Microsoft на кроссплатформенность Windows, в принципе могу согласиться, что это неверно. Но(!) в контексте Microsoft Windows + IA-32, который с самого начала имеет место, всё таки виртуальный адрес - это линейный адрес (не забывая, что подразумевается включённая страничная адресация).
    Это хорошо, что принимаются, потому как перевод неверный (думаю, Вы путаете слова depend и demand). Так вот demand-paged virtual memory - это как раз та виртуальная память, для которой необходимо наличие дискового пространства. Т.е. виртуальная память со страницами по требованию (по требованию программы при обращении к странице ОС подгружает её в физическую память). А просто "виртуальная память" - это более общее понятие, которое не требует наличия дискового пространства в качестве расширения виртуальной памяти.
    Ну, собственно, на этом вопрос можно считать исчерпанным. ИМХО Intel имеет право сузить/изменить понятие (если таковое уже существует) до своих собственных определений по отношению к собственной продукции.
    А Вы пробовали заменить селекторы в сегментных регистрах на другие, которые бы указывали на дескриптор из LDT, содержащий ненулевую базу? Как думаете, адреса слева изменят свои значения? Не-а. Они останутся (и память никуда не сдвинется, а останется на месте), что в свою очередь будет означать, что мы видим всё таки виртуальные адреса, а не смещения.
    defaultplayer
    И, по-моему, это единственное упоминание. Из которого абсолютно непонятно, что понимать под логическим адресным пространством задачи. Множество всех возможных логических адресов? Отождествлять его с линейным адресным пространством? Или вообще что-нибудь другое?
    А я не указал, как я перевёл. :) И с Вашей частью перевода согласен. А если его продолжить то получается:
    "... механизм пэйджинга может отобразить единственное линейное адресное пространство (содержащееся в единственном сегменте) на виртуальную память". И, если виртуальную память понимать действительно только как метод, возникает вопрос: что значит отобразить на метод?
     
  6. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    l_inc
    Не согласен :) Продолжаю утверждать, что виртуальный адрес в Винде -- это логический адрес в терминологии Интел. По той причине, что общепринятым является определение виртуальных адресов как тех, с которыми непосредственно работает программист. На ИА-32 он непосредственно работает с селекторами и смещениями. Учитывая плоскую модель памяти Винды, я б согласился на нестрогое, но на практике работающее определение "виртуальный адрес -- это смещение из логического адреса" (FS же рассматривать как базовый регистр, тем более что ни к каким недоступным иными способами адресам памяти он доступа не даёт).

    Не согласен. Здесь о дисках нигде не говорится. Demand -- это требование, поэтому demand-paged virtual memory -- это виртуальная память, требующая страницы (т.е. наличия страниц). А отнюдь не требующая наличия дискового пространства. Хотя, конечно, "страничнозависимый" -- слишком вольный перевод, но по смыслу он, ИМХО, подходит: этот способ организации виртуальной памяти зависит от страниц, поскольку при отсутствии страничного механизма он попросту невозможен.

    Если честно -- не пробовал. Но тогда это недостаток отладчиков. По-хорошему, они должны показывать адрес в виде сегмент:смещение или сегментный-регистр:смещение (как это обстояло во времена ДОС). Конечно, это ИМХО, но лично мне так было бы удобнее. Ну или сделать переключатель, как показывать: линейный адрес или логический.

    Ну, против имхи приёма нет, это понятно :) (без всякого наезда говорю). Но вопрос исчерпанным считать нельзя, потому что изначально вопрос заключался в том, что такое виртуальный адрес применительно к Винде. Если сказать, что виртуальный адрес в Винде = линейному адресу в ИА-32, тогда возникает вопрос: а как в Винде называется то, что Интел называет логическим адресом? Очень хотелось бы узнать, что об этом говорят мануалы Майкрософта. Боюсь, однако, что они ничего не говорят, потому что виртуальный адрес -- это не линейный, а именно логический, просто Майкрософт это никак не конкретизирует, потому что такая конкретизация зависит от аппаратной специфики. Она лишь опирается на общепринятую интерпретацию виртуального адреса как того, с которым работает программа.
     
  7. defaultplayer

    defaultplayer New Member

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

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SII
    По-моему, я уже не один раз упомянул, что windows позволяет прикладному программисту задавать собственный дескриптор в LDT. Поэтому это определение и не строгое, и не работающее, и сответственно неверное.
    Здесь не говорится. И чёткого определения в мануалах Intel я не нашёл, хотя это всё время подразумевается (исходя из понимания слова demand в английском). Поэтому могу только предложить вики: http://en.wikipedia.org/wiki/Demand_paging .
    Не говорят. Потому что это платформозависимое понятие и находится в компетенции Intel. А они уже дали своё определение. Если же всё таки говорить о логическом адресе в контексте Windows + IA-32, то понятие и остаётся таким, каким было определено Intel: селектор сегмента:смещение.
    Это не недостаток отладчиков. Просто они показывают действительно виртуальное адресное пространство процесса (с которым и работает программист, даже если задаёт адреса в логическом виде), а не смещения из логического адреса.
    defaultplayer
    Всё время хотел это сделать, но никак остановиться не могу. :)
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    SII
    Некоторые отладчики так и показывают. Например, WinDbg
     
  10. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    l_inc
    ссылка на мануал 1995 года
    http://rapidshare.com/files/178294649/iasdvol3.pdf.html
    Pentium® Processor Family
    Developer’s Manual
    Volume 3:
    Architecture and Programming Manual

    там 3.1.2 раздел можно почитать
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    defaultplayer
    Если не говорить о сомнительности срока годности... мне вот странно, что берётся всё таки 16 тысяч сегментов, а не все 64. Типа два бита под кольцо не считаются? Лично я бы считал и эти два бита. Всё таки, если вводить понятие логического АП, как множество всех возможных логических адресов, то 0x23:0x00ABCDEF и 0x20:0x00ABCDEF - это разные логические адреса.
     
  12. defaultplayer

    defaultplayer New Member

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

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    defaultplayer
    Дело не совсем в выборе сегмента. ИМХО дело в выборе самого адреса. А адреса различаются всеми 16-ю битами. Но в принципе, учитывая нижесказанное, это не важно.
    Вот тут я согласен :). Поэтому при ответе на вопрос о размере логического АП можно глупо повторить за Intel (причём за просроченной документацией :)), не понимая, почему так (а без формального определения о понимании речи быть не может), а можно считать многие варианты ответов верными. Поэтому ИМХО ставить перед SII вопрос о размере логического АП было некорректно.
     
  14. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    Нужно все-таки сойтись в одном каком-то мнении. Не дает покоя эта тема :) Нужно сделать множество умозаключений, которые бы не приводили к противоречию. Я вполне был бы удовлетворен и ответом, что виртуальный адрес это офсет, да и любым другим, но мне не дает покоя несколько противоречий:
    1. Майкрософт говорит о разбиении виртуального адреса, а процессор офсет не разлаживает.

    2. Между функциями ходит офсет и именуется он VA. В функциях же для доступа к TEB/PCR передаваемый параметр именуется офсет, а не VA.
    3. Интел пишет что логическое адресное пространство задачи или программы, это совокупность длин всех доступных ей сегментов, тоесть в случае прикладной программы это 4гб+4гб+4кб, а Майкрософт пишет что виртуальное адресное пространство программы 4Гб.

    Может все-таки Майкрософт из-за того, что виндоус использует плоскую модель памяти, опускает детали сегментации(эти детали раскрывает производитель процессора) и ведает нам о линейном АП. Чтобы она сказала, например, в случае если бы некая ихняя система использовала 2 каталога таблиц страниц для каждой программы, сколько бы тогда у нее было виртуальной памяти.

    В общем по этим причинам я делаю вывод, о том что виртуальный адрес это линейный.
    Может кто-то напишет в виде пунктов чтоб наглядно, виртуальный это не линейный потому что…
     
  15. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    defaultplayer
    Так виртуальный в Windows - это линейный в IA-32. В результате нет никаких противоречий. Первое и третье противоречие отпадают сразу.
    А вот второе не совсем верно сформулировано. Между фукнциями ходит не оффсет, а полный логический адрес. Но селектор сегмента, как часть логического адреса, передаётся неявно, т.к. заранее предполагается, что в функцию передаётся селектор, указывающий на дескриптор сегмента с нулевой базой. Только исходя из этого предположения оффсет можно называть виртуальным адресом. Именно поэтому при доступе к TEB (это доступ, который через fs?) мы передаём оффсет. Кстати, можно примеры таких функций?
    Собственно, не вижу никаких противоречий, если виртуальный в Windows - это линейный в IA-32.
     
  16. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    l_inc
    Опять повторюсь: виртуальный в Винде -- это логический в ИА-32, а не линейный. Как раз исходя из общеупотребительного значения термина "виртуальный адрес" и из того, что Винда не ориентирована на конкретный тип процессора.

    defaultplayer
    Пункт всего один, и он указан выше. Во всех системах на всех машинах термин "виртуальный" обозначает исходный адрес, а не промежуточный результат его преобразования аппаратными средствами. Возьмите тот же MSDN, откройте любой раздел, где говорится про виртуальные адреса, и попробуйте "положить" сказанное там не на IA-32, а на MIPS, Alpha, PowerPC или IA-64 (он же Itanium).

    Ну а ссылки на то, что Вы хотите написать статью исключительно про Винду на ИА-32, несостоятельны. Терминология Майкрософт распространяется на все версии её ОС, а не только на ту, что предназначена для ИА-32, а следовательно, и значение терминов остаётся одним и тем же.
     
  17. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SII
    Похоже, мы пришли к началу. :) Мне уже не интересно заново приводить всю аргументацию, которой во всех предыдущих постах и так навалом.
    Единственное что... объясните смысл вот этой фразы:
    Я её воспринял, как согласие с тем, что виртуальный адрес - это всё таки линейный, а не логический.

    Да... вот это ещё... :)
    Отождествление виртуального адреса Microsoft и линейного адреса IA-32 - это не смена терминологии Microsoft, а её наложение на конкретную архитектуру (IA-32). Т.е. никто не говорит, что виртуальный адрес Microsoft не будет называться логическим для какого-нибудь Alpha (хотя я без понятия, чем он там называется).
     
  18. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    l_inc
    Неправильно восприняли. Я лишь признал, что не во всех случаях виртуальный = логический, о линейном здесь вообще речи нет. А не совпадают понятия виртуального и логического адресных пространств в RSX-11, вспомнив что, я и написал сие признание :)

    А не приводите заново. Скажите, чем будет виртуальный адрес в Винде для перечисленных мною в предыдущем посте аппаратных платформ, отличающихся от ИА-32. Если Вы с ними не знакомы (лично я знаком крайне слабо -- реально работать не пришлось), то, думаю, без проблем сможете найти спецификации и почитать разделы, связанные с управлением памятью, после чего уже нетрудно будет догадаться, о чём говорит Майкрософт применительно к ним.
     
  19. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SII
    Подправил предыдущий пост.
     
  20. SII

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

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

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

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

    Вот, ещё посмотрел на Itanium. На входе -- 64-разрядный виртуальный адрес, на выходе -- 63-разрядный физический. Промежуточных адресов нет, преобразование на основе таблиц, хотя несколько не в том виде, что на IA-32.

    В общем, ещё и ещё раз: терминология Майкрософт является универсальной и не зависящей от аппаратной платформы. А обязательных адресов у аппаратуры всего два: физический на выходе и какой-то-там на входе (логический на ИА-32, виртуальный на Альфе, эффективный на ПоверПЦ). Поэтому назвать термином "виртуальный адрес" некоторое промежуточное значение Майкрософт не может: тогда этот термин становится неуниверсальным, и применить его, например, к Альфе или Итаниуму становится воощбе невозможным: нету там промежуточных адресов. Кроме того, сама Майкрософт пишет о передаче туда-сюда виртуальных адресов, а передать на программном уровне линейный адрес ИА-32 невозможно (передаётся только смещение, но это как раз легко объясняется тем, что селектор сегмента не нужен: он известен заранее; посему и допустима подобная вольность, когда адресом называется фактически часть адреса). Так что лично для меня абсолютно очевидно, что для Майкрософт виртуальный адрес -- это входной адрес устройства преобразования адресов, т.е. логический в терминологии ИА-32. То, что он красиво "ложится" на линейный адрес от ИА-32, не делает его таковым.