Jump to content
Sign in to follow this  
mr.save

Процессы в Unix

Recommended Posts

Немного о архитектуре процессов

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

На самом деле операционная система только управляет образом процесса или сегментами кода и данных, определяющих среду выполнения, а не самим процессом. Сегмент кода содержит реальные инструкции центральному процессору, в которые входят как строки, написанные и скомпилированные пользователем, так и код, сгенерированный системой, который обеспечивает взаимодействие между программой и операционной системой. Данные связанные с процессом, тоже являются частью образа процесса, некоторые из которых хранятся в регистрах (регистры это области памяти, к которым центральный процессор может оперативно получать доступ). Для ускорения доступа регистры хранятся внутри центрального процессора.

Для оперативного хранения рабочих данных существует динамическая область памяти (куча ( с англ. heap ) ). Эта память выделяется динамически и использование ее от процесса к процессу меняется. С помощью кучи программист может предоставить процессу дополнительную память.

Автоматически, при запуске программы, переменные размещаются в стeке (стек служит хранилищем для временного хранения переменных и адресов возврата из процедур). Обычно при выполнении или в режиме ожидания выполнения процессы находятся в оперативной памяти компьютера. Довольно большая ее часть резервируется ядром операционной системы, и только к оставшейся ее чати могут получить доступ пользователи. Одновременно в оперативной памяти может находится несколько процессов. Память, используемая процессором, разбивается на сегменты, называемые стpаницами (page). Каждая страница имеет определенный размер, который фиксирует операционная система в зависимости от типа вашего компьютера. Если все страницы используются и возникает потребность в новой странице, то та страница которая используется меньше остальных помещается в область подкачки (swap area), а на ее месте создается новая. Но если область подкачки не была определена, то с помощью специальных комманд можно разместить область подкачки в файле. Но есть такие страницы которые всегда должны находится в оперативной памяти, которые называются невытесняемыми (nonpreemptable pages). Обычно такие страницы используются ядром, либо программами подкачки. Главная особенность в постраничном использовании памяти заключается в том, что процесс может использовать больше памяти, чем есть на самом деле. 
Процессы могут функционировать в двух режимах: системном и пользовательском. Работа в ситемном режиме означает выполнение процессом системных вызовов. Он наиболее важен, так как в нем выполняется обработка прерываний, вызванных внешними сигналами и системными вызовами, а также управлением доступом к диску, распределение дополнительной динамической памяти и других ресурсов системы. Процесс функционирует в пользовательском режиме, когда выполняется код, заданный пользователем.

Для каждого процесса создается свой блок управления, который помещается в системную таблицу процессов, находящихся в ядре. Эта таблица представляет собой массив структур блоков управления процессами. В каждом блоке содержатся данные:

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

Чтобы система функционировала должным образом, ядру необходимо отслеживать все эти данные.

Создание и завершение процесса

Процесс порождается с помощью системного вызова fork(). При этом вызове происходит проверка на наличие свободной памяти, доступной для размещения нового процесса. Если требуемая память доступна,то создается процесс-потомок текущего процесса, представляющий собой точную копию вызывающего процесса. При этом в таблице процессов для нового процесса строится соответствующая структура. Новая структура создается также в таблице пользователя. При этом все ее переменные инициализирутся нулями. Этому процессу присваивается новый уникальный идентификатор, а идентификатор родительского процесса запоминается в блоке управления процессом.

Для завершения процесса используется системный вызов exit(), при котором освобождаются все используемые ресурсы, такие как память и структуры таблиц ядра. Кроме того, завершаются и процесс-потомки, порожденные данным процессом. Затем из памяти удаляются сегменты кода и данных, а сам процесс переходит в состояние зомби (для таких процессов в таблицах ядра сохраняются некоторые записи, но в конечном счете его судьбу решает его родительский процесс). И наконец родительский процесс должен очистить все ресурсы, занимаемые дочерними процессами.

Взаимодействие процессов

Самым распространенным средством взaимодействия процессов являются сокеты (sockets). Программы подключаются к сокету и выдают запрос на привязку к нужному адресу. Затем данные передаются от одного сокета к другому в соответствии с указанным адресом.

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

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

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

Семафоры представляют собой средство передачи флагов от одного процесса к другому. "Подняв" семафор, процесс может сообщить, что он находится в определенном состоянии. Любой другой процесс в системе может отыскать этот флаг и выполнить необходимые действия.

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

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...