Здавалка
Главная | Обратная связь

Понятие процесса. Демоны



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

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

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

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

Среди всех процессов можно выделить несколько особых типов процессов.

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

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

Одним из главных, если можно так выразиться, демонов в системе является демон init. Как уже говорилось, init является прародителем всех процессов в системе и имеет идентификатор 1. Выполнив задачи, поставленные в ему в файле inittab, демон init не завершает свою работу – он постоянно находится в памяти и отслеживает выполнение других процессов.

Прикладные процессы – это все остальные процессы, выполняющиеся в системе. Как правило, эти процессы порождаются в рамках сеанса работы пользователя. В каждом таком сеансе работы вначале запускается оболочка (командный интерпретатор) shell. Этот экземпляр оболочки называется loginshell и завершение соответствующего процесса приводит к отключению пользователя от системы. Процессы могут запускать ("внутри себя") отдельные потоки или, в буквальном переводе с английского, – нити (thread). Потоки — это параллельно выполняемые части одной программы. Потоки появились как логическое продолжение понятия процесса. Во-первых, появились некоторые задачи внутри ядра, которые требовалось выполнять параллельно с остальными работающими процессами. Во- вторых, ядро современной операционной системы должно уметь работать одновременно на нескольких процессорах. Эти две проблемы решаются посредством разделения некоторых частей ядра на отдельные потоки управления. Потоки ядра не имеют своего собственного адресного пространства и работают внутри пространства ядра. Фактически, они представлены лишь стеком данных и набором регистров, что позволяет ядру очень быстро переключаться между ними. Потоки ядра порождаются с помощью функции kernel_thread(), которая делает системный вызов clone(2) в режиме ядра. Потоки ядра обычно имеют высокий приоритет и не имеют пользовательского адресного пространства, они получают прямой доступ к адресному пространству ядра. Идентификаторы этих потоков находятся в начале диапазона числовых значений идентификаторов.

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







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.