Jump to content

Сегмент состояния задачи

(Перенаправлено с Ворота задач )

Сегмент состояния задачи ( TSS ) — это структура на компьютерах с процессором x86 , которая содержит информацию о задаче . Он используется операционной системы ядром для управления задачами. В частности, в TSS хранится следующая информация:

  • регистра процессора Состояние
  • Разрешения порта ввода-вывода
  • Указатели стека внутреннего уровня
  • Предыдущая ссылка TSS

Вся эта информация должна храниться в определенных местах внутри TSS, как указано в руководствах IA-32 .

Расположение ТСС

[ редактировать ]

TSS может находиться где угодно в памяти . Регистр сегмента, называемый регистром задач (TR), содержит селектор сегмента , который указывает на действительный дескриптор сегмента TSS, который находится в GDT (дескриптор TSS не может находиться в LDT ). Следовательно, для использования TSS ядром операционной системы должно быть выполнено следующее:

  1. Создайте запись дескриптора TSS в GDT.
  2. Загрузите TR с селектором сегмента для этого сегмента.
  3. При необходимости добавьте информацию в TSS в памяти.

В целях безопасности TSS следует размещать в памяти, доступной только ядру .

Реестр задач

[ редактировать ]

Регистр TR — это 16-битный регистр, который содержит селектор сегмента для TSS. Его можно загрузить с помощью инструкции LTR . LTR является привилегированной командой и действует аналогично загрузке других сегментных регистров. Регистр задач состоит из двух частей: части, видимой и доступной программисту, и невидимой части, которая автоматически загружается из дескриптора TSS.

Регистрация состояний

[ редактировать ]

TSS может содержать сохраненные значения всех регистров x86 . Это используется для переключения задач . Операционная система может загрузить в TSS значения регистров, которые необходимы новой задаче, и после выполнения аппаратного переключения задачи (например, с помощью инструкции IRET ) процессор x86 загрузит сохраненные значения из TSS в соответствующие регистры. Обратите внимание, что некоторые современные операционные системы, такие как Windows и Linux, [1] не используйте эти поля в TSS, поскольку они реализуют программное переключение задач.

Обратите внимание, что во время переключения аппаратной задачи некоторые поля старого TSS обновляются содержимым текущего регистра ЦП до того, как будут считаны значения из нового TSS. Таким образом, некоторые поля TSS доступны для чтения/записи, а другие — только для чтения:

  • Поля чтения/записи : чтение и запись во время переключения аппаратных задач.
    • Все регистры общего назначения ( EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP);
    • Все сегментные регистры ( CS, DS, ES, FS, GS, SS);
    • Текущее состояние выполнения ( EIP, EFlags);
    • The Link поле в новом TSS, если переключение задачи произошло из-за CALL или INT а не JMP.
  • Поля только для чтения : читайте только при необходимости, как указано.
    • Регистр управления 3 ( CR3), также известный как базовый регистр каталога страниц ( PDBR).
      Чтение во время аппаратного переключения задач.
    • Регистр таблицы локальных дескрипторов ( LDTR);
      Чтение во время аппаратного переключения задач.
    • Три пары стеков уровня привилегий ( SS0:ESP0, SS1:ESP1, SS2:ESP2);
      Прочтите во время межуровневого CALL или INT чтобы установить новый стек.
    • Указатель растрового изображения порта ввода-вывода ( IOPB) и само битовое изображение порта ввода-вывода;
      Прочтите во время IN, OUT, INS или OUTS инструкция, если CPL > IOPL чтобы подтвердить, что инструкция является законной (см. разрешения порта ввода- вывода ниже).

The PDBR поле фактически является самым первым, которое считывается из нового TSS: поскольку переключение аппаратных задач также может переключиться на совершенно другое сопоставление таблицы страниц, все остальные поля (особенно поле LDTR) относятся к новому отображению.

Разрешения порта ввода-вывода

[ редактировать ]

TSS содержит 16-битный указатель на битовую карту разрешений порта ввода-вывода для текущей задачи . Это растровое изображение, обычно устанавливаемое операционной системой при запуске задачи, указывает отдельные порты, к которым программа должна иметь доступ. Битовая карта ввода-вывода представляет собой битовый массив прав доступа к порту; если у программы есть разрешение на доступ к порту, в соответствующем битовом индексе сохраняется «0», а если у программы нет разрешения, там сохраняется «1». Если предел сегмента TSS меньше полной битовой карты, все недостающие биты считаются равными «1».

Эта функция работает следующим образом: когда программа выдает инструкцию порта ввода-вывода x86, такую ​​как IN или OUT (см. списки инструкций x86 и обратите внимание, что существуют версии длиной в байт, слово и двойное слово), аппаратное обеспечение выполнит Уровень привилегий ввода-вывода (IOPL) проверяет, имеет ли программа доступ ко всем портам ввода-вывода. Если текущий уровень привилегий (CPL) программы численно превышает уровень привилегий ввода-вывода (IOPL) (программа имеет меньшие привилегии, чем указано в IOPL), программа не имеет доступа к портам ввода-вывода для всех порты. Затем оборудование проверит битовую карту разрешений ввода-вывода в TSS, чтобы увидеть, может ли эта программа получить доступ к определенному порту (портам) в инструкции IN или OUT. Если (все) соответствующие биты в битовой карте разрешений порта ввода-вывода очищены, программе разрешен доступ к порту (портам), и команде разрешено выполнение. Если (любой из) соответствующих битов установлен или если (любой из) бит(ов) превышает предел сегмента TSS, программа не имеет доступа, и процессор генерирует сообщение общий защита защита . Эта функция позволяет операционным системам предоставлять выборочный доступ к портам пользовательским программам.

Указатели стека внутреннего уровня

[ редактировать ]

TSS содержит 6 полей для указания нового указателя стека при изменении уровня привилегий. Поле SS0 содержит селектор сегмента стека для CPL=0, а поле ESP0/RSP0 содержит новое значение ESP/RSP для CPL=0. Когда прерывание происходит в защищенном (32-битном) режиме, процессор x86 будет искать в TSS SS0 и ESP0 и загружать их значения в SS и ESP соответственно. Это позволяет ядру использовать стек, отличный от пользовательской программы, а также сделать этот стек уникальным для каждой пользовательской программы.

Новая функция, представленная в расширениях AMD64 , называется таблицей стека прерываний (IST), которая также находится в TSS и содержит логические (сегмент + смещение) указатели стека. Если в таблице дескрипторов прерываний указана используемая запись IST (их 7), процессор вместо этого загрузит новый стек из IST. Это позволяет использовать заведомо исправные стеки в случае серьезных ошибок ( , NMI или двойной ошибки например ). Раньше запись об исключении или прерывании в IDT указывала на шлюз задачи, заставляя процессор переключаться на задачу, на которую указывает шлюз задачи. Исходные значения регистров были сохранены в токе TSS на момент возникновения прерывания или исключения. Затем процессор установил для регистров, включая SS:ESP, известное значение, указанное в TSS, и сохранил селектор в предыдущем TSS. Проблема здесь в том, что аппаратное переключение задач не поддерживается на AMD64.

[ редактировать ]

Это 16-битный селектор, позволяющий связать этот TSS с предыдущим. Это используется только для аппаратного переключения задач. см . в руководствах IA-32 Подробную информацию .

Использование TSS в Linux

[ редактировать ]

Хотя TSS можно создать для каждой задачи, выполняемой на компьютере, ядро ​​Linux создает только один TSS для каждого процессора и использует их для всех задач. Этот подход был выбран, поскольку он обеспечивает более легкую переносимость на другие архитектуры (например, архитектура AMD64 не поддерживает аппаратное переключение задач), а также улучшенную производительность и гибкость. Linux использует только битовую карту разрешений порта ввода-вывода и функции внутреннего стека TSS; остальные функции необходимы только для аппаратного переключения задач, которые ядро ​​Linux не использует. [2]

[ редактировать ]

x86 Вектор исключений 10 называется недопустимым исключением TSS (#TS). Он выдается процессором всякий раз, когда что-то идет не так с доступом TSS. Например, если прерывание происходит в CPL=3 и передает управление CPL=0, TSS используется для извлечения SS0 и ESP0/RSP0 для коммутатора стека. Если в регистре задач содержится неправильный селектор TSS, будет сгенерирован отказ #TS. Исключение Invalid TSS никогда не должно возникать во время нормальной работы операционной системы и всегда связано с ошибками ядра или аппаратным сбоем.

Более подробную информацию об исключениях TSS см. в главе 6 тома 3a руководства IA-32 . [3]

TSS в режиме x86-64

[ редактировать ]

Архитектура x86-64 не поддерживает аппаратное переключение задач. Однако TSS по-прежнему можно использовать на машине, работающей в расширенных 64-битных режимах. В этих режимах TSS по-прежнему полезен, поскольку он хранит:

  1. Адреса указателя стека для каждого уровня привилегий.
  2. Адреса указателей для таблицы стека прерываний (необходимость этого обсуждается в разделе указателей стека внутреннего уровня выше).
  3. Адрес смещения битового изображения разрешения ввода-вывода.

Кроме того, в этих режимах регистр задач расширяется, чтобы иметь возможность хранить 64-битный базовый адрес.

  1. ^ Бове, Даниэль Пьер; Чесати, Марко (2006). Понимание ядра Linux, третье издание . О'Рейли Медиа . п. 104. ИСБН  978-0-596-00565-8 . Проверено 23 ноября 2009 г.
  2. ^ Дэниел П. Бовет; Рамки Чесати (2006). Понимание ядра Linux . О'Рейли. п. 104. ИСБН  9780596554910 . Проверено 25 февраля 2014 г.
  3. ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 3a» . Проверено 21 мая 2012 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 134e736f9b943570ece7e5330d101c9c__1693175760
URL1:https://arc.ask3.ru/arc/aa/13/9c/134e736f9b943570ece7e5330d101c9c.html
Заголовок, (Title) документа по адресу, URL1:
Task state segment - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)