<aside> 🧐 Процесс - некая абстракция, которая инкапсулирует в себе все ресурсы исполняемой программы (открытые файлы, файлы отображенные в память, их дескрипторы, потоки и т.д.)
Простыми словами
- (Рафика), процесс — идентифицируемая абстракция выполнения программы.
- (Гоши), процесс - исполняемая программа
Каждый процесс имеет:
P.S. Процесс владеет ресурсами, которые использует с помощью ОС.
</aside>
<aside> 😯 ОС запускает, останавливает и завершает процессы. А еще старается изолировать / защитить ресурсы одного процесса от другого.
Процесс содержит в себе (обычно):
- образ исполняемого машинного кода, ассоциированного с программой;
- память, которая включает в себя:
- исполняемый код;
- входные и выходные данные процесса;
- стек вызовов;
- куча для хранения промежуточных результатов вычислений, генерируемых во время выполнения;
- дескрипторы (идентификатор, ID) ресурсов операционной системы выделенными для процесса, например, файл.
- атрибуты безопасности, такие как владелец и набор полномочий процесса (допустимых операций);
- состояние процессора.
P.S. Процесс может запускать другие процессы, следующими способами:
Обычно существует первый главный процесс, который запускает все остальные (условный init).
<aside> 🧐 Поток/нить (thread) -
Общее назначение потоков — параллельное выполнение на процессоре двух или более различных задач. Как можно догадаться, потоки были первым шагом на пути к многозадачным ОС. Планировщик ОС, руководствуясь приоритетом потока, распределяет кванты времени между разными потоками и ставит потоки на выполнение.
</aside>
Простыми словами, нити/потоки - это абстракция последовательного выполнения кода.
<aside> 😯 Межпроцессное взаимодействие (Inter-process communication, IPC) — обмен данными между потоками одного или разных процессов.
Реализуется посредством механизмов, предоставляемых ядром ОС или процессом, использующим механизмы ОС и реализующим новые возможности IPC.
Может осуществляться как на одном компьютере, так и между несколькими компьютерами сети.
</aside>