操作系統(tǒng)設(shè)備管理_第1頁(yè)
操作系統(tǒng)設(shè)備管理_第2頁(yè)
操作系統(tǒng)設(shè)備管理_第3頁(yè)
操作系統(tǒng)設(shè)備管理_第4頁(yè)
操作系統(tǒng)設(shè)備管理_第5頁(yè)
已閱讀5頁(yè),還剩92頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.第第5 5章章 設(shè)備管理設(shè)備管理 首先回顧操作系統(tǒng)的總體構(gòu)架,定位設(shè)備管理所處地位 然后學(xué)習(xí)設(shè)備管理的基本原理 最后了解LINUX設(shè)備管理實(shí)例. 操操作作系系統(tǒng)統(tǒng)整整體體結(jié)結(jié)構(gòu)構(gòu).操作系統(tǒng)的基本組織結(jié)構(gòu)操作系統(tǒng)的基本組織結(jié)構(gòu)進(jìn)程與資進(jìn)程與資源管理源管理文件管理文件管理存儲(chǔ)管理存儲(chǔ)管理設(shè)備管理設(shè)備管理處理機(jī)處理機(jī)主存主存設(shè)備設(shè)備操作系統(tǒng)操作系統(tǒng)計(jì)算機(jī)硬件計(jì)算機(jī)硬件.Linux文件系統(tǒng)文件系統(tǒng).設(shè)備管理設(shè)備管理引言引言輸入輸入/輸出硬件輸出硬件輸入輸入/輸出軟件輸出軟件LINUX輸入輸入/輸出系統(tǒng)概述輸出系統(tǒng)概述小結(jié)小結(jié)引言引言 硬件設(shè)備與控制軟件之間的聯(lián)系:硬件設(shè)備與控制軟件之間的聯(lián)系:設(shè)備設(shè)

2、備控制器控制器內(nèi)存映射地址內(nèi)存映射地址處理機(jī)處理機(jī) 驅(qū)動(dòng)程序驅(qū)動(dòng)程序I/O管理程序管理程序文件系統(tǒng)文件系統(tǒng)用戶(hù)的用戶(hù)的I/O請(qǐng)求請(qǐng)求 設(shè)備管理的主要任務(wù)設(shè)備管理的主要任務(wù)設(shè)備分配設(shè)備分配實(shí)現(xiàn)數(shù)據(jù)傳輸實(shí)現(xiàn)數(shù)據(jù)傳輸提供用戶(hù)使用接口提供用戶(hù)使用接口提高并行操作度提高并行操作度 設(shè)備管理程序提供的功能設(shè)備管理程序提供的功能為進(jìn)程管理提供接口(將進(jìn)程的請(qǐng)求轉(zhuǎn)給設(shè)備管理)為進(jìn)程管理提供接口(將進(jìn)程的請(qǐng)求轉(zhuǎn)給設(shè)備管理)實(shí)施設(shè)備分配(設(shè)備分類(lèi)、調(diào)度算法、等待隊(duì)列)實(shí)施設(shè)備分配(設(shè)備分類(lèi)、調(diào)度算法、等待隊(duì)列)實(shí)現(xiàn)設(shè)備之間以及設(shè)備與實(shí)現(xiàn)設(shè)備之間以及設(shè)備與CPU之間并行操作(之間并行操作(DMA、通道)、通道)緩沖

3、區(qū)管理緩沖區(qū)管理.輸入輸入/ /輸出硬件輸出硬件 電子設(shè)備 設(shè)備分類(lèi)字符設(shè)備塊設(shè)備 設(shè)備控制器 DMA存儲(chǔ)器直接存取 通道圖形控制器監(jiān)控器處理機(jī)存儲(chǔ)控制器緩存內(nèi)存SCSI控制器IDE磁盤(pán)控制器擴(kuò)展總線(xiàn)內(nèi)部接口鍵盤(pán)串口并口磁盤(pán)磁盤(pán)磁盤(pán)磁盤(pán)SCSI總線(xiàn)PCI總線(xiàn)擴(kuò)展總線(xiàn)圖5.1 典型的PC總線(xiàn)結(jié)構(gòu).內(nèi)核的輸入內(nèi)核的輸入/ /出結(jié)構(gòu)出結(jié)構(gòu).PCI系統(tǒng)示意圖系統(tǒng)示意圖.PC系統(tǒng)結(jié)構(gòu)與系統(tǒng)結(jié)構(gòu)與PCI總線(xiàn)總線(xiàn).典型的典型的PC總線(xiàn)結(jié)構(gòu)總線(xiàn)結(jié)構(gòu).磁帶磁帶磁帶格式磁帶格式磁帶頭部磁帶頭部反光片反光片磁帶尾部磁帶尾部反光片反光片記記錄錄記記錄錄IRGIRG塊記錄格式塊記錄格式記錄記錄1記錄記錄2記錄記錄3記錄

4、記錄4IRGIRG800字節(jié)字節(jié).磁盤(pán)磁盤(pán)扇區(qū)扇區(qū)磁道磁道單磁盤(pán)片表面的劃單磁盤(pán)片表面的劃分分旋轉(zhuǎn)方向旋轉(zhuǎn)方向讀讀/寫(xiě)磁頭寫(xiě)磁頭臂移動(dòng)方向臂移動(dòng)方向 移動(dòng)頭磁盤(pán)示意圖移動(dòng)頭磁盤(pán)示意圖.磁盤(pán)設(shè)備結(jié)構(gòu)磁盤(pán)設(shè)備結(jié)構(gòu).兩種輸入兩種輸入/輸出模式輸出模式.輸入輸出設(shè)備特點(diǎn)輸入輸出設(shè)備特點(diǎn).Intel奔騰處理器中斷向量表奔騰處理器中斷向量表.輸入輸入/輸出軟件輸出軟件 輸入輸入/輸出軟件的作用輸出軟件的作用 數(shù)據(jù)傳送控制方式數(shù)據(jù)傳送控制方式程序直接控制方式程序直接控制方式中斷方式中斷方式DMA方式方式通道控制方式通道控制方式 中斷處理過(guò)程中斷處理過(guò)程 驅(qū)動(dòng)程序所處地位驅(qū)動(dòng)程序所處地位 與設(shè)備無(wú)關(guān)的與設(shè)備無(wú)

