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

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

  1. defaultplayer

    defaultplayer New Member

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

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

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

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

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

    Ну а про использование ненулевой базы я уже говорил. Это платформенно-зависимый трюк, и не более того. И функционально он эквивалентен использованию нулевой базы в дескрипторе сегмента и ненулевой базе в каком-либо регистре общего назначения, играющем роль базового регистра.

    Кстати, о трюках. Слова "цыган", "цыплёнок", "цыц" и "цыкнул" пишутся с буквой "ы" после буквы "ц". Но это не отменяет правило русского языка о том, что после "ц" должна писаться буква "и". Это -- исключения из правила, а не нечто такое, что делает правило недействительным. Поэтому и возможность трюкачества с нестандартными дескрипторами сегментов на платформе ИА-32 отнюдь не отменяет того правила, что "нормальная" программа на этой платформе работает только со смещениями логических адресов, не трогая селекторы сегментов, что и даёт все основания именовать смещения виртуальными адресами. Ну а селекторы трогают только "цыгане" с "цыплёнками", которые не подчиняются общему правилу -- но которые и не могут быть перенесены на другую аппаратную платформу, в то время как "нормальные" программы под Винду переносятся на иные аппаратные платформы без всяких затруднений, простой перетрансляцией.
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    defaultplayer
    Я считаю это ваша проблема. Я то какраз понимаю где у термина смысл меняется, но четкой границы у меня нет.
    А вот у вас мышление табличное.

    MSDN это больше чем словарь поэтому отступления от терминов в сторону художественного текста вполне допустимы.
    И поэтому слово виртуальное памить надо понимать интуитивно, а не как термин.
    Вернее воспринимать как термин надо, но смягчать.

    В определении MSDN между прочем нет строгой привязки ни к линейному ни к логическому адрессу. А вы пробуете привязать. Что увас и не получается. И не получиться, так как термин строго не определен. Пойми правда она не слева и не справа. Можно было бы сказать по середине, но это тоже не верно. Она просто подвижна. В нужный момент она может быть справа может быть слева, а может быть и по середине.

    0,999999999999(9) = 1 ?

    Пойми мир устроин сложнее чем кажется. Поэтому мы неможем описать все одним термином. Несуществует строгих равенст. Но строгими равенствами удобнее оперировать.

    Вот смотри. Если А+В=L и А+С=L. Всегдали выполняется равенство В+С=L?
    Из равенства Аня+Володя=Любовь и Аня+Сережа=Любовь следует Володя+Сережа=Любовь?

    Явно они там используются явно! Вон пространство процесса отделено отпространства ядра.
     
  4. Pavia

    Pavia Well-Known Member

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

    Глуппо вводить определение что ведро полное если оно наполненноя яблоками до конца.

    Точно также и с виртуальным адресом. Вот он виртуальный потому что в физической памяти он может быть каким угодно. Линейный адрес виртуальный да. А если взять логический он тоже будет виртуальным.
    И логическим адрес связан с Линейный, как семечки с яблоками. Вроде общего ни чего, а связь есть мы можем объем яблок в семечках мерить.

    Майкрософт поэтому и не дает четкого определения. По тому, что оно шире. И покрывает все аспекты. Допустим у нас процессор только с логическими адресами они будут виртуальными или только с логическим.
    А как быть, если у нас процессор и с тем и другим? Сказать и то и то верно.

    А ты думаешь, что только яблоками можно мерить.

    Был парадокс со скоростью света расширили, ввели релятивистки законы движения. Но старые не выкинули так как и те и те верны.
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Если хочешь довольно таки строго определиться с терминами, то вот оно. На все варианты.
    Так как виндовс в системе x86 использует плоскую модель памяти. То Логический адрес будет равен Линейному. Хотя это не одно и тоже. И этот адрес будет Виртуальным.
    К вопросу о битах. Правильнее сказать 48 бит, но так как сегментные регистры не используются, то будем говорить о 32 битах.

    Причем порядок слов Логический и Линейный важен. Так как сначала Логический адрес преобразуется в Линейный.
    Преобразуются всегда. Причем в зависимости от системы это преобразование может быть как физическим, так и чисто умозрительным.

    ПС. Это все определение и слова выкидывать не стоит.
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SII
    Ну всё... опять ушли от истины. И Вы опять смешиваете точки зрения. В общем ответьте на единственный вопрос... Вначале Вы говорили, что виртуальный адрес в Windows - это логический адрес для IA-32. Вы тем самым признаёте, что логический адрес 23h:401000h и виртуальный адрес 401000h - это один и тот же адрес, а также что логический адрес 27h:1000h и виртуальный адрес 401000h - это одно и то же (при условии, что 27h - это селектор, указывающий на дескриптор с базой 400000h)?
    defaultplayer
    Прячет аппаратный механизм сегментации. И если аппаратный механизм сегментации от программ скрыт, то для программ её нет.
    Как выделенные безконтекстные понятия - да... согласен: разные, но не взаимоисключающие. И в данном случае скрытая аппаратная сегментация означает отсутствие таковой для программ. Т.е. "скрыта" - это причина, а "нет" - это следствие.
    Ну и не в продолжение вышесказанного, а в качестве подхода с другой стороны: Вы приводите другую цитату, ничего не делая с той, которую привёл я. А как Вы будете жить с первой цитатой, где чётко сказано: "unsegmented address space"? :)
     
  7. SII

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

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

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SII
    В общем с Вами трудно спорить, потому что Вы сами себе противоречите (с реальной точкой зрения, которых две с чётко выделенной границей между ними, Вы так и не определились):
    1) С одной стороны Вы пишете: "Имелось в виду, что виртуальный адрес Винды -- это исходный адрес на любой процессорной архитектуре". А исходный адрес на IA-32 - это логический.
    2) С другой стороны Вы пишете: "Виртуальный адрес Винды -- это смещение логического адреса ИА-32".
    Дополнительные уточнения и введение исключений в виде FS и "ненормальных" программ только усложняют обсуждение.
    Точки зрения, которые не подразумевают исключений (ни в виде FS, ни GS, ни каких-либо "ненормальных" программ), однозначно лучше тех, которые подразумевают. Я точно так же могу сказать, что виртуальный адрес Windows - это опупенный адрес IA-32. А потом каждое утверждение Intel насчёт адресов и каждое утверждение Microsoft насчёт адресов - это исключения.
     
  9. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    l_inc
    Ничего я себе не противоречу. Винда использует ПЛОСКУЮ модель памяти, это Вы понять можете? А плоская модель НЕ ПРЕДПОЛАГАЕТ использования программами механизма сегментации, даже если таковой существует. Это Вам понятно?

    Возьмите-ка и ответьте на два вопроса:
    1) Как Майкрософт называет адрес, передаваемый в платформенно-независимые функции АПИ?
    2) Как Интел называет значение, передаваемое в платформенно-независимые функции АПИ Винды?
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SII
    1) Виртуальный адрес.
    2) Здесь два варианта ответа в зависимости от точки зрения:
    a) Логический адрес.
    b) Линейный адрес.
     
  11. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    l_inc
    1) Верно.
    2) Неверно. В функции АПИ передаётся только смещение из состава логического адреса. Сегмент подразумевается (DS, с нулевой базой). Передать линейный адрес невозможно в принципе: его для программы не существует, он существует только внутри процессора по пути из механизма сегментации в страничный механизм.
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SII
    2) a) В функции API передаётся как смещение, так и селектор. Селектор передаётся неявно. В терминах высокоуровневых языков программирования это называется передачей параметра через глобальную переменную.
    b)
    Эту точку зрения я защищал на протяжении четырёх страниц. И она мне до сих пор нравится больше, хотя я могу защитить обе. Поэтому здесь без комментариев.
     
  13. SII

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

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

    В общем, смещение в случае ИА-32 и есть виртуальный адрес с точки зрения Винды.
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    SII
    В состоянии. Ваши "ненормальные" программы - это исключение, которое является негативной стороной любого правила.
    Исправляюсь... невнимательно прочитал... да, не в состоянии... но под винду пишут не только на "ЯВУ".
    И ещё раз исправляюсь. :) Всё таки в состоянии (SetThreadContext). И передаёт он и то, и то, хотя селектор неявно.
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Значит все-таки решили что логический? =)
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Great
    Нет. Есть две точки зрения (одна основана на синтаксическом понимании понятия адреса, а вторая на семантическом): линейный и логический. То, что сейчас говорит SII (смещение логического адреса), - это месиво, содержащее внутреннее противоречие, а не то, которое вносит Microsoft.
     
  17. defaultplayer

    defaultplayer New Member

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

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Я не понтуюсь своими знаниями в отличие от некоторых и встревать в ваш спор тоже не собираюсь потому что выигрывать уже не интересно, а проигрывать не хочется.
    Лучше объясни ты в чем для тебя принципиальная разница, точнее, что тебе даст ответ в этом споре?
    Я лучше просто продолжу стоять на своем что все используют понятие виртуальный адрес как им хочется. Микрософт - как линейный, SII - как смещение ну и т.п. Мне больше нравится логический. А тебе?
     
  19. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Great
    Не надо ля-ля, Майкрософт вообще не поясняет, что такое виртуальный адрес. Из документации можно лишь понять, что он имеет размер 32 бита и может передаваться в функции API, а также что он с помощью страничного механизма преобразуется в физический.
     
  20. defaultplayer

    defaultplayer New Member

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