天天看點

程序挂起,程序時間片輪轉,程序挂起的概念澄清

看的網上關于這些差別的概念真的是五花八門,并且漏洞很多,真是誤導吃瓜觀衆,本人抱着憤怒的心情寫下這篇部落格,告訴作業系統入門的新手們,仔細看大學教材,了解透字眼。

程序挂起:網上很多都說是主動行為,仔細重新閱讀了作業系統後,我并不反對這個觀點。但要注意的是,挂起這個操作是一個比較特殊的操作,當系統中負荷較高的時候,系統會主動挂起一些程序,把這些程序淘汰到外存,或者在系統需要檢查某些程序時候才會進行的操作。并且,挂起程序在外存中不參與排程,同時磁盤是不能直接聯系cpu的,某些部落格為什麼會提出挂起不會釋放CPU呢?我強烈質疑。

可以這樣了解挂起是os主動發起的将某個或者某些程序暫時當機,如果有需要,OS又會将其激活,以作特殊用途的操作是挂起。

記憶體置換:有些夥伴會有疑問,這個動作有點類似挂起,但這并不是挂起,而是為了提高記憶體使用率,解決記憶體空間緊張時才發生的記憶體與磁盤發生的IO交換,當記憶體中太多程序處于阻塞或者說睡眠狀态,CPU為了提高記憶體使用率和CPU本身工作效率,将磁盤後備隊列的程式跟阻塞程序交換,并沒有涉及到挂起,因為挂起和激活是兩個成對的原子操作。當然,這種交換隻發生在記憶體緊張的時候,雖然DMA型IO操作沒有直接影響cpu工作效率,但若記憶體都是阻塞程序,CPU也一樣在等待。 

程序阻塞:這個是存在記憶體的阻塞隊列中的,并且會釋放CPU,等待CPU的下一次排程。

CPU時間片排程:注意,這裡并沒有提到阻塞而執行的排程,一定要重新看教材,CPU隻是将時間片到了的程序重新調到就緒隊列尾部,并不是阻塞。阻塞是程序同步機制的東西,阻塞當然也涉及到CPU切換。

網上千篇一律的答案,并且漏洞百出,新手一定要先相信教材,這些都是國内知名學者編寫的,網上那些相關答案真的太不負責任,誤人子弟。