5、關(guān)的I/O軟件(文件系統(tǒng)功能)軟件(文件系統(tǒng)功能) 用戶(hù)層的輸入用戶(hù)層的輸入/輸出軟件(使用輸出軟件(使用read/write) 設(shè)備分配設(shè)備分配 緩沖區(qū)管理緩沖區(qū)管理 I/O進(jìn)程控制進(jìn)程控制.輸入輸入/輸出軟件的作用輸出軟件的作用使用使用I/O系統(tǒng)調(diào)用:格式化系統(tǒng)調(diào)用:格式化I/O執(zhí)行執(zhí)行I/O操作操作命名、保護(hù)、阻塞、緩沖、分配設(shè)備命名、保護(hù)、阻塞、緩沖、分配設(shè)備I/O結(jié)束時(shí),喚醒設(shè)備服務(wù)子程序結(jié)束時(shí),喚醒設(shè)備服務(wù)子程序設(shè)置設(shè)備寄存器、檢測(cè)狀態(tài)設(shè)置設(shè)備寄存器、檢測(cè)狀態(tài)4-用戶(hù)進(jìn)程用戶(hù)進(jìn)程3-設(shè)備無(wú)關(guān)軟件設(shè)備無(wú)關(guān)軟件2-設(shè)備驅(qū)設(shè)備驅(qū)動(dòng)程序動(dòng)程序硬硬 件件設(shè)備服務(wù)子程序設(shè)備服務(wù)子程序1-中斷處

6、理程序中斷處理程序I/O請(qǐng)求請(qǐng)求I/O應(yīng)答應(yīng)答.輸入輸入/ /輸出請(qǐng)求輸出請(qǐng)求的提交周期的提交周期.程序直接控制方式程序直接控制方式否否外圍設(shè)備外圍設(shè)備做接收或發(fā)送數(shù)據(jù)準(zhǔn)備做接收或發(fā)送數(shù)據(jù)準(zhǔn)備接收到接收到start命令命令標(biāo)志觸發(fā)器置標(biāo)志觸發(fā)器置“done”等待等待CPU來(lái)的下條指令來(lái)的下條指令準(zhǔn)備完畢?準(zhǔn)備完畢?是是否否CPU發(fā)發(fā)start命令命令等等 待待執(zhí)行下條指令執(zhí)行下條指令開(kāi)始數(shù)據(jù)傳送開(kāi)始數(shù)據(jù)傳送設(shè)備標(biāo)志觸發(fā)設(shè)備標(biāo)志觸發(fā)器為器為done”?是是(a)(b)中斷控制方式的傳送結(jié)構(gòu)中斷控制方式的傳送結(jié)構(gòu)I/O控制器控制器1I/O控制器控制器nI/O設(shè)備設(shè)備1I/O設(shè)備設(shè)備n地址線(xiàn)地址線(xiàn)數(shù)

7、據(jù)線(xiàn)數(shù)據(jù)線(xiàn)控制線(xiàn)控制線(xiàn)intCPU內(nèi)存內(nèi)存start啟動(dòng)位啟動(dòng)位中斷位中斷位信號(hào)線(xiàn)信號(hào)線(xiàn)控制狀態(tài)寄存器控制狀態(tài)寄存器數(shù)據(jù)緩沖寄存器數(shù)據(jù)緩沖寄存器.中斷控制方式的處理過(guò)程中斷控制方式的處理過(guò)程接收到接收到CPU發(fā)來(lái)的發(fā)來(lái)的start指令指令準(zhǔn)備數(shù)據(jù)并將其準(zhǔn)備數(shù)據(jù)并將其置入緩沖寄存器置入緩沖寄存器緩沖寄存器滿(mǎn)嗎?緩沖寄存器滿(mǎn)嗎?控制器發(fā)中斷信號(hào)控制器發(fā)中斷信號(hào)向設(shè)備發(fā)向設(shè)備發(fā)start指令指令將中斷允許位置將中斷允許位置1調(diào)度程序調(diào)度調(diào)度程序調(diào)度其他進(jìn)程其他進(jìn)程其他進(jìn)程執(zhí)行其他進(jìn)程執(zhí)行收到中斷信號(hào)了嗎?收到中斷信號(hào)了嗎?中斷處理中斷處理被中斷進(jìn)程執(zhí)行被中斷進(jìn)程執(zhí)行否否否否是是設(shè)備設(shè)備CPU完成了嗎

8、?完成了嗎?.中斷驅(qū)動(dòng)的輸入中斷驅(qū)動(dòng)的輸入/ /出周期出周期.DMADMADMA控制器控制器CPU內(nèi)存內(nèi)存I/O設(shè)備設(shè)備數(shù)據(jù)數(shù)據(jù)中斷位中斷位啟動(dòng)位啟動(dòng)位控制狀態(tài)寄存器控制狀態(tài)寄存器數(shù)據(jù)緩沖寄存器數(shù)據(jù)緩沖寄存器內(nèi)存地址寄存器內(nèi)存地址寄存器傳送字節(jié)數(shù)寄存器傳送字節(jié)數(shù)寄存器DMADMA方式的傳送結(jié)構(gòu)方式的傳送結(jié)構(gòu)startint.DMA傳輸步驟傳輸步驟.DMA方式的數(shù)據(jù)傳送處理過(guò)程方式的數(shù)據(jù)傳送處理過(guò)程否否CPU發(fā)發(fā)start命令命令內(nèi)存地址內(nèi)存地址 內(nèi)存始址寄存器內(nèi)存始址寄存器傳送字節(jié)數(shù)傳送字節(jié)數(shù)字節(jié)計(jì)數(shù)器字節(jié)計(jì)數(shù)器允許中斷位與啟動(dòng)位置允許中斷位與啟動(dòng)位置1當(dāng)前進(jìn)程被阻塞,當(dāng)前進(jìn)程被阻塞,調(diào)度程序

9、調(diào)度其他進(jìn)程運(yùn)行調(diào)度程序調(diào)度其他進(jìn)程運(yùn)行被調(diào)度的進(jìn)程執(zhí)行被調(diào)度的進(jìn)程執(zhí)行接收到中斷接收到中斷信號(hào)嗎?信號(hào)嗎?是是轉(zhuǎn)中斷處理轉(zhuǎn)中斷處理設(shè)備設(shè)備啟動(dòng)設(shè)備準(zhǔn)備數(shù)據(jù)啟動(dòng)設(shè)備準(zhǔn)備數(shù)據(jù)DMA控制器接收到控制器接收到start指令指令緩沖寄存器內(nèi)容入內(nèi)存緩沖寄存器內(nèi)容入內(nèi)存改變傳送字節(jié)數(shù)計(jì)數(shù)器改變傳送字節(jié)數(shù)計(jì)數(shù)器與內(nèi)存地址寄存器內(nèi)容與內(nèi)存地址寄存器內(nèi)容否否傳送字節(jié)數(shù)傳送字節(jié)數(shù)0?嗎?嗎?數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)緩沖寄存器數(shù)據(jù)緩沖寄存器發(fā)中斷信號(hào)發(fā)中斷信號(hào)停止停止I/O操作操作是是.I/O控制器控制器I/O控制器控制器I/O控制器控制器I/O控制器控制器I/O控制器控制器I/O控制器控制器I/O控制器控制器字節(jié)多路字節(jié)多

10、路通道通道選擇通道選擇通道成組多路成組多路通道通道磁盤(pán)磁盤(pán)磁盤(pán)磁盤(pán)磁帶磁帶磁帶磁帶終端終端終端終端終端終端CPU內(nèi)存內(nèi)存總線(xiàn)總線(xiàn)通道方式的數(shù)據(jù)傳送結(jié)構(gòu)通道方式的數(shù)據(jù)傳送結(jié)構(gòu).通道控制方式的描述過(guò)程通道控制方式的描述過(guò)程 從從CPU執(zhí)行指令的角度來(lái)描述對(duì)通道的控制方式執(zhí)行指令的角度來(lái)描述對(duì)通道的控制方式 : Channel control procedure: repeat IRMpc pcpc+1 execute(IR) if require accessing with I/O Device then Command (I/O operation,Address of I/O device,

11、channel) fi if I/O Done Interupt then Call Interrupt processing control fi until machine halt Interrupt processing control procedure .中斷處理過(guò)程中斷處理過(guò)程關(guān)中斷關(guān)中斷保存被中斷程序的現(xiàn)場(chǎng)保存被中斷程序的現(xiàn)場(chǎng)分析中斷原因分析中斷原因轉(zhuǎn)中斷處理子程序轉(zhuǎn)中斷處理子程序執(zhí)行中斷處理子程序執(zhí)行中斷處理子程序恢復(fù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)開(kāi)中斷開(kāi)中斷返回中斷點(diǎn)返回中斷點(diǎn).用戶(hù)進(jìn)程請(qǐng)求設(shè)備服務(wù)的流程用戶(hù)進(jìn)程請(qǐng)求設(shè)備服務(wù)的流程用戶(hù)進(jìn)程用戶(hù)進(jìn)程文件系統(tǒng)文件系統(tǒng)設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序設(shè)備控

12、制器設(shè)備控制器設(shè)備本身設(shè)備本身用戶(hù)進(jìn)程用戶(hù)進(jìn)程設(shè)備無(wú)關(guān)軟件設(shè)備無(wú)關(guān)軟件設(shè)備驅(qū)設(shè)備驅(qū)動(dòng)程序動(dòng)程序硬硬 件件設(shè)備服務(wù)子程序設(shè)備服務(wù)子程序中斷處理程序中斷處理程序I/O請(qǐng)求請(qǐng)求I/O應(yīng)答應(yīng)答.設(shè)備無(wú)關(guān)軟件的功能設(shè)備無(wú)關(guān)軟件的功能 (設(shè)備文件)(設(shè)備文件)對(duì)設(shè)備程序的統(tǒng)一接口對(duì)設(shè)備程序的統(tǒng)一接口設(shè)備命名(主設(shè)備號(hào),次設(shè)備號(hào))設(shè)備命名(主設(shè)備號(hào),次設(shè)備號(hào))設(shè)備保護(hù)(讀、寫(xiě)權(quán)限)設(shè)備保護(hù)(讀、寫(xiě)權(quán)限)提供一個(gè)獨(dú)立于設(shè)備的邏輯塊(記錄)提供一個(gè)獨(dú)立于設(shè)備的邏輯塊(記錄)緩沖(緩沖區(qū)管理)緩沖(緩沖區(qū)管理)塊設(shè)備的存儲(chǔ)分配(盤(pán)塊)塊設(shè)備的存儲(chǔ)分配(盤(pán)塊)分配和釋放獨(dú)占設(shè)備(打印機(jī)、磁帶機(jī))分配和釋放獨(dú)占設(shè)備(

13、打印機(jī)、磁帶機(jī))錯(cuò)誤報(bào)告錯(cuò)誤報(bào)告.用戶(hù)層輸入用戶(hù)層輸入/輸出軟件輸出軟件I/O操作的庫(kù)例程操作的庫(kù)例程例如:例如:read(fd,buf,nbytes)是讀文件的系統(tǒng)調(diào)用,由它調(diào)用的庫(kù)函數(shù)是讀文件的系統(tǒng)調(diào)用,由它調(diào)用的庫(kù)函數(shù)read會(huì)與用戶(hù)程序連接在一起,放在可執(zhí)行程序中。會(huì)與用戶(hù)程序連接在一起,放在可執(zhí)行程序中。 Spooling系統(tǒng)系統(tǒng)“Simultaneous Peripheral Operation On-Line”Spooling是在多道程序系統(tǒng)中處理獨(dú)占設(shè)備的一種方法。是在多道程序系統(tǒng)中處理獨(dú)占設(shè)備的一種方法。例如:一般的打印機(jī)是一種獨(dú)占資源,每次只能有一個(gè)程序使用打印機(jī),但如果例

