Выполнение процесса может происходить в двух режимах – ядра и задачи. В режиме задачи выполняется основная часть процесса, выполняя инструкции прикладной программы, допустимые на непривилегированном уровне защиты процессора. При этом ему недоступны системные структуры ядра. Когда процессу требуется получение каких-либо услуг ядра, он делает системный вызов, который выполняет инструкции ядра, находящиеся на привилегированном уровне. Выполнение процесса при этом переходит в режим ядра.
////Стековая страница ядра никогда не своппится, так как она должна быть доступна в любое время работы системы.
Соответственно каждый процесс в системы Unix состоит из двух частей и представлен двумя структурами: пользовательской (user) и системной (proc).
Таблица процессов ядра
В различных реализациях UNIX ядро имеет массив фиксированного размера, называемый таблицей процессов, которая загружается в оперативную память при загрузке системы и остается там до окончания работы. Записями этой таблицы являются структуры proc. Таблица процессов является одновременно массивом и двусвязным списком в виде дерева.
Физическое описание представляет собой статический массив указателей, длина которого является константой. Размер этого массива зависит от максимального количества процессов, которые одновременно могут быть запущены в системе.
Указатели описаны системной переменной curproc. Curproc указывает на структуру proc активного процесса и меняется планировщиком, когда ресурсы процессора передаются другому процессу. Структура proc содержит указатель на данные структуры user.
Каждому процессу в таблице процессов ядра соответствует свой элемент.
Номер записи в таблице - есть идентификатор процесса “PID”. Указатель на строку таблицы содержится в системной переменной curproc.
Рисунок 3.3 – Состав структуры proc
Записями этой таблицы являются структуры proc, содержащие
1. ссылки на тело и контекст процесса
2. текущее состояние, ожидаемые события, время до истечения интервала будильника, PID и PPID процесса, идентификаторы пользователя и группы.
3. Параметры планирования: Приоритеты, процессорное время, потребленное за последний учитываемый период, количество времени, проведенное в ожидании
4. Сигналы: маски, указывающие, какие сигналы игнорируются, какие перехватываются, какие временно заблокированы или находятся в процессе доставки