Разделы презентаций


Архитектура вычислительных систем

Содержание

Процессы в ОС Unix объединяются в группы процессов и в сеансы. Сеансы изначально задумывались для объединения всех процессов, запущенных пользователем с одного терминала. Таким образом, сеанс может иметь не более одного

Слайды и текст этой презентации

Слайд 1Архитектура вычислительных систем
Константин Ловецкий
Декабрь 2011
Кафедра систем телекоммуникаций
Группы процессов и сеансы

в ОС Unix

Архитектура вычислительных системКонстантин ЛовецкийДекабрь 2011Кафедра систем телекоммуникацийГруппы процессов и сеансы в ОС Unix

Слайд 2Процессы в ОС Unix объединяются в группы процессов и в

сеансы. Сеансы изначально задумывались для объединения всех процессов, запущенных пользователем

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

Группы процессов и сеансы в ОС Unix Общие сведения

Процессы в ОС Unix объединяются в группы процессов и в сеансы. Сеансы изначально задумывались для объединения всех

Слайд 3Группы процессов и сеансы в ОС Unix Сеансы и группы процессов

Группы процессов и сеансы в ОС Unix Сеансы и группы процессов

Слайд 4Группы процессов и сеансы в ОС Unix
Группы процессов изначально задуманы

для объединения процессов, работающих над общей задачей. Командный интерпретатор обычно

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

Процесс наследует принадлежность к сеансу и группе от своего непосредственного предка (как уже говорилось, при вызове fork() параметры sid и pgid не изменяются). Однако процесс может при желании уйти в новую группу или даже в новый сеанс. Говоря конкретнее, процесс может:
Группы процессов и сеансы в ОС Unix	Группы процессов изначально задуманы для объединения процессов, работающих над общей задачей.

Слайд 5• создать сеанс (при этом в этом сеансе создается и

группа, причем процесс, создавший сеанс, автоматически становится лидером и сеанса,

и группы; отметим, что идентификатор сеанса и идентификатор группы равны идентификатору процесса, их создавшего);
• создать группу в рамках того же сеанса (при этом процесс становится лидером группы);
• перейти в другую группу того же сеанса.
Отметим еще один момент: процесс не может создать новый сеанс, если он уже является лидером сеанса (то есть его sid совпадает с pid’ом) и не может создать новую группу, если уже является лидером группы (то есть его pgid совпадает с pid’ом).


Группы процессов и сеансы в ОС Unix

