Для того, чтобы каждая задача имела собственную LDT и собственные таблицы страниц, могут быть использованы селектор LDT и поле PDBR (в CR3) TSS. Поскольку дескрипторы сегментов в LDT представляют собой связки между задачами и сегментами, для установки индивидуального управления этими связками для каждой задачи могут использоваться отдельные LDT. Доступ к любому конкретному сегменту может быть передан любой конкретной задаче путем помещения дескриптора этого сегмента в LDT задачи. При разрешенном механизме подкачки каждая задача может иметь свой собственный набор страничных таблиц для отображения линейных адресов в физические. Задачи могут также иметь общую LDT. Это простой и эффективный по затратам памяти способ организации коммуникации между задачами или управления одних задач другими, не снимая защитных барьеров в системе в целом. Поскольку все задачи имеют доступ к GDT, также возможно создание разделяемых сегментов, доступ к которым будет происходить через сегментные дескрипторы из данной таблицы.
Отображение линейного адресного пространства задачи в физическое
Способы организации отображения линейного адресного пространства задачи в физическое делятся на два общих класса:
1. Единое отображение линейного адресного пространства в физическое, разделяемое всеми задачами. Если механизм подкачки страниц запрещен, то этот способ единственный. Без подкачки страниц все линейные адреса отображаются в те же физические адреса. При разрешенной подкачке страниц данная форма отображения достигается путем использования одного каталога страниц для всех задач. Линейное адресное пространство может превышать физическое пространство, если поддерживается виртуальная память с подкачкой по обращению.
2. Независимое отображение линейного адресного пространства в физическое. Эта форма отображения существует при использовании собственного каталога страниц для каждой задачи. Поскольку PDBR (базовый регистр каталога страниц) загружается из TSS при каждом переключении задачи, каждая задача может иметь собственный страничный каталог. Линейные адресные пространства различных задач могут отображаться в полностью раздельные физические адреса. Если элементы разных страничных каталогов указывают на разные страничные таблицы, а эти таблицы указывают на разные страницы физической памяти, то такие задачи не разделяют никаких физических адресов памяти.
Сегменты состояния задачи должны находиться в пространстве, доступном всем задачам, таким образом чтобы отображение адресов TSS не изменялось во время чтения или обновления процессором TSS при переключении задачи. Линейное пространство, в которое отображается GDT, также должно быть разделяемым физическим пространством; в противном случае теряется смысл GDT.
Логическое адресное пространство задачи
Существует три способа создания разделяемого отображения логического адресного пространства в физическое:
1. При помощи сегментных дескрипторов в GDT. Все задачи имеют доступ к дескрипторам в GDT. Если эти дескрипторы указывают на линейное адресное пространство, отображаемое в общее для всех задач физическое адресное пространство, то задачи могут разделять данные и команды.
2. При помощи разделяемых LDT. Две или более задачи могут использовать одну и ту же LDT, если селекторы LDT в их TSS для использовании при трансляции адресов выбирают одну и ту же LDT. Сегментные дескрипторы в LDT, адресующие линейные пространства, отображаемые в перекрывающиеся физическое адресное пространство, обеспечивают разделяемую физическую память.
3. При помощи сегментных дескрипторов в LDT, отображающихся в одно и то же линейное адресное пространство. Если линейное адресное пространство отображается в то же самое физическое адресное пространство за счет постраничного отображения участвующих задач, эти дескрипторы позволяют задачам разделение адресного пространства.
Адресное пространство задачи
05 Мар, 2009
