Linux 內核的操作系統是不是得一直運行著?

休眠的時候就不運行了,但是系統保存在內存或者磁碟上面


題主這是書讀少了,通讀一遍這篇問答吧。

操作系統的調度程序如何調度自己? - 操作系統內核 - 知乎


假設我的CPU比較差,只能單核單線程跑。如果系統代碼一直占著CPU資源,那APP代碼豈不是一直得不到執行?所以在某段時間裡APP代碼還是可以佔用CPU資源的,只是這段時間一到

「滾回去排隊」


你要知道,grub 乾的事情,就是從硬碟上將操作系統的可執行文件全部載入到0x100000這個位置,所以,操作系統的代碼確實是躺在內存里的~

你可以把操作系統和應用的關係想成一個沙漏,操作系統和應用之間唯一的關聯就是一個系統調用函數,這應該是唯一的介面

所以,你看,操作系統每個時間片就負責選擇優先順序最高的進程執行,進程需要調用底層的內容,就通過系統調用將命令發給操作系統,告訴它,我要執行什麼~

沒事可乾的時候,那就開始睡覺了,也就是說,操作系統進入一個待機狀態


內核也不是完全被動服務,有些kernel thread會始終在運行,典型的就是workqueue, interrupt的bottom部分


32位系統舉例,每個進程內存虛擬空間4G,3~4G空間為獨一無二的內核空間,代碼段常駐內存。系統中跑各種各樣的線程,有內核線程,用戶態線程,調度器根據調度演算法來選擇下一個要運行的線程或被中斷打斷,用戶態系統調用或中斷都會進入內核態。用戶態的1~3G空間被多個進程分享,但看起來就像每個進程獨佔一樣,而內核空間獨霸高端的1G,注意,這裡說的是虛擬空間。


操作系統進程管理有一個調度方式,我們通常使用的操作系統(windows、linux)是基於時間片輪轉調度了,假設一個輪轉是1秒鐘,系統現在在跑10個進程,那麼每個進程就能分到大約100ms(其實沒這麼多),每到了100ms, CPU內部的定時器就會產生一個中斷,告訴操作系統,你該換下一個進程了。這樣就實現進程切換。

操作系統是用來管理硬體資源,提供對硬體的操作介面的,所以你要用到硬體就得告訴操作系統,這樣看來,機器在運行的時候操作系統是一直在運行的。

-------------------- @王思宇的評論------------------------------------

闡述不是很有說服力。另外糾正兩個小錯誤:1.進程是有優先順序的,時間片不是完全平均分配。2.Linux在內核2.6.23版本後使用完全公平調度,不再是基於時間片,而是根據所有可運行進程數量和進程的優先順序計算出每個進程應該得到的處理器佔用比。


所有的代碼都是直接通過CPU執行的。(效率高啊)

所以你寫的代碼也是直接在CPU執行的。(哦也)

當你的代碼在執行的時候,系統代碼就只能躺在內存里做個安靜的美男紙了。(Limited Direct Access)


Idle進程,又叫1號,幾乎啥也不幹,除了收殭屍。

好吧,內核其實是提供服務代碼的。


推薦閱讀:

你會在linux伺服器上安裝遠程桌面嗎?
linux伺服器安全問題?
你學習嵌入式linux時有哪些經典書籍讓你相見恨晚?
有自己的VPS伺服器可以用來做什麼有趣的事?
Linux內核中許多晶元的驅動程序都已經存在,為何還要開發這些晶元的驅動?

TAG:操作系統 | Linux | Linux內核 | 操作系統內核 |

分頁阅读: 1 2