Представляет ли тип дескрипторов сегмента его разрешения READ/WRITE/EXECUTE?

avatar
Daniel Catalano
8 августа 2021 в 20:32
40
0
0

Я читаю понимание ядра linux, третье издание и читаю раздел об дескрипторах сегментов. Страница: 70, http://gauss.ececs.uc.edu/Courses/c4029/code/memory/understanding.pdf из всех полей для дескриптора сегмента я не смог найти ни одного поля разрешений для ЧТЕНИЯ, ЗАПИСИ и ИСПОЛНЕНИЯ. Я прочитал это из этого источника, http://www.cs.cmu.edu/~410/doc/segments/segments.html, что разрешения сегмента READ, WRITE и EXECUTE получены из ( тип) дескриптора сегмента.

Оказывается, хотя поле TYPE дескриптора сегмента позволяет нам указывать широкий спектр разрешений для сегмента, не существует битового шаблона, который бы предоставлял разрешения как EXEC, так и READ/WRITE. Таким образом, нам нужен один сегмент READ,EXEC для кода и один сегмент READ,WRITE для данных и стека. Таким образом, нам понадобятся два дескриптора сегмента и два селектора сегментов, один для %CS и один для %SS, %DS, %ES, %FS и %GS.

То есть разрешения READ, WRITE и EXECUTE получены из типа сегмента? Также верна ли приведенная выше цитата о том, почему существуют отдельные сегменты для кода и данных (хотя в Linux используется плоская модель памяти, поэтому независимо от того, какой сегмент вы используете, все они будут разрешаться в один и тот же линейный/виртуальный адрес)?

Я знаю, что записи таблицы страниц отвечают за указание, является ли страница либо ЧТЕНИЕ/ЗАПИСЬ, либо только ЧТЕНИЕ, но мне просто интересно, является ли приведенная выше цитата причиной разделения кода и сегментов данных (хотя linux использует плоскую модель памяти, поэтому независимо от того, какой сегмент вы используете, все они будут разрешаться в один и тот же линейный/виртуальный адрес).

Источник

Ответы (0)