作業系統——CPU和記憶體、掛起和阻塞
阿新 • • 發佈:2018-12-16
CPU ≠ 記憶體
不妨把外存比作一個大倉庫,裡面有各種原材料,可以生產不同的東西。而CPU就是進行加工處理的車間。
一般來說,一個時間段,想要生產的東西也就那幾樣(是確定的,也是有限的,畢竟CPU也是有限的)。
產品確定了,原材料自然也是確定的。而當我們去取原材料,因為外存這個大倉庫實在是大,且裡面放的是所有的原材料。直接從這裡取太過耗時。
所以我們把一個時間段要用到的原材料都放到了一個距離更近的小倉庫,也就是記憶體。生產所需的材料直接從這取好了,大大縮短IO時間。
掛起(Suspend)
掛起是一種主動行為,因此恢復也應該要主動完成。
程序掛起的結果是從記憶體移到外存,所以掛起不佔記憶體。
因為掛起後還要受到CPU的監督(等待著啟用),所以掛起不釋放CPU。 如果被掛起的執行緒任務優先順序巨高,就永遠輪不到其他執行緒任務執行。
掛起一般用於程式除錯中的條件中斷,當出現某個條件的情況下掛起,然後進行單步除錯。
比如sleep(),不釋放鎖,佔著CPU睡覺。
阻塞(Pend)
而阻塞是一種被動行為,是在請求IO資源時,發生的等待。 IO資源拿到後,自動加入就緒任務佇列,等待分配CPU。
阻塞就是程序釋放 CPU,其他程序可以執行。
比如wait(),釋放鎖,釋放CPU,等待。