Ядро ОС Linux



         

Сегменты в 80386


Сегментные регистры используются при трансляции адреса для генерации линейного адреса из логического (виртуального) адреса. linear_address = segment_base + logical_address

Линейный адрес транслируется затем в физический адрес посредством аппаратуры страничной организации (paging)

Каждый сегмент в системе описан 8-ми байтным дескриптором сегмента, в котором содержится вся необходимая информация (база, ограничение, тип, привилегии).

Имеют место следующие сегменты:

Обычные сегменты

сегменты кода и данных

Системные сегменты

(TSS) cегменты состояния задачи

(LDT) таблицы локальных дескрипторов

Характеристики системных сегментов:

  • Системные сегменты являются спецификаторами задач
  • Имеется TSS, связанный с каждой задачей в системе. Он содержит tss_struct (sched.h). Размер этого сегмента соответствует размеру tss_struct, исключая i387_union (232 байта). Он содержит всю информацию, необходимую для перезапуска задачи.
  • Таблицы LDT содержат дескрипторы обычных сегментов, принадлежащих задаче. В Linux каждой задаче соответствует одна LDT. B Linux task_struct предусмотрено пространство для 32-х дескрипторов. Обычная LDT, созданная в Linux, имеет размер 24 байта и, следовательно, пространство для 3-х входов. Ее содержимое:
  • LDT[0] Null (принудительно)
  • LDT[1] дескриптора сегмента пользовательского кода
  • LDT[2] дескриптор сегмента пользовательских данных/стека
  • Все сегменты пользователя имеют базу 0х00, так что линейный адрес тот же самый, что и логический.

    Для получения доступа ко всем этим сегментам 386 использует таблицу глобальных дескрипторов (GDT), которая устанавливается в памяти системой (местоположение задается регистром GDT). GDT содержит дескрипторы сегментов для каждого сегмента состоян ия задачи, каждого локального дескриптора и обычных сегментов. Linux GDT содержит входы двух обыкновенных сегментов:

  • GDT[0] нулевой дескриптор
  • GDT[1] дескриптор сегмента кода ядра
  • GDT[2] дескриптор сегмента данных/стека ядра
  • Оставшаяся область GDT заполнена TSS и LDT дескрипторами системы.




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