摘自《操作系統(tǒng)概念》(高等教育出版社)第七版
第一部分 概述
1暑塑、事件的發(fā)生通常通過硬件或軟件中斷表示谤绳。硬件可隨時通過總線向cpu發(fā)出信號,以觸發(fā)中斷蛇更;軟件可通過執(zhí)行特別的操作,如系統(tǒng)調(diào)用癞季,而觸發(fā)中斷歼跟。
2刑棵、一個典型的指令執(zhí)行周期:首先從內(nèi)存中獲取指令赏廓,并保存在指令寄存器中
3涵紊、多處理器系統(tǒng)的優(yōu)點:
a. 增加吞吐量
b. 規(guī)模經(jīng)濟
c. 增加可靠性
4、現(xiàn)代操作系統(tǒng)是由中斷驅(qū)動的
5幔摸、系統(tǒng)調(diào)用類可大致分為五大類:進程控制摸柄、文件管理、設(shè)備管理既忆、信息維護和通信
第二部分 進程管理
進程概念:
1驱负、進程包括代碼段、當(dāng)前活動(程序計數(shù)器的值和處理器寄存器的內(nèi)容)患雇、堆棧段跃脊、數(shù)據(jù)段(包括全局變量),堆(動態(tài)分配的內(nèi)存)
2苛吱、進程的狀態(tài):新的匾乓,運行,等待又谋,就緒拼缝,終止
3、進程控制塊pcb存儲如下信息:進程狀態(tài)彰亥、程序計數(shù)器咧七、cpu寄存器、cpu調(diào)度信息任斋、內(nèi)存管理信息继阻、記賬信息、I/O狀態(tài)信息
進程調(diào)度:
1废酷、進程進入系統(tǒng)時瘟檩,會被加入作業(yè)隊列中。駐留在內(nèi)存中就緒的澈蟆,等待運行的稱為就緒隊列墨辛,使用鏈表實現(xiàn),其頭結(jié)點指向第一個和最后一個PCB趴俘。
2睹簇、設(shè)備調(diào)度:等待特定I/O設(shè)備的列表稱為設(shè)備隊列。
3寥闪、長期調(diào)度程序(作業(yè)調(diào)度)從大容量存儲設(shè)備中選擇進程裝入內(nèi)存中太惠,以準(zhǔn)備執(zhí)行;短期調(diào)度從內(nèi)存中選擇進程疲憋,并為之分配cpu凿渊。
4、上下文切換:將cpu切換到另一個進程需要將當(dāng)前進程的狀態(tài)保存并恢復(fù)另一個進程的狀態(tài)缚柳,這一任務(wù)成為上下文切換埃脏。
5、進程上下文存儲在PCB中喂击,它包含cpu寄存器的值剂癌,進程狀態(tài)和內(nèi)存管理信息等。
進程間通信:
1翰绊、獨立進程:如果一個進程不能被其他進程影響且不能影響其他進程佩谷,則它是獨立進程;如果一個進程能被其他進程影響或影響其他進程监嗜,則為協(xié)作進程谐檀。
2、與其它進程共享數(shù)據(jù)的進程是協(xié)作進程裁奇。
3桐猬、進程間通信:
(1)共享內(nèi)存:協(xié)作進程通過在共享內(nèi)存中讀寫數(shù)據(jù)交換信息
(2)進程間通信機制(Interprocess communication ,IPC)
4、共享內(nèi)存:通信進程建立共享內(nèi)存區(qū)域刽肠,其它進程將該區(qū)域放到自己的地址空間上溃肪。
5免胃、為了說明協(xié)作進程這一概念,可研究生產(chǎn)者消費者問題惫撰。
線程:
1羔沙、線程是CPU使用的基本單元,由線程ID厨钻,程序計數(shù)器扼雏,寄存器集合和棧組成。它與進程中的其它線程共享代碼段夯膀、數(shù)據(jù)和其它系統(tǒng)資源诗充。
2、線程的優(yōu)點:
(1)響應(yīng)度高
(2)資源共享
(3)經(jīng)濟
(4)多處理器體系結(jié)構(gòu)的利用
3诱建、線程分為用戶級的用戶線程和內(nèi)核線程蝴蜓。
cpu調(diào)度:
1、進程執(zhí)行有cpu區(qū)間和I/O等待周期組成涂佃。
2励翼、每當(dāng)CPU空閑時,操作系統(tǒng)就必須從就緒隊列中選擇一個進程來執(zhí)行辜荠。進程選擇由短期調(diào)度程序來執(zhí)行汽抚,從內(nèi)存中選擇進程并為之分配CPU區(qū)間。
3伯病、分派程序是一個模塊造烁,用于將cpu的控制分派給短期調(diào)度程序選擇的進程,其功能包括切換上下文午笛,切換到用戶模式惭蟋,跳轉(zhuǎn)到用戶程序的合適位置,以重新啟動程序药磺。
4告组、衡量cpu調(diào)度算法的標(biāo)準(zhǔn):
(1)CPU使用率
(2)吞吐量:cpu在單位時間內(nèi)完成進程的數(shù)量
(3)周轉(zhuǎn)時間:從進程提交到進程完成的時間稱為周轉(zhuǎn)時間。周轉(zhuǎn)時間包括等待進入內(nèi)存癌佩、在就緒隊列中等待木缝、在cpu上執(zhí)行和I/O執(zhí)行的時間。
(4)等待時間:由于調(diào)度算法并不影響進程的cpu執(zhí)行和I/O等待時間围辙,所以用等待時間衡量我碟,即進程在就緒隊列中的等待時間。
(5)響應(yīng)時間:從提交請求到產(chǎn)生響應(yīng)的第一時間姚建。
5矫俺、cpu調(diào)度算法:
(1)先到先服務(wù)調(diào)度:先請求cpu的進程分配到cpu。會產(chǎn)生護航效果(所有進程都在等待一個大進程釋放cpu)
(2)最短作業(yè)優(yōu)先調(diào)度(sjf):將cpu控制提供給具有最短cpu區(qū)間的進程。若可搶占厘托,則稱為最短剩余時間優(yōu)先調(diào)度友雳。
(3)優(yōu)先級調(diào)度:每一個進程與一個優(yōu)先級關(guān)聯(lián),具備最高優(yōu)先級的進程會分配到cpu催烘。會遇到無窮阻塞問題沥阱,解決辦法之一是老化。
(4)輪轉(zhuǎn)法調(diào)度:類似于FCFS調(diào)度伊群,增加了搶占以切換進程、定義一個較小時間單元策精,稱為時間片舰始。cpu調(diào)度程序循環(huán)就緒隊列,為每個進程分配不超過一個時間片的cpu咽袜。
(5)多級隊列調(diào)度:將就緒隊列分為多個獨立隊列丸卷,每個隊列有自己的調(diào)度算法。隊列之間可以按優(yōu)先級劃分询刹,也可以按照時間片劃分谜嫉。
(6)多級反饋隊列調(diào)度:允許進程在隊列之間移動。
進程同步:
1凹联、競爭條件:多個進程同時訪問和操作統(tǒng)一數(shù)據(jù)且執(zhí)行結(jié)果與訪問的特定順序有關(guān)沐兰,稱為競爭條件。
2蔽挠、臨界區(qū)問題的三項條件:互斥住闯,前進,有限等待澳淑。peterson算法比原。
3、信號量:可以用來控制訪問具有若干個實例的某種資源杠巡。自旋鎖:忙等待量窘。
死鎖:
1、死鎖的四個條件:互斥氢拥、占有并等待蚌铜、循環(huán)等待、非搶占兄一。同時滿足則有可能出現(xiàn)死鎖厘线。
2、若資源分配圖中出現(xiàn)環(huán)出革,則有可能發(fā)生死鎖造壮。
3、死鎖的處理辦法:避免、檢測并恢復(fù)耳璧、忽視成箫。
4、資源分配圖算法
5旨枯、銀行家算法
內(nèi)存管理:
1蹬昌、內(nèi)存由很大一組字或者字節(jié)組成,每一組字或者字節(jié)都有自己的地址攀隔。cpu根據(jù)程序計數(shù)器的值從內(nèi)存中提取指令皂贩。
2、通過基地址寄存器和界限地址寄存器確保進程具有獨立的內(nèi)存空間昆汹。
3明刷、將指令和數(shù)據(jù)綁定到內(nèi)存地址分為如下三種情況:
(1)編譯時,生成絕對代碼
(2)加載時满粗,生成可重定位代碼
(3)執(zhí)行時辈末,需要特定硬件
4、邏輯地址:cpu所生成的地址映皆。由程序生成的邏輯地址的集合稱為邏輯地址空間挤聘。
物理地址:內(nèi)存單元中的地址,即加載到內(nèi)存地址寄存器中的地址捅彻。邏輯地址空間對應(yīng)的物理地址的集合稱為物理地址空間组去。
5、虛擬地址到物理地址的映射是由內(nèi)存管理單元管理的沟饥,也就是memory_management_unit.
6添怔、動態(tài)加載:子程序以可重定位的形式保存在磁盤中。使用時才加載子程序贤旷,可獲得更好的內(nèi)存空間使用率广料。
7、內(nèi)存通常分為兩部分:一個用于駐留操作系統(tǒng)幼驶,一個用于用戶進程
8艾杏、連續(xù)內(nèi)存分配:每個進程位于一個連續(xù)的內(nèi)存區(qū)域
9、動態(tài)存儲分配的常用方法:首次適應(yīng)盅藻,最佳適應(yīng)购桑,最差適應(yīng)
10、首次適應(yīng)算法和最佳適應(yīng)算法都有外部碎片問題
11氏淑、解決外部碎片的方法:
(1)緊縮:要求執(zhí)行時綁定指令和數(shù)據(jù)到內(nèi)存勃蜘,且開銷大
(2)允許物理空間地址非連續(xù):分頁和分段
12、實現(xiàn)分頁:將物理內(nèi)存分為固定大小的塊假残,稱為幀缭贡;將邏輯內(nèi)存分為固定大小的塊炉擅,稱為頁。當(dāng)需要執(zhí)行進程時阳惹,將頁從備份存儲調(diào)用到可用的內(nèi)存幀中谍失。分頁增加了切換時間。
13莹汤、當(dāng)頁變表過大以至于無法在內(nèi)存中連續(xù)地分配該頁表時快鱼,可以采用多級頁表。
14纲岭、分段:分段是支持用戶視角的內(nèi)存管理方案抹竹。通過段名稱和偏移來確定段的地址。
15止潮、段表的每個地址都有段基地址和段界限柒莉。
虛擬內(nèi)存:
1、通常情況下沽翔,并不需要將進程全部放入內(nèi)存中,且不是同時需要全部的內(nèi)容窿凤。比如仅偎,錯誤處理的代碼就很少使用;某些功能很少用到雳殊;
2橘沥、虛擬內(nèi)存將用戶邏輯內(nèi)存與物理內(nèi)存分開,為用戶提供了巨大的虛擬內(nèi)存夯秃。
3座咆、按需調(diào)頁:在需要時才將進程對應(yīng)的頁調(diào)入內(nèi)存中。
4仓洼、當(dāng)換入進程時介陶,調(diào)頁程序會推測在換出進程前將用到的頁。并非將整個進程調(diào)入內(nèi)存空間色建,而是將必需的頁調(diào)入內(nèi)存哺呜。這樣,調(diào)頁程序就避免了讀入不使用的頁箕戳,減少了交換時間和占用的物理內(nèi)存某残。
5、若進程試圖訪問未調(diào)入內(nèi)存的頁陵吸,也就是訪問標(biāo)記為無效的頁玻墅,則會產(chǎn)生也錯誤陷阱(page-fault trap)
6、寫時復(fù)制:可以快速創(chuàng)建子進程壮虫,且最小化創(chuàng)建新進程需要分配的頁的數(shù)量澳厢。
7、內(nèi)存的過度分配:在多道程序系統(tǒng)中,有可能發(fā)生頁錯誤后赏酥,卻沒有空閑幀用于存儲頁喳整。
8、可以使用修改位(臟位)降低額外開銷裸扶。若某頁被選中為替換頁框都,且其修改位表明并未修改過,則直接覆蓋即可呵晨。
9魏保、為了實現(xiàn)按需調(diào)頁,需要幀分配算法和頁置換算法摸屠。
10谓罗、頁置換算法:
(1)FIFO:
belady異常:隨著幀數(shù)的增加,頁錯誤率有可能會增高季二。
(2)最優(yōu)置換算法:置換最長時間不會被使用的頁
(3)LRU置換:最長時間未被使用的頁將被置換檩咱,為了給頁幀確定排序序列,可以使用計數(shù)器或者棧胯舷。
11刻蚯、幀分配:
(1)平均分配:給每個進程分配相同多的幀
(2)比例分配:根據(jù)進程大小,將內(nèi)存分配給每個進程桑嘶。
12炊汹、全局分配與局部分配:
(1)全局置換:允許進程從所有幀集合選擇一個置換幀,而不管該幀是否已經(jīng)分配給其它進程逃顶。
(2)局部置換:進程僅從自己的分配幀中進行選擇讨便。
13、系統(tǒng)顛簸:頻繁的頁錯誤導(dǎo)致頻繁的調(diào)頁以政,稱為顛簸霸褒。如果一個進程的換頁時間多于執(zhí)行時間,那么該進程就在顛簸妙蔗。