USIX поддерживает виртуальную организацию памяти, основанную на понятиях объекта памяти, регионов и сегментов памяти. Каждый процесс состоит из сегментов, отображаемых на регионы.
Система управления памятью использует ряд структур данных, представленных в виде связных списков. Физические страницы могут объединяться в следующие списки:
1. Системные страницы – страницы, необходимые системе.
2. Фиксированные страницы – страницы, которые зафиксированы в оперативке за процессами и не могут быть выгружены на диск.
3. Чистые страницы – страницы, которые имеют копии на диске и могут выделяться процессам сразу без сохранения.
4. Модифицированные страницы – страницы, которые требуется сохранить на диске, так как они были модифицированы.
5. Свободные страницы – доступные для распределения страницы.
6. Страницы рабочего набора – страницы физической памяти, доступные для некоторого процесса в текущий момент времени.
7. Читаемые страницы – страницы, в данный момент читаемые с диска в основную память.
8. Записываемые страницы – страницы, в данный момент записываемые из основной памяти на диск.
Системные страницы не управляются механизмом виртуальной памяти. Все страницы, кроме системных и свободных, принадлежат конкретному региону.
При создании процесса, ему назначаются следующие регионы:
· Регион стека.
· Регион текста процесса.
· Регион данных процесса.
· Регионы текста и данных разделяемой системной библиотеки.
При создании процесса, его регионы не считываются в оперативную память. После передачи ему управления происходит прерывание по отсутствию страницы в основной памяти и производится ее загрузка.
Требуемая страница может находиться в оперативной памяти, в файле на диске или в файле подкачки на диске. Если страница находится на диске, то она загружается в память, включается в рабочий набор процесса и продолжается выполнение процесса.
Размер рабочего набора процесса является настраиваемой величиной. Если достигнут максимальный размер и необходимо загрузить страницу, то система управления памятью очищает страницу с наиболее давним обращением и загружает в нее требуемую.
Для исключения возможности быстрого исчерпания свободных и чистых страниц система всегда сохраняет доступным некоторое минимальное количество страниц (LowWater). Если число свободных и чистых страниц превосходит LowWater, то страница выбирается из свободных или чистых страниц. Иначе выбирается модифицированная страница или страница рабочего набора и выгружается из оперативной памяти.
Страницы могут быть доступны сразу нескольким процессам. Они называются разделяемыми. Для управления используется методика «copy-on-write». До тех пор, пока ни один процесс не попытался модифицировать страницу, все они используют одну копию страницы. Как только процесс производит запись в разделяемую страницу, для него делается отдельная копия и помещается в его рабочий набор.
Для поддержки процессов реального времени используются две методики.
Первая заключается в выделении процессу реального времени большого приоритета, что приводит к более редкой выгрузке из оперативной памяти.
Вторая заключается в запрете выгрузки всех страниц процесса реального времени, то есть помещении страниц в список фиксированных.
Поддержка РВ в USIX
Возможности, обеспечивающие режим реального времени в USIX:
· Приоритетная и круговая диспетчеризация.
· Динамическое и статическое назначение приоритетов пользовательским задачам.
· Захват ресурсов памяти для обеспечения быстрого переключения задач путем фиксации страниц в оперативной памяти.
· Возможность подключения к источниками прерываний программирования нестандартных устройств.
· Возможность отображения в адресное пространство процесса пользователя любых объектов, включая файлы на дисках, физическую память, порты ввода/вывода.
· Синхронизация взаимодействия процессов пользователя с помощью традиционных механизмов UNIX (семафоры, очереди сообщений, разделяемая память, именованные и неименованные программные каналы ввода/вывода) и дополнительных возможностей (сообщения USIX, серверы, механизм событий).
Ядро UNIX не разрешает переключения процессов во время выполнения системной фазы ядра. При этом ядро представляется как бы одной большой критической секцией и выполнение задач ядра не может быть прервано, пока не завершится полностью. В отличие от ядра UNIX, ядро USIX является полностью прерываемым. Так как процессы реального времени более приоритетны, чем процессы пользовательского уровня (как пользовательская так и системная фазы), то вторые могут быть прерваны по требованию процессов реального времени исходя из логики приоритетов. Могут быть следующие причины прерываний:
· Истечение кванта времени владения процессором у текущего процесса.
· Наступление запланированных событий по времени.
· Прерывание от устройств ввода/вывода.
· Изменение приоритетов процессов.
· Освобождение ресурсов ядра (двоичных семафоров).
· Посылка сообщения более приоритетному ожидающему процессу.
Другим отличием является подход к обработке внешних прерываний. В традиционных UNIX системах даже самое низкоприоритетное внешнее прерывание не может быть прервано самым высокоприоритетным процессом. В USIX обработчик внешнего прерывания содержит минимальное количество кода, выполняющего лишь критически необходимые действия по обработке прерывания. Далее информация о прерывании устанавливается в очередь отложенных прерываний к соответствующему серверу. Последующая обработка конкурирует с остальными процессами на общих основаниях (по приоритетности).
Надежность. Система USIX является достаточно надежной, так как отказы отдельных процессоров не приводят к «развалу» системы. Вместо этого с помощью системы тайм-аутов производится постепенное освобождение ресурсов отказавшего процессора и его восстановление.