Найти тему
163 подписчика

LINUX. ДВА ВИДА ЗОМБИ ПОТОКОВ

..
Набираем в поисковике в яндексе что такое зомби потоки/процессы: "Процесс-зомби — это дочерний процесс в Unix-системе, завершивший своё выполнение, но ещё присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код завершения."

Значит, какие два вида зомби потоков могут быть. И что значит "завершивший своё выполнение".

1й вид. Это поток, который ещё действительно существует, но перескочил в режим бездействия и выполняет ту часть программного кода, которая ничего не делает и не может ничего делать в принципе. Такой поток может возобновить своё нормальное выполнение если перескочит в свой рабочий режим.

2й вид. Этот вид зомби потока, это полностью уничтоженный поток в системе как сущность и он естественно уже не сможет "воскреснуть" как первый. Но он ещё зомби, а не мёртвый т.к. у него (как и у зомби потока 1го вида) сохранился рабочий объект с данными (см. схему), поэтому зомби, а не мёртвый.

Рассмотрим схему ниже. Независимо от тип зомби потока в системе есть объект данных (или их группа, пусть будет объект данных для простоты), который выделяется ядром операционной системы (ОС) для потока и этот объект не может быть уничтожен зомби потоком любого типа. Почему? Для того чтобы не завалилось ядро ОС. Так работает межпоточное/межпроцессорное взаимодействие. Если поток перед тем как стать зомби уничтожит свой объект данных, то ядро ОС не будет знать об этом и при попытке доступа к несуществующему объекту получит критическую ошибку доступа и будет аварийно остановлено.

Для того чтобы этого не происходило в объекте данных потока есть флаг "zmb". При переходе в зомби режим поток выставляет этот флаг, а ядро ОС читает. Ядро ОС само освобождает память под объект когда посчитает нужным. Первый тип зомби потока ядро ОС следует остановить самостоятельно. В ОС linux вроде используется 1й вид зомби потока.
LINUX. ДВА ВИДА ЗОМБИ ПОТОКОВ ..
1 минута