14、如:一般的打印機(jī)是一種獨(dú)占資源,每次只能有一個(gè)程序使用打印機(jī),但如果一個(gè)進(jìn)程打開(kāi)打印機(jī)而不使用它,那么其它的進(jìn)程都無(wú)法打印。一個(gè)進(jìn)程打開(kāi)打印機(jī)而不使用它,那么其它的進(jìn)程都無(wú)法打印。 創(chuàng)建一個(gè)特殊的守護(hù)進(jìn)程創(chuàng)建一個(gè)特殊的守護(hù)進(jìn)程(daemon)以及一個(gè)特殊的目錄,稱(chēng)為以及一個(gè)特殊的目錄,稱(chēng)為Spooling目錄。目錄。這時(shí),打印一個(gè)文件之前,進(jìn)程首先產(chǎn)生完整的待打印文件并將其放在這時(shí),打印一個(gè)文件之前,進(jìn)程首先產(chǎn)生完整的待打印文件并將其放在Spooling目錄下。當(dāng)進(jìn)程把該文件放到目錄下。當(dāng)進(jìn)程把該文件放到Spooling系統(tǒng)中之后就可以認(rèn)為打印系統(tǒng)中之后就可以認(rèn)為打印過(guò)程已經(jīng)完成,雖然打印機(jī)還

15、沒(méi)有進(jìn)行該文件的打印,因此也稱(chēng)為打印的過(guò)程已經(jīng)完成,雖然打印機(jī)還沒(méi)有進(jìn)行該文件的打印,因此也稱(chēng)為打印的“假脫機(jī)假脫機(jī)”過(guò)程。而整個(gè)的打印作業(yè)由該守護(hù)進(jìn)程進(jìn)行處理,只有該守護(hù)進(jìn)過(guò)程。而整個(gè)的打印作業(yè)由該守護(hù)進(jìn)程進(jìn)行處理,只有該守護(hù)進(jìn)程能夠真正使用打印機(jī)設(shè)備文件。通過(guò)禁止用戶(hù)直接使用打印機(jī)設(shè)備文件程能夠真正使用打印機(jī)設(shè)備文件。通過(guò)禁止用戶(hù)直接使用打印機(jī)設(shè)備文件,從從而解決了打印機(jī)的獨(dú)占問(wèn)題。而解決了打印機(jī)的獨(dú)占問(wèn)題。 .SPOOLing系統(tǒng)示意圖系統(tǒng)示意圖.設(shè)備分配采用的數(shù)據(jù)結(jié)構(gòu)設(shè)備分配采用的數(shù)據(jù)結(jié)構(gòu) 設(shè)備類(lèi)型設(shè)備類(lèi)型設(shè)備標(biāo)識(shí)設(shè)備標(biāo)識(shí)設(shè)備忙設(shè)備忙/閑標(biāo)記閑標(biāo)記COCT指針指針設(shè)備等待隊(duì)列首設(shè)備等待

16、隊(duì)列首設(shè)備等待隊(duì)列尾設(shè)備等待隊(duì)列尾驅(qū)動(dòng)程序地址驅(qū)動(dòng)程序地址表目表目1表目表目i設(shè)備類(lèi)型設(shè)備類(lèi)型設(shè)備標(biāo)識(shí)設(shè)備標(biāo)識(shí)獲得設(shè)備的進(jìn)程獲得設(shè)備的進(jìn)程DCT指針指針 系統(tǒng)設(shè)備表系統(tǒng)設(shè)備表SDT控制器標(biāo)識(shí)控制器標(biāo)識(shí)控制忙控制忙/閑標(biāo)記閑標(biāo)記CHCT指針指針控制器等待隊(duì)列首控制器等待隊(duì)列首控制器等待隊(duì)列尾控制器等待隊(duì)列尾COCT DCT 通道標(biāo)識(shí)通道標(biāo)識(shí)通道忙通道忙/閑標(biāo)記閑標(biāo)記通道等待隊(duì)列首通道等待隊(duì)列首通道等待隊(duì)列尾通道等待隊(duì)列尾CHCT 設(shè)備分配流程圖設(shè)備分配流程圖進(jìn)程進(jìn)程P等待控制器等待控制器由進(jìn)程由進(jìn)程P來(lái)的來(lái)的I/O請(qǐng)求請(qǐng)求搜索搜索SDT找到找到DCT指針指針按分配策略選取按分配策略選取占據(jù)該設(shè)備

17、的進(jìn)程占據(jù)該設(shè)備的進(jìn)程進(jìn)程進(jìn)程P被選中?被選中?查查DCT該設(shè)備忙?該設(shè)備忙?檢查該設(shè)備分配給檢查該設(shè)備分配給進(jìn)程進(jìn)程P的安全性的安全性安全嗎?安全嗎?該設(shè)備分配給進(jìn)程該設(shè)備分配給進(jìn)程PA按分配策略選取按分配策略選取占據(jù)該設(shè)備的進(jìn)程占據(jù)該設(shè)備的進(jìn)程進(jìn)程進(jìn)程P按分配策略按分配策略入入I/O等待隊(duì)列等待隊(duì)列等待該設(shè)備空閑等待該設(shè)備空閑搜索搜索DCT指針,指針,找到找到COCT指針指針控制器忙嗎?控制器忙嗎?A分配控制器給進(jìn)程分配控制器給進(jìn)程P搜索搜索COCT找到找到CHCT指針指針通道忙?通道忙?分配通道給進(jìn)程分配通道給進(jìn)程P啟動(dòng)啟動(dòng)I/O進(jìn)程進(jìn)程P等待通道等待通道是是是是是是是是否否否否否否是是

18、否否否否.設(shè)備狀態(tài)表設(shè)備狀態(tài)表.緩沖區(qū)管理技術(shù)緩沖區(qū)管理技術(shù) 單緩沖區(qū)單緩沖區(qū) 多緩沖區(qū)多緩沖區(qū) 緩沖池緩沖池 設(shè)備號(hào)數(shù)據(jù)塊號(hào)緩沖區(qū)號(hào)互斥標(biāo)示位鏈指針: :空緩沖區(qū)空緩沖區(qū)inout緩沖池操作函數(shù):getbuf、putbuf等等緩沖首部緩沖首部.緩沖區(qū)技術(shù)緩沖區(qū)技術(shù).雙機(jī)通信時(shí)緩沖技術(shù)示意圖雙機(jī)通信時(shí)緩沖技術(shù)示意圖.緩沖池示意圖緩沖池示意圖參見(jiàn)SPOOLing系統(tǒng).I/OI/O控制控制中斷原因分析中斷原因分析喚醒中斷喚醒中斷處理程序處理程序I/O請(qǐng)求處理請(qǐng)求處理設(shè)備分配程序設(shè)備分配程序緩沖區(qū)管理緩沖區(qū)管理中斷響應(yīng)中斷響應(yīng)啟動(dòng)啟動(dòng)I/O指令、設(shè)備驅(qū)動(dòng)指令、設(shè)備驅(qū)動(dòng)程序或通道程序程序或通道程序I/

