Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сказки_3.rtf
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3.62 Mб
Скачать

Совместное использование памяти [02,06,...,66]

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

Возможный тип совместного использования повторно входимого и реентерабельного участка кода, содержащего машинные команды – организация на его базе нескольких потоков, работающих с различными данными. Потоки разделяют контекст процесса и, в принципе, «видят» всё ВАП. Если области памяти, используемые ими для записи или модификации данных, пересекаются, то это может привести к некорректной обработке общей задачи. Если не пересекаются, достигается экономия за счёт использования одного и того же участка памяти несколькими потоками.

Один и тот же участок памяти с кодом динамически связываемой библиотеки может исполняться в контекстах разных процессов. ОС при этом ведёт счёт клиентов, использующих этот ресурс, но эти небольшие накладные расходы окупаются за счёт отсутствия необходимости размещать в памяти несколько копий модуля.

Программный канал (pipe) представляет собой кольцевой буфер, который одна задача использует для записи, а другая – для чтения. При этом требуется следить за отсутствием переполнения при записи и обеспечить запрет чтения, если все данные прочитаны.

Совместное использование для записи или модификации двумя и более процессами общего участка памяти, некоторые другие операции, например, с дескрипторами ресурсов заключаются в логические контейнеры, называемые критическими секциями, при входе в которые требуется корректно обеспечить взаимоисключение (mutual exclusion) с помощью атомарных операций, семафоров или мьютексов.

Почтовые ящики в фоново-оперативных системах (в WINNT Mailslots), uarea в UNIX, точка управления задачей (Job Control Point) в NOS/BE1 – области, совместно используемые ОС и процессами. При некорректном использовании нескольких почтовых ящиков в многопроцессных системах может образоваться тупик из-за кругового ожидания.

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

Защита памяти [03,07,...,67]

Защита памяти операционной системой в той или иной степени использует аппаратные механизмы вычислительной платформы. В MSDOS, например, не использовался защищённый режим и проверялось только соблюдение границы сегмента. Современные ОС реализуют защищённый режим исполнения через механизмы, такие как сегментация и страничная организация, обеспечивая заполнение соответствующих таблиц отображения виртуального адресного пространства процесса на физическую память. При этом таблицы заполняются так, чтобы обеспечить разделение полномочий между режимами ядра и пользователя с помощью задания привилегий в полях дескрипторов сегментов. В архитектуре IA32 при обращении к памяти с помощью пары (селектор, указатель адреса) из одной из дескрипторных таблиц LDT, GDT извлекается дескриптор сегмента, сравниваются текущий (CPL), запрашиваемый уровень (RPL) и уровень привилегий дескриптора (DPL), и при невыполнении условия допуска или нарушении границы сегмента происходит аппаратное прерывание «нарушение сегментации». В UNIX CPL может принимать значения 0 (режим ядра) или 3 (режим задачи), хотя в архитектуре IA32 предусмотрены и значения 1 и 2 для организации шлюзов. Механизм страничной трансляции обеспечивает разделение адресных пространств, сбрасывая все биты достоверности в буфере ассоциативной трансляции TLB при записи в управляющий регистр CR3 базового адреса таблицы страниц, которую осуществляет ядро при переключении контекста процесса. Строки кэша страниц содержат дескрипторы страничных кадров, содержащие поля, обеспечивающие защиту от записи и исполнения данных, заполняемые операционной системой.