Процесс (информатика)![]() Проце́сс — это идентифицируемая абстракция совокупности взаимосвязанных системных ресурсов на основе отдельного и независимого виртуального адресного пространства в контексте которой организуется выполнение потоков. Стандарт ISO 9000:2000 Definitions определяет процесс как совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие. Компьютерная программа сама по себе — лишь пассивная последовательность инструкций. В то время как процесс — непосредственное выполнение этих инструкций. Также, процессом называют выполняющуюся программу и все её элементы: адресное пространство, глобальные переменные, регистры, стек, открытые файлы и так далее. Представление процессаОбычно процесс в вычислительной системе представлен (также говорят, «владеет») следующими ресурсами:
Операционная система хранит большую часть информации о процессах в таблице процессов. В операционных системах, поддерживающих потоки выполнения (нити), потоки также владеют собственными ресурсами. Обычно это только состояние процессора, хотя потоки могут использовать и другие ресурсы. Для снижения вероятности влияния процессов друг на друга и вероятности отказа системы (например, взаимных блокировок или пробуксовки) операционная система обеспечивает изоляцию процессов и выделяет необходимые им ресурсы. Также операционная система предоставляет механизмы для взаимодействия процессов безопасными и предсказуемыми способами. Представление процесса в памятиВ данном разделе рассмотрено представление процесса в памяти операционной системы Linux и архитектуры x86. Подобное представление мало отличается от многих других многозадачных операционных систем и архитектур. Например в amd64, наследнике x86, стек вызовов точно так же растёт сверху вниз, но размер адресного пространства увеличен до 248 байт.[2] ![]() Linux использует плоскую модель памяти, и поэтому в данной архитектуре каждому процессу доступно 232 байт памяти. Вся виртуальная память делится на пространство пользователя и пространство ядра. Пространство ядра занимает один гигабайт памяти, начиная с самого старшего адреса. Всё остальное пространство, то есть, три гигабайта отведено под пространство пользователя. На схеме справа показано представление пользовательского пространства любого процесса. Пространство ядра едино для всех процессов, так как в операционной системе может существовать только один экземпляр ядра. После запуска программы в оперативную память импортируются команды процессора (машинный код) и инициализированные данные. В то же время в старшие адреса импортируются аргументы запуска, а также переменные окружения. В области инициализированных данных хранятся данные, доступные только для чтения. Это могут быть, например, строковые литералы. В области неинициализированных данных, как правило, хранятся глобальные переменные. Куча (heap) используется для выделения памяти во время работы программы. В Linux для этого существует системный вызов Область стека используется для вызова процедур. Также немаловажной деталью является наличие случайного отступа между стеком и верхней областью, а также между областью инициализированных данных и кучей. Делается это в целях безопасности, например, для предотвращения встраивания в стек других функций. Динамически подключаемые библиотеки и отображения файлов располагаются между стеком и кучей. Иерархия процессовВ многозадачных операционных системах появилась возможность работать одновременно с несколькими процессами. Операционные системы с вытесняющей многозадачностью позволяли добиться ощущения работы нескольких процессов одновременно. При этом потребовались средства управления несколькими процессами. UnixUnix — одна из первых многозадачных ОС. Каждый процесс имеет уникальный числовой идентификатор PID. Процессы в ней имеют древовидную иерархию, где корнем является процесс init c PID 1. Новый процесс можно создать системным вызовом Процессы также объединяются в группы. За управление идентификатором группы (PGID) отвечают системные вызовы Группы процессов объединяются в сессии. За создание новой сессии отвечает системный вызов Каждая сессия может иметь не более одного управляющего терминала. Эмулятор терминала имеет дочерним процессом оболочку команд (чаще всего bash или sh), которая перед запуском становится лидером новой сессии и устанавливает себе управляющим терминал. Создание процессаПростейшей операционной системе не требуется создание новых процессов, поскольку внутри них работает одна-единственная программа, запускаемая во время включения устройства. В более сложных системах надо создавать новые процессы. Обычно они создаются:
Состояния процессаПроцесс, помимо главного рабочего состояния, может находиться в других состояниях, например ожидания. LinuxПроцесс в ОС Linux может находиться в одном из следующих состояний:
Завершение процессаМинимум 2 этапа завершения:
Причины завершения процесса:
См. также
Примечания
Литература
|
Portal di Ensiklopedia Dunia