Возможен ли SSH при входящем звонке с факс-модема?

Процессами управляет ядро. Ядру все равно, как программист распределяет переменные. Все, что он знает, - это то, что определенные блоки памяти принадлежат процессу. Среда выполнения C сопоставляет функции управления памятью C с функциями ядра: автоматические переменные попадают в блок памяти, называемый «стеком», а динамическое хранилище ( malloc и другие) помещаются в блок памяти, называемый «куча». Процесс вызывает системные вызовы, такие как sbrk и mmap , чтобы получить память с гранулярностью страниц MMU . Внутри этих блоков среда выполнения определяет, где разместить автоматические переменные и динамически выделяемые объекты.

Когда процесс умирает, ядро ​​обновляет свою таблицу управления памятью, чтобы записать для каждой страницы MMU, что она больше не используется процессом. Это происходит независимо от того, как завершается процесс, независимо от того, нарушен ли он сам (путем вызова системного вызова) или нет (убит сигналом). Страницы, которые больше не используются ни одним процессом, помечаются как повторно используемые.

Как правило, это хорошая гигиена - освободить динамически выделяемое хранилище, которое вы больше не используете, потому что никогда не знаешь, когда часть кода может быть повторно использована в долго выполняющейся программе. Но когда процесс умирает, операционная система освобождает все свои ресурсы: память, открытый файл и т. Д.

Единственные ресурсы, которые операционная система не очищает автоматически, - это ресурсы, которые предназначены для глобальной области видимости. операционная система, например временные файлы.

0
15.01.2019, 13:08
0 ответов

Теги

Похожие вопросы