版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
清華大學(xué)出版社
上述兩種措施仍然沒有得到足夠的空閑頁面時(shí),系統(tǒng)
就要對(duì)所有進(jìn)程進(jìn)行掃描,尋找適合換出的候選進(jìn)
程。好的候選進(jìn)程應(yīng)該有一個(gè)或多個(gè)可以丟棄或換
出的頁面,系統(tǒng)選擇其中部分頁面丟棄或換出。
Linux系統(tǒng)采用記齡(aging)置換算法。Linux系統(tǒng)
根據(jù)訪問次數(shù)來決定是否適合換出,優(yōu)先換出那些
很長時(shí)間沒有訪問的頁面。與前兩種途徑相比,換
出或者丟棄其他進(jìn)程占用的頁面的效率最低。
總的來看,請(qǐng)求頁式存儲(chǔ)管理方法在進(jìn)程建立時(shí)只分
配少量內(nèi)存,通過頁面的交換來保證進(jìn)程運(yùn)行的時(shí)
候能夠得到需要的頁面,可以同時(shí)在內(nèi)存中安排多
個(gè)進(jìn)程。但是,內(nèi)存利用率的提高是以犧牲系統(tǒng)時(shí)
間開銷為代價(jià)換來的。
高華之學(xué)出版社
4.3Linux進(jìn)程調(diào)度
Linux系統(tǒng)中同時(shí)在內(nèi)存中安排多個(gè)進(jìn)程,這些進(jìn)程
相互之間競(jìng)爭(zhēng)處理機(jī)的使用權(quán)。系統(tǒng)的低級(jí)調(diào)度,
即進(jìn)程級(jí)調(diào)度就是要按照一定的策略,從所有處于
就緒狀態(tài)的進(jìn)程中選擇最應(yīng)該執(zhí)行的進(jìn)程,把CPU
分配給它,開始執(zhí)行。Linux系統(tǒng)的內(nèi)核級(jí)線程也
按照進(jìn)程來對(duì)待,使用進(jìn)程調(diào)度統(tǒng)一處理進(jìn)程和內(nèi)
核級(jí)線程。
4.3.1初始化過程及進(jìn)程樹
我們以Intel386系列計(jì)算機(jī)為例,介紹Linux系統(tǒng)的
啟動(dòng)過程,現(xiàn)假定系統(tǒng)已經(jīng)完成了正常安裝。打
開計(jì)算機(jī)電源,計(jì)算機(jī)首先從固化在主板ROM中
的BIOS開始啟動(dòng),BOIS對(duì)計(jì)算機(jī)的硬件進(jìn)行一系
列的檢測(cè),然后從指定設(shè)備的指定位置,把boot
loader讀入系統(tǒng)內(nèi)存并把控制權(quán)轉(zhuǎn)交給boot
loader,接著,在bootloader的控制下,系統(tǒng)啟動(dòng)
代碼被讀入內(nèi)存并進(jìn)行初始化工作,控制權(quán)轉(zhuǎn)交給
系統(tǒng)初始化代碼后,引導(dǎo)整個(gè)操作系統(tǒng)進(jìn)入內(nèi)存并
控制整個(gè)系統(tǒng),設(shè)置各種表格和數(shù)據(jù)結(jié)構(gòu),初始化
可運(yùn)行隊(duì)列的時(shí)候建立系統(tǒng)的0號(hào)進(jìn)程,然后創(chuàng)建
系統(tǒng)最初的進(jìn)程一一init進(jìn)程,該進(jìn)程的進(jìn)程號(hào)為
Io
清華大學(xué)出版社
init進(jìn)程啟動(dòng)內(nèi)核交換線程等系統(tǒng)內(nèi)核線程,然后根
據(jù)系統(tǒng)提供的參數(shù),啟動(dòng)相應(yīng)的終端管理進(jìn)程,在
每一個(gè)終端屏幕上顯示login字樣,等待用戶的登
錄,整個(gè)啟動(dòng)過程到此結(jié)束,參看圖4.3。用戶登
錄過程中,init進(jìn)程啟動(dòng)login進(jìn)程對(duì)用戶的賬號(hào)和
密碼進(jìn)行驗(yàn)證,通過之后,由login進(jìn)程啟動(dòng)shell命
令解釋進(jìn)程,為用戶提供操作系統(tǒng)的接口,接受用
戶的輸入,解釋執(zhí)行用戶命令,執(zhí)行過程中又會(huì)創(chuàng)
建新的進(jìn)程。
圖4.3Linux系統(tǒng)啟動(dòng)過程
清華大學(xué)出版社
Linux系統(tǒng)的所有進(jìn)程共同構(gòu)成一個(gè)完整的進(jìn)程樹,
如圖4.3所示。從init進(jìn)程開始,init進(jìn)程是所有其
他進(jìn)程的祖先。init產(chǎn)生終端管理進(jìn)程mingetty,
mingetty產(chǎn)生login,login產(chǎn)生用戶的shell進(jìn)程,然
后shell產(chǎn)生其他用戶進(jìn)程,因此,其他所有進(jìn)程都
是由init或者它的子孫創(chuàng)建而來。同樣,在進(jìn)程結(jié)
束之后,父進(jìn)程也要負(fù)責(zé)該進(jìn)程的最后回收工作,
如果某一個(gè)進(jìn)程創(chuàng)建了子進(jìn)程之后,由于某種原因
先于子進(jìn)程終止,由它創(chuàng)建的子進(jìn)程成為孤兒進(jìn)
程,孤兒進(jìn)程的祖父進(jìn)程就要負(fù)責(zé)回收工作,依此
類推。最后,在系統(tǒng)要關(guān)機(jī)之前,init進(jìn)程還要負(fù)
責(zé)結(jié)束所有的進(jìn)程,卸載所有文件系統(tǒng)并終止處理
器的指令執(zhí)行。
4.3.2進(jìn)程的組織
為了管理進(jìn)程,Linux系統(tǒng)采用多種方式來組織處于
各種狀態(tài)的進(jìn)程。
系統(tǒng)中每創(chuàng)建一個(gè)新的進(jìn)程,就給它分配一個(gè)進(jìn)程控
制塊(PCB),PCB是系統(tǒng)感知、控制進(jìn)程的靜
態(tài)實(shí)體。系統(tǒng)訪問PCB的頻率非常高,因此所有進(jìn)
程的PCB都直接存放在物理內(nèi)存中。Linux系統(tǒng)中
使用一個(gè)稱為task的數(shù)組來保存所有PCB的指針,
Linux通過task數(shù)組來管理系統(tǒng)中所有的進(jìn)程。每
一個(gè)進(jìn)程都有一個(gè)惟一標(biāo)識(shí)自己的進(jìn)程號(hào)PID,進(jìn)
程號(hào)和進(jìn)程在task數(shù)組中的位置(數(shù)組元素的下
標(biāo))之間是不同的。
害小匕一二學(xué)dp
/R-L人一廠UJ必丁一惻颯3踞加購呢^例■
同時(shí),系統(tǒng)中所有的進(jìn)程還構(gòu)成一個(gè)雙向循環(huán)隊(duì)列,
整個(gè)隊(duì)列通過進(jìn)程控制塊中的兩個(gè)指針next-task和
prev-task來維護(hù)。某個(gè)進(jìn)程在整個(gè)進(jìn)程樹中的位
置,也通過PCB中指針描述。
為了方便進(jìn)程的調(diào)度,系統(tǒng)把所有可運(yùn)行的進(jìn)程組織
成一個(gè)可運(yùn)行隊(duì)列,系統(tǒng)通過當(dāng)前(current)指針
來區(qū)別就緒狀態(tài)和執(zhí)行狀態(tài),每一個(gè)CPU都有一個(gè)
當(dāng)前指針,指向正在使用該CPU的進(jìn)程??蛇\(yùn)行隊(duì)
列也是一個(gè)雙向循環(huán)隊(duì)列,隊(duì)列中指向前后接點(diǎn)的
指針同樣存放在PCB中,它們是next-run和prev-
runo系統(tǒng)的調(diào)度函數(shù)根據(jù)一定的規(guī)則,查找整個(gè)
可運(yùn)行隊(duì)列,在其中尋找最值得執(zhí)行的進(jìn)程,給它
(或它們)分配CPU,投入執(zhí)行。
清華大學(xué)出版社
Linux系統(tǒng)內(nèi)部把所有進(jìn)程分為三類,空閑線程、內(nèi)
核線程和用戶進(jìn)程??臻e線程是系統(tǒng)中一個(gè)特殊的
具有標(biāo)志作用的進(jìn)程,它是task數(shù)組的0號(hào)元素
task\[O\],它的進(jìn)程號(hào)也是0,在源代碼中記作init-
task,只有當(dāng)整個(gè)系統(tǒng)中沒有進(jìn)程可以運(yùn)行時(shí),空
閑線程才會(huì)執(zhí)行,它始終位于系統(tǒng)可運(yùn)行隊(duì)列中,
也是該隊(duì)列的頭結(jié)點(diǎn),同時(shí)它也是所有進(jìn)程組成的
隊(duì)列的頭結(jié)點(diǎn)。內(nèi)核線程也是比較特殊的進(jìn)程,它
處于核心態(tài),沒有虛擬地址空間,擁有很高的優(yōu)先
權(quán),一般用來完成系統(tǒng)管理任務(wù),內(nèi)核交換進(jìn)程
kswapd就是其中之一。用戶進(jìn)程包括所有其他進(jìn)
程和線程,可以在用戶態(tài)和核心態(tài)兩種模式下運(yùn)
行。
港華少學(xué)出版社T!IHK
注意,空閑進(jìn)程init-task和系統(tǒng)中的1號(hào)進(jìn)程init在表
達(dá)上很相象,但二者完全不同,空閑進(jìn)程是進(jìn)程組
織、調(diào)度過程中的關(guān)鍵性標(biāo)志,它本身不完成任何
任務(wù),它不會(huì)退出也不會(huì)進(jìn)入等待狀態(tài),而init進(jìn)
程是系統(tǒng)啟動(dòng)后第一個(gè)有用的進(jìn)程,它負(fù)責(zé)啟動(dòng)系
統(tǒng)中相關(guān)進(jìn)程,在系統(tǒng)要關(guān)機(jī)之前,init進(jìn)程還要
負(fù)責(zé)結(jié)束所有的進(jìn)程,它是系統(tǒng)中整個(gè)進(jìn)程樹的祖
先。
4.3.3進(jìn)程調(diào)度時(shí)機(jī)
調(diào)度函數(shù)是Linux系統(tǒng)中執(zhí)行最為頻繁的一個(gè),它的
主要目標(biāo)就是選擇合適的進(jìn)程占有CPU,實(shí)現(xiàn)程序
的多道執(zhí)行,充分提高CPU的利用率。調(diào)度函數(shù)通
過對(duì)每個(gè)進(jìn)程PCB中相關(guān)信息查詢,按照一定的算
法,在可運(yùn)行隊(duì)列選擇進(jìn)程。如果選中的進(jìn)程并不
是當(dāng)前占有處理機(jī)的進(jìn)程,調(diào)度函數(shù)還負(fù)責(zé)保存當(dāng)
前進(jìn)程的執(zhí)行現(xiàn)場(chǎng)(進(jìn)程上下文),然后恢復(fù)選中
進(jìn)程的進(jìn)程上下文使之順利執(zhí)行。
Linux系統(tǒng)中沒有設(shè)置專門的調(diào)度進(jìn)程,在需要調(diào)度
的時(shí)候,調(diào)用一個(gè)特定的調(diào)度函數(shù)來完成調(diào)度功
能。一般來講,Linux系統(tǒng)中的進(jìn)程調(diào)度發(fā)生的時(shí)
機(jī)有下面幾種。
清華大學(xué)出版社
(1)用戶利用系統(tǒng)提供的函數(shù)調(diào)用創(chuàng)建一個(gè)新的進(jìn)程
時(shí),系統(tǒng)把它加到可運(yùn)行隊(duì)列中,返回該進(jìn)程的進(jìn)
程號(hào)。這時(shí),調(diào)度函數(shù)開始執(zhí)行,這樣的方案可以
保證系統(tǒng)具有很好的響應(yīng)特性。
(2)當(dāng)正在執(zhí)行的進(jìn)程申請(qǐng)某種暫時(shí)無法獲得的資源
或者為了與其他進(jìn)程保持同步,需要等待某個(gè)事件
的發(fā)生,進(jìn)程的PCB進(jìn)入相應(yīng)的等待事件隊(duì)列中,
進(jìn)程轉(zhuǎn)入等待狀態(tài);當(dāng)正在執(zhí)行的進(jìn)程完成了任
務(wù)或者得到特定的信號(hào)而退出,轉(zhuǎn)入僵死狀態(tài)。這
兩種進(jìn)程狀態(tài)轉(zhuǎn)換完成后,進(jìn)程主動(dòng)放棄CPU資
源,調(diào)用調(diào)度函數(shù),選擇新的進(jìn)程來使用CPU。這
種情況下,及時(shí)的調(diào)度在一定程度上可以提高CPU
資源的利用率。
清華大學(xué)出版社
(3)對(duì)于分時(shí)系統(tǒng),每個(gè)進(jìn)程執(zhí)行完一定的時(shí)間片之
后,就必須交出CPU資源,這時(shí),也要發(fā)生調(diào)度,
這樣的方案可以保證一定的公平性。
(4)我們知道,Linux系統(tǒng)提供了兩級(jí)保護(hù),用戶進(jìn)程
可以在用戶態(tài)和核心態(tài)這兩種處于不同保護(hù)模式的
情況下運(yùn)行,具有不同的特權(quán)級(jí)別,可以訪問的地
址空間不同。用戶進(jìn)程可以在這兩種模式之間進(jìn)行
切換,用戶態(tài)通過中斷或函數(shù)調(diào)用就可以轉(zhuǎn)入核心
態(tài),其中中斷是應(yīng)進(jìn)程外部發(fā)來的信息的要求而轉(zhuǎn)
入核心態(tài),函數(shù)調(diào)用則是進(jìn)程內(nèi)部要求轉(zhuǎn)入核心
態(tài)。而從核心態(tài)切換到用戶態(tài),則需要一定的硬件
支持。當(dāng)進(jìn)程從核心態(tài)返回到用戶態(tài)時(shí),將會(huì)調(diào)用
調(diào)度函數(shù),發(fā)生調(diào)度。
高華之學(xué)出版社JAUNIVEFISJTYPRESS
從本質(zhì)上來看,這些情況可以歸結(jié)為兩類時(shí)機(jī),一是
進(jìn)程本身自動(dòng)放棄處理機(jī)發(fā)生調(diào)度,這包括進(jìn)程轉(zhuǎn)
換到等待和僵死狀態(tài),這類調(diào)度是用戶進(jìn)程可以預(yù)
測(cè)的;二是由核心態(tài)轉(zhuǎn)入用戶態(tài)時(shí)發(fā)生調(diào)度,這類
調(diào)度發(fā)生最為頻繁。系統(tǒng)調(diào)用完成和內(nèi)核處理完中
斷之后系統(tǒng)是由核心態(tài)轉(zhuǎn)入用戶態(tài),時(shí)間片用完本
身也是系統(tǒng)發(fā)送的時(shí)鐘中斷,本質(zhì)上也是一種中
斷,而可運(yùn)行隊(duì)列加入新的進(jìn)程的工作只能由內(nèi)核
操作完成,無疑是發(fā)生于內(nèi)核態(tài)。
高華十字出版社
fGHUAUNIVERSITYPRESS
4.3.4進(jìn)程調(diào)度算法
操作系統(tǒng)所采用的進(jìn)程調(diào)度算法取決于系統(tǒng)最初的設(shè)
計(jì)目標(biāo),它決定了系統(tǒng)對(duì)資源,特別是CPU資源的
分配策略,直接決定著系統(tǒng)的特性。Linux系統(tǒng)采
用相當(dāng)簡(jiǎn)單但效率很高的調(diào)度算法,具有很好的響
應(yīng)特性,它提供了三種調(diào)度算法:POSIX操作系統(tǒng)
標(biāo)準(zhǔn)規(guī)定的用于實(shí)時(shí)進(jìn)程的先進(jìn)先出算法
(FIFO,FirstInFirstOut)和輪轉(zhuǎn)算法(RR,
RoundRobin),用于普通進(jìn)程的可搶占式動(dòng)態(tài)優(yōu)
先級(jí)算法(PreemptiveScheduling)。
清華大學(xué)出版社
Linux先進(jìn)先出調(diào)度算法按照實(shí)時(shí)進(jìn)程進(jìn)入可運(yùn)行隊(duì)
列的先后順序,依次把每一個(gè)進(jìn)程投入執(zhí)行,只有
前面的進(jìn)程執(zhí)行完成或者自動(dòng)放棄CPU(比如進(jìn)入
等待狀態(tài)),下一個(gè)進(jìn)程才可以執(zhí)行。這樣的算法
實(shí)現(xiàn)簡(jiǎn)單,在一般意義下也還算公平合理,但是,
如果一個(gè)執(zhí)行很短的進(jìn)程不小心排在一個(gè)執(zhí)行時(shí)間
很長的進(jìn)程之后,那就可能要花費(fèi)比執(zhí)行時(shí)間長很
多倍的時(shí)間來等待,顯然是不可接受的。Linux系
統(tǒng)的先進(jìn)先出算法同時(shí)也考慮了進(jìn)程的優(yōu)先級(jí),具
有相同優(yōu)先級(jí)的進(jìn)程采用FIFO算法,如果有更高
的優(yōu)先級(jí)出現(xiàn),調(diào)度函數(shù)就要選擇具有高優(yōu)先級(jí)的
進(jìn)程使用處理機(jī),在新進(jìn)程被加入到可運(yùn)行隊(duì)列之
后出現(xiàn)的調(diào)度時(shí)機(jī)實(shí)際就可以解決這種問題。
害小匕一;ifdp已行力十
/司-L人一廠UJ必丁一熱咖(0對(duì)!稱邕境電則!腳融題到2
Linux輪轉(zhuǎn)算法的基本原理是給每一個(gè)進(jìn)入可運(yùn)行隊(duì)
列的實(shí)時(shí)進(jìn)程分配固定大小的CPU處理時(shí)間(稱為
時(shí)間片),按照它們?cè)陉?duì)列中的順序依次開始執(zhí)
行,如果一個(gè)進(jìn)程的時(shí)間片用完之后還沒有完成要
求的任務(wù),它必須交出CPU的使用權(quán)并且重新排到
可運(yùn)行隊(duì)列的尾部,等待下一次調(diào)度,原來排在它
后面的進(jìn)程投入執(zhí)行。這樣的算法,可以保證每個(gè)
進(jìn)程就緒之后的等待時(shí)間和占用CPU的時(shí)間成比
例,更加公平。Linux系統(tǒng)使用的RR算法也考慮了
進(jìn)程的優(yōu)先級(jí),具有相同優(yōu)先級(jí)的進(jìn)程采用RR算
法,而具有更高優(yōu)先級(jí)的實(shí)時(shí)進(jìn)程擁有首先使用
CPU的權(quán)利。這樣的方案,可以保證具有高優(yōu)先級(jí)
的緊迫型實(shí)時(shí)進(jìn)程很快得到響應(yīng)。
從上面的描述可以看到,Linux提供的實(shí)際是軟件實(shí)
時(shí)。
Linux系統(tǒng)中,非實(shí)時(shí)進(jìn)程的調(diào)度采用搶占式動(dòng)態(tài)優(yōu)
先級(jí)算法。每個(gè)進(jìn)程擁有不變的靜態(tài)優(yōu)先級(jí)和可變
的動(dòng)態(tài)優(yōu)先級(jí),調(diào)度函數(shù)根據(jù)各進(jìn)程的優(yōu)先級(jí)來確
定權(quán)值,擁有最大權(quán)值的進(jìn)程被選中執(zhí)行,如果多
個(gè)進(jìn)程具有相同權(quán)值,則選取排在可運(yùn)行隊(duì)列最前
面的那一個(gè)。每一個(gè)進(jìn)程都分配一定的時(shí)間片,時(shí)
間片使用完之后,系統(tǒng)轉(zhuǎn)入調(diào)度函數(shù),等所有非實(shí)
時(shí)進(jìn)程的時(shí)間片都使用完之后,再按照各自的優(yōu)先
級(jí)給每個(gè)進(jìn)程重新分配時(shí)間片。
高華文學(xué)出版社
時(shí)間片是系統(tǒng)中比較關(guān)鍵的一個(gè)參數(shù),它的大小直接
影響系統(tǒng)的性能。1386系統(tǒng)采用段頁式存儲(chǔ)管理,
進(jìn)程的切換效率比較低,針對(duì)這種情況,Linux時(shí)
間片默認(rèn)值為200ms,用戶可以針對(duì)不同的進(jìn)程設(shè)
置時(shí)間片的值。
事實(shí)上,Linux系統(tǒng)中并沒有根據(jù)進(jìn)程的調(diào)度策略分
別管理進(jìn)程,而是把所有可運(yùn)行進(jìn)程都集中于同一
個(gè)隊(duì)列中,三種調(diào)度算法在實(shí)現(xiàn)過程中合為一種,
使用同一段程序。下一節(jié),我們就來探討Linux進(jìn)
程調(diào)度的具體過程。
4.3.5進(jìn)程調(diào)度過程
Linux系統(tǒng)的調(diào)度過程簡(jiǎn)潔而高效。整個(gè)調(diào)度過程大
概可以分為五個(gè)部分。首先檢測(cè)中斷,如果有中斷
運(yùn)行時(shí),調(diào)度過程到此為止,直接退出,如果沒有
中斷運(yùn)行,關(guān)中斷,在調(diào)度的過程中將不再允許中
斷。其次處理系統(tǒng)的內(nèi)核例程。然后對(duì)當(dāng)前進(jìn)程做
相關(guān)處理:如果當(dāng)前進(jìn)程是時(shí)間片用完的進(jìn)程按照
輪轉(zhuǎn)法調(diào)度,系統(tǒng)重新賦予時(shí)間片并把它移到隊(duì)列
的尾部;如果進(jìn)程因?yàn)榈却硞€(gè)事件而轉(zhuǎn)入等待狀
態(tài)引起調(diào)度,調(diào)度過程中發(fā)現(xiàn)事件已經(jīng)發(fā)生,進(jìn)程
仍然轉(zhuǎn)入就緒狀態(tài);如果進(jìn)程處于其他非可運(yùn)行態(tài)
的話,就要從可運(yùn)行隊(duì)列中刪除。這些都是為開始
調(diào)度而進(jìn)行的準(zhǔn)備工作。
清華大學(xué)出版社
接著調(diào)度函數(shù)遍歷整個(gè)可運(yùn)行隊(duì)列,從中找到最值得
運(yùn)行的進(jìn)程,該進(jìn)程的權(quán)值(goodness)最大。如
果該進(jìn)程不是當(dāng)前進(jìn)程,系統(tǒng)需要進(jìn)行進(jìn)程上下文
切換,如果正好就是當(dāng)前進(jìn)程,這一部分就可以跳
過去。最后打開中斷,選中的進(jìn)程開始執(zhí)行。
整個(gè)調(diào)度過程的核心就是如何計(jì)算一個(gè)進(jìn)程的權(quán)值。
在Linux系統(tǒng)中,決定進(jìn)程權(quán)值的相關(guān)參數(shù)有四
個(gè),它們都記錄在進(jìn)程控制塊中:
(1)policy,策略,一個(gè)給定進(jìn)程采用的調(diào)度算法稱為
該進(jìn)程的調(diào)度策略。進(jìn)程的調(diào)度策略是從父進(jìn)程那
里繼承來的,但是也可以通過特定系統(tǒng)調(diào)用來改
變。
高華文學(xué)出版社
(2)priority,優(yōu)先級(jí),確切地講是靜態(tài)優(yōu)先級(jí)。記載
了進(jìn)程最多可以擁有的時(shí)間片,從父進(jìn)程那里繼承
過來,只能由用戶通過系統(tǒng)調(diào)用來修改。
(3)counter,計(jì)數(shù)器,它實(shí)際上是進(jìn)程的動(dòng)態(tài)優(yōu)先
級(jí)。它表示進(jìn)程在當(dāng)前時(shí)間片中剩余的時(shí)間量。它
的初值等于靜態(tài)優(yōu)先級(jí),在進(jìn)程執(zhí)行期間,隨時(shí)間
不斷減少,當(dāng)它小于或等于0時(shí),表明進(jìn)程的時(shí)間
片用完,重新設(shè)置為0,并引起調(diào)度。
(4)rt-priority,實(shí)時(shí)優(yōu)先級(jí)。實(shí)時(shí)進(jìn)程的優(yōu)先級(jí),標(biāo)
志實(shí)時(shí)進(jìn)程優(yōu)先權(quán)的高低。取值范圍為0?99,取0
時(shí)表示不是實(shí)時(shí)進(jìn)程。
高華十字出版社
系統(tǒng)在進(jìn)行調(diào)度時(shí),首先確定該進(jìn)程的調(diào)度策略,依
據(jù)就是policy的值,然后根據(jù)不同的策略,選用適
當(dāng)?shù)乃惴ň唧w計(jì)算相應(yīng)的權(quán)值,權(quán)值是衡量一個(gè)進(jìn)
程是否執(zhí)行的惟一標(biāo)準(zhǔn)。
衡量實(shí)時(shí)進(jìn)程執(zhí)行的依據(jù)就是實(shí)時(shí)優(yōu)先級(jí)。具體的計(jì)
算公式為:
goodness=1000+rt-priority(4.1)
對(duì)于采用實(shí)時(shí)FIFO策略的進(jìn)程,具有高實(shí)時(shí)優(yōu)先級(jí)
的進(jìn)程將一直執(zhí)行,直到進(jìn)入僵死狀態(tài)、進(jìn)入等待
狀態(tài)或者是被具有更高實(shí)時(shí)優(yōu)先級(jí)的進(jìn)程奪去處理
機(jī)。采用實(shí)時(shí)RR策略的進(jìn)程,時(shí)間片用完之后,
將被放到可運(yùn)行隊(duì)列的尾部,等待下一次調(diào)度,處
理機(jī)由下一個(gè)具有相同實(shí)時(shí)優(yōu)先級(jí)的進(jìn)程使用。
清華大學(xué)出版社
普通進(jìn)程的調(diào)度策略標(biāo)記為SCHED-OTHER,采用
搶占式動(dòng)態(tài)優(yōu)先級(jí)調(diào)度策略。選擇執(zhí)行的依據(jù)是進(jìn)
程的動(dòng)態(tài)優(yōu)先級(jí)。進(jìn)程創(chuàng)建之初,動(dòng)態(tài)優(yōu)先級(jí)和靜
態(tài)優(yōu)先級(jí)具有相同的值,隨著進(jìn)程的執(zhí)行,動(dòng)態(tài)優(yōu)
先級(jí)慢慢減小,如果一個(gè)普通進(jìn)程時(shí)間片用完的
話,它的動(dòng)態(tài)優(yōu)先級(jí)就是0,而且要等到其他所有
進(jìn)程的動(dòng)態(tài)優(yōu)先級(jí)為0時(shí)才用靜態(tài)優(yōu)先級(jí)的值來初
始化。這種情況下所有普通進(jìn)程權(quán)值的計(jì)算公式都
是:
goodness=counter+priority(4.2)
因此,在調(diào)度中,用完時(shí)間片的普通進(jìn)程被選中的可
能性很小,這就給其他進(jìn)程,特別是新建進(jìn)程使用
處理機(jī)的機(jī)會(huì)。
清華大學(xué)出版社
如果進(jìn)入調(diào)度后,當(dāng)前普通進(jìn)程的時(shí)間片沒有用完,
而且仍然位于可運(yùn)行隊(duì)列中時(shí),當(dāng)前進(jìn)程的權(quán)值采
用公式(4.3)計(jì)算,除了當(dāng)前進(jìn)程之外的所有普
通進(jìn)程仍采用公式(4.2)計(jì)算權(quán)值。
goodness=counter+priority+l(4.3)
這樣,適當(dāng)增大當(dāng)前進(jìn)程的權(quán)值,以增加繼續(xù)使用處
理機(jī)的可能,可以避免過分頻繁的進(jìn)程切換。
新的普通進(jìn)程進(jìn)入可運(yùn)行隊(duì)列后,插入到隊(duì)列尾部,
將引起調(diào)度,在都使用相同靜態(tài)優(yōu)先級(jí)的情況下,
新進(jìn)程的權(quán)值很大,因此,如果沒有實(shí)時(shí)進(jìn)程和其
他一直未執(zhí)行過的就緒進(jìn)程,新建進(jìn)程投入執(zhí)行的
可能性相當(dāng)大??梢?,Linux系統(tǒng)所采用的這種調(diào)
度算法優(yōu)先保證交互性,系統(tǒng)的響應(yīng)時(shí)間比較短。
清華大學(xué)出版社
實(shí)時(shí)進(jìn)程和普通進(jìn)程相比,總是具有更高的優(yōu)先級(jí)。
因此,如果可運(yùn)行隊(duì)列中同時(shí)存在實(shí)時(shí)進(jìn)程和普通
進(jìn)程,實(shí)時(shí)進(jìn)程總是可以先使用處理機(jī)。
權(quán)值是Linux系統(tǒng)進(jìn)程調(diào)度過程中選擇進(jìn)程的惟一標(biāo)
準(zhǔn),程序?qū)崿F(xiàn)非常簡(jiǎn)單,參看kernel/sched.c。
在討論進(jìn)程調(diào)度過程的時(shí)候,我們始終認(rèn)為計(jì)算機(jī)只
有一個(gè)處理機(jī),實(shí)際上,Linux系統(tǒng)很早就開始支
持對(duì)稱多處理器,這種情況下的調(diào)度不在本書的討
論范圍之內(nèi),有興趣的讀者可以參看源代碼和本書
的相關(guān)參考文獻(xiàn)。
高華文學(xué)出版社
UNIVERSITYPRESS
4.4小結(jié)
調(diào)度主要解決處理機(jī)資源的分配問題,系統(tǒng)的調(diào)度是
分層次的,因此也稱為分級(jí)調(diào)度,按照調(diào)度發(fā)生的
頻率分為作業(yè)調(diào)度、交換調(diào)度、進(jìn)程調(diào)度和線程調(diào)
度,分別由不同的調(diào)度程序來完成。
Linux系統(tǒng)采用兩級(jí)調(diào)度,用戶作業(yè)進(jìn)入內(nèi)存,直接
參與交換調(diào)度,進(jìn)程和線程采用同樣的表示和管理
方式,也使用同樣的調(diào)度函數(shù)。
高華文學(xué)出版社
Linux系統(tǒng)采用請(qǐng)求頁式內(nèi)存動(dòng)態(tài)管理方法,根據(jù)進(jìn)
程執(zhí)行的實(shí)際需要分配內(nèi)存頁面并換入內(nèi)容,同時(shí)
使用內(nèi)核交換進(jìn)程kswapd按照記齡(aging)置換
算法來實(shí)現(xiàn)頁面淘汰功能,內(nèi)核交換進(jìn)程周期性地
執(zhí)行,通過縮減pagecachedbuffercache>換出
SYSTEMV共享內(nèi)存占用的頁面、換出或者丟棄
其他進(jìn)程占用的頁面等三種途徑縮減已使用的內(nèi)存
頁面,保證系統(tǒng)中總是有足夠的空閑頁面,保持整
個(gè)存儲(chǔ)管理子系統(tǒng)高效地運(yùn)行。
害小匕一二學(xué)dp
/R-L人一廠UJ必丁一惻颯3踞加購呢^例■
調(diào)度函數(shù)管理系統(tǒng)的可運(yùn)行隊(duì)列,該隊(duì)列中包括正在
執(zhí)行的進(jìn)程和所有就緒進(jìn)程,在實(shí)際調(diào)度中,調(diào)度
函數(shù)查詢每個(gè)進(jìn)程PCB中相關(guān)信息,按照一定的算
法,在可運(yùn)行隊(duì)列選擇合適進(jìn)程,進(jìn)行進(jìn)程上下文
切換,使得選中的進(jìn)程順利執(zhí)行。Linux系統(tǒng)提供
了三種調(diào)度算法:POSIX操作系統(tǒng)標(biāo)準(zhǔn)規(guī)定的用于
實(shí)時(shí)進(jìn)程的先進(jìn)先出算法FIFO、輪轉(zhuǎn)算法RR及用
于普通進(jìn)程的可搶占式動(dòng)態(tài)優(yōu)先級(jí)算法。Linux系
統(tǒng)用一個(gè)簡(jiǎn)單的函數(shù)實(shí)現(xiàn)了這三種進(jìn)程調(diào)度算法,
它雖然不十分完美,但高效,確實(shí)可以適用于大多
數(shù)情況。
高華十字出版社
習(xí)題
4-1什么是分級(jí)調(diào)度?描述Linux系統(tǒng)的分級(jí)調(diào)度情
況。
4-2什么是交換調(diào)度?其主要功能有哪些?Linux的
交換調(diào)度有什么特點(diǎn)?
4-3交換空間是什么?交換區(qū)和交換文件有什么區(qū)
另1J?如果安裝一個(gè)用于WWW服務(wù)的Linux系統(tǒng),你
認(rèn)為交換空間應(yīng)該怎么設(shè)置?為什么?
4-4進(jìn)程調(diào)度的功能是什么?Linux的進(jìn)程調(diào)度發(fā)生
在什么情況下?
4?5Linux系統(tǒng)的實(shí)時(shí)調(diào)度與普通調(diào)度有何區(qū)別?實(shí)
時(shí)FIFO和實(shí)時(shí)RR調(diào)度算法有何區(qū)別?分別如何實(shí)
現(xiàn)?
高華文學(xué)出版社
4-6Linux在調(diào)度算法實(shí)現(xiàn)過程中如何保證系統(tǒng)具有
良好的交互性?與此同時(shí),它犧牲了哪些方面的性
能?
4-7如果你是系統(tǒng)的root用戶,你將采取什么措施保
證你的進(jìn)程能比別的用戶具有更高的或更低的優(yōu)先
權(quán)?如果你是普通用戶,將采取什么措施?實(shí)際操
作,能夠達(dá)到目的嗎?
4-8訪問Linux核心代碼站點(diǎn)http:〃,
了解Linux核心中調(diào)度函數(shù)的最新進(jìn)展及新增特
點(diǎn)。
清華十字出版社
SITYPRESS
第5章設(shè)備
5.1設(shè)備介紹
5.2數(shù)據(jù)傳輸
5.3I/O軟件原理
5.4小結(jié)
習(xí)題
清華大學(xué)出版社
計(jì)算機(jī)系統(tǒng)中所有的軟硬件都是由操作系統(tǒng)控制和管
理的,其中除了CPU和內(nèi)存之外的幾乎所有硬件通
常統(tǒng)稱為外部設(shè)備。操作系統(tǒng)中設(shè)備管理的任務(wù)是
負(fù)責(zé)控制并操縱所有的設(shè)備,實(shí)現(xiàn)不同外部設(shè)備之
間、外部設(shè)備和內(nèi)存以及CPU之間的數(shù)據(jù)傳輸,使
它們協(xié)同工作,在獲得最佳效率、提供良好服務(wù)的
同時(shí),盡可能地提供統(tǒng)一的用戶命令和函數(shù)調(diào)用接
口,對(duì)用戶屏蔽不同設(shè)備之間的差異。
在Linux等操作系統(tǒng)中,所有的設(shè)備統(tǒng)一當(dāng)作文件來
處理,稱為設(shè)備文件,和其他文件一樣,這種文件
可以使用處理文件的標(biāo)準(zhǔn)系統(tǒng)調(diào)用打開、關(guān)閉和讀
寫。
清華大學(xué)出版社
操作系統(tǒng)設(shè)備管理部分通常也采用分層結(jié)構(gòu),底層是
設(shè)備相關(guān)部分,直接和相應(yīng)的設(shè)備打交道,負(fù)責(zé)設(shè)
備的具體控制,并向上層提供一致的訪問接口,通
常稱為設(shè)備驅(qū)動(dòng)程序。上層通常是和設(shè)備無關(guān)的,
這個(gè)部分接受來自上層的具體訪問請(qǐng)求,并根據(jù)實(shí)
際情況把這些訪問請(qǐng)求轉(zhuǎn)向具體的設(shè)備驅(qū)動(dòng)程序接
口,和設(shè)備進(jìn)行通信,接受驅(qū)動(dòng)程序的執(zhí)行結(jié)果。
本章簡(jiǎn)要介紹設(shè)備管理中數(shù)據(jù)傳輸控制的基本原理,
并以此為基礎(chǔ),學(xué)習(xí)設(shè)備分配概念及設(shè)備驅(qū)動(dòng)程
序。
/害司小-匕L一人七一學(xué)廠dJp必已后丁->十-翹星則儂質(zhì)燦題呢£^陟《
5.1設(shè)備介紹
操作系統(tǒng)中用于設(shè)備管理的內(nèi)核代碼在整個(gè)內(nèi)核中是
數(shù)量最多的部分。外部設(shè)備給用戶提供進(jìn)行計(jì)算機(jī)
基本操作以及完成各種特定功能的接口,用戶需要
交給計(jì)算機(jī)處理的所有數(shù)據(jù)都必須通過特定的外部
設(shè)備來傳輸?shù)絻?nèi)存和CPU。
設(shè)備可以被簡(jiǎn)單地看作是由機(jī)械部分和電子部分組
成。在微機(jī)系統(tǒng)中,控制器一般都有自己的控制和
狀態(tài)寄存器,獨(dú)立于系統(tǒng)的內(nèi)存空間,所有設(shè)備的
寄存器組成計(jì)算機(jī)的輸入/輸出空間(稱為I/O空
間),操作系統(tǒng)通過設(shè)備驅(qū)動(dòng)程序訪問I/O空間,
管理設(shè)備控制器,由控制器具體操縱設(shè)備完成預(yù)定
的任務(wù)。
清華大學(xué)出版社
5.1.1設(shè)備分類
外部設(shè)備可以按照不同的標(biāo)準(zhǔn)進(jìn)行分類。從普通用戶
的角度,按照設(shè)備的使用特性來劃分,普通微機(jī)的
外部設(shè)備壬要包括存儲(chǔ)設(shè)備和輸入輸出設(shè)備。
從操作系統(tǒng)管理的角度來看,按照設(shè)備傳輸信息的組
織形式,外部設(shè)備可以劃分為字符設(shè)備、塊設(shè)備和
網(wǎng)絡(luò)設(shè)備。這也是Linux操作系統(tǒng)進(jìn)行設(shè)備管理過
程中的劃分方式。
Linux系統(tǒng)中,每一個(gè)設(shè)備對(duì)應(yīng)于一個(gè)設(shè)備文件,具
有獨(dú)立的設(shè)備號(hào)。主設(shè)備號(hào)描述相應(yīng)的設(shè)備驅(qū)動(dòng)程
序,從設(shè)備號(hào)用來區(qū)分同一驅(qū)動(dòng)程序控制下的不同
設(shè)備實(shí)例。
清華大學(xué)出版社
5.1.2設(shè)備實(shí)例—磁盤
磁盤是計(jì)算機(jī)系統(tǒng)中最常見的存儲(chǔ)設(shè)備,IDE磁盤是
現(xiàn)在PC上使用最廣泛的硬盤類型,每個(gè)IDE控制卡
支持兩個(gè)獨(dú)立的盤(可以是硬盤、光驅(qū)等),每個(gè)
盤在Linux里表現(xiàn)為獨(dú)立的塊設(shè)備。
操作系統(tǒng)本身以及大量的用戶數(shù)據(jù)都存放在磁盤中,
同時(shí),Linux系統(tǒng)還使用一部分磁盤空間作為內(nèi)存
交換空間,實(shí)現(xiàn)虛擬內(nèi)存管理。所有實(shí)際的磁盤都
由多層盤片組成,磁盤的物理結(jié)構(gòu)示意圖參看圖
5.1o磁盤的扇區(qū)個(gè)數(shù)、磁頭個(gè)數(shù)和柱面?zhèn)€數(shù)三個(gè)
數(shù)據(jù)稱為磁盤的基本幾何參數(shù)。如果知道每個(gè)扇區(qū)
的具體容量(單位扇區(qū)容量),整個(gè)磁盤的容量就
是這三個(gè)幾何參數(shù)和單位扇區(qū)容量的乘積。
1GUNiy£HS.lTYPRESS、
柱面
圖5.1磁盤設(shè)備結(jié)構(gòu)示意圖
清華大學(xué)出版社
磁盤數(shù)據(jù)的讀寫需要一定的時(shí)間,這個(gè)時(shí)間具體由三
個(gè)部分組成,一是磁頭跨越磁道徑向移動(dòng)到要讀寫
道的時(shí)間,一般稱為尋道時(shí)間;二是要讀寫磁道等
待數(shù)據(jù)移動(dòng)到磁頭位置的時(shí)間,稱為旋轉(zhuǎn)延遲時(shí)
間;三是具體讀寫數(shù)據(jù)的時(shí)間,稱為數(shù)據(jù)傳輸時(shí)
間。
在實(shí)際的使用過程中,通常把整個(gè)磁盤劃分為小的管
理單元,稱為磁盤分區(qū)(partition)。在Linux系統(tǒng)
中,每一個(gè)磁盤分區(qū)都可以安裝一個(gè)獨(dú)立的文件系
統(tǒng),具有獨(dú)立的設(shè)備號(hào),主設(shè)備號(hào)對(duì)應(yīng)著磁盤本
身,從設(shè)備號(hào)對(duì)應(yīng)于該磁盤上具體的分區(qū),同時(shí),
系統(tǒng)還使用惟一的設(shè)備文件去表示磁盤分區(qū),比如
設(shè)備文件/dev/hda5,hda表示該磁盤的IDE接口上的
第1個(gè)磁盤(依此類推,hdb、hdc表示該接口上第
2、
春華大學(xué)出版社.
第3個(gè)磁盤等等),對(duì)應(yīng)于主設(shè)備號(hào),5是它的從設(shè)
備號(hào)。
清華大學(xué)出版社
5.2數(shù)據(jù)傳輸
數(shù)據(jù)在外部設(shè)備與處理機(jī)、內(nèi)存之間的傳輸控制,是
操作系統(tǒng)設(shè)備管理的主要功能,從設(shè)備到內(nèi)存和處
理機(jī)的數(shù)據(jù)傳輸稱為輸入(input),從內(nèi)存和處
理機(jī)到設(shè)備的傳輸稱為輸出(output),因此數(shù)據(jù)
傳輸也通常稱為數(shù)據(jù)I/O。一般的PC中,CPU、內(nèi)
存通過系統(tǒng)總線連接在一起,總線定義了所有設(shè)備
之間通信的協(xié)議,各種設(shè)備都直接或者間接地連接
在總線上,設(shè)備和處理機(jī)以及內(nèi)存之間的數(shù)據(jù)傳輸
必須通過總線來實(shí)現(xiàn)。數(shù)據(jù)傳輸控制要求能夠?qū)崿F(xiàn)
數(shù)據(jù)在外部設(shè)備和內(nèi)存、CPU之間快速、可靠的傳
送,充分發(fā)揮設(shè)備資源的能力,同時(shí)使用盡可能少
的系統(tǒng)開銷。
5.2.1數(shù)據(jù)傳輸控制方式
PC機(jī)中常用的數(shù)據(jù)傳輸控制方式包括程序直接控
制、中斷和內(nèi)存直接訪問三種。
1.程序直接控制
程序直接控制方式就是由用戶進(jìn)程來直接控制內(nèi)存,
或者CPU和外部設(shè)備之間的數(shù)據(jù)傳輸。用戶進(jìn)程是
數(shù)據(jù)傳輸?shù)目刂普撸谶M(jìn)程執(zhí)行過程中需要傳輸數(shù)
據(jù)時(shí),通過CPU啟動(dòng)外部設(shè)備,繼續(xù)占用處理機(jī),
進(jìn)入查詢測(cè)試等待。該進(jìn)程不停地查詢?cè)O(shè)備是否準(zhǔn)
備好,一旦數(shù)據(jù)準(zhǔn)備好,完成數(shù)據(jù)傳輸,繼續(xù)下面
的執(zhí)行。
清華大學(xué)出版社
在整個(gè)傳輸過程中,用戶進(jìn)程一直占用CPU,而
CPU所做的大量工作是查詢?cè)O(shè)備的狀態(tài),因此這種
傳輸方式也稱為查詢測(cè)試方式。如果采用這種方式
來傳輸大量的數(shù)據(jù),由于外部設(shè)備的速度比CPU要
慢很多,因此大量的時(shí)間浪費(fèi)在查詢上,設(shè)備的利
用率可以得到一定程度的保證,但是CPU資源卻得
不到有效的利用。
2.中斷方式
針對(duì)程序直接傳輸浪費(fèi)CPU資源的缺陷,引入了中
斷(interrupt)技術(shù)。中斷方式要求CPU和外部設(shè)
備之間有相應(yīng)的中斷請(qǐng)求線,外部設(shè)備可以通過中
斷請(qǐng)求線打斷CPU正在進(jìn)行的工作,轉(zhuǎn)入相應(yīng)的操
作。
清華大學(xué)出版社
中斷方式下,當(dāng)用戶進(jìn)程執(zhí)行過程中需要數(shù)據(jù)傳輸
時(shí),通過CPU啟動(dòng)外部設(shè)備,自己放棄處理機(jī)資
源,進(jìn)入等待狀態(tài),外部設(shè)備進(jìn)行相應(yīng)的數(shù)據(jù)準(zhǔn)備
工作,而CPU可以經(jīng)過調(diào)度被其他進(jìn)程所使用。直
到外部數(shù)據(jù)準(zhǔn)備完成之后,設(shè)備通過中斷請(qǐng)求線發(fā)
出中斷,發(fā)生調(diào)度,CPU轉(zhuǎn)入中斷處理程序,進(jìn)行
相應(yīng)的數(shù)據(jù)操作,而等待數(shù)據(jù)傳輸?shù)倪M(jìn)程被喚醒轉(zhuǎn)
入就緒狀態(tài),在適當(dāng)?shù)臅r(shí)候占有處理機(jī),并得到數(shù)
據(jù)繼續(xù)執(zhí)行。
利用中斷方式,在用戶進(jìn)程等待設(shè)備準(zhǔn)備數(shù)據(jù)到發(fā)出
中斷這一段時(shí)間內(nèi),CPU可以執(zhí)行其他進(jìn)程,提高
了處理機(jī)和外部設(shè)備的并行程度,一定程度上解決
了處理機(jī)資源浪費(fèi)的問題。但是,如果設(shè)備每
害小匕一;i學(xué)+
/刁一,一廠j必丁一
一次進(jìn)行數(shù)據(jù)傳輸都只能準(zhǔn)備少量的數(shù)據(jù)的話,系
統(tǒng)的效率也得不到有效的提高。每次只傳輸少量數(shù)
據(jù),每次都要發(fā)生中斷,需要進(jìn)行多次進(jìn)程調(diào)度和
進(jìn)程現(xiàn)場(chǎng)切換,就要耗費(fèi)大量的CPU資源。同時(shí),
如果有多個(gè)設(shè)備同時(shí)進(jìn)行大規(guī)模的數(shù)據(jù)傳輸,整個(gè)
系統(tǒng)中的中斷次數(shù)會(huì)急劇增加,造成CPU無法及時(shí)
響應(yīng)中斷,出現(xiàn)數(shù)據(jù)丟失的情況。因此,必須采取
一定的措施保證設(shè)備在一次中斷發(fā)生之前進(jìn)行相當(dāng)
規(guī)模的數(shù)據(jù)傳輸。
3.直接內(nèi)存訪問
直接內(nèi)存訪問(DirectMemoryAccess,DMA)可
以用來解決中斷方式的上述問題,它在外部設(shè)備和
內(nèi)存之間開辟直接的數(shù)據(jù)通道,設(shè)備控制器具有。
清華大學(xué)出版社
更強(qiáng)的功能,可以竊取CPU的一個(gè)工作周期,不需
要CPU的參與直接把數(shù)據(jù)放入到內(nèi)存中指定的位
置。
DMA方式傳輸數(shù)據(jù)時(shí),正在執(zhí)行的用戶進(jìn)程通過CPU
發(fā)出數(shù)據(jù)傳輸請(qǐng)求,同時(shí)把數(shù)據(jù)存放地址和數(shù)據(jù)量
這些主要參數(shù)通知DMA控制器,用戶進(jìn)程轉(zhuǎn)入等待
狀態(tài),CPU可以執(zhí)行其他進(jìn)程,外部設(shè)備不斷地竊
取CPU的工作周期,把準(zhǔn)備好的數(shù)據(jù)不斷地寫入內(nèi)
存相應(yīng)的位置,直到所要求的數(shù)量全部完成或者發(fā)
生錯(cuò)誤,才通過中斷線通知CPU進(jìn)行相應(yīng)的中斷處
理,這時(shí)需要數(shù)據(jù)的用戶進(jìn)程轉(zhuǎn)入就緒狀態(tài),在適
當(dāng)?shù)臅r(shí)間占用CPU繼續(xù)執(zhí)行。在整個(gè)數(shù)據(jù)傳輸過程
中,DMA控制器只是獲取CPU的工作周期,并不要
求它做額外的處理,只是到全部數(shù)據(jù)傳輸完成
害小匕一二學(xué)dp
/R-L人一廠UJ必丁一惻颯3踞加購呢^例■
或者出現(xiàn)錯(cuò)誤才發(fā)生中斷,這樣就可以保證使用盡
可能少的中斷來完成盡可能多的數(shù)據(jù)傳輸。
在前兩種數(shù)據(jù)傳輸控制方式中,數(shù)據(jù)傳輸都是圍繞
CPU開展的,CPU得知設(shè)備準(zhǔn)備好數(shù)據(jù)之后,直接
控制數(shù)據(jù)的傳輸,把它們放到內(nèi)存中適當(dāng)?shù)奈恢茫?/p>
由用戶進(jìn)程使用,二者的差別是CPU獲得設(shè)備狀態(tài)
的方式不同,前者靠不斷地查詢,后者是靠設(shè)備發(fā)
送中斷請(qǐng)求。而在DMA方式中,數(shù)據(jù)交換是圍繞
內(nèi)存進(jìn)行的,外部設(shè)備和內(nèi)存之間直接進(jìn)行數(shù)據(jù)傳
輸,數(shù)據(jù)傳輸過程中不需要CPU的干預(yù),只有數(shù)據(jù)
傳輸完成之后才通知CPU。
清華大學(xué)出版社
5.2.2數(shù)據(jù)傳輸關(guān)鍵技術(shù)
從上面的介紹可以看到,中斷技術(shù)在整個(gè)數(shù)據(jù)傳輸過
程中占有相當(dāng)重要的地位,它是提高外部設(shè)備和
CPU的并行程度、改善系統(tǒng)整體性能的關(guān)鍵。另外
一個(gè)關(guān)鍵技術(shù)是緩沖,利用這樣的技術(shù),可以大大
地減少外部設(shè)備的訪問次數(shù),實(shí)現(xiàn)系統(tǒng)整體性能的
提高。
1.中斷
中斷是指計(jì)算機(jī)在執(zhí)行期間,系統(tǒng)內(nèi)發(fā)生任何非尋常
的或非預(yù)期的急需處理事件,使得CPU暫時(shí)中斷當(dāng)
前正在執(zhí)行的程序,而轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理程
序,待處理完畢后又返回原來被中斷處,繼續(xù)執(zhí)行
或者調(diào)度新的進(jìn)程執(zhí)行的過程。引起中斷發(fā)生的
高華十字出版社
事件稱為中斷源,在計(jì)算機(jī)系統(tǒng)中,外部設(shè)備數(shù)據(jù)
傳輸過程中發(fā)生的中斷屬于I/O中斷,是中斷源中
的一大類,其他中斷源有周期性的時(shí)鐘中斷、電源
掉電產(chǎn)生的中斷等等。中斷源向CPU發(fā)出的請(qǐng)求中
斷處理信號(hào)稱為中斷請(qǐng)求,而CPU收到中斷請(qǐng)求后
轉(zhuǎn)入相應(yīng)的事件處理程序稱為中斷響應(yīng)。
按照中斷源產(chǎn)生的位置,中斷分為內(nèi)中斷和外中斷。
內(nèi)中斷由處理機(jī)和內(nèi)存內(nèi)部產(chǎn)生,通常也稱為陷
阱,它包括程序運(yùn)算引起的各種錯(cuò)誤和分時(shí)系統(tǒng)中
的時(shí)間片中斷等等。外中斷由處理機(jī)和內(nèi)存之外的
設(shè)備發(fā)出,包括上面講到的I/O中斷和時(shí)鐘、電源
中斷等等。
清華大學(xué)出版社
并不是所有中斷請(qǐng)求都會(huì)得到及時(shí)的響應(yīng)。很多情況
下,比如系統(tǒng)正在進(jìn)行進(jìn)程調(diào)度或者內(nèi)存調(diào)度操
作,為了保證操作的封閉性,這時(shí)不允許CPU響應(yīng)
中斷,這種情況稱為禁止中斷或者關(guān)中斷。CPU禁
止中斷,完成必要的操作之后必須通過硬件重新設(shè)
置才能夠接收中斷,這個(gè)過程稱為開中斷。
關(guān)中斷之后,CPU不接受任何中斷請(qǐng)求。另外一種
情況是CPU可以有選擇地響應(yīng)某些中斷,稱為中斷
屏蔽。中斷屏蔽是指中斷請(qǐng)求產(chǎn)生之后,系統(tǒng)用軟
件方式有選擇地封鎖部分中斷,而允許其余部分中
斷仍然能夠得到響應(yīng)。
并不是所有中斷請(qǐng)求都具有平等地得到響應(yīng)的權(quán)利,
根據(jù)中斷源的緊急程度,操作系統(tǒng)對(duì)不同的中斷請(qǐng)
害小匕一上學(xué)dp已行力十
/司-L人一廠J川,?丁一就第3W”跳加財(cái)呢^枷■
求賦予不同的優(yōu)先級(jí)。如果兩個(gè)中斷請(qǐng)求同時(shí)發(fā)
生,優(yōu)先級(jí)高的中斷有權(quán)在優(yōu)先級(jí)低的中斷之前得
到響應(yīng)。各種中斷源的優(yōu)先級(jí)在系統(tǒng)設(shè)計(jì)時(shí)設(shè)置完
成。
而CPU收到中斷請(qǐng)求后,首先要進(jìn)行進(jìn)程切換,原
來正在執(zhí)行的進(jìn)程放棄處理機(jī),保護(hù)現(xiàn)場(chǎng)完成之
后,轉(zhuǎn)入相應(yīng)的事件處理程序,進(jìn)行中斷處理。
一臺(tái)PC機(jī)中斷號(hào)的個(gè)數(shù)是有限的,在Linux系統(tǒng)中,
中斷號(hào)當(dāng)前使用情況記錄在文件/proc/interrupts
中。如果安裝了很多設(shè)備,大家就必須采取一定的
措施來共享有限的中斷號(hào)資源,稱為中斷共享,實(shí)
現(xiàn)中斷共享需要設(shè)備和中斷處理程序兩個(gè)方面的支
持,一方面CPU能夠通過詢問設(shè)備而知道該設(shè)備是
否產(chǎn)生過中斷,另一方面中斷處理程序能夠向前傳
清華大學(xué)出版社
2.緩沖
緩沖是計(jì)算機(jī)系統(tǒng)中為了解決外部設(shè)備和CPU之間
處理速度的匹配問題,減少外部設(shè)備中斷請(qǐng)求次數(shù)
而設(shè)置的暫時(shí)存放數(shù)據(jù)的區(qū)域。
根據(jù)數(shù)據(jù)傳輸控制方式,可以有兩種實(shí)現(xiàn)方式。一是
采用硬件緩沖器,在外部設(shè)備中設(shè)置緩沖,外部設(shè)
備每次傳輸數(shù)據(jù)之前,可以利用緩沖器準(zhǔn)備更多的
數(shù)據(jù),提高每一次傳輸?shù)臄?shù)據(jù)量,減少傳輸?shù)拇?/p>
數(shù)??梢韵胂螅绻硞€(gè)設(shè)備每次只準(zhǔn)備一個(gè)字
節(jié),傳輸1KB數(shù)據(jù)需要發(fā)生一千多次中斷請(qǐng)求,即
便是DMA方式,也需要一千次獲取CPU工作周
期,每次傳輸都要獲取總線使用權(quán),對(duì)其他進(jìn)程的
影響會(huì)是很大的。如果該設(shè)備設(shè)置1KB大小的緩沖
器,4MM
清華大學(xué)出版社
以先把數(shù)據(jù)都準(zhǔn)備在緩沖中,然后只需要一次中
斷,一次性掌握CPU和總線就可以完成數(shù)據(jù)傳輸,
系統(tǒng)的效率可以得到明顯的改善。另一種方法是在
內(nèi)存中劃分專用的數(shù)據(jù)緩沖區(qū),所有的數(shù)據(jù)I/O都
要經(jīng)過這些緩沖區(qū),每次發(fā)生數(shù)據(jù)傳輸后并不清除
緩沖區(qū)中數(shù)據(jù),下一次訪問數(shù)據(jù)時(shí)首先在緩沖區(qū)中
查找,如果緩沖區(qū)中有,則不需要啟動(dòng)外部設(shè)備就
可以得到需要的數(shù)據(jù),如果緩沖區(qū)中沒有需要的數(shù)
據(jù),再啟動(dòng)設(shè)備。這樣,經(jīng)過一段時(shí)間的積累,經(jīng)
常訪問的數(shù)據(jù)基本都在緩沖區(qū)中,系統(tǒng)啟動(dòng)設(shè)備的
次數(shù)就大大降低,可以提高數(shù)據(jù)I/O的整體效率。
前一種實(shí)現(xiàn)方法主要是設(shè)備的硬件本身增加了緩沖
器,屬于硬件緩沖,后一種方法則主要由操作系統(tǒng)
清華大學(xué)出版社
來實(shí)現(xiàn),稱為軟緩存。在Linux系統(tǒng)中,I/O過程中
使用了多種緩沖區(qū),其中最主要的是由文件系統(tǒng)來
管理,用來實(shí)現(xiàn)塊設(shè)備I/O的塊高速緩沖區(qū),第6章
“文件系統(tǒng)”中,將結(jié)合塊高速緩沖區(qū)進(jìn)一步討論緩
沖技術(shù)的實(shí)現(xiàn)和管理。
5.3I/O軟件原理
I/O軟件是控制外部設(shè)備與內(nèi)存、處理機(jī)進(jìn)行數(shù)據(jù)交
換的所有軟件的通稱。其主要的任務(wù)是充分發(fā)揮各
種設(shè)備的作用,屏蔽各種設(shè)備的特殊性,在保證系
統(tǒng)具有較高的整體性的同時(shí),盡可能向用戶提供一
個(gè)友好、清晰、規(guī)范和設(shè)備獨(dú)立的配置及使用界
面。
計(jì)算機(jī)系統(tǒng)的I/O軟件也同樣具有層次結(jié)構(gòu)。
看華尢學(xué)出版社匐
mIUNVARSITYPHESR
5.3.1Linux系統(tǒng)I/O軟件層次結(jié)構(gòu)
操作系統(tǒng)中I/O軟件大多數(shù)都可以看作是分層結(jié)構(gòu),
圖5.2給出了Linux系統(tǒng)I/O軟件層次結(jié)構(gòu)示意圖。
高華大學(xué)出版社
——玉―,―工丫PRESS
用戶進(jìn)程.會(huì):起工/。過程,接受工/。結(jié)果
1/。請(qǐng)求OO1/O應(yīng)答
文設(shè)備命名、保護(hù)
件
緩沖管理
系
統(tǒng)設(shè)備分配
設(shè)備作動(dòng)程序
中斷處理程序
硬件設(shè)備
圖5.2Linux系統(tǒng)I/O軟件層次結(jié)構(gòu)示意圖
清華大學(xué)出版社
在Linux系統(tǒng)中,I/O軟件和文件系統(tǒng)是緊密聯(lián)系的,
文件系統(tǒng)提供了用戶訪問設(shè)備、進(jìn)行數(shù)據(jù)I/O操作
的一致性接口,這個(gè)部分是設(shè)備獨(dú)立的,用戶可以
采用統(tǒng)一的方式訪問不同的設(shè)備,文件系統(tǒng)中實(shí)現(xiàn)
了設(shè)備管理的設(shè)備無關(guān)性。
在Linux系統(tǒng)中設(shè)備都是按照文件的方式命名的,每
一個(gè)設(shè)備是一個(gè)特殊類型的文件,從用戶使用的角
度來看,對(duì)設(shè)備的訪問也等同于對(duì)文件的訪問,具
體的設(shè)備操作由文件系統(tǒng)根據(jù)情況映射到具體的設(shè)
備驅(qū)動(dòng)程序來完成。所有的設(shè)備都采用和文件相同
的訪問權(quán)限控制方法,這種訪問權(quán)限的控制和用戶
聯(lián)系在一起,有效地實(shí)現(xiàn)了設(shè)備的保護(hù)和設(shè)備數(shù)據(jù)
的保密。
害小匕一七歲dpL后力十
/R-l人一廠j必丁一以理3W殂踞物財(cái)呢
緩沖區(qū)管理和設(shè)備分配也是由文件系統(tǒng)完成的。這里
的緩沖區(qū)主要指內(nèi)存中開辟的軟緩沖區(qū),它是關(guān)系
到整個(gè)系統(tǒng)效率的關(guān)鍵技術(shù)之一。對(duì)于系統(tǒng)中的磁
盤等共享設(shè)備,可以在文件系統(tǒng)的管理下同時(shí)為多
個(gè)用戶服務(wù),而對(duì)于打印機(jī)等獨(dú)占設(shè)備,則屬于臨
界資源,某一個(gè)特定時(shí)刻通常只能為一個(gè)用戶提供
服務(wù),這兩種不同類型的設(shè)備必須分別采取不同的
分配方式。
處理和管理硬件控制器的軟件是設(shè)備驅(qū)動(dòng)程序。在
Linux系統(tǒng)中,每個(gè)設(shè)備驅(qū)動(dòng)程序都是內(nèi)核的一部
分,它們提供設(shè)備與系統(tǒng)引導(dǎo)程序的接口,可以在
啟動(dòng)過程中對(duì)設(shè)備進(jìn)行初始化,還提供面向設(shè)備無
關(guān)部分的接口,接受上層設(shè)備無關(guān)軟件的I/O請(qǐng)
求,.=^一二—一______
高華十字出版社
最后通過向下的設(shè)備控制器接口,采用查詢或者中斷
方式操縱設(shè)備控制器,來和具體設(shè)備進(jìn)行數(shù)據(jù)傳
輸。Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)程序通??梢圆捎媚K
(modules)的方式來設(shè)計(jì),在系統(tǒng)引導(dǎo)完成之
后,可以動(dòng)態(tài)地加載或卸載,5.3.2節(jié)將介紹這方面
的知識(shí)。
除了少量使用查詢方式的設(shè)備之外,計(jì)算機(jī)系統(tǒng)中大
多數(shù)設(shè)備都利用中斷來控制數(shù)據(jù)的傳輸。中斷發(fā)生
之后,CPU將保存現(xiàn)場(chǎng)并切換到中斷處理程序。一
般情況下,中斷處理過程中不允許再響應(yīng)其他中
斷,至少不能響應(yīng)具有相同、或者更低優(yōu)先級(jí)的中
斷,為了不影響其他中斷的正常響應(yīng),中斷處理過
程必須要盡可能快地完成。
清華大學(xué)出版社
實(shí)際上,要保證每一個(gè)中斷處理程序都很快執(zhí)行完是
不太現(xiàn)實(shí)的。Linux采用了一種特殊的方式來實(shí)現(xiàn)
中斷處理的快速完成,稱為底半(bottomhalf)處
理的技術(shù)。每一個(gè)中斷處理程序,實(shí)際上都可以劃
分為兩個(gè)部分--一個(gè)部分響應(yīng)中斷請(qǐng)求,傳輸相
關(guān)數(shù)據(jù),通常只是中斷處理工作中很小的一部分;
另一個(gè)部分處理和發(fā)生中斷的設(shè)備相關(guān)的各種數(shù)據(jù)
結(jié)構(gòu),解決設(shè)備狀態(tài)信息和操作模式的轉(zhuǎn)換等各種
善后工作,這個(gè)部分通常要和設(shè)備進(jìn)行通信,需要
更多的時(shí)間。根據(jù)中斷處理程序的這種特點(diǎn),
Linux系統(tǒng)中把一個(gè)中斷處理分隔為兩個(gè)部分:快
速的上半部分(tophalf,頂半)和慢速的下半部
分(bottomhalf,底半)。頂半只處理很少一部分
高華十字出版社
工作,通常負(fù)責(zé)處理硬件發(fā)出的請(qǐng)求,解決數(shù)據(jù)傳
輸問題,必須快速執(zhí)行,盡可能保證在下一個(gè)中斷
產(chǎn)生之前完成。底半處理該設(shè)備相關(guān)的數(shù)據(jù)結(jié)構(gòu)和
設(shè)備狀態(tài)控制信息等比較費(fèi)時(shí)的工作,時(shí)間方面的
要求不很高,同時(shí)也允許響應(yīng)其他中斷請(qǐng)求。
因此,Linux中斷處理程序可以分為頂半和底半兩個(gè)
部分,中斷發(fā)生之后,中斷處理的頂半首先快速執(zhí)
行,處理完成之后就可以接受其他中斷,剩下的底
半部分放到一個(gè)特定的隊(duì)列中,由內(nèi)核提供的特殊
機(jī)制負(fù)責(zé)在適當(dāng)?shù)臅r(shí)機(jī)統(tǒng)一執(zhí)行。這樣,既可以保
證中斷處理程序的完整性,又可以快速響應(yīng)其他中
斷,保證系統(tǒng)具有良好的響應(yīng)特性。
清華大學(xué)出版社
當(dāng)一個(gè)用戶進(jìn)程發(fā)出I/O請(qǐng)求之后(比如,在用戶進(jìn)程
中執(zhí)行了一個(gè)設(shè)備讀取的函數(shù)調(diào)用,這個(gè)I/O請(qǐng)求
直接發(fā)送給文件系統(tǒng)),文件系統(tǒng)根據(jù)函數(shù)調(diào)用參
數(shù)確定需要讀取的設(shè)備,先進(jìn)行設(shè)備訪問權(quán)限的檢
驗(yàn),如果合法則繼續(xù)進(jìn)行,否則就返回錯(cuò)誤信息。
文件系統(tǒng)為這個(gè)讀取工作申請(qǐng)適當(dāng)?shù)木彌_區(qū),如果
發(fā)現(xiàn)需要的數(shù)據(jù)在緩沖區(qū)中已經(jīng)存在,直接從緩沖
區(qū)中讀取數(shù)據(jù),向用戶進(jìn)程返回I/O應(yīng)答,整個(gè)讀
取過程完成。
清華大學(xué)出版社
如果緩沖區(qū)中沒有需要的數(shù)據(jù),文件系統(tǒng)根據(jù)情況進(jìn)
行設(shè)備分配,向下層的設(shè)備驅(qū)動(dòng)程序發(fā)送具體的讀
取請(qǐng)求。驅(qū)動(dòng)程序利用上層傳來的數(shù)據(jù)信息,操縱
設(shè)備控制器讀取數(shù)據(jù),發(fā)出讀取命令后進(jìn)入等待狀
態(tài),設(shè)備則進(jìn)行具體的數(shù)據(jù)準(zhǔn)備工作,CPU則可以
轉(zhuǎn)向其他進(jìn)程。外部設(shè)備數(shù)據(jù)準(zhǔn)備完成之后,發(fā)出
中斷請(qǐng)求,轉(zhuǎn)入中斷處理程序完成負(fù)責(zé)中斷響應(yīng)和
數(shù)據(jù)傳輸?shù)捻敯氩糠?,中斷處理的底半部分在適當(dāng)
的時(shí)候再由內(nèi)核去完成,喚醒設(shè)備驅(qū)動(dòng)程序把數(shù)據(jù)
放入相應(yīng)的緩沖區(qū)中,返回緩沖區(qū)狀態(tài)給文件系
統(tǒng)。然后由文件系統(tǒng)從緩沖區(qū)中讀取數(shù)據(jù)給用戶進(jìn)
程,返回I/O應(yīng)答。
清華大學(xué)出版社
在設(shè)備讀寫過程中,比較慢的是設(shè)備和內(nèi)存之間進(jìn)行
數(shù)據(jù)交換的過程,特別是設(shè)備準(zhǔn)備數(shù)據(jù)的過程,而
從緩沖區(qū)中讀取數(shù)據(jù)是內(nèi)存不同位置之間的數(shù)據(jù)傳
輸,速度要快得多。對(duì)于經(jīng)常訪問的設(shè)備,要讀取
的內(nèi)容已經(jīng)在緩沖區(qū)中的情況占絕大多數(shù),因此通
過緩沖區(qū)的使用,外部設(shè)備讀寫的效率可以得到很
大的提高,當(dāng)然,這種效率是以系統(tǒng)本身的復(fù)雜性
為代價(jià)的。
清華大學(xué)出版社
5.3.2Linux設(shè)備驅(qū)動(dòng)程序
設(shè)備驅(qū)動(dòng)程序是設(shè)備管理的主要軟件之一,它負(fù)責(zé)控
制各種設(shè)備,是向文件系統(tǒng)提供一致性界面的關(guān)鍵
層。每個(gè)設(shè)備都必須由特定的設(shè)備驅(qū)動(dòng)程序來管
理,由于設(shè)備本身種類繁多,性能各異,造成了系
統(tǒng)中設(shè)備驅(qū)動(dòng)程序也有很多種類,驅(qū)動(dòng)程序代碼占
整個(gè)系統(tǒng)內(nèi)核代碼的大多數(shù)。但是這些針對(duì)不同設(shè)
備的驅(qū)動(dòng)程序都使用基本相同的接口與內(nèi)核其他部
分通信,設(shè)備的特殊性在這個(gè)層次中深深地隱藏起
來,這給用戶以及系統(tǒng)其他部分使用和管理設(shè)備帶
來了極大的方便。
害小匕一七學(xué)dpL后
/司-L人一廠j必丁一期財(cái)(則照堤的解腳32
在第1章學(xué)習(xí)操作系統(tǒng)基礎(chǔ)知識(shí)的時(shí)候,曾經(jīng)介紹
過,Linux內(nèi)核基本采用模塊結(jié)構(gòu),不同的內(nèi)核子
系統(tǒng)按照模塊來構(gòu)建,作為一個(gè)整體存在于系統(tǒng)內(nèi)
存中,屬于單內(nèi)核(或宏內(nèi)核)模式,這使得系統(tǒng)
具有相當(dāng)高的運(yùn)行效率,但是系統(tǒng)的可擴(kuò)展性及可
移植性受到一定的影響。與之相對(duì)應(yīng)的是微內(nèi)核模
式,微內(nèi)核中大部分內(nèi)核模塊都作為獨(dú)立的進(jìn)程,
它們之間通過消息通信,模塊之間互相提供服務(wù)。
清華大學(xué)出版社
采用微內(nèi)核模式的操作系統(tǒng)中,用戶可以方便地添加
新的組件,實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)等新的功能,相對(duì)來講,
單內(nèi)核模式中添加新組件要困難得多。Linux系統(tǒng)
采用模塊(modules,也稱為模組)技術(shù),來支持
動(dòng)態(tài)裝載和卸載的模塊,動(dòng)態(tài)裝載或卸載時(shí)甚至不
需要重新啟動(dòng)計(jì)算機(jī)。利用模塊技術(shù),就可以方便
地在單內(nèi)核結(jié)構(gòu)中添加新組件或卸載不再需要的內(nèi)
核組件。
每一個(gè)模塊都是核心的一部分,都運(yùn)行于系統(tǒng)態(tài),和
其他內(nèi)核部分具有相同的權(quán)限,因此,有漏洞的模
塊會(huì)給系統(tǒng)的性能和穩(wěn)定性帶來不利的影響,而惡
意的模塊就可能成為一個(gè)邏輯炸彈或病毒的良好載
體,對(duì)系統(tǒng)的安全造成威脅。
/害司小-匕L一人七一學(xué)廠dJp必已后丁->十-翹星則儂質(zhì)燦題呢£^陟《
除了系統(tǒng)啟動(dòng)過程中所必須的設(shè)備(如鍵盤、磁盤設(shè)
備等)之外,其他大多數(shù)設(shè)備以及偽設(shè)備(網(wǎng)絡(luò)設(shè)
備、文件系統(tǒng)等)的設(shè)備驅(qū)動(dòng)程序,都是采用模塊
方式來管理的。在系統(tǒng)啟動(dòng)完成之后,系統(tǒng)管理員
可以利用相關(guān)的命令來查看、加載、卸載各種驅(qū)動(dòng)
程序模塊。
Linux設(shè)備驅(qū)動(dòng)程序基本結(jié)構(gòu)
早期,Linux系統(tǒng)支持的設(shè)備驅(qū)動(dòng)程序大多數(shù)是業(yè)余
高手們開發(fā)的,隨著Linux的不斷發(fā)展,越來越多
設(shè)備生產(chǎn)廠商也開始提供驅(qū)動(dòng)程序。所有驅(qū)動(dòng)程序
都是內(nèi)核的一部分,驅(qū)動(dòng)程序的結(jié)構(gòu)和接口都有相
當(dāng)規(guī)范的定義。
清華大學(xué)出版社
給Linux寫設(shè)備驅(qū)動(dòng)程序是一件相當(dāng)容易的事,而且
很多人都在做這樣的工作,這里不打算介紹具體的
開發(fā)過程,這方面的資料網(wǎng)上很多。如果某一天,
你發(fā)現(xiàn)你的某一個(gè)設(shè)備無法驅(qū)動(dòng),首先應(yīng)該到網(wǎng)上
去找找,說不定有人碰到和你同樣的問題,而且已
經(jīng)寫好了這樣的驅(qū)動(dòng)程序,實(shí)在不行,自己動(dòng)手花
一兩天時(shí)間,應(yīng)該就可以完成了。這里只簡(jiǎn)單介紹
驅(qū)動(dòng)程序的基本結(jié)構(gòu)。
根據(jù)圖5.2所示的I/O軟件結(jié)構(gòu)圖,設(shè)備驅(qū)動(dòng)程序向下
的接口是面對(duì)設(shè)備控制器的,它定義了驅(qū)動(dòng)程序如
何與設(shè)備進(jìn)行通信的協(xié)議;向上面對(duì)的是文件系
統(tǒng),它通過文件系統(tǒng)為內(nèi)核其他部分提供統(tǒng)一的接
口,用戶的設(shè)備操作通過文件系統(tǒng)來映射到具體的
高華文學(xué)出版社
設(shè)備驅(qū)動(dòng)程序,這一部分接口對(duì)于所有設(shè)備驅(qū)動(dòng)程
序幾乎都是相同的;止匕外,還應(yīng)當(dāng)提供與系統(tǒng)引導(dǎo)
的接口,這是在系統(tǒng)啟動(dòng)過程或者加載設(shè)備驅(qū)動(dòng)模
塊時(shí),初始化設(shè)備所必需的。
一個(gè)完整的設(shè)備驅(qū)動(dòng)程序通常包括五個(gè)部分:設(shè)備驅(qū)
動(dòng)程序的注冊(cè)與注銷、設(shè)備的打開與釋放、設(shè)備的
讀寫操作、設(shè)備的控制操作,以及設(shè)備的中斷或者
查詢處理。
害小匕一七學(xué)已后->十
/司-L人一廠dJp必丁-翹星則儂質(zhì)燦題呢£^陟《
驅(qū)動(dòng)程序的注冊(cè)是在系統(tǒng)初始化或驅(qū)動(dòng)程序模塊加載
時(shí)完成的,主要實(shí)現(xiàn)設(shè)備的初始化準(zhǔn)備工作,與之
對(duì)應(yīng),驅(qū)動(dòng)程序注銷是在系統(tǒng)關(guān)閉或者驅(qū)動(dòng)程序模
塊卸載時(shí)完成,二者屬于設(shè)備驅(qū)動(dòng)程序和系統(tǒng)引導(dǎo)
的接口。注冊(cè)之后,同時(shí)也就建立了和文件系統(tǒng)的
接口,文件系統(tǒng)根據(jù)注冊(cè)過的資料,就可以建立文
件操作與具體設(shè)備驅(qū)動(dòng)程序的映射關(guān)系。
和普通文件類似,設(shè)備首先要打開才能夠進(jìn)行讀寫操
作,而且完成操作之后也要及時(shí)地釋放,釋放設(shè)備
私有數(shù)據(jù)占據(jù)的內(nèi)存、關(guān)閉設(shè)備等等,以確保下次
可以正常打開和使用設(shè)備。在設(shè)備驅(qū)動(dòng)程序這個(gè)層
次上,這些操作針對(duì)不同的設(shè)備要由不同的函數(shù)來
完成。
清華十字出版社
SJTYPRESS
在讀寫過程中,設(shè)備可能采用查詢或者中斷的方式來
控制數(shù)據(jù)傳輸,針對(duì)不同的數(shù)據(jù)傳輸控制方式,驅(qū)
動(dòng)程序采取不同的管理方式實(shí)現(xiàn)具體的數(shù)據(jù)傳輸。
/司-L人一廠UJ必丁-版婀0肘IB”邕身因則便露唇卻,
5.4小結(jié)
本章介紹了Linux設(shè)備管理方面的基礎(chǔ)知識(shí)。在
Linux系統(tǒng)中,根據(jù)系統(tǒng)管理方式的不同,設(shè)備可
以分為字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備三類,所有的
設(shè)備基本都是按照特殊的文件一一設(shè)備文件來對(duì)
待。因此,在操作系統(tǒng)使用過程中,設(shè)備的特殊性
都為文件系統(tǒng)所屏蔽,用戶命令、系統(tǒng)調(diào)用,以及
內(nèi)核其他部分只能通過文件系統(tǒng),以統(tǒng)一的模式來
使用設(shè)備。
清華大學(xué)出版社
可以使用不同的方式控制外部設(shè)備、CPU和內(nèi)存之
間的數(shù)據(jù)傳輸,PC機(jī)通常使用的方式有程序直接
控制(查詢)、中斷,以及內(nèi)存直接訪
(DMA)o
提高數(shù)據(jù)傳輸效率的另一個(gè)有效手段是緩沖,可以在
設(shè)備上增加緩沖器,設(shè)備每次傳輸數(shù)據(jù)之前可以準(zhǔn)
備更多的數(shù)據(jù),擴(kuò)大設(shè)備與CPU或內(nèi)存之間一次數(shù)
據(jù)傳輸?shù)囊?guī)模,減少中斷次數(shù),稱為硬緩沖,這種
方法增加了硬件設(shè)備的成本和復(fù)雜度。也可以在內(nèi)
存中開辟緩沖區(qū),設(shè)備與CPU或內(nèi)存之間的數(shù)據(jù)傳
輸都通過這樣的緩沖區(qū)保留備份,下一次用戶進(jìn)程
需要數(shù)據(jù)傳輸時(shí)首先在緩沖中尋找,如果已經(jīng)存在
于緩沖中,就不需要再啟動(dòng)外部設(shè)備,從而節(jié)約了
大量的時(shí)間,這種方式稱為軟緩沖,在Linux系統(tǒng)
中統(tǒng)一由文件系統(tǒng)管理。
/司-L人一廠j必丁一捌31儂跪惻眄^
I/O軟件是控制外部設(shè)備與內(nèi)存、處理機(jī)進(jìn)行數(shù)據(jù)交
換的所有軟件的通稱。Linux系統(tǒng)的I/O軟件具有層
次結(jié)構(gòu),上層是文件系統(tǒng),它負(fù)責(zé)設(shè)備命名、設(shè)備
保護(hù)、緩沖區(qū)管理以及設(shè)備分配等工作,屏蔽各種
的設(shè)備特殊性,向用戶提供一個(gè)友好、清晰、規(guī)范
和設(shè)備獨(dú)立的配置、使用界面,用戶可以像使用普
通文件那樣進(jìn)行設(shè)備操作;下層主要是設(shè)備驅(qū)動(dòng)程
序和對(duì)應(yīng)的中斷處理程序,Linux系統(tǒng)中大多數(shù)設(shè)
備驅(qū)動(dòng)程序都是獨(dú)立的內(nèi)核模塊,可以動(dòng)態(tài)地加載
和卸載,同時(shí)采用獨(dú)具特色的底半處理技術(shù)來完成
中斷處理,提高中斷處理的效率。
層次構(gòu)造的Linux系統(tǒng)I/O軟件中,所有模塊協(xié)同工
作,可以充分發(fā)揮各種設(shè)備的作用,同時(shí)保證系統(tǒng)
二具有較高的整體性。._________________
卷/司,-[七l人J一/廠一必二行-zp
習(xí)題
5-1數(shù)據(jù)傳輸控制方式有哪幾種?比較它們的優(yōu)缺
點(diǎn)。
5-2什么是中斷、中斷處理和中斷響應(yīng)?為什么要引
入中斷?
5-3在你的機(jī)器中,鍵盤和CPU、內(nèi)存之間的數(shù)據(jù)傳
輸使用什么方式控制?如果有一次計(jì)算機(jī)不再響應(yīng)
任何鍵盤命令,你認(rèn)為是什么原因?有辦法解決
嗎?
5-4什么是緩沖?為什么引入緩沖?
5-5在Linux系統(tǒng)中,為什么我們可以像使用文件一
樣操作一個(gè)設(shè)備?
清華尢學(xué)出版社■n
5-6Linux文件系統(tǒng)在整個(gè)I/O軟件中處于什么地位?
5-7什么是設(shè)備驅(qū)動(dòng)程序?Linux系統(tǒng)中,用戶怎么
使用設(shè)備驅(qū)動(dòng)程序?
5-8下面各項(xiàng)工作是在I/O軟件的哪一層完成?
(a)磁盤寫操作、計(jì)算磁道、扇區(qū)和磁頭
(b)維護(hù)磁盤讀寫高速緩沖
(c)讀取設(shè)備狀態(tài)寄存器
(d)檢查用戶是否可以訪問某個(gè)設(shè)備
5-9如果你新裝的聲卡不工作,你如何解決這個(gè)問
題?
SITYPRESS
第6章文件系統(tǒng)
6.1文件系統(tǒng)概述
6.2文件管理
6.3目錄
6.4邏輯文件系統(tǒng)——Ext2
6.5虛擬文件系統(tǒng)——VFS
6.6小結(jié)
習(xí)題
清華大學(xué)出版社
數(shù)據(jù)處理是計(jì)算機(jī)的主要功能之一,與數(shù)據(jù)處理相關(guān)
的數(shù)據(jù)管理和數(shù)據(jù)保存是必不可少甚至是較為重要
的環(huán)節(jié)。在計(jì)算機(jī)中,大量的數(shù)據(jù)和信息是通過文
件存儲(chǔ)和管理的。文件系統(tǒng)負(fù)責(zé)管理文件和邏輯文
件系統(tǒng),提供管理設(shè)備、屏蔽設(shè)備復(fù)雜性的手段,
為系統(tǒng)內(nèi)核其他部分、用戶命令和系統(tǒng)函數(shù)調(diào)用提
供統(tǒng)一的服務(wù)接口。
本章主要討論Linux系統(tǒng)中文件的概念、目錄結(jié)構(gòu)及
訪問權(quán)限,Linux的邏輯文件系統(tǒng)Ext2,虛擬文件
系統(tǒng)VFS,文件系統(tǒng)管理及緩沖區(qū)管理等內(nèi)容。管
道(FIFO)文件是利用文件系統(tǒng)作為接口實(shí)現(xiàn)進(jìn)
程間的通信,本章不再介紹,具體原理請(qǐng)參見
2.2.6“進(jìn)程通信”部分。
高華十字「社
UNiyERSJTYPRESS
6.1文件系統(tǒng)概述
通常我們把與管理文件有關(guān)的軟件和數(shù)據(jù),統(tǒng)稱為文
件系統(tǒng)。它方便地組織管理計(jì)算機(jī)中的所有文件,
為用戶提供文件的操作手段和存取控制。同時(shí),文
件系統(tǒng)隱藏了系統(tǒng)中最為紛繁復(fù)雜的硬件設(shè)備特
征,為用戶以及操作系統(tǒng)的其他子系統(tǒng)提供一個(gè)統(tǒng)
一、簡(jiǎn)潔的接口,通過文件系統(tǒng),使得用戶方便地
使用計(jì)算機(jī)的存儲(chǔ)、輸入/輸出等設(shè)備。
清華大學(xué)出版社
在學(xué)習(xí)Linux進(jìn)程管理時(shí),我們也許注意到,系統(tǒng)惟
一感知和控制進(jìn)程的關(guān)鍵數(shù)據(jù)一一進(jìn)程控制塊中,
除了CPU和內(nèi)存資源之外,只包含了文件系統(tǒng)信息
和文件信息,而沒有設(shè)備的任何信息,這就是文件
系統(tǒng)所起的作用。Linux系統(tǒng)中把CPU、內(nèi)存之外
所有其他設(shè)備都抽象為文件來處理。進(jìn)程只和文件
系統(tǒng)打交道,具體的細(xì)節(jié),由設(shè)備管理部分具體實(shí)
現(xiàn)并為文件系統(tǒng)提供盡可能簡(jiǎn)潔統(tǒng)一的接口。因
止匕,文件系統(tǒng)還同時(shí)充當(dāng)著設(shè)備管理接口的角色,
用戶進(jìn)程使用和操作具體的設(shè)備,都必須通過文件
系統(tǒng)進(jìn)行。文件系統(tǒng)是操作系統(tǒng)中與管理文件有關(guān)
的所有軟件和數(shù)據(jù)的集合。
害小匕一二學(xué)dp
/R-L人一廠UJ必丁一惻颯3踞加購呢^例■
不同的操作系統(tǒng)可能采用不同的文件系統(tǒng)。支持多種
不同類型的文件系統(tǒng)是Linux操作系統(tǒng)的主要特色
之一。Linux系統(tǒng)自身的文件系稱為ext2,它也是
Linux默認(rèn)的文件系統(tǒng)。我們把ext2以及Linux支持
的文件系統(tǒng)稱為邏輯文件系統(tǒng),通常每一種邏輯
文件系統(tǒng)服務(wù)于一種特定的操作系統(tǒng),具有不同的
組織結(jié)構(gòu)和文件操作函數(shù),相互之間差別很大。
Linux在傳統(tǒng)的邏輯文件系統(tǒng)的基礎(chǔ)上,增加了一
個(gè)稱為虛擬文件系統(tǒng)(VFS)的接口層,如圖6」所
/J\O
高華大學(xué)出版社
——玉―,―工丫PRESS
圖6.1Linux文件系統(tǒng)層次結(jié)構(gòu)示意圖
清華大學(xué)出版社
系統(tǒng)中所有的設(shè)備,包括字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)
備,都按照某種方式由邏輯文件系統(tǒng)統(tǒng)一管理,邏
輯文件系統(tǒng)為它們提供訪問接口。虛擬文件系統(tǒng)在
最上層,管理各種邏輯文件系統(tǒng),屏蔽了它們之間
的差異,為用戶命令、函數(shù)調(diào)用和內(nèi)核其他部分提
供訪問文件和設(shè)備的統(tǒng)一接口,使得不同的邏輯
文件系統(tǒng)按照同樣的模式呈現(xiàn)在使用者面前,對(duì)于
普通用戶來講,覺察不到邏輯文件系統(tǒng)之間的差
異,可以使用同樣的命令來操作不同邏輯文件系統(tǒng)
所管理的文件,可以在它們之間自由地復(fù)制文件。
清華大學(xué)出版社
6.2文件管理
6.2.1文件
文件可以簡(jiǎn)單地理解為一段程序或數(shù)據(jù)的集合。在操
作系統(tǒng)中,文件被定義為一個(gè)命名的相關(guān)字符流的
集合,或者一個(gè)具有符號(hào)名的相關(guān)記錄的集合。符
號(hào)名用來惟一地標(biāo)識(shí)一個(gè)文件,也就是文件名。
Linux系統(tǒng)中,文件名最大長度由NR-NAME-LEN
控制,默認(rèn)值為255個(gè)字符。
文件定義中所指出的不同基本組成單位表示了兩種形
式的文件。相關(guān)字符流組成的文件是一種無結(jié)構(gòu)文
件或流式文件。相關(guān)記錄組成的文件稱為記錄式文
件。記錄式文件通常主要用于信息管理。
在UNIX、Linux等操作系統(tǒng)中,把包括硬件設(shè)備在
內(nèi)的能夠進(jìn)行流式字符操作的內(nèi)容都定義為文件。
Linux系統(tǒng)中文件的類型包括:普通文件,目錄文
件,連接文件,管道(FIFO)文件、設(shè)備文件
(塊設(shè)備、字符設(shè)備)和套接字。
Linux系統(tǒng)把文件按照其性質(zhì)、用途等標(biāo)準(zhǔn)劃分為不
同的類別。操作系統(tǒng)根據(jù)文件的類型處理文件。按
照用途,文件可以分為:系統(tǒng)文件、庫文件和用戶
文件。系統(tǒng)文件直接和操作系統(tǒng)本身有關(guān),包括操
作系統(tǒng)核心和各種系統(tǒng)應(yīng)用程序和數(shù)據(jù);庫文件通
常指系統(tǒng)提供給用戶調(diào)用的各種標(biāo)準(zhǔn)過程、函數(shù)和
應(yīng)用程序;用戶文件是用戶委托計(jì)算機(jī)文件系統(tǒng)管
理的文件。
清華大學(xué)出版社
當(dāng)然,這只是一種相對(duì)的標(biāo)準(zhǔn),對(duì)于Linux系統(tǒng),根
據(jù)自己的實(shí)際需要,具有特殊權(quán)限的用戶(系統(tǒng)管
理員)可以重新修改并編譯升級(jí)整個(gè)內(nèi)核,這個(gè)過
程將會(huì)修改大部分系統(tǒng)文件,同時(shí)庫文件也可以按
照自己的需要添加和修改。
根據(jù)文件中數(shù)據(jù)的表示形式,可以把文件劃分為
ASCII碼文件和二進(jìn)制文件。
按照文件操作過程中的保護(hù)級(jí)別,文件可以劃分為只
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年西寧晚報(bào)數(shù)字報(bào)刊內(nèi)容版權(quán)保護(hù)與許可合同3篇
- 建設(shè)工程消防查驗(yàn)合同(2篇)
- 重點(diǎn)領(lǐng)域政策力度持續(xù)加強(qiáng) 債券市場(chǎng)信用風(fēng)險(xiǎn)趨于緩和-2024年債券市場(chǎng)信用風(fēng)險(xiǎn)分析及2025年展望 -新世紀(jì)
- 初三中考備考指導(dǎo)模板
- 2025年銷售薪資結(jié)構(gòu)優(yōu)化合同規(guī)范2篇
- 九年級(jí)自我介紹綜評(píng)范文(4篇)
- 益陽雙面銑床施工方案
- 雨刷器機(jī)械原理課程設(shè)計(jì)
- 二零二五民法典合同編電子書制作合同4篇
- 2025年度電影院日常保潔與觀眾安全服務(wù)合同4篇
- 物業(yè)民法典知識(shí)培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識(shí)點(diǎn)詳解
- 2024-2025學(xué)年山東省德州市高中五校高二上學(xué)期期中考試地理試題(解析版)
- 《萬方數(shù)據(jù)資源介紹》課件
- 麻風(fēng)病病情分析
- 《急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)》
- 第一章-地震工程學(xué)概論
- JJF(陜) 063-2021 漆膜沖擊器校準(zhǔn)規(guī)范
- 《中國糖尿病防治指南(2024版)》更新要點(diǎn)解讀
- TSGD7002-2023-壓力管道元件型式試驗(yàn)規(guī)則
- 2024年度家庭醫(yī)生簽約服務(wù)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論