См .: Понимание ядра Linux , 3-е издание, Даниэль П. Бове, Марко Чезати
- Издатель: О'Рейли
- Дата публикации: ноябрь 2005
- ISBN: 0-596-00565-2
- Страницы: 942
В своем вступлении Даниэль П. Бове и Марко Чезати сказали:
С технической точки зрения, Linux - это настоящее ядро Unix, хотя и не является полноценной операционной системой Unix, поскольку оно не включает в себя все приложения, такие как утилиты файловой системы, оконные системы и графические рабочие столы, команды системного администратора, текстовые редакторы, компиляторы и т. Д. на. Поэтому то, что вы читаете в этой книге и видите в ядре Linux, может помочь вам понять и другие варианты Unix.
В следующих параграфах я попытаюсь изложить ваши взгляды, основанные на моем понимании, на факты, представленные в «Понимании ядра Linux», которые в значительной степени похожи на те, что в Unix.
Что значит процесс? :
Процессы похожи на людей, они генерируются, у них более или менее значительная жизнь, они необязательно генерируют один или несколько дочерних процессов, и в конце концов они умирают. Процесс состоит из пяти основных частей: код («текст»), данные (ВМ), стек, файловый ввод-вывод и таблицы сигналов.
Цель процесса в ядре - действовать как сущность, которой выделяются системные ресурсы (время процессора, память и т. Д.). Когда процесс создан, он почти идентичен своему родителю. Он получает (логическую) копию адресного пространства родителя и выполняет тот же код, что и родитель, начиная со следующей инструкции, следующей за системным вызовом создания процесса. Хотя родитель и потомок могут совместно использовать страницы, содержащие программный код (текст), они имеют отдельные копии данных (стек и куча), так что изменения, вносимые потомком в область памяти, невидимы для родителя (и наоборот) ,
Как работают процессы?
Выполняющая программа нуждается не только в двоичном коде, который сообщает компьютеру, что делать. Программа нуждается в памяти и различных ресурсах операционной системы для запуска. «Процесс» - это то, что мы называем программой, которая была загружена в память вместе со всеми ресурсами, необходимыми для работы. Поток - это единица выполнения в процессе. Процесс может иметь от одного потока до нескольких потоков. Когда процесс начинается, ему назначается память и ресурсы. Каждый поток в процессе разделяет эту память и ресурсы. В однопоточных процессах процесс содержит один поток. Процесс и поток - это одно и то же, и происходит только одно. В многопоточных процессах процесс содержит более одного потока, и процесс выполняет несколько задач одновременно.
Механика многопроцессорной системы включает в себя легкие и тяжелые процессы:
В тяжеловесном процессе несколько процессов работают вместе параллельно. Каждый параллельный процесс имеет свое собственное адресное пространство памяти. Межпроцессное взаимодействие происходит медленно, поскольку процессы имеют разные адреса памяти. Переключение контекста между процессами обходится дороже. Процессы не делят память с другими процессами. Связь между этими процессами будет включать дополнительные коммуникационные механизмы, такие как сокеты или каналы.
В облегченном процессе, также называемом потоками. Потоки используются для разделения и разделения рабочей нагрузки. Потоки используют память процесса, которому они принадлежат. Связь между потоками может быть быстрее, чем связь между процессами, потому что потоки одного и того же процесса совместно используют память с процессом, которому они принадлежат. в результате связь между потоками очень проста и эффективна. Переключение контекста между потоками одного и того же процесса обходится дешевле. Потоки делят память с другими потоками того же процесса
Существует два типа потоков: потоки уровня пользователя и потоки уровня ядра. Потоки уровня пользователя избегают ядра и управляют работой самостоятельно. Потоки уровня пользователя имеют проблему, заключающуюся в том, что один поток может монополизировать временной интервал, тем самым истощая другие потоки в задаче. Потоки уровня пользователя обычно поддерживаются над ядром в пространстве пользователя и управляются без поддержки ядра. Ядро ничего не знает о потоках пользовательского уровня и управляет ими, как если бы они были однопоточными процессами. Таким образом, потоки пользовательского уровня очень быстрые, они работают в 100 раз быстрее, чем потоки ядра.
Потоки уровня ядра часто реализуются в ядре с использованием нескольких задач. В этом случае ядро планирует каждый поток в пределах временного интервала каждого процесса. Здесь, поскольку тик часов будет определять время переключения, задача с меньшей вероятностью захватывает временной интервал из других потоков в задаче. Потоки уровня ядра поддерживаются и управляются непосредственно операционной системой. Взаимосвязь между потоками уровня пользователя и потоками уровня ядра не является полностью независимой, фактически существует взаимодействие между этими двумя уровнями. В общем случае потоки пользовательского уровня могут быть реализованы с использованием одной из четырех моделей: модели «многие к одному», «один к одному», «многие ко многим» и двухуровневые. Все эти модели отображают потоки уровня пользователя в потоки уровня ядра и в разной степени вызывают взаимодействие между обоими уровнями.
Потоки против процессов
- Программа запускается как текстовый файл программного кода,
- Программа компилируется или интерпретируется в двоичном виде,
- Программа загружается в память,
- Программа становится одним или несколькими запущенными процессами.
- Процессы обычно не зависят друг от друга,
- В то время как потоки существуют как подмножество процесса.
- Потоки могут общаться друг с другом легче, чем процессы,
- Но потоки более уязвимы для проблем, вызванных другими потоками в том же процессе
Ссылки:
Понимание ядра Linux, 3-е издание
Больше 1 2 3 4 5
...............................................
Теперь давайте упростим все эти термины ( этот абзац с моей точки зрения ). Ядро - это интерфейс между программным и аппаратным обеспечением. Другими словами, ядро действует как мозг. Он манипулирует отношениями между генетическим материалом (то есть кодами и его производным программным обеспечением) и системами организма (то есть аппаратными средствами или мышцами).
Этот мозг (то есть ядро) посылает сигналы процессам, которые действуют соответственно. Некоторые из этих процессов похожи на мышцы (то есть нити), каждая мышца имеет свои собственные функции и задачи, но все они работают вместе, чтобы завершить рабочую нагрузку. Связь между этими нитями (то есть мышцами) очень эффективна и проста, поэтому они выполняют свою работу плавно, быстро и эффективно. Некоторые нити (то есть мышцы) находятся под контролем пользователя (например, мышцы наших рук и ног). Другие находятся под контролем мозга (например, мышцы живота, глаз, сердца, которые мы не контролируем).
Потоки пользовательского пространства избегают ядра и сами управляют задачами. Часто это называется «совместная многозадачность», и действительно, это как наши верхние и нижние конечности, это находится под нашим собственным контролем и работает все вместе для достижения работы (то есть упражнений или ...) и не нуждается в прямых приказах от мозг. С другой стороны, потоки Kernel-Space полностью контролируются ядром и его планировщиком.
...............................................
В ответ на ваши вопросы:
Всегда ли процесс реализуется на основе одного или нескольких легких процессов? Рисунок 3.4, кажется, говорит да. Почему на рисунке 3.5 (а) показаны процессы непосредственно поверх процессоров?
Да, существуют легкие процессы, называемые потоками, и тяжелые процессы.
Для тяжеловесного процесса (вы можете назвать его процессом сигнального потока) требуется, чтобы сам процессор выполнял больше работы, чтобы упорядочить его выполнение, поэтому на рисунке 3.5 (а) показаны процессы непосредственно поверх процессоров.
Всегда ли легкий процесс реализован на основе потока ядра? Рисунок 3.4, кажется, говорит да. Почему на рис. 3.5 (b) показаны легковесные процессы непосредственно поверх процессов?
Нет, процессы легкого веса делятся на две категории: процессы на уровне пользователя и на уровне ядра, как упоминалось выше. Процесс пользовательского уровня опирается на собственную библиотеку для обработки своих задач. Само ядро планирует процесс на уровне ядра. Потоки пользовательского уровня могут быть реализованы с использованием одного из четырех смоделированных: многие-к-одному, один-к-одному, многие-ко-многим и двухуровневые. Все эти модели отображают потоки уровня пользователя в потоки уровня ядра.
Являются ли потоки ядра единственными объектами, которые могут быть запланированы?
Нет, потоки уровня ядра создаются самим ядром. Они отличаются от потоков уровня пользователя тем, что потоки уровня ядра не имеют ограниченного адресного пространства. Они живут исключительно в пространстве ядра, никогда не переключаясь на царство пользователей. Однако они являются полностью планируемыми и выгружаемыми объектами, как и обычные процессы (примечание: для важных действий ядра можно отключить почти все прерывания). Целью собственных потоков ядра является главным образом выполнение обязанностей по обслуживанию системы. Только ядро может запустить или остановить поток ядра. С другой стороны, процесс пользовательского уровня может планировать сам, основываясь на собственной библиотеке, и в то же время он может планироваться ядром на основе двухуровневых моделей и моделей «многие ко многим» (упомянутых выше),
Легкие процессы запланированы только косвенно через планирование основных потоков ядра?
Потоки ядра контролируются самим планировщиком ядра. Поддержка потоков на уровне пользователя означает, что есть библиотека уровня пользователя, которая связана с приложением, и эта библиотека (не ЦП) обеспечивает все управление в поддержке времени выполнения для потоков. Он будет поддерживать структуры данных, необходимые для реализации абстракции потока, и обеспечивать всю синхронизацию планирования и другие механизмы, необходимые для принятия решения об управлении ресурсами для этих потоков. Теперь некоторые процессы потока пользовательского уровня могут быть отображены в базовые потоки уровня ядра, и это включает в себя отображение один-к-одному, один-ко-многим и многие-ко-многим.
Запланированы ли процессы только косвенно через планирование базовых облегченных процессов?
Это зависит от того, является ли это тяжелым или легким процессом. Тяжелые процессы, запланированные самим ядром. Легким процессом можно управлять на уровне ядра и на уровне пользователя.