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

下載本文檔

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

文檔簡(jiǎn)介

操作系統(tǒng)整體結(jié)構(gòu)第5章設(shè)備管理首先回顧操作系統(tǒng)的總體構(gòu)架,從而定位設(shè)備管理所處地位然后學(xué)習(xí)設(shè)備管理的基本原理最后了結(jié)LINUX設(shè)備管理實(shí)例操作系統(tǒng)的基本組織結(jié)構(gòu)進(jìn)程與資源管理文件管理存儲(chǔ)管理設(shè)備管理處理機(jī)主存設(shè)備操作系統(tǒng)計(jì)算機(jī)硬件Linux文件系統(tǒng)設(shè)備管理引言輸入/輸出硬件輸入/輸出軟件LINUX輸入/輸出系統(tǒng)概述小結(jié)引言硬件設(shè)備與控制軟件之間的聯(lián)系:設(shè)備—控制器—內(nèi)存映射地址—處理機(jī) 驅(qū)動(dòng)程序—I/O管理程序—文件系統(tǒng)—用戶的I/O請(qǐng)求設(shè)備管理的主要任務(wù)設(shè)備分配實(shí)現(xiàn)數(shù)據(jù)傳輸提供用戶使用接口提高并行操作度設(shè)備管理程序提供的功能為進(jìn)程管理提供接口(將進(jìn)程的請(qǐng)求轉(zhuǎn)給設(shè)備管理)實(shí)施設(shè)備分配(設(shè)備分類、調(diào)度算法、等待隊(duì)列)實(shí)現(xiàn)設(shè)備之間以及設(shè)備與CPU之間并行操作(DMA、通道)緩沖區(qū)管理輸入/輸出硬件電子設(shè)備設(shè)備分類字符設(shè)備塊設(shè)備設(shè)備控制器DMA存儲(chǔ)器直接存取通道磁盤控制器打印機(jī)控制器其他控制器CPU內(nèi)存控制器-設(shè)備接口打印機(jī)磁盤驅(qū)動(dòng)器圖5-5CPU和控制器通信的單總線模型系統(tǒng)總線磁帶磁帶格式磁帶頭部反光片磁帶尾部反光片記錄記錄IRGIRG塊記錄格式記錄1記錄2記錄3記錄4IRGIRG800字節(jié)磁盤扇區(qū)磁道

單磁盤片表面的劃分旋轉(zhuǎn)方向讀/寫磁頭臂移動(dòng)方向移動(dòng)頭磁盤示意圖磁盤設(shè)備結(jié)構(gòu)通道方式的數(shù)據(jù)傳送結(jié)構(gòu)I/O控制器I/O控制器I/O控制器I/O控制器I/O控制器I/O控制器I/O控制器字節(jié)多路通道選擇通道成組多路通道磁盤磁盤磁帶磁帶終端終端終端CPU內(nèi)存總線DMADMA控制器CPU內(nèi)存I/O設(shè)備數(shù)據(jù)中斷位啟動(dòng)位控制狀態(tài)寄存器數(shù)據(jù)緩沖寄存器內(nèi)存地址寄存器傳送字節(jié)數(shù)寄存器DMA方式的傳送結(jié)構(gòu)startint輸入/輸出軟件輸入/輸出軟件的作用數(shù)據(jù)傳送控制方式程序直接控制方式中斷方式DMA方式通道控制方式中斷處理技術(shù)設(shè)備驅(qū)動(dòng)程序與設(shè)備無關(guān)的I/O軟件(文件系統(tǒng)功能)用戶層的輸入/輸出軟件(使用read/write)設(shè)備分配

緩沖區(qū)管理I/O進(jìn)程控制輸入/輸出軟件的作用進(jìn)行I/O調(diào)用:格式化I/O執(zhí)行I/O操作命名、保護(hù)、阻塞、緩沖、分配I/O結(jié)束時(shí),喚醒設(shè)備服務(wù)子程序設(shè)置設(shè)備寄存器、檢測(cè)狀態(tài)4-用戶進(jìn)程3-設(shè)備無關(guān)軟件2-設(shè)備驅(qū)動(dòng)程序硬件設(shè)備服務(wù)子程序1-中斷處理程序I/O請(qǐng)求I/O應(yīng)答程序直接控制方式否外圍設(shè)備做接收或發(fā)送數(shù)據(jù)準(zhǔn)備接收到start命令標(biāo)志觸發(fā)器置“done”等待CPU來的下條指令準(zhǔn)備完畢?是否CPU發(fā)start命令等待執(zhí)行下條指令開始數(shù)據(jù)傳送設(shè)備標(biāo)志觸發(fā)器為done”?是(a)(b)中斷控制方式的傳送結(jié)構(gòu)I/O控制器1I/O控制器nI/O設(shè)備1I/O設(shè)備n地址線數(shù)據(jù)線控制線intCPU內(nèi)存start啟動(dòng)位中斷位信號(hào)線控制狀態(tài)寄存器數(shù)據(jù)緩沖寄存器中斷控制方式的處理過程接收到CPU發(fā)來的start指令準(zhǔn)備數(shù)據(jù)并將其置入緩沖寄存器緩沖寄存器滿嗎?控制器發(fā)中斷信號(hào)向設(shè)備發(fā)start指令將中斷允許位置1調(diào)度程序調(diào)度其他進(jìn)程其他進(jìn)程執(zhí)行收到中斷信號(hào)了嗎?中斷處理被中斷進(jìn)程執(zhí)行否否是設(shè)備CPUDMA方式的數(shù)據(jù)傳送處理過程否CPU發(fā)start命令內(nèi)存地址內(nèi)存始址寄存器傳送字節(jié)數(shù)字節(jié)計(jì)數(shù)器允許中斷位與啟動(dòng)位置1當(dāng)前進(jìn)程被阻塞,調(diào)度程序調(diào)度其他進(jìn)程運(yùn)行被調(diào)度的進(jìn)程執(zhí)行接收到中斷信號(hào)嗎?是轉(zhuǎn)中斷處理設(shè)備啟動(dòng)設(shè)備準(zhǔn)備數(shù)據(jù)DMA控制器接收到start指令緩沖寄存器內(nèi)容入內(nèi)存改變傳送字節(jié)數(shù)計(jì)數(shù)器與內(nèi)存地址寄存器內(nèi)容否傳送字節(jié)數(shù)=0?嗎?數(shù)據(jù)入數(shù)據(jù)緩沖寄存器發(fā)中斷信號(hào)停止I/O操作是通道控制方式的描述過程從CPU執(zhí)行的角度來描述通道控制方式:Channelcontrolprocedure:repeatIR←M[pc]pc←pc+1execute(IR)ifrequireaccessingwithI/ODevicethenCommand(I/Ooperation,AddressofI/Odevice,channel)fiifI/ODoneInteruptthenCallInterruptprocessingcontrolfiuntilmachinehaltInterruptprocessingcontrolprocedure

中斷處理過程關(guān)中斷保存被中斷現(xiàn)場(chǎng)分析中斷原因轉(zhuǎn)中斷處理子程序執(zhí)行中斷處理子程序恢復(fù)現(xiàn)場(chǎng)開中斷返回中斷點(diǎn)用戶進(jìn)程請(qǐng)求設(shè)備服務(wù)的流程

驅(qū)動(dòng)程序所處地位用戶進(jìn)程文件系統(tǒng)設(shè)備驅(qū)動(dòng)程序設(shè)備控制器設(shè)備本身設(shè)備無關(guān)軟件的功能(設(shè)備文件管理)對(duì)設(shè)備程序的統(tǒng)一接口設(shè)備命名設(shè)備保護(hù)提供一個(gè)獨(dú)立于設(shè)備的邏輯塊(數(shù)據(jù)塊大小)緩沖塊設(shè)備的存儲(chǔ)分配分配和釋放獨(dú)占設(shè)備錯(cuò)誤報(bào)告用戶層輸入/輸出軟件用戶層I/O軟件包含用于I/O操作的庫(kù)例程例如:read(fd,buf,nbytes)是讀文件的系統(tǒng)調(diào)用,由它調(diào)用的庫(kù)函數(shù)read將和用戶程序連接在一起,放在可執(zhí)行程序中。

