Обмен данными между процессами на основе виртуальной памяти.

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

Однако иногда нужно наоборот, организовать контролируемый совместный доступ нескольких потоков к одному участку памяти.

· Например, несколько пользователей работают с одной программой. Данные у них должны быть, конечно, в двух экземплярах, но код программы – в одной.

· Или для межпроцессного обмена данными, когда один поток пишет данные в буфер, а второй – оттуда читает.

Сегмент памяти в этом случае называется РАЗДЕЛЯЕМОЙ ПАМЯТЬЮ.

При работе с виртуальной памятью это сделать можно по-разному:

· Поместить разделяемый виртуальный сегмент в общую часть ВАП, где модули ОС располагаются. Тогда настройка дескриптора сегмента производится только один раз, все процессы ею пользуются.

· Поместить разделяемый сегмент в ВАП каждого процесса, и настроить параметры отображения этих виртуальных сегментов на одну область оперативной памяти.

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

b. При сегментно-страничной – надо настроить таблицу страниц каждого процесса

c. При чисто страничной – не выйдет, нет понятия сегмент.

Функции работы ОС по работе с разделяемой памятью:

· Поддержка схемы именования ресурсов

· Проверка прав доступа процесса к ресурсу

· Отслеживать, сколько процессов пользуются ресурсом

ОС может создавать разделяемый ресурс:

· По запросу (через системный вызов – все процессы, запрашивающие создание разделяемого ресурса с одним и тем же id, могут им пользоваться)

· По умолчанию – например, когда поступает несколько запросов на выполнение одного и того же приложения.

Выгрузка разделяемых сегментов на диск ничем не отличается от выгрузки индивидуальных сегментов.

Аппаратная поддержка сегментной организации памяти в системах на основе процессоров с архитектурой IA32.

Небольшое вступление про процессоры IA-32 и аппаратную поддержку мультипрограммирования

Аппаратные средства поддержки мультипрограммирования есть во всех современних процессорах, в полной мере есть они и в семействе 32-разрядных процессоров Intel: Pentium, Pentium Pro, Pentium 2, 3, Celeron, 80386, 80486. Архитектуру этих процессоров называют еще IA-32 или х86.

Процессоры х86 могут работать в:

- реальном режиме (разработан для совместимости с процем 8086, 16-разрядные инструкции и 1 Мб оперативы)

- защищенном режиме (основной режим работы проца);

Важную роль в организации вычислительного процесса играют регистры процессора, поэтому эту страшную мутотень надо подробно рассмотреть. Одно утешение – на ТСИСе тоже это надо сдавать на экзамене. Так что бьем двух зайцев.

Группы регистров процессоров Пентиум:

1) РОН – регистры общего назначения

2) Регистры сегментов

3) Указатель инструкций

4) Регистр флагов

5) Управляющие регистры

6) Регистры системных адресов

7) Регистры отладки и тестирования + регистры математического сопроцессора (для выполнения операций с плавающей точкой);

РОН

Есть 8 32-разрядных РОН.

Обмен данными между процессами на основе виртуальной памяти. - student2.ru

· Первые 4 РОН: А, B, C, D – для хранения операндов команд (арифметических, логических и всяких прочих)

· Последние 4 – ESI, EDI, EBP, ESP – для задания смещения внутри сегмента данных. Используются совместно с регистрами сегментов (см дальше) для задания виртуального адреса.

К первым 4 регистрам можно обращаться:

· Целиком (EAX, EBX, ECX, EDX)

· К младшему их байту (AL, BL, CL, DL);

· Ко второму по старшинству байту (AH, BH, CH, DH);

· К двум младшим байтам (AX, BX, CX, DX);

Регистры сегментов

Обмен данными между процессами на основе виртуальной памяти. - student2.ru

6 регистров – ссылаются на дескрипторы сегментов памяти:

· CS – дескриптор кодового сегмента

· SS – дескриптор сегмента стека

· DS, ES, FS, GS – дескрипторы сегментов данных

Все они, кроме первого, доступны программно (туда можно загрузить новое значение с помощью команды);

Каждый сегмент хранит в себе СЕЛЕКТОР – 16-разрядное число.

Структура селектора:

12 разрядов 1 разряд 3 разряда
Индекс в таблице дескрипторов сегментов Показывает, где находится дескриптор: - в GDT - в LDT Поле RPL – уровень привилегий запроса к этому сегменту

3. Указатель инструкций EIP – содержит смещение адреса текущей инструкции.

EIP + CS(из регистров сегментов) = виртуальный адрес инструкции.

4. Регистр флагов (EFLAGS)– содержит признаки, характеризующие результат выполнения операции:

- флаг знака

- флаг нуля

- флаг переполнения

- флаг паритета

- флаг переноса и тд

- флаг разрешения аппаратных прерываний (разрешение аппаратных прерываний IF)

Обмен данными между процессами на основе виртуальной памяти. - student2.ru

5. Управляющие регистры:

5 управляющих регистров: CR0, CR1, CR2, CR3, CR4 – хранят данные об общем состоянии процессора.

Обмен данными между процессами на основе виртуальной памяти. - student2.ru

CR0 – все основные признаки:

- реальный / защищенный режим

- вкл / выкл страничного механизма

- признаки, влияющие на работу кэша и выполнение команд с плавающей точкой

CR1 – зарезервирован

Наши рекомендации