Ядро ОС Linux



         

Дескрипторы сегментов


Имеется дескриптор сегмента, используемый для описания каждого сегмента в системе. Имеются обычные и системные дескрипторы. Ниже представлен дескриптор во всей своей красоте. Такой странный формат создан специально для того, чтобы обеспечить совместимость с 286. Заметьте, что он занимает 8 байт

63-54 55 54 53 52 51-48 47 46 45 44-40 39-16 15-0 Base G D R U Limit P DPL S TYPE Segmet Base Segmet Limit 31-24 19-16 23-0 15-0

Разъяснения:

Rзарезервирован (0)
DPL0 означает ядро, 3 означает пользователя
G1 означает гарантировано 4К (В Linux установлен всегда)
D1 означает 32-х битное значение операнда по умолчанию
Uопределяется программистом
P1 означает присутствие в физической памяти
S0 означает системный сегмент, 1 означает обычный сегмент кода или данных
TYPEСуществует много возможностей. Прерывания различны для системных и обычных дескрипторов.

Системные дескрипторы в Linux

TSS: P=1,DPL=0,S=0, type=9, limit=231 пространство для 1 tss_struct

LDT: P=1,DPL=0,S=1, type=2, limit=23 пространство для 3 дескрипторов сегментов

База устанавливается при выполнении fork(). Для каждой задачи есть свой TSS и LDT.

Обычные дескрипторы ядра в Linux (head.S):

код: P=1,DPL=0,S=1,G=1,D=1, type=a, base=0xc0000000, limit=0x3ffff

данные: P=1,DPL=0,S=1,G=1,D=1, type=2, base=0xc0000000, limit=0x3ffff

Состав LDT для task[0] (sched.h):

код: P=1,DPL=3,S=1,G=1,D=1, type=a, base=0xc0000000, limit=0x9f

данные: P=1,DPL=3,S=1,G=1,D=1, type=a, base=0xc0000000, limit=0x9f

LDT, устанавливаемые по умолчанию для оставшихся задач (exec()):

код: P=1,DPL=3,S=1,G=1,D=1, type=a, base=0, limit=0xbffff

данные: P=1,DPL=3,S=1,G=1,D=1, type=2, base=0, limit=0xbffff

Размер сегментов ядра 0х40000 страниц (4КВ страниц с G=1=1GB) тип подразумевает, что для кодового сегмента разрешается read-exec, а для сегмента данных read-write.

Регистры, объединенные посредством сегментации.

Формат сегментного регистра: (для программиста видимым является только селектор)

16 -бит 32-бит 32-бит селектор база физического адреса ограничения сегмента атрибуты




Содержание  Назад  Вперед