Операционная система UNIX
Операционная система UNIX читать книгу онлайн
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Соответственно и образ процесса состоит из двух частей: данных режима ядра и режима задачи. Образ процесса в режиме задачи состоит из сегмента кода, данных, стека, библиотек и других структур данных, к которым он может получить непосредственный доступ. Образ процесса в режиме ядра состоит из структур данных, недоступных процессу в режиме задачи, которые используются ядром для управления процессом. Сюда относятся данные, диктуемые аппаратным уровнем, например состояния регистров, таблицы для отображения памяти и т.д., а также структуры данных, необходимые ядру для обслуживания процесса. Вообще говоря, в режиме ядра процесс имеет доступ к любой области памяти.
Структуры данных процесса
Каждый процесс представлен в системе двумя основными структурами данных — proc и user, описанными, соответственно, в файлах <sys/proc.h> и <sys/user.h>. Содержимое и формат этих структур различны для разных версий UNIX. В табл. 3.1 приведены некоторые поля структуры
proc
Таблица 3.1. Структура proc
char | p_stat | Состояние процесса (выполнение, приостановлен, сон и т.д.) |
char | p_pri | Текущий приоритет процесса |
unsigned int | p_flag | Флаги, определяющие дополнительную информацию о состоянии процесса |
unsigned short | p_uid | UID процесса |
unsigned short | p_suid | EUID процесса |
int | p_sid | Идентификатор сеанса |
short | p_pgrp | Идентификатор группы процессов (равен идентификатору лидера группы) |
short | p_pid | Идентификатор процесса (PID) |
short | p_ppid | Идентификатор родительского процесса (PPID) |
sigset_t | p_sig | Сигналы, ожидающие доставки |
unsigned int | p_size | Размер адресного пространства процесса в страницах |
time_t | p_utime | Время выполнения в режиме задачи |
time_t | p_stime | Время выполнения в режиме ядра |
caddr_t | p_ldt | Указатель на LDT процесса |
struct pregion | *p_region | Список областей памяти процесса |
short | p_xstat | Код возврата, передаваемый родительскому процессу |
unsigned int | p_utbl[] | Массив записей таблицы страниц для u-area |
В любой момент времени данные структур
proc
Структура
proc
curproc
curproc
proc
Вторая упомянутая структура —
user
proc
curproc
user
u
Рис. 3.2. Основные структуры данных процесса
В u-area хранятся данные, которые используются многими подсистемами ядра и не только для управления процессом. В частности, там содержится информация об открытых файловых дескрипторах, диспозиция сигналов, статистика выполнения процесса, а также сохраненные значения регистров, когда выполнение процесса приостановлено. Очевидно, что процесс не должен иметь возможности модифицировать эти данные произвольным образом, поэтому u-area защищена от доступа в режиме задачи.