19、O控制控制.使用系統(tǒng)調(diào)用執(zhí)行輸入使用系統(tǒng)調(diào)用執(zhí)行輸入/出流程出流程.I/O控制的實(shí)現(xiàn)控制的實(shí)現(xiàn) I/O控制過(guò)程在系統(tǒng)中可以按三種方式實(shí)現(xiàn)控制過(guò)程在系統(tǒng)中可以按三種方式實(shí)現(xiàn)作為請(qǐng)求作為請(qǐng)求I/O操作的進(jìn)程的一部分實(shí)現(xiàn)操作的進(jìn)程的一部分實(shí)現(xiàn)作為當(dāng)前進(jìn)程的一部分實(shí)現(xiàn)作為當(dāng)前進(jìn)程的一部分實(shí)現(xiàn)I/O控制由專(zhuān)門(mén)的系統(tǒng)進(jìn)程控制由專(zhuān)門(mén)的系統(tǒng)進(jìn)程 I/O進(jìn)程完成:進(jìn)程完成: 每類(lèi)每類(lèi)(個(gè)個(gè))設(shè)備設(shè)一專(zhuān)門(mén)的設(shè)備設(shè)一專(zhuān)門(mén)的I/O進(jìn)程,且該進(jìn)程只能在系統(tǒng)態(tài)下執(zhí)進(jìn)程,且該進(jìn)程只能在系統(tǒng)態(tài)下執(zhí)行行 整個(gè)系統(tǒng)設(shè)一整個(gè)系統(tǒng)設(shè)一I/O進(jìn)程,全面負(fù)責(zé)系統(tǒng)的數(shù)據(jù)傳送工作進(jìn)程,全面負(fù)責(zé)系統(tǒng)的數(shù)據(jù)傳送工作 每類(lèi)每類(lèi)(個(gè)個(gè))設(shè)備設(shè)一個(gè)專(zhuān)

20、門(mén)的設(shè)備設(shè)一個(gè)專(zhuān)門(mén)的I/O進(jìn)程,但該進(jìn)程既可在用戶(hù)態(tài)也進(jìn)程,但該進(jìn)程既可在用戶(hù)態(tài)也可在系統(tǒng)態(tài)下執(zhí)行可在系統(tǒng)態(tài)下執(zhí)行.原理部分小結(jié)原理部分小結(jié) 設(shè)備管理的基本過(guò)程設(shè)備管理的基本過(guò)程 設(shè)備管理用的數(shù)據(jù)結(jié)構(gòu)設(shè)備管理用的數(shù)據(jù)結(jié)構(gòu) 通道、控制器、通道、控制器、 DMA、中斷、緩沖區(qū)、中斷、緩沖區(qū)、 數(shù)據(jù)傳送控制方式數(shù)據(jù)傳送控制方式(直接、中斷、直接、中斷、DMA、通道、通道) 主設(shè)備號(hào)、次設(shè)備號(hào)(對(duì)應(yīng)驅(qū)動(dòng)程序及其參數(shù))主設(shè)備號(hào)、次設(shè)備號(hào)(對(duì)應(yīng)驅(qū)動(dòng)程序及其參數(shù)) 設(shè)備分類(lèi)(字符、塊設(shè)備、網(wǎng)絡(luò)設(shè)備)設(shè)備分類(lèi)(字符、塊設(shè)備、網(wǎng)絡(luò)設(shè)備) 設(shè)備分配算法設(shè)備分配算法 I/O控制控制.設(shè)備管理設(shè)備管理引言引言輸入輸入

21、/輸出硬件輸出硬件輸入輸入/輸出軟件輸出軟件LINUX輸入輸入/輸出系統(tǒng)概述輸出系統(tǒng)概述小結(jié)小結(jié).緩沖區(qū)管理技術(shù)緩沖區(qū)管理技術(shù) 單緩沖區(qū)單緩沖區(qū) 多緩沖區(qū)多緩沖區(qū) 緩沖池緩沖池 設(shè)備號(hào)數(shù)據(jù)塊號(hào)緩沖區(qū)號(hào)互斥標(biāo)示位鏈指針: :空緩沖區(qū)空緩沖區(qū)inout緩沖池操作函數(shù):getbuf、putbuf等等緩沖首部緩沖首部.緩沖區(qū)技術(shù)緩沖區(qū)技術(shù).雙機(jī)通信時(shí)緩沖技術(shù)示意圖雙機(jī)通信時(shí)緩沖技術(shù)示意圖.緩沖池示意圖緩沖池示意圖參見(jiàn)SPOOLing系統(tǒng).I/OI/O控制控制中斷原因分析中斷原因分析喚醒中斷喚醒中斷處理程序處理程序I/O請(qǐng)求處理請(qǐng)求處理設(shè)備分配程序設(shè)備分配程序緩沖區(qū)管理緩沖區(qū)管理中斷響應(yīng)中斷響應(yīng)啟動(dòng)啟動(dòng)

22、I/O指令、設(shè)備驅(qū)動(dòng)指令、設(shè)備驅(qū)動(dòng)程序或通道程序程序或通道程序I/O控制控制.使用系統(tǒng)調(diào)用執(zhí)行輸入使用系統(tǒng)調(diào)用執(zhí)行輸入/出流程出流程.I/O控制的實(shí)現(xiàn)控制的實(shí)現(xiàn) I/O控制過(guò)程在系統(tǒng)中可以按三種方式實(shí)現(xiàn)控制過(guò)程在系統(tǒng)中可以按三種方式實(shí)現(xiàn)作為請(qǐng)求作為請(qǐng)求I/O操作的進(jìn)程的一部分實(shí)現(xiàn)操作的進(jìn)程的一部分實(shí)現(xiàn)作為當(dāng)前進(jìn)程的一部分實(shí)現(xiàn)作為當(dāng)前進(jìn)程的一部分實(shí)現(xiàn)I/O控制由專(zhuān)門(mén)的系統(tǒng)進(jìn)程控制由專(zhuān)門(mén)的系統(tǒng)進(jìn)程 I/O進(jìn)程完成:進(jìn)程完成: 每類(lèi)每類(lèi)(個(gè)個(gè))設(shè)備設(shè)一專(zhuān)門(mén)的設(shè)備設(shè)一專(zhuān)門(mén)的I/O進(jìn)程,且該進(jìn)程只能在系統(tǒng)態(tài)下執(zhí)進(jìn)程,且該進(jìn)程只能在系統(tǒng)態(tài)下執(zhí)行行 整個(gè)系統(tǒng)設(shè)一整個(gè)系統(tǒng)設(shè)一I/O進(jìn)程,全面負(fù)責(zé)系統(tǒng)的數(shù)據(jù)傳送

23、工作進(jìn)程,全面負(fù)責(zé)系統(tǒng)的數(shù)據(jù)傳送工作 每類(lèi)每類(lèi)(個(gè)個(gè))設(shè)備設(shè)一個(gè)專(zhuān)門(mén)的設(shè)備設(shè)一個(gè)專(zhuān)門(mén)的I/O進(jìn)程,但該進(jìn)程既可在用戶(hù)態(tài)也進(jìn)程,但該進(jìn)程既可在用戶(hù)態(tài)也可在系統(tǒng)態(tài)下執(zhí)行可在系統(tǒng)態(tài)下執(zhí)行.原理部分原理部分小結(jié)小結(jié) 設(shè)備管理的基本過(guò)程設(shè)備管理的基本過(guò)程 設(shè)備管理用的數(shù)據(jù)結(jié)構(gòu)設(shè)備管理用的數(shù)據(jù)結(jié)構(gòu) 通道、控制器、通道、控制器、 DMA、中斷、緩沖區(qū)、中斷、緩沖區(qū)、 數(shù)據(jù)傳送控制方式數(shù)據(jù)傳送控制方式(直接、中斷、直接、中斷、DMA、通道、通道) 主設(shè)備號(hào)、次設(shè)備號(hào)(對(duì)應(yīng)驅(qū)動(dòng)程序及其參數(shù))主設(shè)備號(hào)、次設(shè)備號(hào)(對(duì)應(yīng)驅(qū)動(dòng)程序及其參數(shù)) 設(shè)備分類(lèi)(字符、塊設(shè)備、網(wǎng)絡(luò)設(shè)備)設(shè)備分類(lèi)(字符、塊設(shè)備、網(wǎng)絡(luò)設(shè)備) 設(shè)備分配

24、算法設(shè)備分配算法 I/O控制控制.LINUX輸入輸入/輸出系統(tǒng)概述輸出系統(tǒng)概述 Linux輸入輸入/輸出的過(guò)程概述輸出的過(guò)程概述 設(shè)備驅(qū)動(dòng)程序基礎(chǔ)設(shè)備驅(qū)動(dòng)程序基礎(chǔ) Linux的中斷處理的中斷處理 設(shè)備驅(qū)動(dòng)程序的框架設(shè)備驅(qū)動(dòng)程序的框架 字符設(shè)備驅(qū)動(dòng)程序字符設(shè)備驅(qū)動(dòng)程序 塊設(shè)備驅(qū)動(dòng)程序塊設(shè)備驅(qū)動(dòng)程序.概述概述設(shè)備無(wú)關(guān)軟件設(shè)備無(wú)關(guān)軟件標(biāo)準(zhǔn)設(shè)備接口標(biāo)準(zhǔn)設(shè)備接口(read,write,open,close,)設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序設(shè)備文件設(shè)備文件 (在在/dev目錄下目錄下)輸入輸入/輸出請(qǐng)求輸出請(qǐng)求出錯(cuò)返回出錯(cuò)返回.LinuxLinux文件系統(tǒng)的層次結(jié)構(gòu)文件系統(tǒng)的層次結(jié)構(gòu).設(shè)備驅(qū)動(dòng)分層結(jié)構(gòu)設(shè)備驅(qū)動(dòng)分

25、層結(jié)構(gòu).設(shè)備驅(qū)動(dòng)程序基礎(chǔ)設(shè)備驅(qū)動(dòng)程序基礎(chǔ)總線(xiàn):總線(xiàn):CPU和和I/O設(shè)備是通過(guò)總線(xiàn)連接起來(lái)。設(shè)備是通過(guò)總線(xiàn)連接起來(lái)。 PC機(jī)常見(jiàn)總線(xiàn)有機(jī)常見(jiàn)總線(xiàn)有ISA,PCI等等。等等。I/O地址空間:地址空間:所有設(shè)備的寄存器組成。所有設(shè)備的寄存器組成。 察看文件察看文件:/proc/ioportsI/O數(shù)據(jù)傳輸:數(shù)據(jù)傳輸:忙等待、中斷方式、忙等待、中斷方式、DMA方式方式設(shè)備分類(lèi):設(shè)備分類(lèi):字符設(shè)備、塊設(shè)備字符設(shè)備、塊設(shè)備設(shè)備名:設(shè)備名:主設(shè)備號(hào)主設(shè)備號(hào)(驅(qū)動(dòng)程序驅(qū)動(dòng)程序)、次設(shè)備號(hào)、次設(shè)備號(hào)(驅(qū)動(dòng)程序的參數(shù))驅(qū)動(dòng)程序的參數(shù))設(shè)備文件:設(shè)備文件:在在/dev目錄下,在內(nèi)核中由目錄下,在內(nèi)核中由file結(jié)

26、構(gòu)表示。結(jié)構(gòu)表示。設(shè)備驅(qū)動(dòng)程序接口:由設(shè)備驅(qū)動(dòng)程序接口:由file_operations數(shù)據(jù)結(jié)構(gòu)完成。數(shù)據(jù)結(jié)構(gòu)完成。.文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)備號(hào)設(shè)備號(hào)例如:例如:mknod()創(chuàng)建設(shè)備文件,創(chuàng)建設(shè)備文件,需要提供設(shè)備號(hào)需要提供設(shè)備號(hào)struct file_operations chardev_fops = open: chardev_open, release: chardev_release, read: chardev_read, write: chardev_write, ;Struct file_operations def_blk_fops=open:blkdev_ope

27、n,release:blkdev_close,llseek:block_llseek,read:block_read,write:block_fsync,ioctl:blkdev_ioctl,;塊設(shè)備操作定義塊設(shè)備操作定義字符設(shè)備操作定義字符設(shè)備操作定義.驅(qū)動(dòng)程序接口(調(diào)用入口點(diǎn))驅(qū)動(dòng)程序接口(調(diào)用入口點(diǎn))struct file_operations loff_t (*llseek) (struct file *, loff_t, int);ssize_t (*read) (struct file *, char *, size_t, loff_t *);ssize_t (*write)(st

28、ruct file *, char *, size_t, loff_t *);int (*open)(struct inode *, struct file *);int (*release)(struct inode*, struct file *);int (*ioctl)(struct inode *, struct file *, unsigned int, unsigned long).Linux的中斷處理的中斷處理 1、中斷類(lèi)型、中斷類(lèi)型外中斷,陷阱(外中斷,陷阱(INT n),異常。),異常。 2、睡眠與喚醒、睡眠與喚醒驅(qū)動(dòng)程序啟動(dòng)設(shè)備后,進(jìn)入睡眠;驅(qū)動(dòng)程序啟動(dòng)設(shè)備后,進(jìn)入睡眠;

29、設(shè)備完成設(shè)備完成I/O后,向后,向CPU 發(fā)中斷請(qǐng)求;發(fā)中斷請(qǐng)求;CPU根據(jù)中斷請(qǐng)求找到睡眠的驅(qū)動(dòng)程序,并喚醒繼續(xù)處理。根據(jù)中斷請(qǐng)求找到睡眠的驅(qū)動(dòng)程序,并喚醒繼續(xù)處理。 3、中斷共享、中斷共享中斷向量表有限,對(duì)于外中斷來(lái)說(shuō),其中斷向量表項(xiàng)是共享的。中斷向量表有限,對(duì)于外中斷來(lái)說(shuō),其中斷向量表項(xiàng)是共享的。因此,共享項(xiàng)上有中斷請(qǐng)求隊(duì)列。因此,共享項(xiàng)上有中斷請(qǐng)求隊(duì)列。 4、中斷服務(wù)程序的前期(上部)和后期(下部)處理、中斷服務(wù)程序的前期(上部)和后期(下部)處理(bottom-half)前期處理執(zhí)行快速(關(guān)中斷),后期處理執(zhí)行費(fèi)時(shí)(開(kāi)中斷)前期處理執(zhí)行快速(關(guān)中斷),后期處理執(zhí)行費(fèi)時(shí)(開(kāi)中斷).Li

30、nux系統(tǒng)系統(tǒng)I/O層次結(jié)構(gòu)層次結(jié)構(gòu)設(shè)備驅(qū)動(dòng)程序向下與設(shè)備控制器接口設(shè)備驅(qū)動(dòng)程序向下與設(shè)備控制器接口:定義如何與設(shè)備進(jìn)行通信的協(xié)議:定義如何與設(shè)備進(jìn)行通信的協(xié)議(設(shè)備控制命令集合)(設(shè)備控制命令集合)設(shè)備驅(qū)動(dòng)程序向上則面對(duì)文件系統(tǒng),設(shè)備驅(qū)動(dòng)程序向上則面對(duì)文件系統(tǒng),由文件系統(tǒng)為內(nèi)核其他部分提供統(tǒng)一由文件系統(tǒng)為內(nèi)核其他部分提供統(tǒng)一接口:接口:入口調(diào)用集合入口調(diào)用集合Operations:(read、write等等)等等)設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序中斷處理程序中斷處理程序.設(shè)備驅(qū)動(dòng)程序框架設(shè)備驅(qū)動(dòng)程序框架一個(gè)完整的一個(gè)完整的Linux設(shè)備驅(qū)動(dòng)程序包括五個(gè)部分:設(shè)備驅(qū)動(dòng)程序包括五個(gè)部分:1、設(shè)備驅(qū)動(dòng)程序

31、的注冊(cè)與注銷(xiāo)(與系統(tǒng)引導(dǎo)的接口)、設(shè)備驅(qū)動(dòng)程序的注冊(cè)與注銷(xiāo)(與系統(tǒng)引導(dǎo)的接口)注冊(cè):在系統(tǒng)初始化注冊(cè):在系統(tǒng)初始化/驅(qū)動(dòng)程序模塊加載時(shí)完成,建立了與文件系統(tǒng)驅(qū)動(dòng)程序模塊加載時(shí)完成,建立了與文件系統(tǒng)的接口,文件系統(tǒng)可根據(jù)注冊(cè)資料建立文件操作與具體設(shè)備驅(qū)動(dòng)的接口,文件系統(tǒng)可根據(jù)注冊(cè)資料建立文件操作與具體設(shè)備驅(qū)動(dòng)程序的映射關(guān)系。程序的映射關(guān)系。注銷(xiāo):在系統(tǒng)關(guān)閉注銷(xiāo):在系統(tǒng)關(guān)閉/驅(qū)動(dòng)程序模塊卸載時(shí)完成驅(qū)動(dòng)程序模塊卸載時(shí)完成2、設(shè)備的打開(kāi)與關(guān)閉、設(shè)備的打開(kāi)與關(guān)閉設(shè)備首先要打開(kāi)才能讀寫(xiě),完成之后及時(shí)釋放,針對(duì)不同設(shè)備有不設(shè)備首先要打開(kāi)才能讀寫(xiě),完成之后及時(shí)釋放,針對(duì)不同設(shè)備有不同操作同操作3、設(shè)備的讀寫(xiě)操

