Я сейчас на лекции по ОС, и они говорят об управлении памятью процессов.Теперь процессами можно управлять по-разному, и особенно адресация сегмента доставляет мне головную боль.
Мне предоставляется сегментный регистр (который, по-видимому, обеспечивает процессор), из которого я могу сделать вывод о базовом адресе процесса.Сегментный регистр имеет следующую структуру:
CS 0x01
SS 0x03
... и т. Д.
Базовый адрес выглядит следующим образом и задается в таблице глобальных дескрипторов:
0x10000
0x30000
... и т. д.
GDT также содержит содержимое относительно длины ... чего именно на самом деле?
Как рассчитать базовый адрес с любым заданным базовым адресом?
В частности, как рассчитать доступ для gs: 0x3000 , который должен быть переведен в 0x41000 в системе x86 ?
И последний вопрос: GDT содержит права доступа, такие как пользователь или ядро.Если запрос на запись выполняется по адресу, имеющему права доступа к ядру, это было бы невозможно, верно?
Любая помощь приветствуется!