Посещение сайта
Благодарность: Школа StartUp.
)

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

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

Самыми первыми создаются процессы в момент загрузки ОС.

1) Загрузка системы

При инициализации системы создаются несколько исходных процессов

  • В Unix – это процессы «демоны» Sched(pid0) init(pid1) – другие высокоуровневые (веб-сервер, емейл-сервер). Ядро – не процесс. Идентификаторы в Unix идут последовательно с приращением 1.
  • В Windows NT ядро – это системный процесс System(Pid4), далее загружаются система управления подсистемами smss. Идентификаторы в Win идут с приращением 4, идентификатор 0 зарезервирован, системный процесс — 4.

2) Текущий процесс порождает дочерний процесс.

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

  • Пример веб-сервер может порождать дочерний процесс для обработки нового запроса(это не есть хорошо, работает медленно);
  • В Unix процесс init отслеживает авторизации пользователя для того, чтобы запустить оболочку(новые процессы).

3) Пользователь создает новый процесс

Пользователь вызывает команду из текстовой оболочки или запускает новую программу из графической оболочки. Это создает новый процесс, родитель которого – оболочка ОС.

Этапы создания процесса

Чтобы создать процесс надо:

  1. Присвоить уникальный идентификатор новому процессу
  2. Выделить ему место в памяти (для программы, данных и стека) – физически в памяти выделяются некоторые страницы (создается образ процесса на диске)
  3. Инициализировать РСВ (блок управления процессом)
  4. Добавить процесс в очередь «готовых» к выполнению.

Иерархия процессов ОС Unix

в UNIX cтрогая иерархия между процессами: дочерний и родительский всегда взаимосвязаны.

Идентификатор командной строки (оболочка пользователя Shell) является родительской для всех процессов, которые пользователь запускает из командной строки.

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

Если пользователь посылает сигнал (напр. SIGKILL на завершение) группе процессов, то сигнал доставляется каждому процессу из группы. Это достаточно удобно для работы с группами процессов.

Создание процесса ОС Unix

Процессы создаются через две функции Fork() и exec()

  1. Начинается с Fork(), он создает точный клон вызывающего процесса, так называемый «дочерний» процесс
  2. Менеджер исполнения exec() заменяет образ процесса этого клона новой программой, которая должна быть выполнена.

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

После создания у родительского и дочернего процессов возникают собственные разные адресные пространства.

Некоторые ресурсы могут быть общими (например открытые файлы).

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

Рассмотрим ключевой механизм создание процесса в ОС Unix.

Создание процесса ОС Unix ключевой механизм

создание процесса

создание процесса ОС Unix

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

Идентификатор берется из таблицы(она есть у каждой ОС).

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

Как создать новую программу, а не еще одну копию старой?

Легко. Вначале fork(), потом exec().

Еxec() не создает новый процесс, а заменяет данные текущего процесса новыми данными.

У такой модели есть недостатки:

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

Решение было найдено в функциях vfolk()  copy-on-write.

В операционной системе Linux есть функции:

Clone() – заменяет fork()/vfork()

Clone() обладает дополнительными опциями. Exec() в Linex не является системным вызовом.

Execve() – единственный вызов, аналогичный по функционалу exec().

Создание процесса ОС Windows

В ОС Windows процессы создаются через системный вызов NtCreatProcess() – данный вызов имеет множество параметров, многие из которых «по умолчанию».

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

Хэндл процесса – существительное (дословно переводится «ручка»). Это сущность доступа к процессу – некоторое целое число, которое является индексом в определенной таблице и позволяет идентифицировать этот процесс – контроль доступа, права, наследование.

Pid – это смещение (индекс) в таблице процессов.

Иерархия процессов в ОС Windows

Ее нет, все равны. Поэтому встает вопрос взаимодействия.

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

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

Хэндл процессаидентификатор объекта процесса.

Переключение между процессами (самый простой вариант)

При необходимости переключиться на другой процесс ОС выполняет «переключение контекста».

  • Состояние старого процесса сохраняется в его PCB;
  • Состояние нового процесса восстанавливается в его PCB.

Время на переключение контекста – накладные расходы ОС (чем меньше время, тем быстрее работает).

Зависит от аппаратной реализации (т.е.от «железа компьютера», оптимизируется аппаратно).

Чем вызваны переключения? События, вызывающие переключения контекста:

  • Прерывания
  • Исключения
  • Системные вызовы

 

Процесс состоит как минимум из:

1) Адресного пространства (набор инструкций –код программы, данные)

2) Состояние потока выполнения
Характеризуется состояние потока регистрами ЦП

  • Счетчик команд (регистр IP)
  • Указатель стека (SP)
  • Другие регистры ЦП

3) Множество ресурсов ОС, которыми процесс владеет в данное время (открытые файлы, сетевые соединения) .

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

Приходит на помощь понятие ПОТОК.

В следующей лекции рассмотрим это понятие.

Скачать презентацию к лекции «Процессы и потоки»

Скачать тест по теме «Процессы и потоки»

 

 

 

Понравилась статья, рекомендуйте Вашим друзьям!

Давайте дружить!

1 комментарий к записи “Создание процесса”

  • enunciable:

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

    P.S. Довольно интересно будет видеть в списке использованной литературы ссылку на блог ))))
    P.P.S. Ах да, домашняя страничка моя, ето не спам 🙂

Оставить комментарий