Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Languages
 С
 GNU С Library 
 Qt 
 STL 
 Threads 
 C++ 
 Samples 
 stanford.edu 
 ANSI C
 Libs
 LD
 Socket
 Pusher
 Pipes
 Encryption
 Plugin
 Inter-Process
 Errors
 Deep C Secrets
 C + UNIX
 Linked Lists / Trees
 Asm
 Perl
 Python
 Shell
 Erlang
 Go
 Rust
 Алгоритмы
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 MINIX...3057 
 Solaris...2933 
 LD...2906 
 Linux Kernel 2.6...2470 
 William Gropp...2182 
 Rodriguez 6...2015 
 C++ Templates 3...1945 
 Trees...1938 
 Kamran Husain...1866 
 Secure Programming for Li...1792 
 Максвелл 5...1710 
 DevFS...1694 
 Part 3...1684 
 Stein-MacEachern-> Час...1632 
 Go Web ...1627 
 Ethreal 4...1619 
 Стивенс 9...1607 
 Arrays...1607 
 Максвелл 1...1593 
 FAQ...1539 
 
  01.01.2024 : 3621733 посещений 

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
 
Оставьте свой комментарий !

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

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