Описатели объектов ядра (Handle) зависимо от конкретного процесса. Существуют способы работы с одними и теми же объектами ядра из разных процессов:
1. Наследование описателя.
2. Дублирование описателя с помощью системной функции Duplicate Handel.
3. Именование объекта ядра. При создании объекта ядра для синхронизации можно задать ему уникальное имя в системе. Для связи между процессами используется:
a. Разделяемая память, включая возможность преобразования страниц ОП в странице файла на диске и наоборот.
b. Анонимные каналы. Используются для двустороннего обмена между дочерним и родительским процессами, или между двумя дочерними
c. Именованные каналы. Двухсторонний обмен между процессами сервера и один или нескольким процессами клиентами. Могут использоваться для обмена данными локальными или по сети.
d. Сокеты (дейтаграмм, потоков). Представляют собой абстрактный объект для обозначения одного из концов сетевого соединения.
UNIX (UNIX AIX) – многозадачная, многопользовательская система, оперирующая двумя типами базовых объектов: файлы и процессы.
Файлы включают пользовательскую информацию, доступ к устройствам, интерфейсы процессного взаимодействия. Процессы – код данных и программ, выполнение их.
Архитектура системы включает монолитное ядро, системные утилиты, резидентные программы (демоны), пользовательские программы.
Существуют два уровня доступа: системный и пользовательский.
Пользовательский процесс
Пользовательский процесс
Пользовательский процесс
Системные библиотеки
Интерфейс системных вызовов
Файловая подсистема
Символьные/блочные
Драйвера устройств
Управление процессами
планировщик
Управление памятью
Межпроцессный обмен
Аппаратно-независимая часть
Доступ к структурам ядра осуществляется через файловый интерфейс.
Дескрипторы всех процессов описываются структурой proc и объединяются в список (таблицу процессов), память для которой динамически выделяется в области ядра. Контекст процессов описывается в структуре user и хранится, непосредственно примыкая к образу процесса и перемещаясь вместе с ним. Обе структуры доступы только программам ядра.
При необходимости выполнить действия в привилегированном режиме программа генерирует системный вызов, и управление передается соответствующей программе ядра. С этого момента процесс считается системный.
Контекст процесса включает его идентификатор (pid), идентификатор родительского процесса (ppid) и данные о состоянии. При завершения процесса его уникальный номер может быть передан другому. Все процессы образуют иерархию, корнем которой является процесс init. Для процессов характерно особое состояние - зомби (zombie). Процесс получает его, если завершился раньше, чем этого ожидал его родитель.
Планирование процессов осуществляется на основе циклической очереди с приоритетом:
На основании значения приоритета определяется возможность процесса прибывать в основной памяти, размер временного кванта процесса и место в общей очереди процессов. Используется система динамически изменяющихся приоритетов. При создании процесса ему приписывается установленный системой статический приоритет, изменяемый при помощи системного вызова nice.
Все процессы с динамическим приоритетом не ниже порового значения участвуют в конкуренции за процессор.
Высокий приоритет начинается от 0 до 39 – приоритеты реального времени
Основная группа – 40-254 – пользовательские приоритеты
Низкий – 255 -> wait.
Приоритеты реального времени являются фиксированными и такие процессы могут быть запущены только root пользователем.