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

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

Процесс также инкапсулирует стек процесса, который содержит временные данные (такие как параметры функции, адреса возврата и локальные переменные), это динамическая часть состояния процесса, которая увеличивается и уменьшается во время выполнения в Last- Заказ в порядке поступления. Предположим, мы выполняем функцию «A» и хотим вызвать другую функцию «B» из этой функции, для этого мы должны сохранить наше текущее состояние (состояние функции «A») в стек и перейти к выполнению функции «B». », После выполнения функции« B »состояние предыдущей функции (« A »), из которой была вызвана функция« B », восстанавливается сверху стека, и функция« A »может продолжить свое выполнение с этого оставшаяся инструкция по изменению (счетчик программы также был сохранен).

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

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

Все процессы могут не нуждаться во всем адресном пространстве, поскольку одновременно может выполняться много процессов, и у нас может не хватать места в физической памяти (то есть в ОЗУ). Чтобы справиться с этой ситуацией, операционная система динамически решает, какая часть адресного пространства будет присутствовать в физической памяти. Несколько процессов могут совместно использовать физическую память, временно переставляя некоторую часть своего адресного пространства на диск, эта часть адресного пространства будет возвращена в память, когда это необходимо. Таблица страниц поддерживает отображение виртуального адреса на физический адрес (RAM или Disk), а также проверяет, разрешено ли выполнение конкретного запроса доступа к памяти со стороны процесса.

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

Блок управления процессом (PCB)

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

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

Предположим, ОС управляет двумя процессами p1 и p2, в настоящее время p1 работает, а p2 неактивен, их печатные платы хранятся где-то в памяти. Текущий процесс p1 означает, что регистры CPU содержат значения, которые соответствуют состоянию p1. Через некоторое время предположим, что ОС решает прервать p1, поэтому ОС обновит все поля информации о состоянии процесса p1, включая регистры CPU, на печатной плате p1. После этого ОС восстановит печатную плату p2 из памяти, т.е.ОС обновит весь регистр ЦП с печатной платы p2 и начнет выполнение процесса p2. Через некоторое время, если процесс p2 будет прерван, PCB p1 будет восстановлена, и регистры CPU будут обновлены со значения PCB p1, и p1 начнет выполнение с той же точки, где оно было прервано ранее операционной системой. Каждый раз, когда выполняется такая подкачка, мы называем это переключением контекста.

Переключение контекста

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

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

Жизненный цикл процесса

  • Новое: это начальное состояние при первом запуске / создании процесса. В этом состоянии ОС будет выполнять управление доступом, а ОС будет выделять и инициировать блок управления процессом и некоторые дополнительные ресурсы. После этого состояние процесса меняется на «Готово».
  • Состояние готовности: процесс ожидает в очереди для назначения процессору. Готовые процессы ждут, пока операционная система выделит им процессор, чтобы они могли работать. Процесс может перейти в это состояние из состояния запуска, из состояния выполнения или из состояния ожидания.
  • Состояние выполнения: после того, как процесс был назначен процессору планировщиком ОС, состояние процесса устанавливается на «выполняется», и процессор выполняет свои инструкции. Из этого состояния может произойти ряд вещей: запущенный процесс может быть прерван, произойдет переключение контекста, и запущенный процесс вернется в состояние готовности. Другая возможность заключается в том, что запущенному процессу необходимо выполнить некоторые длительные операции, такие как чтение данных с диска или ожидание некоторых событий, возможно, некоторого таймера или ввода с клавиатуры, в это время процесс переходит в состояние ожидания, когда происходит событие. или операция ввода-вывода завершится, процесс снова станет готовым. Наконец, когда процесс завершает все операции в программе или когда он обнаруживает некоторую ошибку, он вернет соответствующий код выхода, и процесс будет завершен.
  • Состояние завершения: когда процесс завершает свое выполнение или обнаруживает ошибку, он переводится в состояние завершения, где ожидает удаления из основной памяти.

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

