Процессы в UnixНемного о архитектуре процессов На самом деле операционная система только управляет образом процесса или сегментами кода и данных, определяющих среду выполнения, а не самим процессом. Сегмент кода содержит реальные инструкции центральному процессору, в которые входят как строки, написанные и скомпилированные пользователем, так и код, сгенерированный системой, который обеспечивает взаимодействие между программой и операционной системой. Данные связанные с процессом, тоже являются частью образа процесса, некоторые из которых хранятся в регистрах (регистры это области памяти, к которым центральный процессор может оперативно получать доступ). Для ускорения доступа регистры хранятся внутри центрального процессора. Для оперативного хранения рабочих данных существует динамическая область памяти (куча(heap)). Эта память выделяется динамически и использование ее от процесса к процессу меняется. С помощью кучи программист может предоставить процессу дополнительную память. Автоматически, при запуске программы, переменные
размещаются в стeке (стек служит хранилищем для временного хранения
переменных и адресов возврата из процедур). Обычно при выполнении или в
режиме ожидания выполнения процессы находятся в оперативной памяти
компьютера. Довольно большая ее часть резервируется ядром операционной
системы, и только к оставшейся ее чати могут получить доступ пользователи.
Одновременно в оперативной памяти может находится несколько процессов.
Память, используемая процессором, разбивается на сегменты, называемые
стpаницами (page). Каждая страница имеет определенный размер, который
фиксирует операционная система в зависимости от типа вашего компьютера.
Если все страницы используются и возникает потребность в новой странице,
то та страница которая используется меньше остальных помещается в область
подкачки (swap area), а на ее месте создается новая. Но если область
подкачки не была определена, то с помощью специальных комманд можно
разместить область подкачки в файле. Но есть такие страницы которые всегда
должны находится в оперативной памяти, которые называются невытесняемыми
(nonpreemptable pages). Обычно такие страницы используются ядром, либо
программами подкачки. Главная особенность в постраничном использовании
памяти заключается в том, что процесс может использовать больше памяти,
чем есть на самом деле. Для каждого процесса создается свой блок управления,
который помещается в системную таблицу процессов, находящихся в ядре. Эта
таблица представляет собой массив структур блоков управления процессами. В
каждом блоке содержатся данные: Создание и завершение процесса Для завершения процесса используется системный вызов exit(), при котором освобождаются все используемые ресурсы, такие как память и структуры таблиц ядра. Кроме того, завершаются и процесс-потомки, порожденные данным процессом. Затем из памяти удаляются сегменты кода и данных, а сам процесс переходит в состояние зомби (для таких процессов в таблицах ядра сохраняются некоторые записи, но в конечном счете его судьбу решает его родительский процесс). И наконец родительский процесс должен очистить все ресурсы, занимаемые дочерними процессами. Взаимодействие процессов Сигнал информирует другой процесс о возниконовении определенных условий внутри текущего процесса, требующих реакции текущего процесса. Многие программы обработки сигналов для анализа возникшей проблемы выводят дамп памяти. Каналы реализованы в двух классах. Первый из них создается с помощью системного вызова pipe(). При этом для обмена информацией между процессами инициализируется специальная структура в ядре. Вызывающему процессу два дескриптора файла, один-для чтения, а другой для записи информации. Затем, когда процесс пораждает новый процесс, между двумя процессами открывается коммуникационный канал. Другим типом каналов являются именованные каналы. При их использовании с управляющей структурой в ядре связывается специальный каталог, через который два автономных процесса могут обмениваться данными. При этом, каждый процесс должен открыть канал в виде обычных файлов (один - для чтения, другой - для записи). Затем операции ввода-ввывода выполняются обычным образом. Очередь сообщений представляет собой механизм, когда один процесс предоставляет блок данных с установленными флагами, а другой процесс разыскивает блок данных, флаги которого установлены в требуемых значениях. Семафоры представляют собой средство передачи флагов от одного процесса к другому. "Подняв" семафор, процесс может сообщить, что он находится в определенном состоянии. Любой другой процесс в системе может отыскать этот флаг и выполнить необходимые действия. Совместно используемая память позволяет процессам получить доступ к одной и той же области физической памяти. |