2016-06-16 3 views
2

Я видел, что некоторые вопросы SO пришли к выводу: каждый процесс имеет свой собственный стек ядра. Но как насчет этого кода?Каждый процесс имеет свой собственный стек ядра, не так ли?

main() 
{ 
    while(1) 
     ; 
} 

Или как насчет этого?

main() 
{ 
} 

Имеет ли эта программа также соответствующий стек ядра?

Подробнее: Для первого кода выше, я проверил его, как показано ниже. Нажмите Ctrl + C, чтобы остановить его, и посмотрите, что системное время меньше 1 мс, как показано ниже.

Я думаю, что я хочу знать, должен ли путь выполнения программы пространства пользователя проходить через пространство ядра? Для моего примера кода, я думаю, что сам процесс не проходит через пространство ядра, когда он выполняется, правда?

$ time ./a.out 
^C 

real 0m24.953s 
user 0m24.942s 
sys  0m0.000s 

ответ

1

Код приложения загружается (из исполняемого файла) в память ядром. Но Ядро не выполняет десассемблирование. Таким образом, ядро ​​не может определить, является ли код коротким или нет, использует ли он системные вызовы или нет, и так далее.

Из-за этого для любого приложения необходимо создать контекст полного выполнения. Таким образом, выделение стека ядра необходимо в любом случае.

Обратите внимание, что системный вызов не является единственным случаем, когда ядро ​​выполняет код в контексте процесса приложения. Ядро также обрабатывает предварительную обработку процесса, обработку исключений и требует стека ядра.

+0

Ядро создает объект процесса, который обеспечивает ** среду выполнения ** для пользовательского пространства. – Tsyvarev

+0

Я плохо тебя понимаю. Вы говорите: «Выполнение этого требует, чтобы объект процесса был полностью построен», так что это сделано, это ядро? Тем не менее, означает ли это, что выделен соответствующий стек ядра? –

+0

Действительно спасибо! Хороший ответ. –

Смежные вопросы