процесс init: предок всех процессов?

Это - пережиток от "Вас olde времена", когда машины испытали затруднения при обращении к большим жестким дискам. Идея позади /boot раздел состоял в том, чтобы всегда делать раздел доступным для любой машины, что диск был включен. Если машина могла бы добраться до запуска диска (более низкие номера цилиндра) затем, это могло загрузить систему; оттуда ядро Linux смогло бы обойти ограничение начальной загрузки BIOS и работу вокруг проблемы. Поскольку современные машины сняли то ограничение, больше нет фиксированной потребности в /boot быть отдельным, если Вы не требуете дополнительной обработки других разделов, таких как системы шифрования или файловые системы, которые исходно не распознаны загрузчиком.

Технически, можно сойти с рук единственный раздел и быть очень хорошо, при условии, что Вы не используете действительно действительно старые аппаратные средства (приблизительно пред1998).

Если Вы действительно решаете использовать отдельный раздел, просто, несомненно, дадут ему соответствующую комнату, скажут 200 МБ пространства. Это будет более чем достаточно для нескольких обновлений ядра (которые используют несколько megs каждый раз). Если начальная загрузка / начинает заполняться, удалять более старые ядра, что Вы не используете и корректируете свой загрузчик для распознавания этого факта.

26
17.05.2011, 00:02
1 ответ

Во-первых, “предок” не является тем же самым как “родителем”. Предок может быть родителем … родителя родителя родителя, и ядро только отслеживает один уровень. Однако, когда процесс умирает, его дети усыновлены init, таким образом, Вы будете видеть много процессов, родитель которых 1 в типичной системе.

Современные системы Linux дополнительно имеют несколько процессов, которые выполняют код ядра, но организованы как пользовательские процессы, что касается планирования. (Они не соблюдают обычные правила управления памятью, так как они выполняют код ядра.) Эти процессы все порождены kthreadd (это - init потоков ядра). Можно распознать их их идентификатором (2) родительского процесса или, обычно, фактом это ps перечисляет их с именем между квадратными скобками или фактом это /proc/2/exe (обычно символьная ссылка на исполняемый файл процесса), не может быть считан.

Процессы 1 (init) и 2 (kthreadd) создаются непосредственно ядром во время начальной загрузки, таким образом, у них нет родителя. Значение 0 используется в их ppid поле для указания на это. Думайте 0 как значение “самого ядра” здесь.

Linux также имеет некоторые средства для ядра для запуска пользовательских процессов, местоположение которых обозначается через sysctl параметр при определенных обстоятельствах. Например, ядро может инициировать события загрузки модуля (например, когда новые аппаратные средства обнаружены, или когда некоторые сетевые протоколы сначала используются) путем призыва программы kernel.modprobe значение sysctl. Когда программа выводит ядро, вызовы ядра программа, обозначенная kernel.core_pattern если таковые имеются.

32
27.01.2020, 19:40
  • 1
    Так init "предок" всех user threads, в то время как [kthreadd ] "родитель" всех kernel threads, право? Спасибо! –  Nan Xiao 16.05.2016, 10:24
  • 2
    @NanXiao Главным образом, да. Как я упоминаю в своем последнем абзаце, существует несколько других путей к пользовательским процессам, которые будут запущены ядром, например, программой, перечисленной в kernel.core_pattern когда программа выводит ядро. В типичной системе Вы не будете видеть их, потому что те процессы имеют тенденцию делать свое задание быстро и затем выходить. –  Gilles 'SO- stop being evil' 16.05.2016, 14:41

Теги

Похожие вопросы