• создать сеанс (при этом в этом сеансе создается и группа, причем процесс, создавший сеанс, автоматически становится

Слайд 6Все эти механизмы введены в ОС Unix для облегчения управления

процессами. Так, если пользовательская сессия работы с терминалом по той

или иной причине завершилась (например, пользователь выключил терминал, разорвал соединение удаленного доступа или закрыл окно программы xterm), то всем процессам сеанса, связанного с данным терминалом, рассылается сигнал SIGHUP.
Что касается групп, то они, например, используются при рассылке сигнала SIGINT по нажатию Ctrl-C: сигнал получают только процессы основной группы, а фоновые продолжают работу.
Более того, сам по себе ввод с терминала разрешен только процессам основной группы. Фоновый процесс при попытке чтения с терминала приостанавливается сигналом SIGTTIN.

Группы процессов и сеансы в ОС Unix

Все эти механизмы введены в ОС Unix для облегчения управления процессами. Так, если пользовательская сессия работы с

Слайд 7Вообще, механизм сеансов и групп создан в основном для того,

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

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

Группы процессов и сеансы в ОС Unix

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

Слайд 8Рассмотрим кратко системные вызовы и функции, имеющие отношение к управлению

сеансами и группами. Узнать для процесса параметры sid и pgid

можно с помощью вызовов
int getsid(int pid);
int getpgid(int pid);
Здесь pid − идентификатор интересующего нас процесса. Специальное значение 0 означает вызывающий процесс. Отметим, что идентификатор сеанса совпадает с идентификатором (pid) процесса, создавшего этот сеанс; обычно идентификатор группы также совпадает с pid’ом создавшего группу процесса. Соответствующие процессы называются лидерами, соответственно, сеанса и группы.

Управление сеансами и группами

Рассмотрим кратко системные вызовы и функции, имеющие отношение к управлению сеансами и группами. Узнать для процесса параметры

Слайд 9Создание нового сеанса производится вызовом
int setsid();
Вызов не проходит в случае,

если данный процесс уже является лидером сеанса или хотя бы

группы. Чтобы гарантировать успешное создание сеанса, следует сделать fork() и завершить родительский процесс, сменив, таким образом, свой pid:
if(fork()>0) exit(0);
setsid();
При успешном выполнении setsid() будут созданы одновременно новый сеанс и новая группа, идентификаторы которых будут совпадать с pid’ом процесса, выполнившего setsid(), причем вызвавший процесс окажется единственным членом и того, и другого.

Управление сеансами и группами

Создание нового сеанса производится вызовом	int setsid();Вызов не проходит в случае, если данный процесс уже является лидером сеанса

Слайд 10Каждый терминал может быть управляющим для не более чем одного

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

терминала. При успешном выполнении setsid() процесс теряет управляющий терминал, даже если при этом у него остаются связанные с терминалом открытые дескрипторы. Чтобы снова получить управляющий терминал, процессу следует открыть вызовом open() файл терминального устройства, не являющегося управляющим ни для какого сеанса.
Для смены группы существует вызов
int setpgid(int pid, int pgid);
Параметр pid задает номер процесса, который нужно перевести в другую группу; pgid − номер этой группы. Сменить группу процесс может либо самому себе, либо своему прямому потомку, если только этот потомок еще не выполнил вызов exec. Группу можно менять либо на уже существующую в рамках данного сеанса, либо можно задать pgid равным pid, в этом случае создается новая группа, а процесс становится ее лидером.

Управление сеансами и группами

Каждый терминал может быть управляющим для не более чем одного сеанса, и каждый сеанс может иметь не

Слайд 11Если у сеанса есть управляющий терминал, можно указать драйверу терминала,

какую группу процессов считать основной. Это делается с помощью библиотечной

функции
int tcsetpgrp(int fd, int pgrp);
Здесь fd − файловый дескриптор, который должен быть связан с управляющим терминалом (обычно используется 0 или 1). Дескриптор необходим, потому что смена основной группы реализуется через вызов ioctl() для терминала как логического устройства.

Управление сеансами и группами

Если у сеанса есть управляющий терминал, можно указать драйверу терминала, какую группу процессов считать основной. Это делается

Слайд 12 Под демонами понимаются процессы, не предназначенные для непосредственного взаимодействия с

пользователями системы. Примерами демонов могут служить программы-сервера, обслуживающие WWW или

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

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

Процессы-демоны

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

Слайд 13Ясно, что демону не нужен управляющий терминал (и вообще дескрипторы

стандартного ввода, вывода и выдачи сообщений об ошибках). При этом,

однако, желательно, чтобы дескрипторы 0, 1 и 2 оставались открыты, потому что демоны, естественно, работают с файлами, и если какой-либо файл будет открыт с номером дескриптора 0, 1 или 2 (а это обязательно произойдет, если дескрипторы будут закрыты), какая-нибудь процедура может случайно испортить файл, попытавшись осуществить ввод/вывод на стандартных дескрипторах. Поэтому все три стандартных дескриптора обычно связывают с устройством /dev/null. Это символьное (то есть байт-ориентированное, или потоковое) устройство является чисто логическим. Все, что в него записывается, попросту исчезает, а попытка чтения из него сразу создает ситуацию «конец файла».

Процессы-демоны

Ясно, что демону не нужен управляющий терминал (и вообще дескрипторы стандартного ввода, вывода и выдачи сообщений об

Слайд 14Чтобы действия, производимые с каким-либо терминалом, не сказались на функционировании

демона (например, было бы нежелательно получить в некий момент SIGHUP

из-за того, что пользователь прекратил работу с терминалом), он обычно работает в отдельном сеансе.
Таким образом, процедура старта процесса-демона может выглядеть приблизительно так:
close(0);
close(1);
close(2);
open("/dev/null", O_RDONLY); /* stdin */
open("/dev/null", O_WRONLY); /* stdout */
open("/dev/null", O_WRONLY); /* stderr */
if(fork()>0) exit(0); /* change pid */
setsid();
chdir("/");

Процессы-демоны


Слайд 15Поскольку с терминалами процесс-демон не связан, всевозможные сообщения об ошибках,

предупреждения, информационные сообщения и т.п., адресованные системному администратору, приходится передавать

некоторым альтернативным способом. Обычно это делается через инфраструктуру системной журнализации.
Для этого используются следующие библиотечные функции:
 void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);
 Чтобы начать работу с системой журнализации, программа вызывает openlog(), передавая первым параметром свое название, указывая некоторые дополнительные опции в параметре options (в большинстве случаев достаточно передать число 0) и указывая, к какой подсистеме относится данная программа, через параметр facility. Наиболее популярные подсистемы (например, почтовый сервер) имеют специальные значения этого параметра, прочим программам следует использовать константу LOG_USER.

Процессы-демоны

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

Слайд 16Функция syslog() похожа на функцию printf(). Первым параметром указывается степень

важности сообщения (например, LOG_ERR используется при возникновении неустранимой ошибки, LOG_WARN

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

Например, вызов может выглядеть так:
syslog(LOG_INFO, "Daemon started with pid == %d", getpid());

Функция closelog() завершает работу с системой журнализации, закрывая открытые файлы и т.п.
Управление процессами-демонами может осуществляться через сигналы; так, многие демоны в ответ на сигнал SIGHUP перечитывают конфигурационные файлы и при необходимости меняют режимы работы. В более сложных случаях возможны и другие схемы управления.


Процессы-демоны

SIG is a common prefix for signal names; HUP is a contraction of hang up.

Функция syslog() похожа на функцию printf(). Первым параметром указывается степень важности сообщения (например, LOG_ERR используется при возникновении

Слайд 17A hangup was often the result of a connected user

physically hanging up the modem
Потеря соединения с терминалом

A hangup was often the result of a connected user physically hanging up the modemПотеря соединения с

Слайд 18После включения компьютера управление получает небольшая программа, находящаяся в ПЗУ.

После выполнения некоторых действий по проверке оборудования эта программа определяет

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

Загрузка и жизненный цикл ОС UNIX

После включения компьютера управление получает небольшая программа, находящаяся в ПЗУ. После выполнения некоторых действий по проверке оборудования

Слайд 19Так, загрузчик ОС FreeBSD имеет собственную командную строку, позволяющую выбрать,

какой раздел считать корневым, из какого файла загружать ядро, и

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

Загрузка и жизненный цикл ОС UNIX

Так, загрузчик ОС FreeBSD имеет собственную командную строку, позволяющую выбрать, какой раздел считать корневым, из какого файла

Слайд 20Загрузчик загружает в память выбранное ядро и передает управление его

инициализационному коду. Ядро инициализирует свои подсистемы, в том числе драйверы

устройств, что включает, естественно, и проверку доступного оборудования. Затем ядро монтирует файловую систему с корневого дискового устройства в качестве корневого каталога системы. Обычно корневой каталог монтируется в режиме «только чтение».
После того как ядро готово к работе и смонтировало корневое устройство, оно создает процесс с номером 0. Этот процесс существует только на этапе загрузки, и основная его роль − создать с помощью fork() процесс с номером 1.
После этого нулевой процесс прекращает существование, т.е. в системе с этого момента есть только процессы, созданные с помощью fork().

Загрузка и жизненный цикл ОС UNIX

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

Слайд 21Процесс номер 1 выполняет вызов execve(), чтобы загрузить в память

программу init (обычно это файл /sbin/init; ясно, что он должен

находиться на корневом дисковом устройстве). Это уже совершенно обычная программа, написанная на C или (теоретически) на любом другом компилируемом языке программирования. Процесс init работает все время работы ОС; его завершение влечет останов системы. Именно процесс init выполняет проверку дисков, перемонтирует корневой раздел в режим «чтение/запись» и монтирует остальные файловые системы.

Загрузка и жизненный цикл ОС UNIX

Процесс номер 1 выполняет вызов execve(), чтобы загрузить в память программу init (обычно это файл /sbin/init; ясно,

Слайд 22Затем процесс init должен инициализировать подсистемы ОС, например, сконфигурировать интерфейсы

работы с локальной сетью; запустить системные процессы-демоны; и, наконец, запустить

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

Загрузка и жизненный цикл ОС UNIX

Затем процесс init должен инициализировать подсистемы ОС, например, сконфигурировать интерфейсы работы с локальной сетью; запустить системные процессы-демоны;

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

с этим обычно выполнение большинства действий, связанных с инициализацией системы,

возлагается на скрипты системной инициализации (в зависимости от системы это может быть файл /etc/rc, /etc/rc.d/rc и т.п.) Программе init тогда достаточно указать (через конфигурационный файл или в качестве параметра компиляции), где находится соответствующий скрипт. Скрипты системной инициализации обычно представляют собой программы, написанные на языке стандартного командного интерпретатора (Bourne Shell).

Загрузка и жизненный цикл ОС UNIX

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

Слайд 24Загрузка и жизненный цикл ОС UNIX
Отметим, что и процедура корректного

останова системы для перезагрузки или выключения компьютера также возлагается на

init, который, в свою очередь, запускает для этого специально предназначенный скрипт. В этом скрипте содержатся команды по уничтожению работающих процессов (сначала с помощью сигнала SIGTERM, затем, после паузы, − сигналом SIGKILL), размонтирования всех файловых систем, кроме корневой (ее размонтировать невозможно), перевод корневой системы в режим «только чтение», синхронизация корневой системы (запись недозаписанных данных из буферов, если таковые есть). После этого выполняется собственно останов системы.
Загрузка и жизненный цикл ОС UNIXОтметим, что и процедура корректного останова системы для перезагрузки или выключения компьютера

Слайд 25http://en.wikipedia.org/wiki/SIGTSTP
SIG is a common prefix for signal names. TSTP is

an abbreviation for tty stop, indicating that stop has been

typed at the tty (the controlling terminal of the process). (Tty is itself an abbreviation for teletypewriter, an archaic type of computer terminal.)

Приложения.

http://en.wikipedia.org/wiki/SIGTSTPSIG is a common prefix for signal names. TSTP is an abbreviation for tty stop, indicating that

Слайд 26Signals
Пример. Найти описание сигнала в Wikipedia:

http://en.wikipedia.org/wiki/SIGTTIN

SignalsПример. Найти описание сигнала в Wikipedia:

Слайд 27Signals

Signals

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика