操作系統(tǒng)作用
操作系統(tǒng)是負(fù)責(zé)讓電腦上安裝的各類程序運(yùn)行變得容易:
1.允許同時(shí)運(yùn)行多個(gè)程序墨坚,比如可以一邊打開(kāi)網(wǎng)易云音樂(lè)聽(tīng)歌,一邊打開(kāi)Safari瀏覽器瀏覽網(wǎng)頁(yè)
2.允許程序共享內(nèi)存
3.讓程序與設(shè)備交互渴丸,比如微信聊天可把鍵盤(pán)敲的字顯示在對(duì)話框里面
即確保系統(tǒng)易于使用又正確高效地運(yùn)行。
操作系統(tǒng)虛擬化
注:進(jìn)程就是運(yùn)行中的程序
虛擬化CPU
通過(guò)讓一個(gè)進(jìn)程只運(yùn)行一個(gè)時(shí)間片,然后切換到其他進(jìn)程,可以使操作系統(tǒng)達(dá)到提供多個(gè)虛擬CPU的假象登馒,稱之為時(shí)分共享CPU技術(shù),允許多個(gè)進(jìn)程并發(fā)運(yùn)行咆槽。缺點(diǎn)是性能損失陈轿。
上下文切換技術(shù):操作系統(tǒng)能夠停止運(yùn)行一個(gè)程序,并開(kāi)始在給定的CPU上運(yùn)行另一個(gè)程序
進(jìn)程的機(jī)器狀態(tài):內(nèi)存和寄存器
進(jìn)程狀態(tài):運(yùn)行/就緒/阻塞
上下文切換:用于切換進(jìn)程
創(chuàng)建新進(jìn)程:
1.創(chuàng)建進(jìn)程 fork()系統(tǒng)調(diào)用秦忿,從父程序中新建子程序
2.wait()系統(tǒng)調(diào)用麦射,等待子進(jìn)程/父程序完成相應(yīng)的操作
3.exec()系統(tǒng)調(diào)用,可以讓子進(jìn)程執(zhí)行與父程序不同的程序
調(diào)用fork()創(chuàng)建新進(jìn)程灯谣,調(diào)用exec()的某個(gè)變體來(lái)執(zhí)行這個(gè)可執(zhí)行程序潜秋,調(diào)用wait()等待該命令完成。子進(jìn)程執(zhí)行結(jié)束后胎许,shell從wait()返回并再次輸出一個(gè)提示符峻呛,等待用戶輸入下一條命令。
高效/可控地虛擬化CPU:
受限的直接執(zhí)行:直接在CPU上運(yùn)行程序辜窑,有兩個(gè)問(wèn)題需要解決:
1.需要訪問(wèn)一些敏感信息時(shí)怎么操作 ?用戶模式/內(nèi)核模式
2.怎么做進(jìn)程切換 ?時(shí)鐘中斷
在特定時(shí)間內(nèi)钩述,操作系統(tǒng)應(yīng)該運(yùn)行哪個(gè)進(jìn)程??
優(yōu)化周轉(zhuǎn)時(shí)間:先進(jìn)先出 最短任務(wù)優(yōu)先 搶占式最短作業(yè)優(yōu)先
優(yōu)化響應(yīng)時(shí)間:輪轉(zhuǎn)調(diào)度
重疊操作
注:進(jìn)程在向I/O發(fā)起請(qǐng)求的時(shí)候穆碎,是不會(huì)使用CPU的
多級(jí)反饋隊(duì)列:操作系統(tǒng)通常不知道工作要運(yùn)行多久牙勘,而這又是SJF(或STCF)等算法所必需的。其次所禀,MLFQ希望給交互用戶(如用戶坐在屏幕前方面,等著進(jìn)程結(jié)束)很好的交互體驗(yàn),因此需要降低響應(yīng)時(shí)間北秽。
MLFQ中有許多獨(dú)立的隊(duì)列(queue)葡幸,每個(gè)隊(duì)列有不同的優(yōu)先級(jí)(priority level)。任何時(shí)刻贺氓,一個(gè)工作只能存在于一個(gè)隊(duì)列中蔚叨。MLFQ總是優(yōu)先執(zhí)行較高優(yōu)先級(jí)的工作床蜘。
規(guī)則1:如果A的優(yōu)先級(jí) > B的優(yōu)先級(jí),運(yùn)行A(不運(yùn)行B)蔑水。
規(guī)則2:如果A的優(yōu)先級(jí) = B的優(yōu)先級(jí)邢锯,輪轉(zhuǎn)運(yùn)行A和B。
饑餓問(wèn)題
比例份額調(diào)度程序
在硬件的一些幫助下搀别,操作系統(tǒng)可將單個(gè)CPU轉(zhuǎn)換成虛擬的無(wú)限數(shù)量的CPU丹擎,從而讓許多程序看似同時(shí)運(yùn)行。同時(shí)運(yùn)行多個(gè)程序會(huì)引發(fā)各種新問(wèn)題歇父,如兩個(gè)程序想要在特定時(shí)間運(yùn)行蒂培,應(yīng)該運(yùn)行哪個(gè)?
虛擬化內(nèi)存