Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Создание процессов и управление ими



Процесс создается из другого процесса с помощью системного вызова fork (). Когда процесс вызывает f ork(), мы можем сказать, что процесс порождает (spawned) новый процесс. Новый процесс считается дочерним процессом (child), а первый считается ро­дительским процессом (parent). Каждый процесс имеет родителя, за исключением про­цесса init. Все процессы, порожденные процессом init, запускаются во время загруз­ки системы. Это описано в следующих разделах.


Рис. 1.3. Дерево процессов

В результате такой модели дочерних/родительских процессов система образует дерево процессов, описывающее характер отношений между запущенными процесса­ми. Рис. 1.3 иллюстрирует такое дерево процессов.



Глава 1 • Обзор


После создания дочернего процесса родительскому процессу может понадобиться узнать, когда он будет завершен. Системный вызов wait () используется для приоста­новки родительского процесса до тех пор, пока дочерний процесс не завершится.

Процесс может заменить себя другим процессом. Это можно сделать, например, с по­мощью функции mingetty (), описанной ранее. Когда пользователю требуется доступ в систему, функция mingetty () запрашивает его пользовательское имя и заменяет себя процессом, выполняющим login (), в который в качестве параметра передается имя пользователя. Эта замена осуществляется с помощью вызова одного из системных вызо­вов exec ().

1.9.4.2 ID процесса

Каждый процесс обладает уникальным идентификатором, называемым process ID (PID). PID - это неотрицательное целое число. Идентификаторы процессов выделяются в ин-крементной последовательности по мере создания процессов. По достижении максималь­ного значения PID оно обнуляется и РГО начинают выделяться с наименьшего доступно­го числа, большего 1. Существует два специальных процесса: процесс 0 и процесс I1. Процесс 0 - это процесс, отвечающий за инициализацию и запуск процесса 1, который также известен как процесс init. Все процессы в запущенной системе Linux являются потомками процесса 1. После выполнения процесса 0 процесс init попадает в холостой цикл. Гл. 8, «Загрузка ядра», описывает этот процесс в разделе «Начало: start_kernel()».

Для идентификации процесса используются два системных вызова. Системный вы­зов getpid () возвращает РГО текущего процесса, а системный вызов getppid() воз­вращает РГО родителя этого процесса.

1.9.4.3 Группы процессов

Процесс может быть членом группы процессов, использующих один групповой ID. Груп­па процессов помогает образовывать наборы процессов. Это может потребоваться, на­пример, если вы хотите быть уверенным, что несвязанные другим образом процессы по­лучают сигнал kill в одно и то же время. Процесс, РГО которого идентичен ГО группы, считается лидером группы. ГО группы процессов можно манипулировать с помощью сис­темных вызовов getpgidO и setpgidO, которые возвращают и устанавливают ГО группы процессов для указанных процессов соответственно.

1.9.4.4 Состояния процесса

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

1 Процесс с PID 0 и процесс с PID 1. Примеч. науч. ред.


Обзор ядра Linux



момент выполняются. Процесс может находиться в состоянии сна (sleep), если он ожида­ет освобождения ресурсов, занятых другим процессом, мертвым (dead), если он был убит, и покойным (defunct), или зомби (zombie), если процесс был завершен, прежде чем его родитель смог вызвать для него wait ().

Описатель процесса

У каждого процесса есть описатель, содержащий информацию об этом процессе. Описа­тель процесса содержит такую информацию, как состояние процесса, PID, пользователь­скую команду на запуск и т. д. Эту информацию можно просмотреть с помощью вызова ps (состояние процесса). Вызов ps выводит нечто наподобие следующего:

 

lkp: ~#ps aux | more  
USER PID TTY STAT COMMAND  
root 1 ? S init [3]
root 2 ? SN [ksoftirqd/O]

root 10? S< [aio/0]

root 2026? Ss /sbin/syslogd -a /var/lib/ntp/dev/log

root 2029? Ss /sbin/klogd -c 1 -2 -x

root 3324 tty2 Ss+ /sbin/mingetty tty2

root 332 5 tty3 Ss+ /sbin/mingetty tty3

root 332 6 tty4 Ss+ /sbin/mingetty tty4

root 3327 tty5 Ss+ /sbin/mingetty tty5

root 3328 tty6 Ss+ /sbin/mingetty tty6

root 3329 ttySO Ss+ /sbin/agetty -L 9600 ttySO vtl02

root 14914? Ss sshd: root@pts/0

root 14917 pts/0 Ss -bash

root 17682 pts/0 R+ ps aux

root 17683 pts/0 R+ more

Список информации о процессах показывает, что процесс с PID 1 - это процесс init. Также в этом списке можно увидеть программы mingetty () и agetty (), ожи­дающие ввода от виртуального и параллельного терминалов соответственно. Обратите внимание, что они являются детьми предыдущих. И наконец, в списке можно увидеть сес­сию bash, в которой была использована команда ps aux | more. Заметьте, что |, которое используется для обозначения канала, - само не является процессом. Вспомните, что мы говорили о том, что каналы обеспечивают общение между процессами. В данном случае два процесса - это ps aux и more.

Как вы можете видеть, колонка STAT означает состояние процесса, где S означает спящий процесс, a R запущенный или запускаемый процесс.



Глава 1 • Обзор


Приоритет процесса

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

Сначала выполняются процессы с наивысшим приоритетом, а затем все остальные. Пользователь может устанавливать приоритеты процессов с помощью вызова nice (). Этот вызов создает процессу преимущество перед другими, определяя, сколько процессов должны его подождать. Наивысший приоритет обозначается отрицательным числом, а наименьший - положительным. Чем больший приоритет передается nice, тем больше­му числу процессов придется подождать.

Системные вызовы

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

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

Планировщик Linux

Планировщик Linux выполняет задачу передачи управления от одного процесса другому. За исключением процесса, имеющего преимущество ядра, в Linux 2.6 каждый процесс, включая ядро, может быть прерван практически в любой момент, а управление передано новому процессу.

Например, когда происходит прерывание, Linux должен прервать выполнение теку­щего процесса и обработать прерывание. Дополнительно в многозадачной операционной системе, такой, как Linux, нужно убедиться, что ни один из процессов не занимает процес­сор слишком долго. Планировщик отвечает за обе эти задачи: с одной стороны, он заме-


1.10 Переносимость и архитектурные зависимости


Поделиться:



Популярное:

  1. A. между органами государственного управления и коммерческими организациями
  2. AT : химич. Природа, строение, свойства, механизм специфического взаимодействия с АГ
  3. E) Способ взаимосвязанной деятельности педагога и учащихся, при помощи которого достигается усвоение знаний, умений и навыков, развитие познавательных процессов, личных качеств учащихся.
  4. I. Понятие и система криминалистического исследования оружия, взрывных устройств, взрывчатых веществ и следов их применения.
  5. I. Понятие криминалистической тактики.
  6. II Модуль. Криминологическая характеристика отдельных видов преступности
  7. II. Криминалистическая баллистика.
  8. II. Совершенствование и оптимизация организационно-управленческой сис-
  9. II. Способ, которым можно получить примирение (7:11-15,28-32).
  10. II.1 . Управление автоматическими тормозами
  11. II.2 . Управление электропневматическими тормозами
  12. III Криминалистическое исследование материалов, веществ, изделий из них и следов их применения.


Последнее изменение этой страницы: 2016-03-25; Просмотров: 594; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.014 с.)
Главная | Случайная страница | Обратная связь