Введение
Особое выполнение компьютерной программы
В вычислительной технике процесс — это экземпляр компьютерной программы, выполняемый одним или несколькими потоками. Существует множество различных моделей процессов, некоторые из которых являются легковесными, но почти все процессы (даже целые виртуальные машины) основаны на процессе операционной системы (ОС), который включает в себя программный код, выделенные системные ресурсы, физические и логические права доступа и структуры данных для запуска, управления и координации выполнения. В зависимости от ОС, процесс может состоять из нескольких потоков выполнения, которые одновременно выполняют инструкции. В то время как компьютерная программа — это пассивный набор инструкций, обычно хранящихся в файле на диске, процесс — это выполнение этих инструкций после загрузки с диска в память. Несколько процессов могут быть связаны с одной и той же программой; например, открытие нескольких экземпляров одной и той же программы часто приводит к выполнению более одного процесса. Многозадачность — это метод, позволяющий нескольким процессам совместно использовать процессоры (CPU) и другие системные ресурсы. Каждый процессор (ядро) выполняет один процесс за раз. Однако многозадачность позволяет каждому процессору переключаться между выполняемыми задачами, не дожидаясь завершения каждой из них (вытеснение). В зависимости от реализации операционной системы, переключение может выполняться при запуске задач и ожидании завершения операций ввода/вывода, когда задача добровольно уступает процессор, при аппаратных прерываниях и когда планировщик операционной системы решает, что процесс исчерпал свою справедливую долю процессорного времени (например, с помощью Completely Fair Scheduler ядра Linux). Распространенная форма многозадачности обеспечивается разделением времени процессора, которое является методом чередования выполнения процессов и потоков пользователей, а также независимых задач ядра — хотя последняя возможность реализуема только в ядрах с вытеснением, таких как Linux. Вытеснение имеет важный побочный эффект для интерактивных процессов, которым присваивается более высокий приоритет по сравнению с процессами, интенсивно использующими процессор, поэтому пользователи немедленно получают вычислительные ресурсы при простом нажатии клавиши или перемещении мыши. Кроме того, приложениям, таким как воспроизведение видео и музыки, предоставляется приоритет, близкий к реальному времени, вытесняя любые другие процессы с более низким приоритетом. В системах с разделением времени контекстные переключения выполняются быстро, что создает впечатление одновременного выполнения нескольких процессов на одном процессоре. Это кажущееся одновременное выполнение нескольких процессов называется конкуренцией (конкурентным выполнением). Для обеспечения безопасности и надежности большинство современных операционных систем предотвращают прямое взаимодействие между независимыми процессами, обеспечивая строго контролируемую межпроцессную связь.
Межпроцессная связь
Когда процессам необходимо взаимодействовать друг с другом, они должны разделять части своих адресных пространств или использовать другие формы межпроцессного взаимодействия (IPC). Например, в конвейере команд оболочки, вывод первого процесса должен передаваться на вход второго и так далее. Другой пример – задача, которая была разделена на взаимодействующие, но частично независимые процессы, способные выполняться одновременно (то есть, с использованием конкурентности, или истинного параллелизма – последняя модель является частным случаем конкурентного выполнения и реализуема, когда несколько ядер ЦП доступны для процессов, готовых к запуску). Более того, возможно, что два или более процессов будут выполняться на разных машинах, которые могут использовать разные операционные системы (ОС), поэтому требуются механизмы связи и синхронизации (называемые коммуникационными протоколами для распределённых вычислений) (например, интерфейс передачи сообщений (MPI)).
История
К началу 1960-х годов программное обеспечение для управления компьютером эволюционировало от программного обеспечения для управления монитором, например IBSYS, к программному обеспечению для исполнительного управления. Со временем компьютеры становились быстрее, однако время работы компьютера оставалось недешёвым и не использовалось в полной мере; такая ситуация сделала мультипрограммирование возможным и необходимым. Мультипрограммирование означает, что несколько программ выполняются одновременно. Первоначально более одной программы работала на одном процессоре из-за лежащей в основе архитектуры однопроцессорных компьютеров, и они совместно использовали ограниченные аппаратные ресурсы; в результате конкуренция носила последовательный характер. На более поздних системах с несколькими процессорами несколько программ могут выполняться одновременно параллельно. Программы состоят из последовательностей инструкций для процессоров. Один процессор может выполнять только одну инструкцию за раз: невозможно выполнять несколько программ одновременно. Программе может потребоваться ресурс, например, устройство ввода, имеющее большую задержку, или программа может начать медленную операцию, например, отправку данных на принтер. Это приводило к тому, что процессор оказывался "в режиме ожидания" (неиспользуемым). Чтобы процессор был постоянно занят, выполнение такой программы приостанавливалось, и операционная система переключала процессор на выполнение другой программы. Для пользователя создавалось впечатление, что программы выполняются одновременно (отсюда термин "параллельное"). Вскоре после этого понятие "программа" было расширено до понятия "выполняющаяся программа и её контекст". Так возникло понятие процесса, которое также стало необходимым с изобретением реентерабельного кода. Потоки появились несколько позже. Однако с развитием таких концепций, как разделение времени, компьютерные сети и многопроцессорные компьютеры с общей памятью, старое "мультипрограммирование" уступило место настоящей многозадачности, многопроцессорности и, позднее, многопоточности.