Ядро ОС Linux



        Бесплатная юридическая консультация онлайн сервитут смотрите на http://911moskva.ru. | Гидроцилиндр отвала узнать больше.   

Сегменты в 80386 - часть 2


  • GDT[3] ???
  • GDT[4] = TSS0, GDT[5] = LDT0
  • GDT[6] = TSS1, GDT[7] = LDT1
  • ..... и т.д......

    Заметьте LDT[n] != LDTn

  • LDT[n] = n-й дескриптор в LDT текущей задачи
  • LDTn = дескриптор в GDT для LDT n-й задачи
  • В данном случае GDT имеет 256 входов, пространство для 126 задач. Сегменты ядра имеют базу 0хс0000000, которая задает местонахождение ядра в линейном представлении. Прежде, чем сегмент может быть использован, содержимое дескриптора для этого сегмента должно быть загружено в сегментный регистр. 386 имеет множество сложных критериев, ограничивающих доступ к сегментам, так что вы не сможете просто загрузить дескриптор в сегментный регистр. Также эти сегментные регистры имеют невидимые для программиста участки. Видимые участки - это то, что обычно называется сегментными регистрами cs, ds, es, fs, gs и ss.

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

    Обычно в Linux игнорируется комплексная защита на уровне сегмента (чрезмерная?), предоставляемая 386. Она базируется на основе аппаратных средств страничной организации и объединенной защитой на уровне страницы. Правила на уровне сегмента, которые применяются к пользовательским процессам, состоят в следующем:

  • Процесс не может напрямую обращаться к данным ядра или сегментам кода.
  • Всегда имеет место контроль ограничения, однако, условие, что каждый пользовательский сегмент размещается от 0х00 до 0хс0000000, неудобно для применения. [Это изменено и нуждается в редактировании]



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