成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

調用sleep時操作系統中發生了什么?

系統 其他OS
nanosleep會暫停當前線程的執行直到經過了參數指定的時間,或者出現某個signal,該signal觸發了該線程的信號handler又或者該信號終止了該進程。

?大家好,我是小風哥。

相信不管你使用的是什么語言,或多或少都會調用過sleep函數,那么你知道當調用這個函數時操作系統中發生了什么嗎?今天就來簡單聊聊這個問題,這又是一個軟件與硬件配合的經典案例。

假如我們沒有操作系統,那么sleep函數的實現可能就是忙等,busy wait,即,簡單的在一個for循環中消耗CPU,但有操作系統的幫助我們大可不必浪費寶貴的CPU資源。

大部分操作系統都提供了“sleep”系統調用,當我們在用戶態不管用什么語言調用sleep時最終都會調用到該系統調用,系統調用后操作系統開始運行,此時:

1, 操作系統暫停該進程(線程)的執行并改變其運行狀態,比如將其設置為等待狀態

2,操作系統為該進程(線程)創建一個計時器,操作系統是怎樣知道時間這個概念的呢?實際上很簡單,假設你對時間一無所知,但我告訴你,你旁邊有一條可愛的小狗,它會一秒鐘汪汪汪一次,這樣每當聽到小狗汪汪汪時你就知道時間又過去了一秒鐘,同時在紙上記下來,這樣你就知道時間了。

回到我們這里,你就相當于操作系統,小狗就好比計算機系統中硬件-定時器,timer,定時器會以固定頻率產生中斷信號,發出中斷信號后操作系統開始接管計算機系統,并開始處理一些和時間相關事情,比如檢查該當前進程(線程)的時間片是否用盡、其它等待的線程是否需要喚醒等等。

3,操作系統檢測到該進程(線程)定時器時間已到,將該進程(線程)從等待狀態轉為可執行狀態,注意此時該進程(線程)可能不會立即執行,即使該進程(線程)已經位于就緒狀態也要等待,因為此時系統中可能有更高優先級的進程,又或者正在運行的進程其時間片還未用完。

所以我們可以看到,假設調用sleep給定的參數是1s,那么你的進程并不會精確暫停1s然后再運行,從調用sleep到再次運行的時間一定不少于1s,也就是可能會稍多于1s,但一定不會少于1s。

在Linux系統中與sleep相關的系統調用最常見的是nanosleep,假設你有一段這樣的C語言代碼:

#include <unistd.h>
void main() {
sleep(1);
}

編譯后生成的可執行程序叫做test,那么使用Linux下的strace命令運行該程序就會得到:

$ strace test
...
nanosleep({tv_sec=1, tv_nsec=0}, 0

strace命令會把程序調用的所有系統調用都顯示出來,可以看到該程序最終調用nanosleep系統調用,接下來我們看看該系統調用的作用是什么,官方文檔:

圖片

nanosleep會暫停當前線程的執行直到經過了參數指定的時間,或者出現某個signal,該signal觸發了該線程的信號handler又或者該信號終止了該進程。

大部分用戶態語言調用sleep時操作系統內部都是這樣實現的。

好啦,這篇就到這里,希望對大家理解操作系統有所幫助。?

責任編輯:武曉燕 來源: 碼農的荒島求生
相關推薦

2021-04-11 10:40:16

Git軟件開發

2019-11-12 14:41:41

Redis程序員Linux

2021-01-18 08:23:23

內存時底層CPU

2021-11-23 23:31:43

C語言數據類型系統

2020-08-20 11:50:31

語言類型轉換代碼

2021-06-30 06:02:38

MySQL SQL 語句數據庫

2021-12-16 15:58:48

Linux內存微軟

2020-08-17 12:47:07

Mozilla裁員瀏覽器

2019-08-26 09:35:25

命令ping抓包

2010-02-07 09:00:29

AndroidLinux Kerne

2023-08-29 16:26:20

Linux命令行

2015-07-03 09:27:43

網絡閏秒

2020-09-01 11:40:01

HTTPJavaTCP

2019-09-16 17:16:29

Hadoop數據湖數據結構

2022-06-03 08:12:52

InnoDB插入MySQL

2017-09-06 16:20:51

2022-05-26 23:36:36

SQLMySQL數據

2022-05-31 13:58:09

MySQL查詢語句

2023-11-02 08:00:00

ClickHouse數據庫

2010-03-02 09:54:16

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 粉嫩av在线 | 中文字幕久久久 | 韩国主播午夜大尺度福利 | 国产片侵犯亲女视频播放 | 欧美精三区欧美精三区 | 精品一区二区三区在线观看国产 | 亚洲成人一区二区在线 | 国产羞羞视频在线观看 | 久久精品成人 | 蜜桃视频一区二区三区 | 精品在线一区 | 最新伦理片 | 久久久久成人精品 | 一区二区三区影院 | 女生羞羞网站 | 国产视频久久久 | 操久久 | 亚洲九色 | 日本成人毛片 | 亚洲综合伊人 | 99精品一区二区三区 | 午夜精品久久久久久久久久久久久 | 中文字幕在线三区 | 久久久91精品国产一区二区三区 | 国产精品3区 | 久久新 | 国产乱码精品一区二区三区中文 | 亚洲国产日本 | 男女羞羞视频在线免费观看 | 国产精品色婷婷久久58 | 日本在线播放 | 中文字幕成人在线 | 一区二区福利视频 | 国产成人精品一区二区三区 | 国产精品无码久久久久 | 久久久激情视频 | 天天干视频 | 日韩成人免费在线视频 | 日本一区高清 | www操操| 一区二区三区在线播放视频 |