В операционной системе процесс может создавать дочерний процесс. Следовательно, все процессы происходят из одного корня, в котором процесс создания является родительским процессом, а созданный процесс является дочерним процессом этого процесса. После завершения процесса начальной загрузки и загрузки операционной системы будет создан некоторый начальный процесс. Когда пользователь входит в систему, создается процесс пользовательской оболочки, и когда пользователь вводит команду (emacs, nano и т. Д.), Из этого родительского процесса оболочки создается новый процесс. Итак, окончательные отношения выглядят как дерево.

Механизм создания процесса

Большинство операционных систем поддерживают два основных механизма создания процессов.

  • Вилка: с помощью этого механизма операционная система создаст новый дочерний процесс с PCB, а затем скопирует все значения родительской PCB на дочернюю PCB. После этого и дочерний, и родительский процесс продолжают выполнение инструкции сразу после вызова fork, потому что оба процесса содержат точно такие же значения на своей плате, которая также включает счетчик программ.
  • Exec: заменяет изображение ребенка и загружает новую программу. Дочерняя печатная плата содержит новое инициализированное значение, и программа выполняется с самого начала.

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

Планирование ЦП

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

Чтобы управлять процессором, операционная система должна иметь возможность вытеснения, то есть прерывания текущего запущенного процесса и сохранения текущего контекста. Эта операция называется вытеснением. Затем операционная система должна запустить алгоритм планирования, чтобы выбрать следующий процесс для запуска. И наконец, как только процесс выбран, операционная система должна отправить этот процесс процессору и переключиться на его контекст. ОС должна следить за тем, чтобы ЦП тратит больше времени на выполнение процессов, а не на выполнение алгоритма планирования, диспетчеризации, прерывания или выполнения некоторых других операций ОС. Следовательно, важно иметь эффективный дизайн, а также эффективную реализацию различных задействованных алгоритмов, например планирования. Кроме того, эффективные структуры данных, которые требуются для представления ожидающих процессов в очереди готовности, или любой другой информации (например, о приоритете процессов, о том, как долго алгоритм работал в прошлом), которые важны для принятия решений по планированию.

Межпроцессного взаимодействия

Многие приложения структурированы как несколько процессов, поэтому эти несколько процессов должны взаимодействовать друг с другом для достижения общей цели. Поскольку мы уже изучили, что операционная система изолирует процессы друг от друга, чтобы защитить пространство памяти друг друга, ОС контролирует количество процессора, которое получает каждое приложение. Таким образом, требуется создать какой-то механизм связи, не жертвуя защитой. Эти механизмы называются межпроцессным взаимодействием (IPC). Их задача - передавать данные / информацию между адресными пространствами без ущерба для защиты и изоляции, которые обеспечивает ОС. Поскольку обмен данными может отличаться от непрерывного потока обмена данными, периодического обмена данными, обмена отдельными частями данных и т. Д., Механизм IPC должен быть гибким с хорошей производительностью.

  • IPC с передачей сообщений: в этом механизме операционная система устанавливает канал связи (например, общий буфер), и процессы взаимодействуют друг с другом, записывая или отправляя данные в канал и считывая или получая данные из канал.
  • Преимущество. Преимущество этого механизма в том, что ОС управляет как записью, так и чтением данных из канала и предоставляет API. Таким образом, оба процесса используют одни и те же API.
  • Недостаток. Одним из недостатков этого механизма является то, что данные должны сначала копироваться из отправляемого пространства памяти процесса в общий канал, а затем обратно в получаемое пространство памяти процесса.
  • IPC с общей памятью. В этом механизме ОС создает канал с общей памятью, а затем сопоставляет его с пространством памяти каждого процесса, а затем процессам разрешается читать и записывать в канал, как если бы они делали это. любое пространство памяти, которое является частью их пространства памяти.
  • Преимущество: Преимущество этого процесса в том, что ОС не участвует в обмене данными.
  • Недостаток: поскольку ОС не участвует в обмене данными, этот механизм не поддерживает фиксированные и четко определенные API-интерфейсы для чтения и записи данных, поэтому этот механизм подвержен ошибкам, и иногда разработчикам приходится заново реализовывать код.

Резюме

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

Далее: Потоки и параллелизм