Тема OS11асу. Сегментация виртуального адресного пространства процесса. Виртуальная память. Оверлеи. Средства поддержки сегментации памяти Два класса: без выгрузки на диск и с выгрузкой на диск Фиксированные разделы (базовая адресация) Динамические разделы Перемещаемые разделы Кэш - механизм и устройство Виртуальное адресное пространство Страничная и сегментная адресация Преобразование адресов Логический -> виртуальный -> физический Защита данных при сегментной организации памяти Типы адресов (логический, виртуальный, физический) Распределение памяти фиксированными разделами Распределение памяти динамическими разделами Перемещаемые разделы Свопинг и виртуальная память Страничное распределение Сегментное распределение Сегментно-страничное распределение Разделяемые сегменты памяти Кэширование данных Иерархия запоминающих устройств Кэш-память Принцип действия кэш-памяти Проблема согласования данных Способы отображения основной памяти на кэш Схемы выполнения запросов в системах с кэш-памятью http://cad.narod.ru/methods/os_unix/unibas/base.html БАЗОВЫЕ КОНЦЕПЦИИ OS UNIX Методическое Руководство по учебному курсу: Операционные системы ЭВМ. Кафедра РК-6(САПР) МГТУ им. Н.Э. Баумана http://cad.narod.ru/methods/os_unix/unibas/contents.html ОРГАНИЗАЦИЯ ПРОЦЕССОВ В OS UNIX Адресное пространство процесса и ядра http://cad.narod.ru/methods/os_unix/unibas/process.html Каждый процесс выполняется в собственном виртуальном пространстве адресов. Размер виртуального адресного пространства фиксирован, но может отличаться в реализациях OS UNIX на различных платформах. Совокупность участков RAM, отображаемых виртуальными адресами составляет образ процесса. Образ процесса составляют следующие сегменты: - процедурный сегмент (text), - сегмент инициализированных данных (data), - сегмент неинициализированных данных (bss) и - стек (stack). Расположение сегментов в виртуальном адресном пространстве процесса иллюстрирует следующий рисунок. An ---------------- stack | Расширение стека V ---------------- Свободные виртуальные адреса ---------------- basic static storage ---------------- ^ data | ---------------- text 0 ---------------- Рис. Структура виртуального адресного пространства процесса Начальные размеры сегментов образа процесса определяет заголовок файла программы процесса. Сегменты text и data загружаются из файла программы процесса. Сегменты bss и stack создаются в образе процесса и не занимают места в файле программы процесса, так как, по умолчанию, начальные значения составляющих их данных равны 0. Сегмент text - содержит машинные инструкции и константы. Его содержание не изменяется при выполнения процесса. Сегмент data - cодержит внешние и статические переменные, инициализированные при компиляции программы процесса. Сегмент bss - содержит внешние и статические переменные, неинициализированные при компиляции программы процесса. Сегмент stack - используется для хранения значений автоматических переменных и параметров функций, а также для организации рекурсивных вызовов функций. Между нижней границей стека и сегментов данных обычно существует адресный зазор, который может быть использован для расширения стека и сегментов данных при выполнении процесса, пока не исчерпано пространство свободных адресов. Изменение размера сегментов данных реализуется системными вызовами динамического распределения памяти brk и sbrk. Хотя ядро не является самостоятельной вычислительной единицей, однако, программа ядра также как программы процессов хранится в выполняемом файле формата a.out. Резидентный образ ядра располагается в RAM, начиная с нулевого адреса, и состоит из набора сегментов, который идентичен образу процесса. В частности, процедурный сегмент ядра составляют коды подпрограмм управления процессами, файлами и вводом-выводом, а также драйверы периферийных устройств. Сегмент данных ядра составляют системные таблицы и переменные, используемые подпрограммами процедурного сегмента, а также область отображения контекста текущего процесса. Стек ядра используется для размещения параметров ядерных функций и системных вызовов. Образу ядра соответствует виртуальное адресное пространство, которое по структуре аналогично виртуальному адресному пространству процесса. Образы процессов и ядра не пересекаются в RAM. Также не пересекаются образы процессов, выполняющих различные программы. Образы процессов, которые выполняют одинаковую программу, могут разделять, т.е. совместно использовать, общий процедурный сегмент. Является процедурный сегмент разделяемым или нет определяет магическое число в заголовке файла программы процесса, которое может принимать одно из 3-х значений: 0407, 0410 и 0411 (0413). Если магическое число в заголовке файла программы процесса равно 0407, то процедурный сегмент не разделяется процессами, которые одновременно выполняют данную программу, хотя они имеют абсолютно идентичные процедурные сегменты. Если магическое число процесса равно 0410, то процедурный сегмент разделяется всеми процессами, которые выполняют эту программу. Разделяемый процедурный сегмент часто называют сегментом чистого кода, а программу, которая его содержит - повторно входимой или реентерабельной. Процедурный сегмент реентерабельной программы может быть повторно выполнен любыми процессами без повторной загрузки в RAM. Если магическое число в файле программы процесса равно 0411 (0413), то процедурный сегмент также является разделяемым, но располагается в отдельном виртуальном адресном пространстве. Использование разделяемых процедурных сегментов позволяет эффективно экономить ресурсы RAM при обработке идентичных программ. Фазы выполнения процесса В каждый момент выполнения процесс может находиться фазе "пользователь" или в фазе "система". В фазе "пользователь" выполняются инструкции из адресного пространства процесса, в фазе "система" - инструкции ядра. Текущая фаза отслеживается в регистре PS. Выполнение процесса в фазе "пользователь" может быть прервано для перехода в фазу "система" по одной из следующих 3-х причин: системный вызов, внутреннее (синхронное) прерывание (ловушка), внешнее (асинхронное) аппаратное прерывание. После отработки любой из указанных причин прерывания следует возврат в фазу "пользователь". Прерывание системным вызовом сознательно инициируется процессом в фазе "пользователь" для обращения к необходимым подпрограммам из адресного пространства ядра. Внутренние прерывания (ловушки) связаны с обработкой подпрограммами ядра аварийных ситуаций, которые возникают синхронно при нарушении границ сегментов в адресном пространстве процесса, при ошибке косвенной адресации в программе процесса, при десятичном переполнении или при делении на ноль и при переполнении стека. Результатом обработки является посылка процессу соответствующего сигнала, который стандартно вызывает аварийное завершение процесса с фиксацией дампа памяти в файле core. Внешние прерывания связаны с активизацией работы периферийных устройств, контроллеры которых имеют более высокий уровень приоритета, чем процессор, выполняющий инструкции программы процесса в фазе "пользователь". Внешние прерывания возникают вне зависимости от хода выполнения программы процесса, т.е. асинхронно. При этом, управление передается соответствующей подпрограмме обработки внешнего прерывания из адресного пространства ядра. Во всех перечисленых случаях, процессор переключается на выполнение подпрограмм из адресного пространства ядра, которое доступно процессу только в фазе "система". При переходе процесса в фазу "система" из фазы "пользователь" выполняются следующие действия. Сохранение специальных (PS, PC, SP) и рабочих регистров в блоке управления области контекста процесса (u_pcb), которая отображает контекст текущего процесса в адресном пространстве ядра. Изменение текущего режима в регистре PS на фазу "система". Загрузка в регистр PC адреса подпрограммы обработки прерывания из системной таблицы векторов прерываний для активизации ее выполнения. В частности, вектора системных вызовов находятся в системной таблице sysent, где они упорядочены по номерам системных вызовов. Восстановление регистров, сохраненных при переходе в фазу "система". В частности, восстановление регистра PS означает возврат в фазу "пользователь". Восстановление регистра PC заставляет процесс возобновить выполнение, начиная с точки прерывания.