Spooling系統(tǒng)“SimultaneousPeripheralOperationOn-Line”Spooling是在多道程序系統(tǒng)中處理獨(dú)占設(shè)備的一種方法。例如:一般的打印機(jī)是一種獨(dú)占資源,每次只能有一個(gè)程序使用打印機(jī),但如果一個(gè)進(jìn)程打開打印機(jī)而不使用它,那么其它的進(jìn)程都無法打印。

創(chuàng)建一個(gè)特殊的守護(hù)進(jìn)程(daemon)以及一個(gè)特殊的目錄,稱為Spooling目錄。這時(shí),打印一個(gè)文件之前,進(jìn)程首先產(chǎn)生完整的待打印文件并將其放在Spooling目錄下。當(dāng)進(jìn)程把該文件放到Spooling系統(tǒng)中之后就可以認(rèn)為打印過程已經(jīng)完成,雖然打印機(jī)還沒有進(jìn)行該文件的打印,因此也稱為打印的“假脫機(jī)”過程。而整個(gè)的打印作業(yè)由該守護(hù)進(jìn)程進(jìn)行處理,只有該守護(hù)進(jìn)程能夠真正使用打印機(jī)設(shè)備文件。通過禁止用戶直接使用打印機(jī)設(shè)備文件就解決了打印機(jī)的獨(dú)占問題。設(shè)備分配采用的數(shù)據(jù)結(jié)構(gòu)

設(shè)備類型設(shè)備標(biāo)識(shí)設(shè)備忙/閑標(biāo)記COCT指針設(shè)備等待隊(duì)列首設(shè)備等待隊(duì)列尾驅(qū)動(dòng)程序地址控制器標(biāo)識(shí)控制忙/閑標(biāo)記CHCT指針控制器等待隊(duì)列首控制器等待隊(duì)列尾┇通道標(biāo)識(shí)通道忙/閑標(biāo)記通道等待隊(duì)列首通道等待隊(duì)列尾┇表目1┇表目i┇設(shè)備類型設(shè)備標(biāo)識(shí)獲得設(shè)備的進(jìn)程DCT指針

系統(tǒng)設(shè)備表STDCOCT

CHCT

DCT

設(shè)備分配流程圖進(jìn)程P等待控制器由進(jìn)程P來的I/O請(qǐng)求搜索SDT找到DCT指針按分配策略選取占據(jù)該設(shè)備的進(jìn)程進(jìn)程P被選中?查DCT該設(shè)備忙?檢查該設(shè)備分配給進(jìn)程P的安全性安全嗎?該設(shè)備分配給進(jìn)程PA按分配策略選取占據(jù)該設(shè)備的進(jìn)程進(jìn)程P按分配策略入I/O等待隊(duì)列進(jìn)程P等待該設(shè)備空閑搜索DCT指針,找到COCT指針控制器忙嗎?A分配控制器給進(jìn)程P搜索COCT找到CHCT指針通道忙?分配通道給進(jìn)程P啟動(dòng)I/O進(jìn)程P等待通道是是是是否否否是否否緩沖區(qū)管理技術(shù)單緩沖區(qū)多緩沖區(qū)緩沖池

