Как Linux обрабатывает процессы [The Complete Guide]

В этом уроке мы собираемся рассмотреть, как Linux обрабатывает процессы.

Что такое процесс?

Итак, что же такое Process.

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

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

Давайте посмотрим, что они из себя представляют.

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

  1. Бинарные исполняемые файлы
  2. Команды внутренней оболочки
  3. Скрипты оболочки

1. Бинарные исполняемые файлы

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

Это программы, которые изначально были созданы в виде текстового файла с использованием какого-либо языка программирования, такого как C или C ++ или что-то в этом роде.

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

Двоичные исполняемые файлы компилируются, они компилируются в двоичный файл, содержащий 0-е а также 1-е что процессор может работать.

Теперь это не единственный способ создать процесс в системе Linux, вы также можете создать процесс, выполнив внутреннюю команду оболочки.

2. Внутренняя команда оболочки

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

Например, если вы должны были ввести exit в приглашении оболочки, вы фактически выполняете внутреннюю команду оболочки.

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

Точно так же эти команды внутренней оболочки компилируются в саму программу оболочки.

3. Скрипты оболочки

Последний способ создать процесс в системе Linux – запустить сценарий оболочки.

Теперь это текстовые файлы, которые выполняются через саму оболочку.

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

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

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

С другой стороны, сценарии оболочки не компилируются в 0-е а также 1-е, они интерпретируются на лету самой оболочкой, а затем из интерпретируемого кода создается новый процесс.

Многозадачность

Теперь имейте в виду, что операционная система Linux может одновременно запускать несколько процессов на одном процессоре.

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

Фактически, я могу почти гарантировать вам, что в вашей системе Linux будет одновременно работать множество процессов.

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

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

Многозадачность
Многозадачность

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

Это создает впечатление, будто ЦП работает над всеми этими множественными процессами одновременно.

Однако на самом деле происходит то, что дополнительный ЦП выполняет только один процесс за раз, все остальные процессы, которые в настоящее время выполняются, фактически ждут в фоновом режиме своей очереди с ЦП.

Теперь операционная система поддерживает расписание, которое определяет, когда каждому процессу разрешен доступ к ЦП. Это называется многозадачностью.

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

Однако теперь имейте в виду, что есть два исключения из этого правила.

Многоядерные процессоры

Многоядерные процессоры
Многоядерные процессоры

Первое исключение – многоядерные процессоры.

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

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

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

Теперь каждый курс по-прежнему многозадачный, как мы видели раньше, первое ядро ​​работает на Процесс-23 затем он переходит к Процесс-24 затем он переходит к Процесс-25 затем он возвращается к Процесс-23 затем он переходит в Процесс-24 а затем он переходит в Процесс-25 и так далее.

Но пока он работает Процесс-23, 24 а также 25 Второе ядро ​​одновременно работает на Процесс-26, 27 а также 28 год и он выполняет ту же многозадачность, что и первое ядро.

Так что эффективно этот процессор здесь может работать Процесс-23 а также Процесс-26 точно в то же время, Один на Первом ядре, один на Втором ядре.

Гиперпоточные процессоры

Второе исключение из этого правила – процессоры с поддержкой Hyper-Threading.

Теперь гиперпотоковый ЦП спроектирован таким образом, что один ЦП может запускать два процесса одновременно.

Многопоточные процессоры

Теперь, прежде чем мы пойдем дальше, я должен указать, что на процессорах Intel эта функция называется Hyper threading, но на процессорах AMD эта функция называется симметричной многопоточностью.

Однако в обычном использовании эти два термина обычно используются как взаимозаменяемые.

Итак, если вы слышите слово «гиперпоточность» или «многопоточность», на самом деле мы имеем в виду одно и то же.

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

И затем он переключается, как мы говорили ранее, на Процесс 25 а также 26 затем он возвращается, он работает на Процесс 23 а также 24 снова, а затем он переключается на Процесс 25 & 26 снова и возвращается к Процесс 23 а также 24 снова и продолжает цикл многозадачности.

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

Многоядерные многопоточные процессоры

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

Многоядерные многопоточные процессоры

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

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

Итак, в этой ситуации у нас есть один процессор, у него два ядра, и каждое из этих ядер поддерживает гиперпоточность.

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

Сначала он будет работать над Процесс 23 а также 24 на первом ядре и Процесс 27 а также 28 год на втором ядре, а затем он также использует многозадачность, как и стандартный одноядерный однопоточный процессор, поэтому он будет переключаться и работать на Процесс 25, 26 а также 29 а также 30.

Однако важно помнить, что он одновременно работает над четырьмя отдельными процессами в системе.

Типы процессов

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

Не все процессы, запущенные в вашей системе Linux, одинаковы.

1. Пользовательские процессы

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

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

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

Итак, в этом примере я запустил firefox из командной строки, которая загрузит браузер Firefox в систему.

$ ps -a
PID   TTY      TIME     CMD
35109 tty2     00:00:29 firefox
35344 tty2     00:00:01 WebExtensions
35350 tty2     00:00:05 Web Content
35418 tty2     00:00:03 Web Content
35521 tty2     00:00:01 Web Content
35565 tty2     00:00:00 Web Content
35599 pts/0    00:00:00 ps

И когда я это сделал, были созданы два пользовательских процесса firefox а также WebExtensions.

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

2. Системные процессы

Но не все процессы, запущенные в вашей системе или пользовательские процессы, на самом деле большинство процессов, запущенных в системе Linux, будут системными процессами, созданными демонами.

В отличие от пользовательского процесса, системный процесс обычно не предоставляет какой-либо тип интерфейса конечного пользователя, который они могли бы использовать для взаимодействия с ним.

Вместо этого он используется для предоставления системной службы, например, веб-сервера или FTP-сервера, а также совместного использования файлов или принтеров.

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

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

# ps -e
PID TTY          TIME CMD
  1 ?        00:00:10 systemd
  2 ?        00:00:00 kthreadd
  3 ?        00:00:00 rcu_gp
  4 ?        00:00:00 rcu_par_gp
  6 ?        00:00:00 kworker/0:0H-kblockd
  8 ?        00:00:00 mm_percpu_wq
  9 ?        00:00:03 ksoftirqd/0
 10 ?        00:00:05 rcu_sched
 11 ?        00:00:00 migration/0
 12 ?        00:00:00 watchdog/0
 13 ?        00:00:00 cpuhp/0
 15 ?        00:00:00 kdevtmpfs

Здесь вы видите только часть от общего числа процессов, перечисленных в выходных данных этой команды.

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

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

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

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

Заключение

Я надеюсь, что теперь вы хорошо понимаете, как Linux обрабатывает процессы.

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

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *