Виртуальная адресация

Тема в разделе "WASM.HARDWARE", создана пользователем _mgf_, 8 ноя 2007.

  1. _mgf_

    _mgf_ New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2007
    Сообщения:
    5
    У меня вот такой дурацкий вопрос насчёт виртуальной адресации: пусть у нас есть 2 дескриптора сегментов-53h и 58h (оба в GDT но с разными правами). Пускай база сегмента, описываемого первым дескриптором 12345678h, а база сегмента, описываемого вторым дескриптором 12345680h. Пускай размеры сегментов равны-оба по 20 Mb. Режим страничной адресации выключен.
    Для лучшего представления описанная ситуация схематически изображена на рисунку внизу.


    ........|Сегмент #1|...................
    --------------------------------------- Виртуальное пространство
    ............|Сегмент #2|...............


    Тоесть сегменты как бы накладываются в виртуальном адресном пространстве.

    Вопрос: Такая ситуация вообще возможна? Я думаю что возможна, хотя очень хочу узнать правильный ответ. Если невозможна, объясните пожалуйста почему. Процессор не проверяет же все сегменты в таблице дескрипторов при добавлении нового сегмента, он только проверяет правильно ли мы обращаемся к какой либо ячейке памяти.

    Если такая ситуация возможна (тоесть, в виртуальном адресном пространстве это ДВА РАЗНЫХ СЕГМЕНТА), то в нашем примере существует область памяти (в линейном адресном пространстве), которая перекрывается обеими сегментами. Тоесть, например, у программы из сегмента #1 нету прав для того, чтобы прочитать байт в сегменте #2 со смещением 4 относительно начала сегмента #2. Но ведь линейный адрес четвертого байта сегмента #2 такой же, как линейный адрес байта со смещением 9 сегмента #1. Это вообще разные ячейки памяти? Если мы в сегменте #1 изменим значение 9-го байта, приведёт ли это к модификации значения 4-го байта сегмента #2? Я так понимаю, что если операционная система не предпринимает никаких действий связанных с предвидением и обработкой таких ситуаций (например, все сегменты кроме текущего помечать как отсутствующие в памяти и перехватывать исключение #NP, в котором переписывать запрашиваемый сегмент в память), то это будут одинаковые ячейки памяти. Я правильно понимаю?

    Наперёд благодарен за ответ.

    С уважением, _MGF_.
     
  2. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    у тебя проблемы - перечитай еще раз что такое сегмент и что такое страница.
    да, такое вполне реально. линейный адрес одинаков, однако при обращении к этой ячейке с помощбю РАЗНЫХ сегментных регистров (в которых и прописаны права доступа) будет разный эффект. А ячейка памяти одна и та-же.
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    _mgf_
    А если говорить про Win/*nix, то такая ситуация очень даже практикуется -- все сегменты (ну или почти все) -- "плоские", т.е. имеют базу 0 и лимит FFFF FFFF.
     
  4. SII

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

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

    Сегменты могут перекрываться как угодно, в т.ч. с разными правами доступа через разные селекторы.

    infern0
    А в чём проблема-то? У сегмента в дескрипторе тоже есть бит присутствия.
     
  5. _mgf_

    _mgf_ New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2007
    Сообщения:
    5
    Бит присутсвия есть и в дескрипторах сегментов. Я же писал, что режим страничного преобразования выключен.
    То есть я смогу изменять значение байтов в сгменте №2 из сегмента №1 в перекрываемой области памяти (если не предпринятые специальные меры)?
     
  6. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    да, а что тебя смущает, не пойму ?
     
  7. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    какая операционная система ? в win flat модель памяти с общими сегментами 4gb.