Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_Unix.doc
Скачиваний:
4
Добавлен:
26.11.2019
Размер:
2.41 Mб
Скачать

3.4.2 Структуры управления процессом

Выполнение процесса может происходить в двух режимах – ядра и задачи. В режиме задачи выполняется основная часть процесса, выполняя инструкции прикладной программы, допустимые на непривилегированном уровне защиты процессора. При этом ему недоступны системные структуры ядра. Когда процессу требуется получение каких-либо услуг ядра, он делает системный вызов, который выполняет инструкции ядра, находящиеся на привилегированном уровне. Выполнение процесса при этом переходит в режим ядра.

////Стековая страница ядра никогда не своппится, так как она должна быть доступна в любое время работы системы.

Соответственно каждый процесс в системы Unix состоит из двух частей и представлен двумя структурами: пользовательской (user) и системной (proc).

Таблица процессов ядра

В различных реализациях UNIX ядро имеет массив фиксированного размера, называемый таблицей процессов, которая загружается в оперативную память при загрузке системы и остается там до окончания работы. Записями этой таблицы являются структуры proc. Таблица процессов является одновременно массивом и двусвязным списком в виде дерева.

Физическое описание представляет собой статический массив указателей, длина которого является константой. Размер этого массива зависит от максимального количества процессов, которые одновременно могут быть запущены в системе.

Указатели описаны системной переменной curproc. Curproc указывает на структуру proc активного процесса и меняется планировщиком, когда ресурсы процессора передаются другому процессу. Структура proc содержит указатель на данные структуры user.

Каждому процессу в таблице процессов ядра соответствует свой элемент.

Номер записи в таблице - есть идентификатор процесса “PID”. Указатель на строку таблицы содержится в системной переменной curproc.

Рисунок 3.3 – Состав структуры proc

Записями этой таблицы являются структуры proc, содержащие

  1. ссылки на тело и контекст процесса

  2. текущее состояние, ожидаемые события, время до истечения интервала будильника, PID и PPID процесса, идентификаторы пользователя и группы.

  3. Параметры планирования: Приоритеты, процессорное время, потребленное за последний учитываемый период, количество времени, проведенное в ожидании

  4. Сигналы: маски, указывающие, какие сигналы игнорируются, какие перехватываются, какие временно заблокированы или находятся в процессе доставки

Пользовательская структура user

Данные user размещаются в определенном месте виртуальной памяти ядра и адресуются системной переменной u.

В структуре пользователя содержится информация, которая не требуется, когда процесса физически нет в памяти и он не выполняется. Структура пользователя выгружается на диск, освобождая место в памяти, чтобы не тратить память на ненужную в данный момент информацию.

Структура пользователя делится на следующие категории:

  1. Машинные регистры: заполняются при прерывании с переключением в режим ядра

  2. Состояние системного вызова: информация о текущем вызове, включая параметры и результаты

  3. Таблица дескрипторов файлов: по дескриптору файла находится структура данных (inode), соответствующий данному файлу

  4. Учетная информация: указатель на таблицу использования процессорного времени, максимальный размер стека, количество страниц памяти и т.д.

  5. Стек ядра: фиксированный стек для использования процессом в режиме ядра.

Рисунок 3.4 – Связь между структурами процесса

Прикладные программы работают в режиме задачи, а функции ядра выполняются в режиме ядра. Ядро защищает часть адресного пространства от доступа в режиме задачи. Более того, наиболее привилегированные машинные инструкции могут выполняться только в режиме ядра. Главной причиной появления различных режимов выполнения является безопасность. Если пользовательские процессы выполняются в менее привилегированном режиме, то они не могут случайно или специально повредить другой процесс или ядро системы. Ошибки в программе имеют локальный характер и обычно не влияют на выполнение других процессов.