Ядро ОС Linux

       

B.4. Создание и удаление процесса.


Система unix создает процесс с помощью системного вызова fork(), удаление процесса может осуществляться с помощью exit() или с помощью передачи ядру сигнала. Описание этих функций в Linux расположено в kernel/fork.c и в kernel/exit.c.

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

  • Получение пустой страницы для помещения туда task_struct;
  • Нахождение пустого слота для процесса (find_empty_process());
  • Получение другой пустой страницы для kernel_stack_page;
  • Копирование LDT родителя наследнику;
  • Засылка копии информации из mmap родителю;
  • sys_fork() управляет дескрипторами и inode файлов.

    В ядре версии 1.0 предлагается весьма несовершенная поддержка наследования и системный вызов fork() хорошо демонстрирует это.

    Выход из программы осуществляется в системе изощренным методом, так как каждый родительский процесс получает информацию ото всех своих существующих наследников. Кроме того, процесс может завершиться при kill() (уничтожении) другого процесса (позаимствовано из UN*X). Файл exit.c содержит sys_kill(), различные версии sys_wait() и sys_exit().

    Текст exit.c не описывается здесь - он неинтересен. Он оперирует большим количеством инструментов выхода из системы в рабочем состоянии.

    Стандарт POSIX управляет сигналами.



    Содержание раздела