2017-01-05 17 views
1

Я читал, что он не потребляет циклы процессора, но что происходит с программой/потоком в памяти, которая называется «сном»? Будет ли он помещен в очередь ожидания? Или что происходит? Как код будет переведен в машинные инструкции? Или, вернее, то, что эквивалентно его машинной инструкции.Что происходит в «sleep» в C++?

Давайте этот пример,

`#include<WinBase.h> 
main() 
{ 
    Sleep(10); 
}` 

Этот образец для Windows, но я смысл задать этот вопрос, независимо от платформы.

+1

Очевидно, что да, он помещается в очередь ожидания. Обычно вызов заканчивается системным вызовом, который переводит процесс в очередь не поддающихся выбору процессов с некоторым событием. –

ответ

2

Ответ, очевидно, касается операционной системы и процессора. Я не знаю Windows, а так как это proprietary software, многие детали реализации скрыты MicroSoft.

Итак, рассмотрим реализацию free software как Linux. Таким образом, вы можете изучить исходный код.

Вызов sleep(3), вероятно, выполняется (по вашему C standard library) в какой-то system call как nanosleep(2).

В Linux вы можете использовать strace(1), чтобы узнать, какие системные вызовы выполняются определенным процессом или командой.

Любые системные вызовы включают (по определению) операционную систему kernel. выполняется команда пользователя mode на команду переключения коммутатора ядра (например, SYSENTER на x86-64 или INT, или на какой-либо шлюз вызова и т. д.). Таким образом, ядро ​​принимает управление, и его scheduler, скорее всего, запустит другой runnable process (в очереди ожидания, как вы догадались), или до idle процессора (если нет запущенных процессов). Много позже ядро ​​перенесет ваш процесс (возможно, после обработки многих interrupts).

Если вы хотите больше деталей (для Linux!), Посмотрите в исходный код вашего LIBC (например, GNU libc или musl-libc) и самого kernel.

Конечно, детали очень сложны, и вам нужно будет прочитать много книг и изучить много исходного кода.

Вы также можете прочитать хороший учебник, например Operating Systems: Three Easy Pieces. Он имеет несколько глав о планировании, процессах и потоках.

(Я не знаю Windows, но я слышал, что фактический набор его системных вызовов не опубликован. Вы будете кодировать WinAPI, и как именно он реализован, может быть секретный «MicroSoft». Поэтому я рекомендую использовать &, устанавливая Linux или другую операционную систему свободного программного обеспечения, если вы заинтересованы в понимании внутренних компонентов ).