32、作、設(shè)備的讀寫(xiě)操作在讀寫(xiě)過(guò)程中,設(shè)備可能采用查詢(xún)或者中斷的方式來(lái)控制數(shù)據(jù)傳輸,在讀寫(xiě)過(guò)程中,設(shè)備可能采用查詢(xún)或者中斷的方式來(lái)控制數(shù)據(jù)傳輸,針對(duì)不同的數(shù)據(jù)傳輸控制方式,驅(qū)動(dòng)程序采取不同的管理方式實(shí)針對(duì)不同的數(shù)據(jù)傳輸控制方式,驅(qū)動(dòng)程序采取不同的管理方式實(shí)現(xiàn)具體的數(shù)據(jù)傳輸現(xiàn)具體的數(shù)據(jù)傳輸4、設(shè)備的控制操作、設(shè)備的控制操作5、設(shè)備的中斷處理或者查詢(xún)處理、設(shè)備的中斷處理或者查詢(xún)處理.設(shè)備驅(qū)動(dòng)程序代碼功能設(shè)備驅(qū)動(dòng)程序代碼功能 驅(qū)動(dòng)程序的注冊(cè)與注銷(xiāo)驅(qū)動(dòng)程序的注冊(cè)與注銷(xiāo)字符設(shè)備用:字符設(shè)備用:register_chrdev向內(nèi)核注冊(cè)向內(nèi)核注冊(cè),un register_chrdev從內(nèi)從內(nèi)核注銷(xiāo)核注銷(xiāo) 塊設(shè)備用

33、:塊設(shè)備用:register_blkdev ()向內(nèi)核注冊(cè)向內(nèi)核注冊(cè),un register_blkdev從內(nèi)核注銷(xiāo)從內(nèi)核注銷(xiāo) 設(shè)備的打開(kāi)與釋放設(shè)備的打開(kāi)與釋放各自的各自的open()和和release() 設(shè)備的讀寫(xiě)設(shè)備的讀寫(xiě)各自的各自的read()和和write 設(shè)備的控制操作設(shè)備的控制操作各自的各自的ioctl(), 例如軟盤(pán)例如軟盤(pán)/光盤(pán)的彈出。光盤(pán)的彈出。 設(shè)備的中斷和忙等待查詢(xún)?cè)O(shè)備的中斷和忙等待查詢(xún)當(dāng)設(shè)備不支持中斷時(shí)讀寫(xiě)采用忙等待查詢(xún)?cè)O(shè)備狀態(tài)。當(dāng)設(shè)備不支持中斷時(shí)讀寫(xiě)采用忙等待查詢(xún)?cè)O(shè)備狀態(tài)。.minix_sb_info ext2_inode_infontfs_sb_infoVFS數(shù)據(jù)

34、結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu).數(shù)據(jù)結(jié)構(gòu)及其操作數(shù)據(jù)結(jié)構(gòu)及其操作inode_operations.塊設(shè)備驅(qū)動(dòng)程序塊設(shè)備驅(qū)動(dòng)程序 塊驅(qū)動(dòng)程序與內(nèi)核的接口塊驅(qū)動(dòng)程序與內(nèi)核的接口struct file_operations def_blk_fops=open:blkdev_open,release:blkdev_close,llseek:llseek,read:block_read,write:block_write,fsync:block_fsync,ioctl:blkdev_ioctl,;通過(guò)通過(guò)get_blkfops()尋找具體塊設(shè)備類(lèi)型的()尋找具體塊設(shè)備類(lèi)型的block_device_operations數(shù)

35、據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)mknodInode_operations.VFS索引結(jié)點(diǎn)索引結(jié)點(diǎn)inode中的中的file_operationsy引用引用.塊設(shè)備驅(qū)動(dòng)程序塊設(shè)備驅(qū)動(dòng)程序struct block_device_operationsint (*open)(struct inode *, struct file *);int (*release)(struct inode *, struct file *);int (*ioctl)(struct inode *, struct file *,unsigned, unsigned long);int (*check_media_change)(kde

36、v_t);int (*revalidate)(kdev_t); .針對(duì)具體塊設(shè)備針對(duì)具體塊設(shè)備IDE IDE硬盤(pán)采用的相應(yīng)接口硬盤(pán)采用的相應(yīng)接口struct block_device_operations ide_fops =open: ide_open,release: ide_release,ioctl: ide_ioctl,check_media_change:ide_check_media_change,revalidate: ide_revalidate_disk這里只定義了結(jié)構(gòu)數(shù)組的一個(gè)表項(xiàng),為將來(lái)預(yù)留了擴(kuò)展空間這里只定義了結(jié)構(gòu)數(shù)組的一個(gè)表項(xiàng),為將來(lái)預(yù)留了擴(kuò)展空間由由get_inf

37、o_ptr()根據(jù)設(shè)備號(hào)找到根據(jù)設(shè)備號(hào)找到ide_drive_t設(shè)備控制塊設(shè)備控制塊(參見(jiàn)(參見(jiàn)include/linux/ide.h)并返回這個(gè)控制塊的指針。)并返回這個(gè)控制塊的指針。.IDE硬盤(pán)的設(shè)備控制塊硬盤(pán)的設(shè)備控制塊idedisk_driverstatic ide_driver_t idedisk_driver=“ide-disk”/名字名字IDEDISK_VERSION,/版本版本ide_disk,/介質(zhì)介質(zhì)0,/忙位忙位1,/supports_dma0,/support_dsc_overlapNULL,/cleanupdo_rw_disk,/do_request具體執(zhí)行讀具體執(zhí)行

38、讀/寫(xiě)操作寫(xiě)操作NULL,/end_requestNULL,/ioctlidedisk_open,/打開(kāi)操作打開(kāi)操作idedisk_release,/釋放操作釋放操作 ;.字符設(shè)備驅(qū)動(dòng)程序字符設(shè)備驅(qū)動(dòng)程序 并口打印設(shè)備驅(qū)動(dòng)程序與內(nèi)核接口并口打印設(shè)備驅(qū)動(dòng)程序與內(nèi)核接口static struct file_operations lp_fops 并口打印設(shè)備驅(qū)動(dòng)程序并口打印設(shè)備驅(qū)動(dòng)程序 與打印機(jī)設(shè)備接口與打印機(jī)設(shè)備接口- 設(shè)備控制塊設(shè)備控制塊struct lp_struct lp_table 注冊(cè)與注銷(xiāo)注冊(cè)與注銷(xiāo)register_chrdev()unregister_chrdev ()struct

39、file_operations chardev_fops = open: chardev_open, release: chardev_release, read: chardev_read, write: chardev_write, ;/虛擬的內(nèi)存字符設(shè)備虛擬的內(nèi)存字符設(shè)備struct file_operations lp_fops = open: lp_open, release: lp_release, read: NULL, write: lp_write, ;/虛擬打印機(jī)設(shè)備虛擬打印機(jī)設(shè)備.Struct lp_struct lp_table設(shè)備控制塊設(shè)備控制塊struct lp_s

40、tructint base;unsigned int irq; int flags;unsigned int chars;unsigned int timeunsigned int wait;struct wait_queue *lp_wait_q;char *lp_buffer;unsigned int lastcall;unsigned int runchars;unsigned int waittime;struct lp_stats stats;.打開(kāi)塊設(shè)備文件的操作過(guò)程打開(kāi)塊設(shè)備文件的操作過(guò)程(1)file_operations結(jié)構(gòu)使結(jié)構(gòu)使vfs具體化成了特定的文件系統(tǒng)具體化成了特定

41、的文件系統(tǒng)或文件類(lèi)型(塊設(shè)備文件)或文件類(lèi)型(塊設(shè)備文件)(2)block_device數(shù)據(jù)結(jié)構(gòu)使代表著抽象意義上的文件的數(shù)據(jù)結(jié)構(gòu)使代表著抽象意義上的文件的inode結(jié)構(gòu)具體化成了結(jié)構(gòu)具體化成了“塊設(shè)備塊設(shè)備(3)block_device_operations結(jié)構(gòu)使結(jié)構(gòu)使“塊設(shè)備文件塊設(shè)備文件”操操作進(jìn)一步具體化成了作進(jìn)一步具體化成了“IDE設(shè)備設(shè)備”操作操作(4)ide_drive_t結(jié)構(gòu)將籠統(tǒng)的結(jié)構(gòu)將籠統(tǒng)的“IDE設(shè)備設(shè)備”具體化成了特具體化成了特定種類(lèi)的定種類(lèi)的IDE設(shè)備設(shè)備(5)ide_driver_t結(jié)構(gòu)將某種結(jié)構(gòu)將某種IDE設(shè)備的操作具體化成對(duì)特設(shè)備的操作具體化成對(duì)特定定IDE硬盤(pán)

