Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org
В защищенном режиме , доступ к памяти осуществляется либо через глобальную таблицу дескрипторов GDT , либо через локальную таблицу дескрипторов LDT . Эти таблицы представляют из себя массивы сегментных дескрипторов . В состав дескриптора входит сегментный селектор . Для доступа в сегмент на уровне байтов , нужен селектор и смещение . Адрес самой GDT находится в регистре GDTR , адрес LTD - в LDTR . Кроме сегментов кода , данных и стека , имеется также т.н. сегмент TSS - task-state segment .

Также имеется набор из 4 групп специальных дескрипторов , называемых гейтами :

call gate, interrupt gate, trap gate, task gate.

Процедуры могут располагаться в различных кодовых сегментах , которые имеют различные уровни привилегий. Проверка соответствия этих уровней , прав и выдача сегментных адресов в соответствии с этими правами осуществляется через гейты .

TSS включает в себя информацию о регистрах , сегментных селекторах и указателей на стековые регистры . Сегментный селектор для текущего процесса хранится в регистре TR . При переключении задач процессор выполняет следующее :

  1. Сохраняет состояние текущего процесса в текущей TSS.
  2. Загружает TR , в котором находится селектор новой задачи .
  3. Загружает TSS
  4. Грузит регистры из ТСС
 
Внешние прерывания , программные прерывания и исключения управляются из таблицы IDT . IDT - это коллекция гейтов . Доступ в память осуществляется либо напрямую , с помощью линейного адреса , либо через виртуальную память . Виртуальная память имеет постраничную организацию . Адрес виртуальной страницы состоит из 2 частей : одной page directory и набора page tables . Адрес page directory помещается в регистр CR3 . При виртуальной адресации,линейный адрес разбивается на 3 части - page directory, the page table, page frame. Каждый процесс имеет свою собственную page directory.

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

GDTR, LDTR, IDTR, TR

В GDTR хранится адрес GDT. В LDTR хранится адрес LDT. При переключении задач адрес сегмента новой задачи загружается из этой таблицы .

Контрольные регистры

CR0, CR1, CR2, CR3,CR4

определяют режим работы процессора и характеристику текущего процесса . Приложение , которое выполняется не в привилегированном режиме , не может читать или писать из этих регистров.

MEMORY MANAGEMENT

На рисунке показано , как логический адрес переводится в физический . Логический адрес состоит из сегментного селектора и смещения . Сегментные селекторы хранятся в GDT . В состав сегментного селектора входит структура , которая называется сегментным дескриптором . В эту структуру входят размер сегмента , права и привилегии сегмента и адрес самого сегмента. Смещение логического адреса добавляется к адресу самого сегмента - получили линейный адрес . Если пэйджинга нет , линейный адрес равен физическому адресу.Каждый сегмент разделен на страницы по 4 кб .

В модели памяти,называемой basic flat model , нет сегментов . В этой модели нужно создать 2 дескриптора - на сегмент кода и сегмент данных . Размер сегмента ограничен 4 гигами . ROM располагается в верхних адресах памяти , RAM - в нижних

В модели памяти , называемой protected flat model . Минимально здесь определены 4 сегмена - код и данные c 3-м уровнем привилегий , а также код и данные c 0-м уровнем привилегий .

В модели памяти , называемой multisegment model , каждый процесс имеет собственную таблицу сегментных дескрипторов и собственные сегменты .

При пэйджинге происходит разбиение адресного пространства на страницы . В защищенном режиме оно ограничено сверху 4 гигами . Адреса находятся в диапазоне от 0 до FFFFFFFFH . Память может быть как на чтение , так и на запись . Логический адрес состоит из 16-битного сегментного селектора и 32-битного смещения . Логический адрес переводится в 32-битный линейный адрес .

Существуют 6 сегментных регистров - кодовый CS , дата DS ,стек SS , 3 кодовых ES , FS , GS . Хотя в системе могут одновременно существовать тысячи сегментов , одновременно доступ можно иметь не более чем к 6 . Загрузку сегментных регистров можно делать 2 способами :

  1. Прямая загрузка через MOV,POP,LDS,LES,LSS,LGS,LFS.
  2. Через вызовы CALL,JMP,RET
 
Сегментные дескрипторы - это структуры данных в GDT или LDT . Обычно они генерятся компиляторами , загрузчиками, операционными системами , но не приложениями . Может быть только 1 GDT и несколько LDT . Дескриптор каждой LDT входит в GDT .

Линейное адресное пространство , доступное в линуксе , простирается до 4 гигов . Физической памяти , как правило , меньше , а иногда значительно меньше . Линукс тем не менее благодаря принципам виртуальной памяти позволяет делать маппинг этого линейного пространства на доступную физическую память . При недостатке физической памяти происходит своппинг с диска .

  Для перевода линейного адреса в физический нужны 4 структуры :
 1. page directory
 2. page table
 3. page
 4. page-directory-pointer table
 
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье