Основная (и теоретическая) тема: сегментная адресация виртуальных адресов - PullRequest
1 голос
/ 16 марта 2019

Я сейчас на лекции по ОС, и они говорят об управлении памятью процессов.Теперь процессами можно управлять по-разному, и особенно адресация сегмента доставляет мне головную боль.

Мне предоставляется сегментный регистр (который, по-видимому, обеспечивает процессор), из которого я могу сделать вывод о базовом адресе процесса.Сегментный регистр имеет следующую структуру:

CS 0x01

SS 0x03

... и т. Д.

Базовый адрес выглядит следующим образом и задается в таблице глобальных дескрипторов:

0x10000

0x30000

... и т. д.

GDT также содержит содержимое относительно длины ... чего именно на самом деле?

Как рассчитать базовый адрес с любым заданным базовым адресом?

В частности, как рассчитать доступ для gs: 0x3000 , который должен быть переведен в 0x41000 в системе x86 ?

И последний вопрос: GDT содержит права доступа, такие как пользователь или ядро.Если запрос на запись выполняется по адресу, имеющему права доступа к ядру, это было бы невозможно, верно?

Любая помощь приветствуется!

...