設(shè)備號(hào)數(shù)據(jù)塊號(hào)緩沖區(qū)號(hào)互斥標(biāo)示位鏈指針::………空緩沖區(qū)inout緩沖區(qū)操作函數(shù):getbuf、putbuf等等緩沖首部I/O控制中斷原因分析喚醒中斷處理程序I/O請(qǐng)求設(shè)備設(shè)備分配程序緩沖區(qū)管理中斷響應(yīng)啟動(dòng)I/O指令、設(shè)備驅(qū)動(dòng)程序或通道程序I/O控制I/O控制的實(shí)現(xiàn)I/O控制過程在系統(tǒng)中可以按三種方式實(shí)現(xiàn)作為請(qǐng)求I/O操作的進(jìn)程的一部分實(shí)現(xiàn)作為當(dāng)前進(jìn)程的一部分實(shí)現(xiàn)I/O控制由專門的系統(tǒng)進(jìn)程——

I/O進(jìn)程完成:每類(個(gè))設(shè)備設(shè)一專門的I/O進(jìn)程,且該進(jìn)程只能在系統(tǒng)態(tài)下執(zhí)行整個(gè)系統(tǒng)設(shè)一I/O進(jìn)程,全面負(fù)責(zé)系統(tǒng)的數(shù)據(jù)傳送工作每類(個(gè))設(shè)備設(shè)一個(gè)專門的I/O進(jìn)程,但該進(jìn)程既可在用戶態(tài)也可在系統(tǒng)態(tài)下執(zhí)行小結(jié)設(shè)備管理的基本過程設(shè)備管理用的數(shù)據(jù)結(jié)構(gòu)通道、控制器、DMA、中斷、緩沖區(qū)、數(shù)據(jù)傳送控制方式主設(shè)備號(hào)、次設(shè)備號(hào)(對(duì)應(yīng)驅(qū)動(dòng)程序及其參數(shù))設(shè)備分類設(shè)備分配算法I/O控制LINUX輸入/輸出系統(tǒng)概述Linux輸入/輸出的過程概述

設(shè)備驅(qū)動(dòng)程序基礎(chǔ)

Linux的中斷處理設(shè)備驅(qū)動(dòng)程序的框架字符設(shè)備驅(qū)動(dòng)程序塊設(shè)備驅(qū)動(dòng)程序概述設(shè)備無關(guān)軟件標(biāo)準(zhǔn)設(shè)備接口(read,write,open,close,…)設(shè)備驅(qū)動(dòng)程序設(shè)備文件(在/dev目錄下)輸入/輸出請(qǐng)求出錯(cuò)返回Linux文件系統(tǒng)的層次結(jié)構(gòu)返回設(shè)備驅(qū)動(dòng)分層結(jié)構(gòu)返回設(shè)備驅(qū)動(dòng)程序基礎(chǔ)總線: CPU和I/O設(shè)備是通過總線連接起來。

PC機(jī)常見總線有ISA,PCI等等。I/O地址空間: 所有設(shè)備的寄存器組成。 察看文件:/proc/ioportsI/O數(shù)據(jù)傳輸: 忙等待、中斷方式、DMA方式設(shè)備分類: 字符設(shè)備、塊設(shè)備設(shè)備名:

