Обмен данными между процессами на основе виртуальной памяти.
Основная задача ОС по управлению памятью – защита областей памяти, принадлежащих разным потокам, от несанкционированного вмешательства.
Однако иногда нужно наоборот, организовать контролируемый совместный доступ нескольких потоков к одному участку памяти.
· Например, несколько пользователей работают с одной программой. Данные у них должны быть, конечно, в двух экземплярах, но код программы – в одной.
· Или для межпроцессного обмена данными, когда один поток пишет данные в буфер, а второй – оттуда читает.
Сегмент памяти в этом случае называется РАЗДЕЛЯЕМОЙ ПАМЯТЬЮ.
При работе с виртуальной памятью это сделать можно по-разному:
· Поместить разделяемый виртуальный сегмент в общую часть ВАП, где модули ОС располагаются. Тогда настройка дескриптора сегмента производится только один раз, все процессы ею пользуются.
· Поместить разделяемый сегмент в ВАП каждого процесса, и настроить параметры отображения этих виртуальных сегментов на одну область оперативной памяти.
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-разрядных РОН.
· Первые 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);
Регистры сегментов
6 регистров – ссылаются на дескрипторы сегментов памяти:
· CS – дескриптор кодового сегмента
· SS – дескриптор сегмента стека
· DS, ES, FS, GS – дескрипторы сегментов данных
Все они, кроме первого, доступны программно (туда можно загрузить новое значение с помощью команды);
Каждый сегмент хранит в себе СЕЛЕКТОР – 16-разрядное число.
Структура селектора:
12 разрядов | 1 разряд | 3 разряда |
Индекс в таблице дескрипторов сегментов | Показывает, где находится дескриптор: - в GDT - в LDT | Поле RPL – уровень привилегий запроса к этому сегменту |
3. Указатель инструкций EIP – содержит смещение адреса текущей инструкции.
EIP + CS(из регистров сегментов) = виртуальный адрес инструкции.
4. Регистр флагов (EFLAGS)– содержит признаки, характеризующие результат выполнения операции:
- флаг знака
- флаг нуля
- флаг переполнения
- флаг паритета
- флаг переноса и тд
- флаг разрешения аппаратных прерываний (разрешение аппаратных прерываний IF)
5. Управляющие регистры:
5 управляющих регистров: CR0, CR1, CR2, CR3, CR4 – хранят данные об общем состоянии процессора.
CR0 – все основные признаки:
- реальный / защищенный режим
- вкл / выкл страничного механизма
- признаки, влияющие на работу кэша и выполнение команд с плавающей точкой
CR1 – зарезервирован