В вычислительной технике процесс — это экземпляр компьютерной программы , исполняемый одним или несколькими потоками . Существует множество различных моделей процессов, некоторые из которых имеют небольшой вес, но почти все процессы (даже целые виртуальные машины ) основаны на процессе операционной системы (ОС), который включает в себя программный код, назначенные системные ресурсы, физические и логические права доступа. и структуры данных для инициирования, контроля и координации исполнительной деятельности. В зависимости от ОС процесс может состоять из нескольких потоков выполнения, которые одновременно выполняют инструкции . [1] [2]
Компьютерная программа представляет собой пассивный набор инструкций, обычно хранящихся в файле на диске, а процесс — это выполнение этих инструкций после загрузки с диска в память. С одной и той же программой могут быть связаны несколько процессов; например, открытие нескольких экземпляров одной и той же программы часто приводит к выполнению более чем одного процесса.
Многозадачность — это метод, позволяющий нескольким процессам совместно использовать процессоры (ЦП) и другие системные ресурсы. Каждый процессор (ядро) одновременно выполняет один процесс. Однако многозадачность позволяет каждому процессору переключаться между выполняемыми задачами, не дожидаясь завершения каждой задачи ( вытеснение ). В зависимости от реализации операционной системы переключения могут выполняться, когда задачи инициируются и ждут завершения операций ввода-вывода , когда задача добровольно уступает место ЦП, при аппаратных прерываниях и когда планировщик операционной системы решает, что процесс истек. долю процессорного времени (например, с помощью планировщика Completely Fair ядра Linux ).
Распространенная форма многозадачности обеспечивается разделением времени ЦП , которое представляет собой метод чередования выполнения пользовательских процессов и потоков и даже независимых задач ядра – хотя последняя функция возможна только в вытесняющих ядрах, таких как Linux . Вытеснение имеет важный побочный эффект для интерактивных процессов, которым дан более высокий приоритет по отношению к процессам, связанным с ЦП, поэтому пользователям немедленно назначаются вычислительные ресурсы при простом нажатии клавиши или при перемещении мыши. Кроме того, такие приложения, как воспроизведение видео и музыки, имеют определенный приоритет в реальном времени, вытесняя любые другие процессы с более низким приоритетом. В системах с разделением времени переключения контекста выполняются быстро, что создает впечатление, что на одном процессоре одновременно выполняются несколько процессов. Такое, казалось бы, одновременное выполнение нескольких процессов называется параллелизмом .
В целях безопасности и надежности большинство современных операционных систем предотвращают прямое взаимодействие между независимыми процессами, обеспечивая строго опосредованное и контролируемое межпроцессное взаимодействие.
В общем, процесс компьютерной системы состоит из (или, как говорят, владеет ) следующих ресурсов:
Операционная система хранит большую часть этой информации об активных процессах в структурах данных, называемых блоками управления процессами . Любое подмножество ресурсов, обычно, по крайней мере, состояние процессора, может быть связано с каждым потоком процесса в операционных системах, которые поддерживают потоки или дочерние процессы.
Операционная система разделяет свои процессы и выделяет необходимые им ресурсы, чтобы они с меньшей вероятностью мешали друг другу и вызывали сбои системы (например, взаимоблокировку или сбой ). Операционная система также может предоставлять механизмы межпроцессного взаимодействия , позволяющие процессам взаимодействовать безопасным и предсказуемым образом.
Многозадачная операционная система может просто переключаться между процессами, создавая видимость одновременного выполнения множества процессов (то есть параллельно ), хотя на самом деле в любой момент времени на одном ЦП может выполняться только один процесс (если только ЦП не имеет несколько ядер). , то можно использовать многопоточность или другие подобные технологии). [а]
Обычно один процесс связывают с основной программой, а дочерние процессы — с любыми дополнительными параллельными процессами, которые ведут себя как асинхронные подпрограммы. Говорят, что процесс владеет ресурсами, одним из которых является образ его программы (в памяти). Однако в многопроцессорных системах многие процессы могут запускаться или совместно использовать одну и ту же реентерабельную программу в одном и том же месте памяти, но говорят, что каждый процесс владеет своим собственным образом программы.
Во встроенных операционных системах процессы часто называют «задачами» . Смысл «процесса» (или задачи) — это «что-то, что занимает время», в отличие от «памяти», которая является «чем-то, что занимает пространство». [б]
Приведенное выше описание применимо как к процессам, управляемым операционной системой, так и к процессам, определяемым исчислением процессов .
Если процесс запрашивает что-то, чего он должен ожидать, он будет заблокирован. Когда процесс находится в заблокированном состоянии , его можно переместить на диск, но это прозрачно в системе виртуальной памяти , где области памяти процесса в любой момент могут действительно находиться на диске, а не в основной памяти . Даже части активных процессов/задач (выполняющих программ) могут быть перенесены на диск, если эти части в последнее время не использовались. Не все части исполняемой программы и ее данные должны находиться в физической памяти, чтобы соответствующий процесс был активным.
Ядро операционной системы , обеспечивающее многозадачность, требует, чтобы процессы имели определенные состояния . Имена этих состояний не стандартизированы, но они имеют схожую функциональность. [1]
Когда процессам необходимо взаимодействовать друг с другом, они должны совместно использовать части своих адресных пространств или использовать другие формы межпроцессного взаимодействия (IPC). Например, в конвейере оболочки выходные данные первого процесса должны передаваться второму и так далее. Другой пример — задача, которая была разложена на взаимодействующие, но частично независимые процессы, которые могут выполняться одновременно (т. е. с использованием параллелизма или истинного параллелизма — последняя модель представляет собой частный случай одновременного выполнения и осуществима всякий раз, когда для выполнения задачи доступно несколько ядер ЦП). процессы, готовые к запуску).
Возможно даже, что два или более процессов будут выполняться на разных машинах, которые могут работать под управлением разных операционных систем (ОС), поэтому необходимы некоторые механизмы связи и синхронизации (называемые протоколами связи для распределенных вычислений) (например, интерфейс передачи сообщений { МПИ}).
К началу 1960-х годов программное обеспечение для управления компьютером превратилось из программного обеспечения для управления мониторами, например IBSYS , в программное обеспечение для исполнительного управления. Со временем компьютеры стали быстрее, а компьютерное время все еще не было ни дешевым, ни полностью использованным; такая среда сделала мультипрограммирование возможным и необходимым. Мультипрограммирование означает, что несколько программ выполняются одновременно . Поначалу из-за базовой однопроцессорной компьютерной архитектуры на одном процессоре работало более одной программы, и они использовали скудные и ограниченные аппаратные ресурсы; следовательно, параллелизм имел последовательный характер. В более поздних системах с несколькими процессорами несколько программ могут выполняться параллельно .
Программы состоят из последовательностей инструкций для процессоров. Один процессор может одновременно выполнять только одну инструкцию: одновременно выполнять больше программ невозможно. Программе может потребоваться какой-то ресурс , например устройство ввода, которое имеет большую задержку, или программа может начать какую-то медленную операцию, например отправку вывода на принтер. Это приведет к тому, что процессор будет «простаивать» (не использоваться). Чтобы процессор постоянно был занят, выполнение такой программы приостанавливается, и операционная система переключает процессор на запуск другой программы. Пользователю будет казаться, что программы выполняются одновременно (отсюда и термин «параллельно»).
Вскоре после этого понятие «программа» было расширено до понятия «исполняемая программа и ее контекст». Родилось понятие процесса, которое также стало необходимым с изобретением реентерабельного кода . Темы появились несколько позже. Однако с появлением таких концепций, как разделение времени , компьютерные сети и многопроцессорные компьютеры с общей памятью , старое «мультипрограммирование» уступило место настоящей многозадачности , многопроцессорности и, позднее, многопоточности .