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

«Процесс - это экземпляр выполняемой компьютерной программы»

Процесс разделен на 4 основных раздела:

  1. Текст: относится к скомпилированному программному коду, считываемому из энергонезависимой памяти при запуске программы.
  2. Данные: хранит глобальные и статические переменные, которые выделяются и инициализируются перед выполнением main.
  3. Куча: используется для распределения динамической памяти во время выполнения.
  4. Стек: используется для хранения локальных переменных.

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

  1. Новое: программа, которая будет загружена ОС в основную память.
  2. Готов: после создания нового процесса он переводится в состояние готовности и находится в основной памяти. ЦП в настоящее время не выполняет инструкции процесса, но все необходимые ресурсы для запуска процесса доступны.
  3. Запуск: на основе алгоритма планирования ОС выбирает процесс из состояния готовности, а ЦП выполняет инструкции этого процесса.
  4. Ожидание: процесс ожидает, когда станет доступен какой-либо ресурс или пока не произойдет какое-либо событие. (например: ввод с клавиатуры, завершение дочернего процесса)
  5. Завершено: процесс завершил выполнение.

«Поток - это поток выполнения через код процесса»

Поток использует,

  1. Счетчик программ: для отслеживания того, какая инструкция будет выполняться следующей.
  2. Регистры: содержат текущие рабочие переменные.
  3. Стек: содержит историю выполнения.

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

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

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

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

Ссылки

  1. https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/3_Processes.html
  2. https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html
  3. https://www.javatpoint.com/os-process-states