Описание тега oneplus-3
Хотя это может быть немного неуклюже, можно сказать, что. Создание процесса состоит из двух этапов:
- Выделить у зоне (в основном, информацию о процессе, которая является доступной для ядра), заполнить запись в таблице процессов, инициализации всех компонентов, связанных с... в основном, просто создать еще один процесс ядра для управления. Это делается с помощью
вилки
системного вызова. Загрузите исполняемый файл в память. Это делается через
метод exec
(теперьдля execve
) системный вызов. Во время этого разговора, 3 Основной области памяти, называемой регионах заполнены:- В текстовой области, которая состоит из набора инструкций ваш процесс, чтобы следовать : в основном, ваша программа. Это содержится внутри исполняемого файла (компилятор пишет он основан на исходном коде).
- В данные области, который содержит инициализации данных (переменные со значениями, например,
int и аргумент myVar = 1
) и достаточно места для хранения unitialised данных ( БСС), таких как массив (например,тип char буфера[256]
). - В стеке области. Эта часть является немного сложнее объяснить, и как я сказал в комментарии, Мориса Баха делает это лучше, чем я когда-либо хотел (Глава 2, раздел 2.2.2). В принципе, стек-это динамическая область памяти, которая растет как функции называются, и сжимается, когда они возвращаются. При выполнении программы, в рамках соответствующей
основной
функции помещаются в стек. Эти кадры будут трещал, когда программа завершается.
Теперь, хотя это может показаться достаточно запустить программу, это не так. Теперь, когда процесс запущен, ядро все равно нужно поддерживать. Цитирую:
Как описано в главе 2, Время жизни процесса может быть концептуально разделены на множество состояний, описывающих процесс. (Дизайн операционная система Unix, Морис И. С. Баха, Глава 6 : структура процессов).
Это означает, что ваш процесс будет не всегда "работает", и не всегда в основное хранилище (то что вы называете "ОЗУ"). Например:
- Если процесс не переходит в спящий режим (т. к. это сказано в его тексте, или потому, что он ждет чего-то), то ядро может принять решение поменять его на длительное хранение (обычно свопа области). Когда это произойдет, ваш процесс уже не в основное хранилище ("в память/ОЗУ") : ядра спасла его, и сможем перенести ее, когда она была загружена обратно в основное хранилище.
- Если ваш процесс проходил достаточно времени, и ядро решает упредить его (и пусть другой процесс запустить, а не в течение некоторого времени), он может поменять его снова, если он не может удержать его в памяти.
Типичная жизни на процесс...
- Создано:
вилка
системных вызовов был использован. - Готов к запуску (в памяти) : инструкции и данные были загружены.
- Работает (переключение между пользователя и в режиме ядра, вероятно, в несколько раз..)
- Спать, просыпаться, спать, просыпаться, ...
- Выход (окончательный переход к работе в режиме ядра, зомбированного состояния, исчезновения).
Шаги 3 и 4 мая на самом деле переплетаются.
Отметим, что процессы являются одним из двух основных концепций UNIX-систем (вместе с файлами). По этой причине, невозможно охватить все, что о них в Q&A формате. Книги я постоянно цитирую В моем ответе является отличным ориентиром для UNIX-систем, и в то время как *уничтожает/Unix-подобной системы может отличаться в различных регионах, они по-прежнему полагаются на одни и те же понятия.