主設(shè)備號(hào)(驅(qū)動(dòng)程序)、次設(shè)備號(hào)(驅(qū)動(dòng)程序的參數(shù))設(shè)備文件: 在/dev目錄下,在內(nèi)核中由file結(jié)構(gòu)表示。設(shè)備驅(qū)動(dòng)程序接口:由file_operations數(shù)據(jù)結(jié)構(gòu)完成。文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)返回設(shè)備號(hào)例如:mknod()創(chuàng)建設(shè)備文件,需要提供設(shè)備號(hào)structfile_operationschardev_fops={open:chardev_open,release:chardev_release,read:chardev_read,write:chardev_write,};structfile_operations{…loff_t(*llseek)(structfile*,loff_t,int);ssize_t(*read)(structfile*,char*,size_t,loff_t*);ssize_t(*write)(structfile*,char*,size_t,loff_t*);int(*open)(structinode*,structfile*);int(*release)(structinode*,structfile*);int(*ioctl)(structinode*,structfile*,unsignedint,unsignedlong)…}驅(qū)動(dòng)程序接口(調(diào)用入口點(diǎn))Linux的中斷處理1、中斷類型外中斷,陷阱(INTn),異常。2、睡眠與喚醒驅(qū)動(dòng)程序啟動(dòng)設(shè)備后,進(jìn)入睡眠;設(shè)備完成I/O后,向CPU發(fā)中斷請(qǐng)求;CPU根據(jù)中斷請(qǐng)求找到睡眠的驅(qū)動(dòng)程序,并喚醒繼續(xù)處理。3、中斷共享中斷向量表有限,對(duì)于外中斷來說,其中斷向量表項(xiàng)是共享的。因此,共享項(xiàng)上有中斷請(qǐng)求隊(duì)列。4、中斷服務(wù)程序的上部和下部處理(bottom-half)上部執(zhí)行快速(關(guān)中斷),下部執(zhí)行費(fèi)時(shí)(開中斷)。Linux系統(tǒng)I/O層次結(jié)構(gòu)設(shè)備驅(qū)動(dòng)程序向下與設(shè)備控制器接口:定義如何與設(shè)備進(jìn)行通信的協(xié)議(設(shè)備控制命令集合)設(shè)備驅(qū)動(dòng)程序向上則面對(duì)文件系統(tǒng),由文件系統(tǒng)為內(nèi)核其他部分提供統(tǒng)一接口:入口調(diào)用集合Operations:(read、write等等)設(shè)備驅(qū)動(dòng)程序框架一個(gè)完整的設(shè)備驅(qū)動(dòng)程序包括五個(gè)部分:1、設(shè)備驅(qū)動(dòng)程序的注冊(cè)與注銷(與系統(tǒng)引導(dǎo)的接口)注冊(cè):在系統(tǒng)初始化/驅(qū)動(dòng)程序模塊加載時(shí)完成,建立了與文件系統(tǒng)的接口,文件系統(tǒng)可根據(jù)注冊(cè)資料建立文件操作與具體設(shè)備驅(qū)動(dòng)程序的映射關(guān)系。注銷:在系統(tǒng)關(guān)閉/驅(qū)動(dòng)程序模塊卸載時(shí)完成2、設(shè)備的打開與關(guān)閉設(shè)備首先要打開才能讀寫,完成之后及時(shí)釋放,針對(duì)不同設(shè)備有不同操作3、設(shè)備的讀寫操作在讀寫過程中,設(shè)備可能采用查詢或者中斷的方式來控制數(shù)據(jù)傳輸,針對(duì)不同的數(shù)據(jù)傳輸控制方式,驅(qū)動(dòng)程序采取不同的管理方式實(shí)現(xiàn)具體的數(shù)據(jù)傳輸4、設(shè)備的控制操作5、設(shè)備的中斷處理或者查詢處理設(shè)備驅(qū)動(dòng)程序代碼功能驅(qū)動(dòng)程序的注冊(cè)與注銷字符設(shè)備用:register_chrdev向內(nèi)核注冊(cè),unregister_chrdev從內(nèi)核注銷塊設(shè)備用:register_blkdev()向內(nèi)核注冊(cè),unregister_blkdev從內(nèi)核注銷設(shè)備的打開與釋放各自的open()和release()設(shè)備的讀寫各自的read()和write設(shè)備的控制操作各自的ioctl(),例如軟盤彈出。設(shè)備的中斷和忙等待查詢當(dāng)設(shè)備不支持中斷時(shí)讀寫采用忙等待查詢?cè)O(shè)備狀態(tài)。字符設(shè)備驅(qū)動(dòng)程序并口打印設(shè)備驅(qū)動(dòng)程序與內(nèi)核接口Staticstructfile_operationslp_fops并口打印設(shè)備驅(qū)動(dòng)程序與打印機(jī)設(shè)備接口Structlp_structlp_table注冊(cè)與注銷register_chrdev()unregister_chrdev()structfile_operationschardev_fops={open:chardev_open,

溫馨提示

  • 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論