Процессы и программы
Процессом является экземпляр выполняемой программы. В данном посте мы подробно разберем это определение и вы узнаете разницу между программой и процессом.
Программа представляет собой файл, содержащий различную информацию о том, как сконструировать процесс в ходе выполнения. В эту информацию входит:
1.
Идентификационный признак двоичного формата.
Каждый программный файл включает в себя метаинформацию с описанием формата исполняемого файла. Это позволяет ядру корректно интерпретировать все остальные данные внутри файла.
Изначально для исполняемых файлов UNIX было предусмотрено два широко используемых формата: исходный формат
a.out (assembler output — вывод на языке ассемблера) и появившийся позже более сложный общий формат объектных файлов
COFF (Common Object File Format).
В настоящее время в большинстве реализаций UNIX (включая Linux) применяется формат исполняемых и компонуемых файлов
ELF (Executable and Linking Format), предоставляющий множество преимуществ по сравнению с предшественниками.
2.
Машинный код.
В нем закодирован алгоритм программы.
3.
Адрес входа в программу.
В нем указывается место той инструкции, с которой должно начаться выполнение программы.
4. Д
анные.
В программном файле содержатся значения, используемые для инициализации переменных, а также применяемые программой символьные константы (например, строки).
5.
Таблицы имен и переадресации.
В них дается описание расположений имен функций и переменных внутри программы. Эти таблицы предназначены для различных целей, включая отладку и разрешение имен в ходе выполнения программы (
динамическое связывание).
6.
Информация о совместно используемых библиотеках и динамической компоновке.
В программный файл включаются поля, где перечисляются совместно используемые библиотеки, которые программе потребуются в ходе выполнения, а также путевое имя динамического компоновщика, который должен применяться для загрузки этих библиотек.
Одна программа может использоваться для построения множества процессов, или же, если наоборот, во множестве процессов может быть запущена одна и та же программа.
Определение процесса, которое было дано в начале, можно переформулировать следующим образом: процесс является абстрактной сущностью, которая установлена ядром и которой, для выполнения программы, выделяются системные ресурсы.
С позиции ядра процесс состоит из памяти пользовательского пространства, внутри которой содержится код программы, а также из ряда структур данных, хранящих информацию о состоянии процесса.
Некоторая информация, записанная в структурах данных ядра, включает в себя: различные идентификаторы, связанные с процессом (PID, PPID ...), таблицы виртуальной памяти и дескрипторов открытых файлов, сведения, относящиеся к текущему рабочему каталогу, доставке и обработке сигналов, использованию и ограничениям ресурсов процесса.
#linuxcore #linux