42、的操作硬盤(pán)的操作.可安裝模塊概念可安裝模塊概念在應(yīng)用程序界面上,內(nèi)核通過(guò)在應(yīng)用程序界面上,內(nèi)核通過(guò)4個(gè)系統(tǒng)調(diào)用支持可安裝模塊的動(dòng)態(tài)安個(gè)系統(tǒng)調(diào)用支持可安裝模塊的動(dòng)態(tài)安裝和拆卸:裝和拆卸:create_module() /在內(nèi)核中創(chuàng)建一個(gè)在內(nèi)核中創(chuàng)建一個(gè)module數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)init_module() /sys_init_module將模塊映象裝入內(nèi)核空間將模塊映象裝入內(nèi)核空間query_module() /向系統(tǒng)詢(xún)問(wèn)模塊中無(wú)法落實(shí)的符號(hào)向系統(tǒng)詢(xún)問(wèn)模塊中無(wú)法落實(shí)的符號(hào)delete_module()/釋放模塊結(jié)構(gòu)和所占用的系統(tǒng)空間釋放模塊結(jié)構(gòu)和所占用的系統(tǒng)空間通常用戶(hù)不需要直接調(diào)用這些系統(tǒng)調(diào)用

43、,而是通過(guò)下面的系統(tǒng)工具通常用戶(hù)不需要直接調(diào)用這些系統(tǒng)調(diào)用,而是通過(guò)下面的系統(tǒng)工具來(lái)安裝和拆卸可安裝模塊,再由這些工具來(lái)調(diào)用上述的系統(tǒng)調(diào)用。來(lái)安裝和拆卸可安裝模塊,再由這些工具來(lái)調(diào)用上述的系統(tǒng)調(diào)用。系統(tǒng)提供的工具:系統(tǒng)提供的工具:/sbin/insmod/sbin/rmmod每個(gè)安裝模塊都要提供函數(shù):參見(jiàn)操作系統(tǒng)輔導(dǎo)與提高每個(gè)安裝模塊都要提供函數(shù):參見(jiàn)操作系統(tǒng)輔導(dǎo)與提高p164,172,177init_module(); /負(fù)責(zé)注冊(cè)設(shè)備和驅(qū)動(dòng)程序初始化,成功則返回負(fù)責(zé)注冊(cè)設(shè)備和驅(qū)動(dòng)程序初始化,成功則返回0 cleanup_module() /負(fù)責(zé)從內(nèi)核中注銷(xiāo)設(shè)備,釋放動(dòng)態(tài)申請(qǐng)的內(nèi)存負(fù)責(zé)從內(nèi)核中

44、注銷(xiāo)設(shè)備,釋放動(dòng)態(tài)申請(qǐng)的內(nèi)存空間空間.可安裝模塊開(kāi)發(fā)過(guò)程可安裝模塊開(kāi)發(fā)過(guò)程 編寫(xiě)編寫(xiě)C程序模塊程序模塊 (設(shè)備驅(qū)動(dòng)程序)(設(shè)備驅(qū)動(dòng)程序) 編譯該模塊編譯該模塊 使用系統(tǒng)工具使用系統(tǒng)工具insmod和和rmmod安裝模塊的安裝模塊的 .o 文文件件 使用命令使用命令mknod安裝這個(gè)設(shè)備安裝這個(gè)設(shè)備 實(shí)際地使用這個(gè)新設(shè)備實(shí)際地使用這個(gè)新設(shè)備 具體實(shí)例參見(jiàn)具體實(shí)例參見(jiàn)“操作系統(tǒng)輔導(dǎo)與提高操作系統(tǒng)輔導(dǎo)與提高P162-181”.Linux設(shè)備管理小結(jié)設(shè)備管理小結(jié) 設(shè)備分類(lèi):塊、字符、網(wǎng)絡(luò)設(shè)備 設(shè)備文件:每個(gè)設(shè)備都與一個(gè)特殊文件對(duì)應(yīng) 文件系統(tǒng)屏蔽了設(shè)備的特殊性,通過(guò)文件系統(tǒng)使用設(shè)備 I/O軟件是控制外設(shè)

45、與內(nèi)存、外設(shè)與CPU進(jìn)行數(shù)據(jù)交換的所有軟件的統(tǒng)稱(chēng) Linux系統(tǒng)的I/O軟件具有層次結(jié)構(gòu)上層是文件系統(tǒng):負(fù)責(zé)設(shè)備命名、設(shè)備保護(hù)、緩沖區(qū)管理、設(shè)備分配;提供方便用戶(hù)使用的界面下層是設(shè)備驅(qū)動(dòng)程序和中斷處理程序:驅(qū)動(dòng)程序可以是獨(dú)立的內(nèi)核模塊,可以動(dòng)態(tài)地加載和卸載;中斷處理采用底半處理技術(shù),提高中斷處理的效率.磁盤(pán)調(diào)度算法磁盤(pán)調(diào)度算法 先來(lái)先服務(wù)先來(lái)先服務(wù)FCFS 最短尋道時(shí)間優(yōu)先最短尋道時(shí)間優(yōu)先SSTF 掃描算法掃描算法SCAN 循環(huán)掃描算法循環(huán)掃描算法CSCAN(Circular SCAN).磁盤(pán)調(diào)度算法磁盤(pán)調(diào)度算法尋道時(shí)間尋道時(shí)間旋轉(zhuǎn)延遲時(shí)間旋轉(zhuǎn)延遲時(shí)間Ts= m n + s,尋道時(shí)間,尋道時(shí)間

46、其中:其中:m為常數(shù);為常數(shù);n為移動(dòng)磁道數(shù);為移動(dòng)磁道數(shù);s為啟動(dòng)磁盤(pán)時(shí)間為啟動(dòng)磁盤(pán)時(shí)間Tr旋轉(zhuǎn)延遲時(shí)間:硬盤(pán)大約旋轉(zhuǎn)延遲時(shí)間:硬盤(pán)大約8.3ms,軟盤(pán),軟盤(pán)50ms100msTt 傳輸時(shí)間:讀傳輸時(shí)間:讀/寫(xiě)數(shù)據(jù)的實(shí)際時(shí)間寫(xiě)數(shù)據(jù)的實(shí)際時(shí)間=b/(rN)b:讀寫(xiě)字節(jié)數(shù);讀寫(xiě)字節(jié)數(shù);r:磁盤(pán)轉(zhuǎn)速;磁盤(pán)轉(zhuǎn)速;N:每條磁道上的字節(jié)數(shù)。每條磁道上的字節(jié)數(shù)。磁盤(pán)訪(fǎng)問(wèn)時(shí)間磁盤(pán)訪(fǎng)問(wèn)時(shí)間 Ta = Ts + Tr + Tt .目前等待的請(qǐng)求磁道號(hào)目前等待的請(qǐng)求磁道號(hào)181838383939555558589090150150160160184184磁頭所在磁頭所在磁道位置磁道位置為為100號(hào)號(hào)5555585

47、83939181890901601601501503838184184請(qǐng)求到達(dá)的次序請(qǐng)求到達(dá)的次序按磁道號(hào)從小到大排序按磁道號(hào)從小到大排序.先先來(lái)來(lái)先先服服務(wù)務(wù).最最短短尋尋道道時(shí)時(shí)間間優(yōu)優(yōu)先先目前等目前等待的請(qǐng)待的請(qǐng)求磁道求磁道號(hào)號(hào).SSTF磁盤(pán)調(diào)度存在的問(wèn)題磁盤(pán)調(diào)度存在的問(wèn)題應(yīng)用應(yīng)用SSTF (最短尋道時(shí)最短尋道時(shí)間間shortest-seek-time-first)調(diào)度策略,調(diào)度策略,某些進(jìn)程可能永遠(yuǎn)不某些進(jìn)程可能永遠(yuǎn)不能被調(diào)度到。如右表能被調(diào)度到。如右表所示的例子中,我們所示的例子中,我們假定每當(dāng)進(jìn)程假定每當(dāng)進(jìn)程9 (要(要求讀出磁道求讀出磁道376上的上的信息)的請(qǐng)求得到服信息)的請(qǐng)

48、求得到服務(wù)之前的某段時(shí)間,務(wù)之前的某段時(shí)間,系統(tǒng)又接收一個(gè)請(qǐng)求系統(tǒng)又接收一個(gè)請(qǐng)求流,而且這些請(qǐng)求所流,而且這些請(qǐng)求所要移動(dòng)磁頭的距離總要移動(dòng)磁頭的距離總小于達(dá)到磁道小于達(dá)到磁道376所所移動(dòng)的距離,因而,移動(dòng)的距離,因而,進(jìn)程進(jìn)程9和和3將永遠(yuǎn)得不將永遠(yuǎn)得不到服務(wù)。到服務(wù)。 試設(shè)計(jì)一種磁盤(pán)訪(fǎng)問(wèn)試設(shè)計(jì)一種磁盤(pán)訪(fǎng)問(wèn)調(diào)度算法,以確保不調(diào)度算法,以確保不會(huì)發(fā)生諸如上例的會(huì)發(fā)生諸如上例的“饑餓饑餓”現(xiàn)象?,F(xiàn)象。進(jìn)程號(hào)進(jìn)程號(hào)磁道號(hào)磁道號(hào)移動(dòng)磁道數(shù)移動(dòng)磁道數(shù)71340141925823205132256149294016322911419101219034181173159376373339620答:無(wú)饑餓

49、現(xiàn)象的磁盤(pán)調(diào)度算法有答:無(wú)饑餓現(xiàn)象的磁盤(pán)調(diào)度算法有FCFS、掃描算法等等。、掃描算法等等。設(shè):磁頭當(dāng)前位置為100磁道,現(xiàn)有一磁盤(pán)讀寫(xiě)請(qǐng)求隊(duì)列為:3、18、19、19、29、40、56、134、192、205、376、396,若采用SSTF優(yōu)先磁盤(pán)調(diào)度算法進(jìn)行調(diào)度,給出調(diào)度的次序。.掃掃描描算算法法181838383939555558589090150150160160184184555558583939181890901601601501503838184184目前等目前等待的請(qǐng)待的請(qǐng)求磁道求磁道號(hào)號(hào).循循環(huán)環(huán)掃掃描描算算法法181838383939555558589090150150160

50、160184184555558583939181890901601601501503838184184目前等目前等待的請(qǐng)待的請(qǐng)求磁道求磁道號(hào)號(hào).設(shè)備管理概念題設(shè)備管理概念題1、用于設(shè)備分配的數(shù)據(jù)結(jié)構(gòu)有哪些?它們之間的關(guān)系是什么?答:整個(gè)系統(tǒng)有一張SDT,每個(gè)設(shè)備有一張DCT,每個(gè)控制器有一張COCT,每個(gè)通道有一張CHCT。2、什么是I/O控制?它的主要任務(wù)是什么?答:用戶(hù)I/O請(qǐng)求分配設(shè)備啟動(dòng)設(shè)備進(jìn)行I/O操作響應(yīng)設(shè)備中斷設(shè)備中斷處理從處理I/O請(qǐng)求開(kāi)始到設(shè)備中斷處理結(jié)束,這一總過(guò)程稱(chēng)為I/O控制。SDTDCTCOCTCHCT.設(shè)備管理概念題(續(xù))設(shè)備管理概念題(續(xù))3、I/O控制可用哪幾種

51、方式實(shí)現(xiàn)?各有什么優(yōu)缺點(diǎn)?答:I/O控制過(guò)程可用三種方式實(shí)現(xiàn):作為請(qǐng)求I/O操作的進(jìn)程實(shí)現(xiàn);作為當(dāng)前進(jìn)程的一部分實(shí)現(xiàn);由專(zhuān)門(mén)的系統(tǒng)進(jìn)程(I/O進(jìn)程)完成。第一種方式請(qǐng)求對(duì)應(yīng)I/O操作的進(jìn)程能很快占據(jù)處理機(jī),但要求系統(tǒng)和I/O操作的進(jìn)程應(yīng)具有良好的實(shí)時(shí)性。第二種方式不要求系統(tǒng)具有高的實(shí)時(shí)性,但I(xiàn)/O控制過(guò)程要由當(dāng)前進(jìn)程負(fù)責(zé)。第三種方式增加了一個(gè)額外的進(jìn)程開(kāi)銷(xiāo),但用戶(hù)進(jìn)程不用處理I/O控制過(guò)程。4、設(shè)備驅(qū)動(dòng)程序是什么?為什么要有設(shè)備驅(qū)動(dòng)程序?用戶(hù)進(jìn)程怎樣使用驅(qū)動(dòng)程序?答:設(shè)備驅(qū)動(dòng)程序是驅(qū)動(dòng)外部物理設(shè)備和相應(yīng)DMA控制器或I/O控制器等器件,使之可以直接和內(nèi)存進(jìn)行I/O操作的子程序的集合。它們負(fù)責(zé)設(shè)

52、置相應(yīng)設(shè)備有關(guān)寄存器的值,啟動(dòng)設(shè)備進(jìn)行I/O操作,指定操作的類(lèi)型和數(shù)據(jù)流向等。設(shè)備驅(qū)動(dòng)程序屏蔽了直接對(duì)硬件操作的細(xì)節(jié),為編程者提供操縱設(shè)備的便利接口。用戶(hù)進(jìn)程通過(guò)調(diào)用設(shè)備驅(qū)動(dòng)程序提供的接口來(lái)使用設(shè)備驅(qū)動(dòng)程序。.實(shí)驗(yàn)二要求實(shí)驗(yàn)二要求1設(shè)計(jì)并實(shí)現(xiàn)一個(gè)新的內(nèi)核函數(shù)設(shè)計(jì)并實(shí)現(xiàn)一個(gè)新的內(nèi)核函數(shù)pedagogictime(),該函數(shù),該函數(shù)通過(guò)使用一個(gè)引用參數(shù)的調(diào)用返回當(dāng)前的系統(tǒng)時(shí)間。如果通過(guò)使用一個(gè)引用參數(shù)的調(diào)用返回當(dāng)前的系統(tǒng)時(shí)間。如果flag參數(shù)是參數(shù)是true ,那么內(nèi)核參數(shù)就應(yīng)該把當(dāng)前的系統(tǒng)時(shí)間打那么內(nèi)核參數(shù)就應(yīng)該把當(dāng)前的系統(tǒng)時(shí)間打印在標(biāo)準(zhǔn)輸出印在標(biāo)準(zhǔn)輸出stdout上。函數(shù)接口定義應(yīng)具有如下形式

53、:上。函數(shù)接口定義應(yīng)具有如下形式:int pedagogicitime(int flag,struct timeval *current_time);2編寫(xiě)一個(gè)用戶(hù)空間程序來(lái)測(cè)試新的系統(tǒng)調(diào)用編寫(xiě)一個(gè)用戶(hù)空間程序來(lái)測(cè)試新的系統(tǒng)調(diào)用pedagogictime(),該程序給新系統(tǒng)調(diào)用函數(shù)創(chuàng)建一個(gè)插,該程序給新系統(tǒng)調(diào)用函數(shù)創(chuàng)建一個(gè)插樁樁stub。3統(tǒng)計(jì)特定進(jìn)程或者整個(gè)系統(tǒng)產(chǎn)生的缺頁(yè)情況。報(bào)告當(dāng)前統(tǒng)計(jì)特定進(jìn)程或者整個(gè)系統(tǒng)產(chǎn)生的缺頁(yè)情況。報(bào)告當(dāng)前缺頁(yè)率,編寫(xiě)一個(gè)用戶(hù)程序或者定義一個(gè)新的缺頁(yè)系統(tǒng)調(diào)缺頁(yè)率,編寫(xiě)一個(gè)用戶(hù)程序或者定義一個(gè)新的缺頁(yè)系統(tǒng)調(diào)用,搜集缺頁(yè)統(tǒng)計(jì)數(shù)據(jù)來(lái)創(chuàng)建一個(gè)性能監(jiān)測(cè)程序。用,搜集缺頁(yè)統(tǒng)計(jì)數(shù)

54、據(jù)來(lái)創(chuàng)建一個(gè)性能監(jiān)測(cè)程序。4編寫(xiě)一個(gè)用戶(hù)程序,周期性地監(jiān)測(cè)當(dāng)前的缺頁(yè)率。然后編寫(xiě)一個(gè)用戶(hù)程序,周期性地監(jiān)測(cè)當(dāng)前的缺頁(yè)率。然后依據(jù)時(shí)間來(lái)繪制缺頁(yè)圖。最后,閱讀有關(guān)依據(jù)時(shí)間來(lái)繪制缺頁(yè)圖。最后,閱讀有關(guān)vmstat命令的內(nèi)命令的內(nèi)容來(lái)了解如何設(shè)計(jì)報(bào)告程序。容來(lái)了解如何設(shè)計(jì)報(bào)告程序。.新內(nèi)核函數(shù)新內(nèi)核函數(shù)pedagogictime()的實(shí)現(xiàn)的實(shí)現(xiàn)該系統(tǒng)調(diào)用函數(shù)的實(shí)現(xiàn)可以參考該系統(tǒng)調(diào)用函數(shù)的實(shí)現(xiàn)可以參考kernel/time.c中的中的sys_gettimeofday函函數(shù)。我們?cè)跀?shù)。我們?cè)趉ernel/sys.c中添加如下函數(shù):中添加如下函數(shù):asmlinkage int sys_pedagogictime(struct timeval *tv) if (tv) struct timeval ktv; do_gettimeofday(&ktv); if (copy_to_user(tv,&ktv,sizeof(ktv) return -EFAULT; return 0;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論