Ядро Linux в комментариях

       

Do_exit


do_exit принимает код выхода в качестве аргумента и содержит необычный символ NORET_TYPE перед возвращаемым ею типом. Хотя в настоящий момент NORET_TYPE (строка ) определяется в качестве пустого комментария — т.е. он не оказывает никакого действия — обычно он определяется как __volatile__, что указывает gcc что функция не выполнила возврат. В свете этого gcc выполняет некоторую дополнительную оптимизацию и подавляет предупреждение о том, что функция не выполнила возврат. Получив новое определение, NORET_TYPE больше не оказывает никакого влияния на работу компилятора, но при том сохраняется, поскольку по прежнему доносит полезную информацию до читателя.

Освобождает свои семафоры и другие структуры System V IPC, которые освещены в .

Освобождает свою выделенную память, что освещается в .

Освобождает свои выделенные файлы, как вскоре будет описано.

Освобождает свои данные файловой системы, что выходит за рамки этой книги.

Освобождает свою таблицу обработчика сигналов, что освещено в .

Выполняющая выход задача теперь входит в состояние TASK_ZOMBIE и ее код выхода запоминается родительским процессом для использования в будущем.

Вызывает функцию exit_notify (строка ), которая предупреждает родительский процесс завершающейся задачи и членов ее группы процессов о том, что этот процесс завершается.

Вызывает функцию schedule (строка ) для освобождения процессора. Это обращение к schedule никогда не выполняет возврат, поскольку оно переключает контекст на другой процесс и никогда не выполняет обратного переключения; поэтому это последний раз, когда завершающийся процесс получает доступ к процессору.



Содержание раздела