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
 Linux Kernel 2.6...5164 
 Trees...935 
 Максвелл 3...861 
 Go Web ...815 
 William Gropp...796 
 Ethreal 3...779 
 Ethreal 4...766 
 Gary V.Vaughan-> Libtool...765 
 Rodriguez 6...756 
 Steve Pate 1...749 
 Ext4 FS...748 
 Clickhouse...748 
 Ethreal 1...736 
 Secure Programming for Li...721 
 C++ Patterns 3...712 
 Ulrich Drepper...693 
 Assembler...687 
 DevFS...655 
 Стивенс 9...644 
 MySQL & PosgreSQL...622 
 
  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
 
Оставьте свой комментарий !

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

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