<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_%28%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%29</id>
	<title>Процесс (информатика) - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_%28%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0%29"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)&amp;action=history"/>
	<updated>2026-07-18T06:03:43Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)&amp;diff=38754&amp;oldid=prev</id>
		<title>imported&gt;Alex NB OT: замена имён и значений устаревшего неподдерживаемого InternetArchiveBot формата параметров доступности ссылок (1), замена устаревших имён параметров (1)</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)&amp;diff=38754&amp;oldid=prev"/>
		<updated>2025-07-16T10:13:48Z</updated>

		<summary type="html">&lt;p&gt;замена имён и значений устаревшего неподдерживаемого InternetArchiveBot формата параметров доступности ссылок (1), замена устаревших имён параметров (1)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Значения|Процесс}}&lt;br /&gt;
[[Файл:Process states.ru.svg|thumb|right|300px|Статусы процессов в современных ОС.]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Проце́сс&amp;#039;&amp;#039;&amp;#039; — это идентифицируемая абстракция совокупности взаимосвязанных системных ресурсов на основе отдельного и независимого виртуального адресного пространства в контексте которой организуется выполнение потоков. Стандарт ISO 9000:2000 Definitions определяет процесс как совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие.&lt;br /&gt;
&lt;br /&gt;
Компьютерная программа сама по себе — лишь пассивная последовательность инструкций. В то время как процесс — непосредственное выполнение этих инструкций.&lt;br /&gt;
&lt;br /&gt;
Также, процессом называют выполняющуюся программу и все её элементы: [[адресное пространство]], [[Глобальная переменная|глобальные переменные]], [[Регистр (цифровая техника)|регистры]], [[стек]], открытые [[файл]]ы и так далее.&lt;br /&gt;
&lt;br /&gt;
== Представление процесса ==&lt;br /&gt;
Обычно процесс в вычислительной системе представлен (также говорят, «владеет») следующими ресурсами:&lt;br /&gt;
&lt;br /&gt;
* образом [[Исполнимый модуль|исполняемого]] [[Машинный код|машинного кода]], ассоциированного с [[Компьютерная программа|программой]];&lt;br /&gt;
&lt;br /&gt;
* {{якорь|Память процесса}} памятью (обычно некоторой областью [[Виртуальная память|виртуальной памяти]]), которая включает в себя:&lt;br /&gt;
** исполняемый код;&lt;br /&gt;
** входные и выходные данные процесса;&lt;br /&gt;
** [[стек вызовов]] (для отслеживания активных [[Подпрограмма|подпрограмм]]);&lt;br /&gt;
** [[Куча (память)|кучу]] (хип) для хранения промежуточных результатов вычислений, генерируемых во время выполнения;&lt;br /&gt;
&lt;br /&gt;
* [[Дескриптор сегмента|дескрипторами]] ресурсов [[Операционная система Windows 9x|операционной системы]], выделенными для процесса, например, [[Файловый дескриптор|файл]]&lt;br /&gt;
* [[Файловый дескриптор|файловыми дескрипторами]] (в терминологии [[Операционная система|ОС]] [[Unix-подобная операционная система|Unix]]) или «хэндлами» (в терминологии [[Операционная система|ОС]] [[Windows]]);&lt;br /&gt;
&lt;br /&gt;
* атрибутами [[Компьютерная безопасность|безопасности]], такими как владелец и набор [[Полномочие (информатика)|полномочий процесса]] (допустимых операций);&lt;br /&gt;
&lt;br /&gt;
* состоянием [[Процессор эффектов|процессора]] ([[Переключение контекста|контекстом]]), таким как:&lt;br /&gt;
** содержимое [[Регистр процессора|регистров]];&lt;br /&gt;
** схема преобразования виртуальных адресов в физические;&lt;br /&gt;
** и т. д.&lt;br /&gt;
: Контекст текущего процесса выгружается в память, когда выполняется переключение на другой процесс&amp;lt;ref&amp;gt;{{книга&lt;br /&gt;
 | заглавие = Современные операционные системы&lt;br /&gt;
 | оригинал = Modern Operating Systems&lt;br /&gt;
 | автор = Э. Танненбаум&lt;br /&gt;
 | издание = 2-е изд&lt;br /&gt;
 | место = СПб.&lt;br /&gt;
 | издательство = Питер&lt;br /&gt;
 | год = 2002&lt;br /&gt;
 | isbn = 5-318-00299-4&lt;br /&gt;
 | страницы = 59, 97&lt;br /&gt;
 | страниц = 1040&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Операционная система хранит большую часть информации о процессах в таблице процессов.&lt;br /&gt;
&lt;br /&gt;
В операционных системах, поддерживающих [[Поток выполнения|потоки выполнения]] (нити), потоки также владеют собственными ресурсами. Обычно это только состояние процессора, хотя потоки могут использовать и другие ресурсы.&lt;br /&gt;
&lt;br /&gt;
Для снижения вероятности влияния процессов друг на друга и вероятности отказа [[Операционная система Windows 9x|системы]] (например, [[Взаимная блокировка|взаимных блокировок]] или [[Пробуксовка (информатика)|пробуксовки]]) [[операционная система]] обеспечивает изоляцию процессов и выделяет необходимые им ресурсы. Также [[операционная система]] предоставляет механизмы для [[Межпроцессное взаимодействие|взаимодействия процессов]] безопасными и предсказуемыми способами.&lt;br /&gt;
&lt;br /&gt;
=== Представление процесса в памяти ===&lt;br /&gt;
В данном разделе рассмотрено представление процесса в памяти операционной системы Linux и архитектуры [[x86]]. Подобное представление мало отличается от многих других многозадачных операционных систем и архитектур. Например в [[amd64]], наследнике x86, стек вызовов точно так же растёт сверху вниз, но размер адресного пространства увеличен до 2&amp;lt;sup&amp;gt;48&amp;lt;/sup&amp;gt; байт.&amp;lt;ref name=&amp;quot;amd-24593&amp;quot;&amp;gt;{{cite web&lt;br /&gt;
 |url          = http://support.amd.com/TechDocs/24593.pdf&lt;br /&gt;
 |title        = Volume 2: System Programming&lt;br /&gt;
 |author       = AMD Corporation&lt;br /&gt;
 |date         = 2016-12&lt;br /&gt;
 |work         = AMD64 Architecture Programmer&amp;#039;s Manual&lt;br /&gt;
 |publisher    = AMD Corporation&lt;br /&gt;
 |format       = PDF&lt;br /&gt;
 |access-date   = 2017-03-25&lt;br /&gt;
 |archive-date = 2018-07-13&lt;br /&gt;
 |archive-url  = https://web.archive.org/web/20180713145424/https://support.amd.com/TechDocs/24593.pdf&lt;br /&gt;
 |url-status     = live&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
[[Файл:C-memlayout-ru.svg|thumb|300px|Представление программы в памяти в пространстве пользователя]]&lt;br /&gt;
Linux использует [[плоская модель памяти|плоскую модель памяти]], и поэтому в данной архитектуре каждому процессу доступно 2&amp;lt;sup&amp;gt;32&amp;lt;/sup&amp;gt; байт памяти. Вся [[виртуальная память]] делится на [[пространство пользователя]] и [[пространство ядра]]. Пространство ядра занимает один гигабайт памяти, начиная с самого старшего адреса. Всё остальное пространство, то есть, три гигабайта отведено под пространство пользователя.&lt;br /&gt;
&lt;br /&gt;
На схеме справа показано представление пользовательского пространства любого процесса. Пространство ядра едино для всех процессов, так как в операционной системе может существовать только один экземпляр ядра. После запуска программы в оперативную память импортируются команды процессора (машинный код) и инициализированные данные. В то же время в старшие адреса импортируются аргументы запуска, а также переменные окружения.&lt;br /&gt;
&lt;br /&gt;
В области инициализированных данных хранятся данные, доступные только для чтения. Это могут быть, например, строковые литералы.&lt;br /&gt;
&lt;br /&gt;
В области неинициализированных данных, как правило, хранятся глобальные переменные.&lt;br /&gt;
&lt;br /&gt;
Куча (heap) используется для выделения памяти во время работы программы. В Linux для этого существует системный вызов &amp;lt;code&amp;gt;mmap&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Область стека используется для [[Стековый кадр|вызова процедур]].&lt;br /&gt;
&lt;br /&gt;
Также немаловажной деталью является наличие [[ASLR|случайного отступа]] между стеком и верхней областью, а также между областью инициализированных данных и кучей. Делается это в целях безопасности, например, для предотвращения встраивания в стек других функций.&lt;br /&gt;
&lt;br /&gt;
[[Динамическая библиотека|Динамически подключаемые]] библиотеки и отображения файлов располагаются между стеком и кучей.&lt;br /&gt;
&lt;br /&gt;
== Иерархия процессов ==&lt;br /&gt;
В многозадачных операционных системах появилась возможность работать одновременно с несколькими процессами. Операционные системы с [[Вытесняющая многозадачность|вытесняющей многозадачностью]] позволяли добиться ощущения работы нескольких процессов одновременно. При этом потребовались средства управления несколькими процессами.&lt;br /&gt;
&lt;br /&gt;
=== Unix ===&lt;br /&gt;
[[Unix]] — одна из первых многозадачных ОС. Каждый процесс имеет уникальный числовой идентификатор PID. Процессы в ней имеют [[Дерево (теория графов)|древовидную]] иерархию, где корнем является процесс [[init]] c PID 1. Новый процесс можно создать системным вызовом &amp;lt;code&amp;gt;fork&amp;lt;/code&amp;gt;, он будет являться точной копией [[Родительский процесс|процесса-родителя]]. Любой процесс кроме init всегда имеет процесс-родитель (атрибут PPID ({{lang-en|Parent PID}})); процессы, родитель которых завершил свою работу, становятся [[Дочерний процесс|дочерними процессами]] init.&lt;br /&gt;
&lt;br /&gt;
Процессы также объединяются в &amp;#039;&amp;#039;&amp;#039;группы&amp;#039;&amp;#039;&amp;#039;. За управление идентификатором группы (PGID) отвечают системные вызовы &amp;lt;code&amp;gt;setpgid&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;getpgid&amp;lt;/code&amp;gt;. PGID равен PID’у лидера группы. Процесс-потомок наследует группу от родителя. Группы используются для [[Управление заданиями|управления заданиями]].&lt;br /&gt;
&lt;br /&gt;
Группы процессов объединяются в &amp;#039;&amp;#039;&amp;#039;сессии&amp;#039;&amp;#039;&amp;#039;. За создание новой сессии отвечает системный вызов &amp;lt;code&amp;gt;setsid&amp;lt;/code&amp;gt;. Процессы из одной группы не могут принадлежать разным сессиям. Поэтому лидер группы не может стать лидером сессии: при создании сессии дочерний процесс автоматически становится лидером сессии и лидером новой группы. Сессии используются для отслеживания всех процессов, запущенных после входа пользователя.&lt;br /&gt;
&lt;br /&gt;
Каждая сессия может иметь не более одного &amp;#039;&amp;#039;&amp;#039;[[TTY-абстракция|управляющего]] [[Компьютерный терминал|терминала]]&amp;#039;&amp;#039;&amp;#039;. Эмулятор [[псевдотерминал|терминала]] имеет дочерним процессом [[Командная оболочка UNIX|оболочку команд]] (чаще всего [[bash]] или sh), которая перед запуском становится лидером новой сессии и устанавливает себе управляющим терминал.&lt;br /&gt;
&lt;br /&gt;
== Создание процесса ==&lt;br /&gt;
Простейшей операционной системе не требуется создание новых процессов, поскольку внутри них работает одна-единственная программа, запускаемая во время включения устройства. В более сложных системах надо создавать новые процессы. Обычно они создаются:&lt;br /&gt;
* При запуске [[операционная система|ОС]] (например, когда происходит [[инициализация]] [[Драйвер|драйверов устройств]]),&lt;br /&gt;
* При появлении запроса на создание процесса — происходит в случае, если работающий процесс выполняет [[системный вызов]].&lt;br /&gt;
&lt;br /&gt;
== Состояния процесса ==&lt;br /&gt;
Процесс, помимо главного рабочего состояния, может находиться в других состояниях, например ожидания.&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
[[Файл:Unix processes states.PNG|thumb|right|upright=1.5|Граф переходов]]&lt;br /&gt;
Процесс в ОС [[Linux]] может находиться в одном из следующих состояний:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;R&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;(running/runnable)&amp;#039;&amp;#039; — процесс исполняется либо ожидает своей очереди исполняться;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;D&amp;#039;&amp;#039;&amp;#039; — непрерываемый сон — процесс ожидает определённого события;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039; — прерываемый сон — процесс ожидает определённого события либо сигнала;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;T&amp;#039;&amp;#039;&amp;#039; — остановка — процесс приостановлен, например, отладчиком;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Z&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;([[Процесс-зомби|zombie]])&amp;#039;&amp;#039; — процесс уже завершился, но ещё не передал родительскому процессу свой код возврата.&lt;br /&gt;
&lt;br /&gt;
== Завершение процесса ==&lt;br /&gt;
Минимум 2 этапа завершения:&lt;br /&gt;
# Процесс удаляется из всех [[Очередь (программирование)|очередей]] [[Диспетчер операционной системы|планирования]], то есть [[Операционная система|ОС]] больше не планирует выделение каких-либо ресурсов процессу,&lt;br /&gt;
# Сбор статистики о потреблённых процессом ресурсах с последующим удалением его из [[Оперативная память|памяти]].&lt;br /&gt;
Причины завершения процесса:&lt;br /&gt;
* Обычный выход,&lt;br /&gt;
* Выход по [[Исключение (программирование)|исключению]] или ошибке,&lt;br /&gt;
* Недостаточный объём [[Компьютерная память|памяти]],&lt;br /&gt;
* Превышение лимита отведённого программе времени,&lt;br /&gt;
* Выход за пределы отведённой области [[Компьютерная память|памяти]],&lt;br /&gt;
* Неверная команда (данные программы интерпретируются как инструкции для процессора),&lt;br /&gt;
* Ошибка защиты (выполнение непривилегированной команды),&lt;br /&gt;
* Завершение родительского процесса,&lt;br /&gt;
* Ошибка [[Ввод-вывод|ввода-вывода]],&lt;br /&gt;
* Вмешательство [[Сисоп|оператора]].&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Родительский процесс]];&lt;br /&gt;
* {{нп1|Дочерний процесс||en|Child process}};&lt;br /&gt;
* {{нп1|Группа процессов||en|Process group}};&lt;br /&gt;
* [[Фоновый процесс]];&lt;br /&gt;
* [[Процесс-зомби]];&lt;br /&gt;
* [[Процесс-сирота]];&lt;br /&gt;
* [[Легковесный процесс]].&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* &amp;#039;&amp;#039;[[Таненбаум, Эндрю|Э. Таненбаум]], [[Вудхалл, А.|А. Вудхалл]].&amp;#039;&amp;#039; «Операционные системы: Разработка и реализация.» — СПб.: 2006. — ISBN 5-469-00148-2&lt;br /&gt;
* &amp;#039;&amp;#039;[[Таненбаум, Эндрю|Э. Таненбаум]].&amp;#039;&amp;#039; «Современные операционные системы. 2-е изд.» — СПб.: Питер, 2005. — 1038 с.: ил. ISBN 5-318-00299-4&lt;br /&gt;
&lt;br /&gt;
{{Аспекты операционных систем}}&lt;br /&gt;
{{Параллельные вычисления}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Операционная система]]&lt;br /&gt;
[[Категория:Потоки выполнения]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Alex NB OT</name></author>
	</entry>
</feed>