Несколько вопросов начинающего

Тема в разделе "WASM.BEGINNERS", создана пользователем s3dworld, 6 окт 2010.

  1. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Да. Мне эти книги не в электронном бы виде, только где их возьмёшь.

    Я пока не дошёл до страничной организации. Но если вкратце, то как вообще происходит программирование в режиме страниц? Одна страница может быть и кодом и данными и для сегмента? И можно всё это разделить на отдельные страницы? Да и для одной задачи могут быть доступны множество страниц? Если брать сегменты, то они размера то любого могут быть и то, их можно переключать через сегментные регистры. А вот как со страницами.
     
  2. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Код это или данные определяет сегмент. Страничная адресация это способ преобразования из виртуального адреса в линейный. То есть сначала на адрес накладывается сегментация, при этом проверяется код это или данные, а затем полученный адрес преобразуется по таблицам страниц. При этом проверяется уже не код ли это или данные, а "можно писать", "нельзя писать", а "нет прав читать и писать".
    Переключают каталоги страниц через cr3. Этим вы полностью меняете адресное пространство. Поэтому код переключения должен быть по одному и тому же адресу в обоих каталогах. Таблицы страниц занимают лишь 0,1% от всей примонтированной памяти. Так что ели не монтировать всю физическую память в одно адресное пространство (а это и не нужно), то трата памяти будет весьма небольшой.
     
  3. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    KIV
    То есть мне нужно хранить список страниц для каждой задачи в памяти (то есть это будет глобальный список страниц)? Просто я думал, что раз каждый процесс имеет свои страницы, то и размещаться это будет как-то локально.
     
  4. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    У тебя в физической памяти хранятся каталоги страниц для каждого процесса отдельные. Физические адреса некоторых страниц из разных каталогов могут совпадать. Можно даже сделать ряд страниц общими для всех каталогов. Главное не запутаться. Для GDT и IDT все адреса виртуальные - то есть уже со страничной адресацией. А для каталогов и таблиц страниц - физические, то есть без учёта страничное адресации. Из этого следует, что таблицы страниц монтировать в адресное пространство совсем не обязательно.
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    точно также как и без них, за исключением адресов.
    Одна страница может быть данными и стеком (по сути просто данными) или кодом.
    Для каждой задачи ОС должна создавать 2-х уровневую таблицу страниц (для long mode 4-х уровневую)
    Указатель каталога страниц хранится в cr3 и адреса преобразуются в соответствии с данными этого каталога. в самом простом случае это выглядит так

    Код (Text):
    1. cr3=0x00000000
    2. 0x00000000: ;каталог страниц 1024 записи по 4 байта, каждая содержит 20 битный указатель на стриницу и 12 бит флагов
    3.            dd 0x00001001,0x00004001, 0x000003001,0x00005001, 0x00004001, ...
    4. 0x00001000:
    5.            dd 0x00000000, 0x00001000, 0x00002000, 0x00003000, 0x00004000, 0x00005000, 0x00006000, ...
    в данном адресном пространстве будут доступны и страницы каталога страниц, но их можно (по моему) и спрятать
    Флаги искать не охото, но по памяти поставил нулевой бит для директории.
     
  6. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Основные флаги:
    Бит 0 - страница присутсвуте в памяти. При обращении к страницы бит 0 которой сброшен произойдёт Page Fault. Если этот бит сброшен, то остальные биты игнорируются и в них можно держать всё что угодно.
    Бит 1 - Страница доступна для записи.
    Бит 2 - Страница доступна из ring3.
    Биты 9 - 11 - Можно пользоваться по своему усмотрению.
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    s3dworld
    Это и будет локально для операционной системы, а процессы от этого и защищаются. Чтобы не лазили где убьют и закопают.
     
  8. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Код (Text):
    1. Для каждой задачи ОС должна создавать 2-х уровневую таблицу страниц (для long mode 4-х уровневую)
    Это что за уровни? И почему для для L-Mode в 2 раза больше?
     
  9. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Потому что виртуальный адрес длиннее. В PM - 32 бита, в long mode значащая часть адреса - 48 бит. В старых таблицах страниц помещалось 1024 элемента по 4 байта, а теперь каждый элемент по 8 байт (64 бит) => помещается лишь 512. Отсюда и увеличение.
     
  10. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Про странички почитаю в книге. Вот не могу найти никак удобную табличку с опкодами процессора в виде шестнадцатеричных чисел и обозначением для ассемблера. У меня раньше была такая, там по горизонтали и по вертикали идут значения от 0x0 до 0xF, а на пересечении ячеек команда. Только это было ля 16-битных команд. У кого-нибудь есть для 32 и 64 бит?
     
  11. SII

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

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    В интеловских мануалах, конец 2-го тома содержит кучу таблиц. Только там запутаешься -- команд малость побольше, чем у 8086.
     
  12. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    SII
    Благодарю! Кажется то что нужно.

    [​IMG]
     
  13. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Приложение из Intel SDM подойдёт? Там ещё и алфавитный список с разбивкой по поколениям/MMX/SSE/etc. есть. :derisive:

    Польза этих табличек спорна, вручную теперь (да и давно уже) мало кто кодирует. Тем более что ModR/M или SIB легче понять в восьмиричном представлении. :derisive:
     
  14. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    baldr
    А что это за приложение и где его взять?
     
  15. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Вот что нашёл:

    [​IMG]
     
  16. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    baldr
    Конечно нужно))
     
  17. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Приложения A и B во втором томе Intel® 64 and IA-32 Architectures Software Developer's Manual. SII уже ссылался на них.
     
  18. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    baldr
    Спасибо!
     
  19. s3dworld

    s3dworld Сергей

    Публикаций:
    0
    Регистрация:
    16 мар 2010
    Сообщения:
    387
    Адрес:
    Ртищево
    Доброго всем утра!

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

    Но как это так делается? Ведь как я понял, 1024 записи, по 4 байта это в первой таблице. Каждая запись это ещё таблица с 1024 записью по 4 байта. Вроде бы все 1024 записи обязательно. Или я что-то не до понял?
     
  20. SII

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

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