版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第4講 Linux設(shè)備管理設(shè)備管理的目標(biāo)計算機的設(shè)備進行管理有兩大目標(biāo):一是提高設(shè)備的利用率;二是方便用戶使用。 課程內(nèi)容:Linux設(shè)備管理分類Linux設(shè)備驅(qū)動程序的接口Linux磁盤高速緩存管理Linux的字符設(shè)備緩沖區(qū)管理Linux的設(shè)備驅(qū)動Linux系統(tǒng)I/O軟件層次結(jié)構(gòu)一、Linux中設(shè)備的分類與表示(1)字符設(shè)備 如鍵盤、鼠標(biāo)、顯示器、打印機等。通常用于輸入輸出,作為人和計算機之間的接口,信息的存取以字符為單位進行。(2)塊設(shè)備 如磁盤、磁帶等,用于存儲信息,它對信息的存取控制是以信息塊為單位的。特別文件每個設(shè)備都有自己的設(shè)備名,用戶通過設(shè)備名來訪問具體物理設(shè)備,設(shè)備名存放在/d
2、ev目錄下。硬盤:/dev/hda, /dev/sda 軟盤:/dev/fd0 光盤:/dev/cdrom 鼠標(biāo):/dev/psaux(ps/2) /dev/input/mice(USB) 打印機:/dev/lp 控制臺:/dev/console網(wǎng)卡:/dev/eth0但是像塊設(shè)備磁盤、磁帶上的普通文件和目錄不是特殊文件。 二、Linux設(shè)備驅(qū)動程序的接口 1、文件系統(tǒng)與設(shè)備驅(qū)動程序的接口Linux系統(tǒng)中,用戶程序通過文件操作方式如打開、關(guān)閉、讀寫等來使用設(shè)備,由文件系統(tǒng)轉(zhuǎn)入設(shè)備驅(qū)動程序。在Linux中系統(tǒng)提供塊設(shè)備開關(guān)表和字符設(shè)備開關(guān)表作為核心與設(shè)備驅(qū)動程序之間的接口。每一種設(shè)備類型在表中占
3、用一個表目,包含若干數(shù)據(jù)項,其中有一項為該類設(shè)備驅(qū)動程序入口地址,在系統(tǒng)調(diào)用時引導(dǎo)核心轉(zhuǎn)向適當(dāng)?shù)尿?qū)動程序接口。塊設(shè)備開關(guān)表 字符設(shè)備開關(guān)表 操作主設(shè)備號OpenClose Read Write0驅(qū)動程序入口地址驅(qū)動程序入口地址驅(qū)動程序入口地址驅(qū)動程序入口地址1驅(qū)動程序入口地址驅(qū)動程序入口地址驅(qū)動程序入口地址驅(qū)動程序入口地址 操作主設(shè)備號OpenClose Strategy(read/write)0驅(qū)動程序入口地址驅(qū)動程序入口地址驅(qū)動程序入口地址1驅(qū)動程序入口地址驅(qū)動程序入口地址驅(qū)動程序入口地址2、文件的系統(tǒng)調(diào)用過程 對設(shè)備特殊文件的系統(tǒng)調(diào)用,根據(jù)文件類型轉(zhuǎn)入塊設(shè)備開關(guān)表或字符開關(guān)表進行打開、關(guān)
4、閉塊設(shè)備或字符設(shè)備的操作。 字符設(shè)備特殊文件的系統(tǒng)調(diào)用Read、Write轉(zhuǎn)向字符開關(guān)表中指示的設(shè)備驅(qū)動程序,而對普通文件或目錄文件的Read、Write系統(tǒng)調(diào)用則通過高速緩沖模塊轉(zhuǎn)向設(shè)備驅(qū)動模塊中的策略(Strategy)過程。文件系統(tǒng)對字符設(shè)備特殊文件的系統(tǒng)調(diào)用open close read write對塊設(shè)備文件的系統(tǒng)調(diào)用open close對普通文件的系統(tǒng)調(diào)用read write高速緩沖模塊字符設(shè)備開關(guān)表塊設(shè)備開關(guān)表字符設(shè)備塊設(shè)備中斷向量表open close read write字符設(shè)備驅(qū)動程序設(shè)備中斷處理程序open close strategy 塊設(shè)備驅(qū)動程序 設(shè)備中斷處理程序三
5、、Linux磁盤高速緩存管理1、磁盤高速緩存策略Linux磁盤緩沖管理策略試圖把盡可能多的有用數(shù)據(jù)保存在緩沖區(qū)中。 從磁盤中讀數(shù)據(jù)時,文件系統(tǒng)先從磁盤高速緩存中讀,如果數(shù)據(jù)已在高速緩存中,則不必啟動磁盤I/O,直接在高速緩存中讀?。蝗绻麛?shù)據(jù)不在高速緩存中,則啟動磁盤時I/O,從磁盤讀取數(shù)據(jù)送往高速緩存,進程再從高速緩存中讀取數(shù)據(jù)。Linux采取了“延遲寫”策略 。 2、磁盤緩沖區(qū)管理的數(shù)據(jù)結(jié)構(gòu) Linux使用多個內(nèi)存緩沖區(qū)進行磁盤緩沖,為了合理有效地使用這些緩沖區(qū),設(shè)置了一定的數(shù)據(jù)結(jié)構(gòu)按照一定策略進行管理。管理的依據(jù)是緩沖區(qū)的相關(guān)信息,為了能訪問這些信息,必須將其按一定的數(shù)據(jù)結(jié)構(gòu)進行組織。 每
6、一個緩沖區(qū)建立“緩沖首部”來存放該緩沖區(qū)的相關(guān)信息 緩沖首部設(shè)備號dev設(shè)備緩沖區(qū)隊列后向指針b-back塊號blkno空閑緩沖區(qū)隊列前向指針Av-forw狀態(tài)flag空閑緩沖區(qū)隊列后向指針Av-back設(shè)備緩沖區(qū)隊列前向指針b-forw 忙標(biāo)志位BUSY:緩沖區(qū)當(dāng)前是否忙 有效位AVE:緩沖區(qū)包含的數(shù)據(jù)是否有效 延遲寫位DELWR:是否延遲寫 寫標(biāo)志位WRITE:是否正在把緩沖區(qū)的內(nèi)容寫到磁盤上 讀表示位READ:是否從磁盤往緩沖讀取信息 等待位WAIT:是否有一個進程正在等待該緩沖區(qū)空閑緩沖區(qū)隊列(BUSY=0)Av-forwAv-backAv-forwAv-backAv-forwAv-b
7、ack設(shè)備緩沖區(qū)隊列(BUSY=1)b-forw b-backbv-forwbv-backb-forw b-back3、Linux磁盤緩沖區(qū)管理算法 高速緩沖區(qū)的分配 當(dāng)某進程要從一個磁盤讀取數(shù)據(jù)時,先檢查要讀取的磁盤塊是否包含在某個緩沖區(qū)中,如果不在,則從空閑緩沖區(qū)隊列中分配給它一個空閑緩沖區(qū);當(dāng)某進程要將數(shù)據(jù)寫入磁盤時,先看一下要寫的磁盤塊是否在某個緩沖區(qū),如果不在則為這個磁盤塊分配一個空閑緩沖區(qū)。被分配的空閑緩沖區(qū)從空閑緩沖區(qū)隊列中退出,進入相應(yīng)設(shè)備的設(shè)備緩沖區(qū)隊列,該緩沖區(qū)的BUSY位置1。 當(dāng)緩沖區(qū)的信息讀到相應(yīng)進程的內(nèi)存后,便釋放進程使用的緩沖區(qū),將Flag中的BUSY位置0,送入
8、空閑緩沖區(qū)隊尾;同時也將置為延遲寫的緩沖區(qū)也送入空閑緩沖區(qū)隊列。這樣可以使有效的緩沖區(qū)得到充分利用,滿足多個并發(fā)進程的需要。 當(dāng)一個緩沖區(qū)被送往空閑緩沖區(qū)隊尾時,并不退出設(shè)備緩沖區(qū)隊列,而仍然留在原隊列中。這樣做的原因是,此次使用完畢送往空閑緩沖區(qū)隊列的緩沖區(qū),其保留的信息可能被再次訪問。如果將其保留在設(shè)備緩沖區(qū)隊列中,當(dāng)后來要讀取的磁盤數(shù)據(jù)塊仍然保留在此緩沖時,可以直接從此緩沖區(qū)讀,而不必啟動磁盤I/O,提高了讀盤速度,這正是使用磁盤高速緩存的目的?!把舆t寫”緩沖區(qū)的處理 如果要將一個使用完畢送入空閑緩沖區(qū)隊列的緩沖區(qū)分配給其他設(shè)備,則可以將該緩沖同時從空閑緩沖區(qū)隊列和原設(shè)備緩沖區(qū)隊列中抽出
9、,送入新的設(shè)備緩沖區(qū)隊列。 因為被使用過的緩沖區(qū)在空閑緩沖區(qū)隊列的末尾,隨著不斷地空閑緩沖區(qū)隊列上摘下緩沖區(qū),后面的緩沖區(qū)會不斷向隊首移動,如果一個延遲寫標(biāo)志位為1的緩沖區(qū)移到空閑緩沖區(qū)隊列的頭部,當(dāng)其被重新分配之前,要先把其內(nèi)容寫到相應(yīng)設(shè)備的指定的磁盤塊中。四、Linux字符設(shè)備緩沖區(qū)管理 (1)字符緩沖區(qū)及其隊列 Linux中為字符設(shè)備的數(shù)據(jù)傳輸設(shè)置了一個公用的字符緩沖池,該緩沖池內(nèi)含有若干個緩沖區(qū),但每個緩沖區(qū)很小,只含幾個或十幾個字節(jié)。為合理使用這些緩沖區(qū),將其組織成一定的數(shù)據(jù)結(jié)構(gòu)。同塊設(shè)備緩沖區(qū)的管理類似,建立空閑字符緩沖區(qū)隊列和設(shè)備字符緩沖區(qū)隊列。 字符緩存區(qū)數(shù)據(jù)結(jié)構(gòu) 首字符位置字
10、符緩沖區(qū)末字符位置指向下一字符緩沖區(qū)(2)空閑字符緩沖區(qū)的分配和回收 在一進程用字符設(shè)備進行I/O操作時,文件系統(tǒng)為該字符設(shè)備分配一個空閑緩沖區(qū)。分配時要檢測空閑緩沖區(qū)隊列,當(dāng)隊列非空時,從隊首取下一個空閑緩沖區(qū)分配該字符設(shè)備,送入該字符設(shè)備的字符緩沖區(qū)隊列,并把指向該緩沖區(qū)的指針返回給調(diào)用進程;當(dāng)隊列為空時,表明已經(jīng)沒有緩沖區(qū)可分配,則請求I/O操作的進程被阻塞。當(dāng)字符緩沖區(qū)中的數(shù)據(jù)被提取完后,便釋放該緩沖區(qū),將該緩沖區(qū)送入空閑字符緩沖區(qū)隊列的首部。(空閑字符緩存區(qū)隊列其實是一個棧)若此時有因申請空緩沖區(qū)而阻塞的進程,則將其喚醒。五、Linux的設(shè)備驅(qū)動 設(shè)備驅(qū)動是指控制具體的物理設(shè)備完成I
11、/O操作,與硬件的物理特性和數(shù)據(jù)傳輸控制方式密切相關(guān),不同類型的設(shè)備、不同數(shù)據(jù)傳輸控制方式要采用不同設(shè)備的驅(qū)動方式。1、塊設(shè)備驅(qū)動(1)數(shù)據(jù)結(jié)構(gòu) 塊設(shè)備表 I/O請求隊列(2)磁盤設(shè)備驅(qū)動程序 打開硬盤 讀寫硬盤(1)塊設(shè)備驅(qū)動的數(shù)據(jù)結(jié)構(gòu)塊設(shè)備表 對每一類塊設(shè)備,分別設(shè)置塊設(shè)備表,記錄該類設(shè)備的相關(guān)信息。其內(nèi)容包括:忙標(biāo)志:標(biāo)志設(shè)備的忙閑狀態(tài),0表示空閑,1表示正忙錯誤次數(shù):指設(shè)備I/O出錯次數(shù)設(shè)備緩沖區(qū)隊列頭指針:分配給設(shè)備的緩沖區(qū)隊列的頭指針設(shè)備緩沖區(qū)隊列尾指針:分配給設(shè)備的緩沖區(qū)隊列的尾指針I(yè)/O請求隊列頭指針:請求該類設(shè)備I/O操作的請求塊組成的隊列的頭指針I(yè)/O請求隊列尾指針:請求該
12、類設(shè)備I/O操作的請求塊組成的隊列的尾指針I(yè)/O請求隊列 用戶進程的I/O請求包括要求完成I/O操作的邏輯設(shè)備名、要求的操作、輸送數(shù)據(jù)在內(nèi)存中的起始地址、傳送數(shù)據(jù)的長度,將這些信息組織成I/O請求塊iorb。邏輯設(shè)備名相同(同一類設(shè)備)的I/O請求塊構(gòu)成一個隊列,稱為I/O請求隊列。每類設(shè)備分別有一個I/O請求隊列。 (2)磁盤驅(qū)動程序 驅(qū)動程序控制設(shè)備具體實現(xiàn)進程的高級I/O請求包括打開、關(guān)閉、讀、寫等。打開。硬盤在使用之前必須進行打開操作,其目的是在使用硬盤之前進行必要的初始化設(shè)置硬盤的工作參數(shù)。硬盤的工作參數(shù)存放在主存中操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)硬盤控制塊中,它是驅(qū)動程序?qū)τ脖P進行控制的依據(jù)。硬盤
13、工作參數(shù)存放在硬盤的引導(dǎo)區(qū)中,因此要將引導(dǎo)區(qū)內(nèi)容讀到硬盤控制塊中。 為了讀寫硬盤引導(dǎo)區(qū),必須初啟硬盤,首先測試該設(shè)備是否就緒(通過測試設(shè)備控制器的設(shè)備狀態(tài)寄存器的ready位判斷),如果已就緒再測試該硬盤是否可用。設(shè)備不能使用的原因可能是沒有格式化或其它一些硬件故障,測試的方法是讀取該硬盤的首標(biāo),如果不能被正確讀出,說明硬盤不能使用,否則是可以使用的。如果是限定時間內(nèi)設(shè)備未就緒或經(jīng)測試不能使用,則設(shè)備初啟失敗。若初啟成功,便讀取硬盤引導(dǎo)區(qū),初始化硬盤控制塊。讀寫硬盤 由策略接口程序strategy完成,每次只讀寫一個扇區(qū)。Linux中對硬盤有兩種讀方式和三種寫方式。 一般讀:把當(dāng)前所需盤塊中的
14、內(nèi)容讀入緩沖區(qū)。 預(yù)先讀:進程讀順序文件的盤塊時,會預(yù)見到要讀的下一個盤塊,因此讀出當(dāng)前塊后可提前讀下一盤塊。 一般寫:把緩沖區(qū)數(shù)據(jù)寫到盤塊,且進程必須等待寫操作完成。 異步寫:把緩沖區(qū)數(shù)據(jù)寫到盤塊,但進程不必等待寫操作完成。 延遲寫:當(dāng)進程要把數(shù)據(jù)寫到盤上時,先寫到緩沖區(qū),然后將該緩沖區(qū)標(biāo)記為延遲寫,掛到空閑緩沖區(qū)隊列的末尾,但并不立即將該緩沖區(qū)的內(nèi)容寫到磁盤。硬盤讀寫驅(qū)動過程將邏輯塊號轉(zhuǎn)換為物理塊號;申請DMA;將物理塊號轉(zhuǎn)換為盤面號/柱面號/扇區(qū)號;移動磁頭到指定柱面;向硬盤控制器發(fā)送讀寫命令。 CPU發(fā)出讀寫命令后不必等待,而繼續(xù)執(zhí)行其他進程。但傳輸結(jié)束后,硬盤控制器向CPU發(fā)送中斷信
15、號,CPU響應(yīng)后轉(zhuǎn)入硬盤中斷處理程序。 硬盤中斷處理過程 檢測此次數(shù)據(jù)傳輸是否出錯,傳輸錯誤記錄在硬盤控制器的狀態(tài)寄存器中,如果出錯,進行錯誤處理;由于磁盤讀寫一次只能傳輸一個扇區(qū),每傳輸一個扇區(qū)就中斷一次,而I/O讀寫請求緩沖區(qū)可能有大于一個扇區(qū)的數(shù)據(jù)要傳輸,因此每次傳輸結(jié)束,中斷處理程序要檢查I/O讀寫請求緩沖區(qū)內(nèi)是否還有數(shù)據(jù)傳輸,若有,則繼續(xù)傳輸余下的數(shù)據(jù),若沒有,說明一個緩沖區(qū)已經(jīng)傳輸完畢。若I/O讀寫請求緩沖區(qū)內(nèi)的數(shù)據(jù)全部傳輸完畢,則喚醒等待傳輸完成的進程。 2、字符設(shè)備驅(qū)動 字符設(shè)備的傳送用一組專用的寄存器來實現(xiàn)。每種字符設(shè)備的控制器一般都有3個寄存器:控制寄存器接收CPU發(fā)送來的
16、命令,控制設(shè)備的操作;狀態(tài)寄存器保存設(shè)備的狀態(tài);數(shù)據(jù)寄存器暫存要傳送的數(shù)據(jù)。(1)數(shù)據(jù)結(jié)構(gòu) 對每類字符設(shè)備分別建立字符設(shè)備表,記錄使用該類字符設(shè)備所需的各種信息。(2)終端驅(qū)動程序 字符設(shè)備種類繁多,其驅(qū)動程序各不相同,在這里以終端驅(qū)動程序為例來講述Linux中字符設(shè)備驅(qū)動程序的工作原理。 終端主要由鍵盤和顯示器構(gòu)成,終端驅(qū)動程序控制終端設(shè)備和進程之間的字符數(shù)據(jù)傳輸,包括以下5個操作: ttopen:打開終端機,建立終端機和終端進程之間的對應(yīng)關(guān)系。 ttclose:切斷終端機和終端進程的聯(lián)系。 ioctl:用于對終端機的控制,例如狀態(tài)設(shè)置、測試、終端機屬性 值的更改等。 ttread:從終端鍵
17、盤讀入數(shù)據(jù)。 ttwrite:向終端顯示器寫數(shù)據(jù)。ttread過程 當(dāng)從鍵盤鍵入數(shù)據(jù)時,終端中斷處理程序把鍵盤數(shù)據(jù)放入原始輸入緩沖隊列,同時送往輸出緩沖隊列,以便送到顯示器輸出,當(dāng)鍵入回車鍵時,終端中斷處理程序,喚醒所有處于睡眠狀態(tài)的等待讀終端的進程。當(dāng)一個讀終端的進程執(zhí)行時,由ttread調(diào)用行規(guī)則程序,從原始輸入緩沖隊列中依次取出字符,進行必要的格式轉(zhuǎn)換后,放入標(biāo)準輸入緩沖隊列,同時,將輸出緩沖隊列中的字符送往顯示器顯示,然后把標(biāo)準輸入緩沖隊列中的字符復(fù)制到應(yīng)用程序數(shù)據(jù)存儲區(qū)。如果當(dāng)前各原始輸入緩沖隊列中都沒有數(shù)據(jù),則ttread睡眠。ttwrite過程 對于ttwrite,它首先調(diào)用行規(guī)則程序,從應(yīng)用程序數(shù)據(jù)存儲區(qū)把輸出的數(shù)據(jù)送入輸出緩沖隊列,并對每個輸出字符進行行規(guī)則處理。當(dāng)輸出緩沖隊列中的字符量大于某個上限時,啟動終端輸出數(shù)據(jù)并使寫進程睡眠。輸出使得輸出緩沖隊列中的字符存量減少,當(dāng)輸出緩沖隊列中的字符量小于某個下限時,喚醒有關(guān)睡眠進程執(zhí)行寫操作。 行規(guī)則程序 行規(guī)則程序把數(shù)據(jù)按行(以回車為結(jié)束標(biāo)志)緩存起來,并按標(biāo)準格式或原始格式傳送數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度解除租賃合同簡易協(xié)議書(體育場館)
- 二零二五年度城市商業(yè)圈門市房租賃與商業(yè)資源整合合同
- 二零二五年度電子租房合同附租客租賃滿意度調(diào)查
- 2025年度員工離職補償及保密協(xié)議
- 二零二五年度社區(qū)車位使用權(quán)共有管理協(xié)議書
- 施工現(xiàn)場施工防火制度
- 教育機構(gòu)電力供應(yīng)的未來趨勢-分布式變電站
- 音樂學(xué)院師資隊伍的音樂教育與創(chuàng)新發(fā)展
- 綠色辦公環(huán)境學(xué)校辦公空間的生態(tài)化改造
- 高?;馂?zāi)事故應(yīng)急預(yù)案
- 2024中國婦科臨床實踐指南-卵巢癌
- 2024-2030年中國靶機行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 2024過敏性休克搶救指南(2024)課件干貨分享
- 醫(yī)療行業(yè)提高醫(yī)院服務(wù)質(zhì)量的改進方案三篇
- JJG(交通) 192-2023 負壓篩析儀
- 七年級下冊第四單元第七章 人類活動對生物圈的影響作業(yè)設(shè)計
- 農(nóng)行網(wǎng)點負責(zé)人述職報告范本
- 常見軍事訓(xùn)練傷的康復(fù)流程
- 人教版小學(xué)數(shù)學(xué)一年級(上)口算題1000道
- 急診科管理手冊
- 售后工程師的績效考核與評估
評論
0/150
提交評論