




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
設(shè)備管理第八章設(shè)備管理教學(xué)內(nèi)容設(shè)備管理概念設(shè)備分配緩沖技術(shù)磁盤組織與管理Linux緩沖技術(shù)I/O控制設(shè)備驅(qū)動機制設(shè)備阻塞工作模式Linux塊設(shè)備I/O調(diào)度微內(nèi)核系統(tǒng)的設(shè)備管理教學(xué)重點設(shè)備分配緩沖技術(shù)Linux緩沖技術(shù)設(shè)備驅(qū)動機制設(shè)備阻塞工作模式教學(xué)難點Linux緩沖技術(shù)設(shè)備阻塞工作模式8.1設(shè)備管理概念
8.1設(shè)備管理概念教學(xué)內(nèi)容設(shè)備分類設(shè)備管理的目標(biāo)設(shè)備管理的功能8.1.1設(shè)備分類
8.1.1設(shè)備分類1.按交互對象分類人機交互類設(shè)備:顯示器、鍵盤、鼠標(biāo)、打印機、手寫板、觸摸屏等。與環(huán)境交互的設(shè)備:主要指傳感器設(shè)備,典型的有溫度傳感器(位于主機機箱內(nèi)測試CPU的工作溫度)、電量傳感器(筆記本計算機內(nèi)檢測電池電量)、壓力傳感器(手寫板或觸摸屏含有)等。與CPU交互的設(shè)備:磁盤、軟盤、光盤、定時器、中斷模塊等。需要注意的是,CPU需要通過接口電路連接這些設(shè)備。與計算機交互的設(shè)備:主要是通信設(shè)備,包括網(wǎng)卡、串口、并口、調(diào)制解調(diào)器等。8.1.1設(shè)備分類2.按交互方向分類交互方向是站在CPU的角度來定義的。輸入設(shè)備:鍵盤、鼠標(biāo)、掃描儀等是主機常見輸入設(shè)備。主機內(nèi)還有很多其他輸入設(shè)備。輸出設(shè)備:顯示設(shè)備、打印機。主機內(nèi)也還有很多其他輸出設(shè)備。雙向設(shè)備:硬盤、軟盤、網(wǎng)卡、串口、并口等。嚴(yán)格意義上來講,串口、并口僅僅是通信接口,上面會連接相應(yīng)的串口設(shè)備和并口設(shè)備。存儲型設(shè)備:主要有硬盤、軟盤、光盤、U盤等,用于存儲文件和數(shù)據(jù)。8.1.1設(shè)備分類3.按數(shù)據(jù)傳輸率分類速度的高低沒有絕對定量標(biāo)準(zhǔn),大致的劃分低速設(shè)備:1KB/s以下的設(shè)備,如鍵盤等。中速設(shè)備:1KB/s到1MB/s間的設(shè)備,如打印機。高速設(shè)備:超過1MB/s的設(shè)備,如網(wǎng)卡、磁盤。8.1.1設(shè)備分類4.按信息組織特征分類字符設(shè)備:這類設(shè)備傳輸?shù)幕締挝皇亲址?,像鍵盤、串口。塊設(shè)備:這類設(shè)備基本是存儲型設(shè)備,塊是存儲的基本單位,也是I/O傳輸?shù)幕締挝弧>W(wǎng)絡(luò)設(shè)備:網(wǎng)絡(luò)設(shè)備采用socket套接字接口訪問。網(wǎng)絡(luò)設(shè)備在全局空間用唯一的名字,如eth0、eth1指代。8.1.2設(shè)備管理的目標(biāo)
8.1.2設(shè)備管理的目標(biāo)設(shè)備管理的目標(biāo)提高設(shè)備的利用率提高設(shè)備讀寫效率提高CPU與設(shè)備并行程度為用戶提供統(tǒng)一接口實現(xiàn)設(shè)備對用戶透明8.1.3設(shè)備管理的功能
8.1.3設(shè)備管理的功能設(shè)備管理的功能狀態(tài)跟蹤設(shè)備分配設(shè)備映射設(shè)備控制緩沖區(qū)管理8.1.3設(shè)備管理的功能狀態(tài)跟蹤為設(shè)備管理器生成核心數(shù)據(jù)結(jié)構(gòu)設(shè)備控制塊(DeviceControlBlock,DCB),用于記錄設(shè)備的基本屬性、狀態(tài)、操作接口以及進程與設(shè)備之間的交互信息等。8.1.3設(shè)備管理的功能設(shè)備分配當(dāng)多個進程需要競爭使用設(shè)備時,系統(tǒng)按一定策略安全地分配和管理各種設(shè)備,使系統(tǒng)有序運行。按照相應(yīng)的分配算法把設(shè)備分配給請求該設(shè)備的進程,并把未分配到設(shè)備的進程放入設(shè)備的等待隊列。分配設(shè)備的過程實際是按照特定算法遍歷設(shè)備控制表的I/O請求隊列,選擇其中一個進程給其分配設(shè)備,并喚醒它的過程,同時會記錄設(shè)備的使用情況。8.1.3設(shè)備管理的功能設(shè)備映射設(shè)備映射就是把邏輯設(shè)備轉(zhuǎn)換到物理設(shè)備。對用戶來說,真實而具體的物理設(shè)備對用戶是透明的,用戶編寫程序時并不需要考慮具體的物理設(shè)備的名稱、連接位置、工作方式和原理。邏輯設(shè)備就是面向用戶的,能完成一定功能,且具有一組特定接口的設(shè)備。邏輯設(shè)備也可以說是物理設(shè)備的抽象。設(shè)備的獨立性用戶使用邏輯設(shè)備的統(tǒng)一接口去訪問設(shè)備,而不用考慮物理設(shè)備復(fù)雜而特殊的物理操作方式和結(jié)果。8.1.3設(shè)備管理的功能設(shè)備驅(qū)動設(shè)備管理需要實現(xiàn)對物理設(shè)備的驅(qū)動和控制,實現(xiàn)最終的I/O操作,完成數(shù)據(jù)傳輸。設(shè)備驅(qū)動程序介于應(yīng)用程序與設(shè)備的I/O操作命令之間,前者更多采用C語言編寫,后者更多采用匯編語言編寫。用戶通過邏輯設(shè)備的統(tǒng)一接口調(diào)用設(shè)備驅(qū)動程序,驅(qū)動程序則會把每個接口和參數(shù)都轉(zhuǎn)化為一組I/O命令,然后控制設(shè)備以特定的方式與CPU或內(nèi)存進行數(shù)據(jù)交換。8.1.3設(shè)備管理的功能緩沖區(qū)管理為了緩解外部設(shè)備和CPU之間速度不匹配的問題,設(shè)備管理功能會在系統(tǒng)中開設(shè)一定大小的緩沖區(qū)來暫放數(shù)據(jù),提供包括緩沖區(qū)的遍歷、查找、數(shù)據(jù)更新和回寫等操作,同時為進程提供獲得和釋放緩沖區(qū)的手段。8.2設(shè)備分配
8.2設(shè)備分配教學(xué)內(nèi)容獨享分配共享分配虛擬分配SPOOLing技術(shù)8.2設(shè)備分配設(shè)備分配設(shè)備分配按照一定的算法將設(shè)備分配給申請進程。按照設(shè)備本身的共享屬性,設(shè)備可分成獨享設(shè)備、共享設(shè)備和虛擬設(shè)備3類,相應(yīng)的設(shè)備分配策略分別稱為獨享分配、共享分配和虛擬分配。獨占設(shè)備是不可搶占設(shè)備,每次只能供一個作業(yè)或進程單獨使用,如鍵盤、打印機等,只有進程不再使用且釋放它們之后才能被別的進程申請到。共享設(shè)備是可搶占設(shè)備,允許多個作業(yè)或進程同時使用的設(shè)備。虛擬設(shè)備是借助虛擬技術(shù),在共享設(shè)備上模擬獨占設(shè)備。8.2.1獨享分配
8.2.1獨享分配獨享分配獨享分配是指進程使用設(shè)備之前先向系統(tǒng)申請,申請成功開始使用,直到使用完再釋放。若設(shè)備已經(jīng)被占用,則進程會被阻塞,被掛入設(shè)備對應(yīng)的等待隊列等待設(shè)備可用之時被喚醒。8.2.2共享分配
8.2.2共享分配共享分配共享設(shè)備一般采用共享分配方式。硬盤就是典型的共享設(shè)備。當(dāng)進程申請使用共享設(shè)備時,操作系統(tǒng)能立即為其分配共享設(shè)備的一塊空間,不會讓進程產(chǎn)生阻塞。共享分配使得進程使用設(shè)備十分簡單和高效,隨時申請,隨時可得。8.2.3虛擬分配8.2.3虛擬分配虛擬分配虛擬分配是指當(dāng)進程需要與獨占設(shè)備交換信息時,采用虛擬技術(shù)將與該獨占設(shè)備所對應(yīng)的虛擬設(shè)備分配給它。8.2.3虛擬分配虛擬分配虛擬分配是指當(dāng)進程需要與獨占設(shè)備交換信息時,采用虛擬技術(shù)將與該獨占設(shè)備所對應(yīng)的虛擬設(shè)備分配給它。首先,采用共享分配為進程分配一個虛擬的獨占設(shè)備;然后,將虛擬設(shè)備與指定的獨占設(shè)備關(guān)聯(lián)。進程在運行過程中,當(dāng)需要執(zhí)行輸入或輸出操作時,實際上都是直接與虛擬設(shè)備,也就是共享設(shè)備的某個存儲區(qū)域,進行交互,所以傳輸速度很快,進程本身的推進速度也得到了提高。
8.2.4SPOOLing技術(shù)8.2.4SPOOLing技術(shù)SPOOLing技術(shù)SimultaneausPeriphernalOperationsOnLine虛擬技術(shù)和虛擬分配的實現(xiàn)方案,也叫外部設(shè)備同時聯(lián)機操作或假脫機輸入輸出系統(tǒng)。SPOOLing技術(shù)是將獨占設(shè)備改造為共享設(shè)備的行之有效的技術(shù)。8.2.4SPOOLing技術(shù)SPOOLing技術(shù)SimultaneausPeriphernalOperationsOnLine外部設(shè)備同時聯(lián)機操作8.2.4SPOOLing技術(shù)SPOOLing系統(tǒng)的硬件組成(1)輸入井和輸出井輸入井和輸出井是在共享設(shè)備(一般是硬盤)上開辟的兩個存儲區(qū)域。輸入井模擬輸入型的獨占設(shè)備,用于存儲輸入設(shè)備輸入的數(shù)據(jù);輸出井模擬輸出型的獨占設(shè)備,用于儲存CPU傳送給輸出設(shè)備的數(shù)據(jù)。(2)輸入緩沖區(qū)和輸出緩沖區(qū)輸入緩沖區(qū)和輸出緩沖區(qū)是在內(nèi)存中開辟的存儲區(qū)域,分別用于暫存來源于輸入設(shè)備的輸入數(shù)據(jù)和送到輸出設(shè)備的輸出數(shù)據(jù)。8.2.4SPOOLing技術(shù)SPOOLing系統(tǒng)的軟件組成(1)預(yù)輸入程序(2)輸入表(3)緩輸出程序(4)輸出表(5)井管理程序8.2.48.2.4SPOOLing技術(shù)SPOOLing技術(shù)SPOOLing系統(tǒng)特點(1)可提高進程的I/O速度SPOOL技術(shù)能提高進程的I/O速度,提高進程的整體運行速度。雖然能提高進程的I/O速度,但是并沒有提高獨占設(shè)備自身的I/O速度。(2)可提高系統(tǒng)的整體運行效率和吞吐量。從而提高了進程的運行速度,并發(fā)性和執(zhí)行效率,提高了系統(tǒng)的吞吐量。
8.3緩沖技術(shù)
8.3緩沖技術(shù)教學(xué)內(nèi)容緩沖概念典型緩沖機制提前讀與延后寫8.3.1緩沖概念
8.3.1緩沖概念緩沖技術(shù)的作用(1)緩解CPU與外部設(shè)備之間速度不匹配的矛盾,提高外部設(shè)備的讀寫效率。(2)協(xié)調(diào)數(shù)據(jù)記錄大小的不一致CPU與外設(shè)之間或兩個設(shè)備之間處理的數(shù)據(jù)記錄大小和格式經(jīng)常不一致,這時需要通過緩沖技術(shù)進行數(shù)據(jù)記錄大小的轉(zhuǎn)換或格式的轉(zhuǎn)換。(3)正確高效地執(zhí)行應(yīng)用程序的數(shù)據(jù)復(fù)制緩沖技術(shù)還可以正確高效地實現(xiàn)應(yīng)用程序的數(shù)據(jù)復(fù)制。所謂正確的數(shù)據(jù)復(fù)制,就是指復(fù)制的數(shù)據(jù)版本正確,即復(fù)制的數(shù)據(jù)就是用戶想要的同一份數(shù)據(jù)。(4)提高CPU和外設(shè)之間的并發(fā)性。緩沖技術(shù)的引入可顯著地提高CPU和外設(shè)之間的并行操作程度,提高系統(tǒng)的吞吐量和設(shè)備的利用率。8.3.2典型緩沖機制 8.3.2典型緩沖機制緩沖4種形式(1)Cache,即高速緩沖寄存器。(2)外部設(shè)備或I/O接口內(nèi)部的緩沖區(qū)。(3)內(nèi)存緩沖區(qū)。這類緩沖區(qū)在內(nèi)存開辟,應(yīng)用廣泛,使用靈活(4)輔存緩沖區(qū)。這類緩沖區(qū)開辟在輔存上,例如硬盤上。8.3.2典型緩沖機制 1.單緩沖單緩沖是最簡單的一種緩沖技術(shù)。單緩沖在內(nèi)存中開辟的緩沖區(qū)大小僅有一個單元,即僅能容納一條數(shù)據(jù)記錄。8.3.2典型緩沖機制 2.雙緩沖雙緩沖在單緩沖的基礎(chǔ)上增加了緩沖區(qū)的容量,具有2個單元,能容納2條數(shù)據(jù)記錄。8.3.2典型緩沖機制 雙緩沖在輸入過程中的工作原理外部設(shè)備產(chǎn)生數(shù)據(jù)并寫入緩沖區(qū)的單元1時,用戶進程可以從緩沖區(qū)的單元2中讀取已準(zhǔn)備好的數(shù)據(jù)進行處理;當(dāng)外部設(shè)備再次產(chǎn)生數(shù)據(jù)時把數(shù)據(jù)寫入緩沖區(qū)的單元2,而這時用戶進程可以再從緩沖區(qū)的單元1中讀取已準(zhǔn)備好的數(shù)據(jù)進行處理。8.3.2典型緩沖機制 雙緩沖在輸出過程中的工作原理用戶進程產(chǎn)生數(shù)據(jù)并寫入緩沖區(qū)的單元1時,外部設(shè)備可以從緩沖區(qū)的單元2中讀取已準(zhǔn)備好的數(shù)據(jù)進行處理;當(dāng)用戶進程再次產(chǎn)生數(shù)據(jù)時把數(shù)據(jù)寫入緩沖區(qū)的單元2中,而這時外部設(shè)備可以從緩沖區(qū)的單元1中讀取已準(zhǔn)備好的數(shù)據(jù)進行處理。8.3.2典型緩沖機制 環(huán)形緩沖環(huán)形緩沖就是在雙緩沖的基礎(chǔ)上增加了容量,增加了更多的單元以便存放更多數(shù)據(jù)記錄,并讓首尾兩個單元在邏輯上相連。起始指針pStart輸入指針pWrite輸出指針pRead8.3.2典型緩沖機制 緩沖池緩沖池中設(shè)置多個可供若干個進程共享的緩沖區(qū)。緩沖池中包括一定數(shù)量的緩沖區(qū),可以支持輸入,也可以支持輸出緩沖池可極大地提高緩沖區(qū)的利用率,減少內(nèi)存浪費的情況。8.3.3提前讀與延后寫8.3.3提前讀與延后寫提前讀與延后寫設(shè)備管理對于磁盤之類的塊設(shè)備通常采用提前讀和延后寫技術(shù),以進一步提高進程與外部設(shè)備之間的數(shù)據(jù)傳輸效率。提前讀和延后寫通過設(shè)置緩沖區(qū)可減少進程訪問目標(biāo)設(shè)備的次數(shù),來提高設(shè)備訪問的效率。8.3.3提前讀與延后寫提前讀提前讀是指進程需要從外設(shè)讀取的數(shù)據(jù)事先已被提前讀取到了緩沖區(qū)中,不需要繼續(xù)啟動外設(shè)執(zhí)行讀取操作。延后寫延后寫是指緩沖機制把進程需要準(zhǔn)備向外設(shè)寫入的一系列數(shù)據(jù)先緩存起來,等待緩沖區(qū)被填滿后或一些特定事件發(fā)生的時候,再啟動外設(shè),執(zhí)行I/O操作,完成數(shù)據(jù)的真正寫入。有時也會延遲一些固定時間再完成數(shù)據(jù)寫入操作。8.3.3提前讀與延后寫Linux提前讀與延后寫breada()函數(shù)可以將目標(biāo)數(shù)據(jù)塊后面的數(shù)據(jù)塊提前讀入緩沖區(qū),這樣下次訪問后面的數(shù)據(jù)塊時就可以直接從緩沖區(qū)獲取到。進程在執(zhí)行寫操作時會將數(shù)據(jù)先寫入高速緩存,而不會立即執(zhí)行I/O寫操作。當(dāng)高速緩存中已被修改但未寫回塊設(shè)備的緩沖塊達到規(guī)定的比例時,或者系統(tǒng)急需緩沖塊時,內(nèi)核進程bdflush就被喚醒,把被修改的數(shù)據(jù)塊寫入塊設(shè)備。8.4磁盤組織與管理
8.4磁盤組織與管理教學(xué)內(nèi)容磁盤的結(jié)構(gòu)磁盤的物理地址磁盤調(diào)度算法磁盤的管理8.4.1磁盤的結(jié)構(gòu)8.4.1磁盤的結(jié)構(gòu)硬盤的結(jié)構(gòu)磁盤是若干個同心的磁性盤片疊合,外加讀寫磁頭組合而成的旋轉(zhuǎn)型的存儲設(shè)備。磁性盤片至少有一面可以存儲數(shù)據(jù),也可能兩面都可以存儲數(shù)據(jù)。8.4.1磁盤的結(jié)構(gòu)硬盤的結(jié)構(gòu)1.磁道盤片分成若干個半徑不等的同心圓環(huán),同心圓環(huán)稱磁道。2.柱面若干張盤片中相同位置的磁道組成一個柱面3.磁頭磁頭懸浮在盤片上方,一個盤片就有2個磁頭4.扇區(qū)圓環(huán)磁道均勻分成若干段的扇形區(qū)域,512字節(jié)存儲容量存儲容量=柱面數(shù)×磁頭數(shù)×每磁道扇區(qū)數(shù)×每扇區(qū)字節(jié)數(shù)8.4.2磁盤的物理地址8.4.2磁盤的物理地址CHS式地址磁盤上任意一個扇區(qū)的物理地址可用(柱面號Cylinder,磁頭號Head,扇區(qū)號Sector)方式來定位,又稱CHS方式。柱面號等同于磁道號,磁頭號等同于盤面號。若是雙面的盤面,其正反兩面都有獨立的磁頭。柱面和磁頭從0開始編號扇區(qū)從1開始編號。8.4.2磁盤的物理地址LBA邏輯地址LBA(LogicalBlockAddress,邏輯塊地址)CHS地址和LBA地址的換算公式LBA邏輯地址=(C*每柱面的磁頭數(shù)+H)*每磁道的扇區(qū)數(shù)+(S-1)每柱面的磁頭數(shù)和每磁道的扇區(qū)數(shù)兩個參數(shù)都由磁盤驅(qū)動程序提供,它們的典型取值分別是16和64。8.4.2磁盤的物理地址例子1:已知某扇區(qū)的CHS地址是0柱面,0磁頭,1扇區(qū)。計算該扇區(qū)的LBA邏輯地址(假定每柱面的磁頭數(shù)和每磁道的扇區(qū)數(shù)分別是16和64)。解:LBA邏輯地址=(0×16+0)×64+(1-1)=08.4.2磁盤的物理地址例子2:已知某扇區(qū)的CHS地址是0柱面,1磁頭,1扇區(qū)。試計算該扇區(qū)的LBA邏輯地址(假定每柱面的磁頭數(shù)和每磁道的扇區(qū)數(shù)分別是16和64)。解:LBA邏輯地址=(0×16+1)×64+(1-1)=648.4.2磁盤的物理地址例子3:已知某扇區(qū)的CHS地址是1柱面,0磁頭,1扇區(qū)。試計算該扇區(qū)的LBA邏輯地址(假定每柱面的磁頭數(shù)和每磁道的扇區(qū)數(shù)分別是16和64)。解:LBA邏輯地址
=(1×16+0)×64+(1-1)=10248.4.2磁盤的物理地址已知LBA,計算CHS地址柱面號C=LBA/(每柱面的磁頭數(shù)×每磁道的扇區(qū)數(shù))磁頭號H=(LBA/每磁道的扇區(qū)數(shù))%每柱面的磁頭數(shù)扇區(qū)號S=LBA%每磁道的扇區(qū)數(shù)+1例子4:已知扇區(qū)的LBA地址是1024,計算其CHS地址。(假定每柱面的磁頭數(shù)和每磁道的扇區(qū)數(shù)分別取為16和64)解:柱面號C=1024/(16*64)=1
磁頭號H=(1024/64)%16=0
扇區(qū)號S=1024%64+1=1CHS地址是(1、0、1)。8.4.3磁盤調(diào)度算法8.4.3磁盤調(diào)度算法磁盤訪問時間磁盤訪問時間包括尋道時間、旋轉(zhuǎn)延遲時間和傳輸時間等3部分時間。尋道時間(SeekTime)是指讀寫磁頭沿徑向移動,移到要讀取的扇區(qū)所在磁道的上方所花的時間。在訪問磁盤的時間中最主要的是尋道時間旋轉(zhuǎn)延遲時間(RotationalLatencyTime)是指磁頭到達指定磁道后,通過盤片的旋轉(zhuǎn),使得要讀取的扇區(qū)轉(zhuǎn)到讀寫磁頭的下方所花的時間。傳輸時間(TransferTime)指讀寫數(shù)據(jù)所花的時間。8.4.3磁盤調(diào)度算法磁盤調(diào)度的目標(biāo)磁盤調(diào)度的目標(biāo)是使磁盤的平均尋道時間最短。目前常用的磁盤調(diào)度算法有先來先服務(wù)、最短尋道時間優(yōu)先、掃描算法以及循環(huán)掃描算法等。8.4.3磁盤調(diào)度算法(1)先來先服務(wù)算法它根據(jù)進程請求訪問磁盤的先后次序進行調(diào)度。算法的優(yōu)點是公平、簡單,且每個進程的請求都能依次地得到處理,不會出現(xiàn)某一進程的請求長期得不到滿足的情況。算法由于未對尋道進行優(yōu)化,致使平均尋道時間可能較長。8.4.3磁盤調(diào)度算法(2)最短尋道時間優(yōu)先算法算法選擇這樣的進程:其要求訪問的磁道與當(dāng)前磁頭所在的磁道距離最近,以使每次尋道時間最短。這種算法不能保證平均尋道時間最短。8.4.3磁盤調(diào)度算法(3)掃描算法掃描算法又稱電梯算法。把磁頭看作在做橫跨磁盤的掃描,從柱面最內(nèi)圈到最外圈,然后返回來,正如電梯做往返垂直運動一樣。掃描算法既能獲得較好的尋道性能,又能防止“饑餓”現(xiàn)象,故被廣泛用于各型計算機的磁盤調(diào)度中。8.4.3磁盤調(diào)度算法(4)循環(huán)掃描算法在掃描算法基礎(chǔ)上規(guī)定磁頭單向移動來提供服務(wù),返回時直接快速移動至起始端而不服務(wù)任何請求。由于掃描算法偏向于處理那些接近最里或外的磁道的訪問請求,因此使用改進型的循環(huán)掃描算法可以避免這個問題。8.4.4磁盤的管理8.4.4磁盤的管理磁盤管理的目的之一盡量加速對磁盤的訪問,縮短訪問時間。(1)按柱面組織數(shù)據(jù)如果用戶選擇在一個柱面上連續(xù)地讀取所有塊,那么只需要考慮一次尋道時間,而忽略其他時間。這樣,從磁盤上讀寫數(shù)據(jù)的速度就接近于理論上的傳輸速率。(2)預(yù)取數(shù)據(jù)在需要磁盤塊之前就將它們預(yù)裝入內(nèi)存。這樣做的好處是方便系統(tǒng)能較好地調(diào)度磁盤,減少訪問磁盤塊所需要的平均時間。8.5
Linux緩沖技術(shù)
8.5Linux緩沖技術(shù)教學(xué)內(nèi)容Linux緩沖概述典型塊設(shè)備的塊定義緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)緩沖塊搜索數(shù)據(jù)讀取8.5.1Linux緩沖概述8.5.1Linux緩沖概述Linux0.11緩沖機制Linux0.11提供了內(nèi)存高速緩沖區(qū)暫存與塊設(shè)備之間的交換數(shù)據(jù),以減少I/O操作的次數(shù),提高系統(tǒng)的性能。緩沖塊中總是保存著最近訪問磁盤的數(shù)據(jù)。內(nèi)核在讀塊設(shè)備之前先搜索緩沖區(qū),如果數(shù)據(jù)在緩沖區(qū)中就不需要再從磁盤中讀取,否則向塊設(shè)備發(fā)出讀操作的指令。當(dāng)內(nèi)核寫塊設(shè)備時,先將數(shù)據(jù)寫入緩沖區(qū)。8.5.2典型塊設(shè)備的塊定義8.5.2典型塊設(shè)備的塊定義典型塊設(shè)備的塊定義典型的塊設(shè)備包含硬盤、軟盤、RAMDISK等。硬盤最小的可尋址單元是扇區(qū)。扇區(qū)的大小一般是2的整數(shù)次冪,最常見的大小是512Byte。塊(block)是文件系統(tǒng)對存儲設(shè)備最小的數(shù)據(jù)傳輸單位的一種抽象,系統(tǒng)規(guī)定只能基于塊來訪問文件系統(tǒng)。塊數(shù)倍于扇區(qū)大小。通常塊大小是512Byte、1024Byte或4096Byte。Linux是1024Byte。8.5.3緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)8.5.3緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)高速緩沖區(qū)被劃分為一個個緩沖塊每個緩沖塊與一個磁盤塊對應(yīng)。每個緩沖塊都用一個叫緩沖頭buffer_head的結(jié)構(gòu)體來描述。8.5.3緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)高速緩沖區(qū)被劃分為一個個緩沖塊每個緩沖塊與一個磁盤塊對應(yīng)。每個緩沖塊都用一個叫緩沖頭buffer_head的結(jié)構(gòu)體來描述。8.5.3緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)緩沖頭buffer_head結(jié)構(gòu)體(1)b_data字段:指向緩沖塊對應(yīng)的數(shù)據(jù)區(qū)。(2)b_blocknr字段:設(shè)備中的塊號。(3)b_dev字段:設(shè)備號。(4)b_lock字段:表示該緩沖塊是否已被鎖定。(5)b_count字段:緩沖塊被多少個進程引用。(6)b_dirt字段:為延遲寫字段,即臟位字段。(7)b_uptodate字段:為數(shù)據(jù)有效位字段(8)b_wait字段:指向訪問緩沖塊的等待隊列。8.5.4緩沖塊搜索8.5.4緩沖塊搜索緩沖塊搜索內(nèi)核程序在使用高速緩沖區(qū)中的緩沖塊時,都必須先通過指定設(shè)備號(b_dev)和塊號(b_blocknr)搜索緩沖區(qū)中的緩沖塊。內(nèi)核搜索合適的緩沖塊有兩種方法一種是搜索散列表另一種是搜索LRU隊列(free_list)8.5.5數(shù)據(jù)讀取8.5.5數(shù)據(jù)讀取數(shù)據(jù)讀取數(shù)據(jù)讀取的過程主要是指從用戶提交文件讀取請求開始到產(chǎn)生設(shè)備I/O請求的過程。主要過程內(nèi)核上層程序會將文件訪問請求轉(zhuǎn)換為對數(shù)據(jù)塊的訪問,通過使用bread()函數(shù)獲得對應(yīng)的緩沖塊。bread()函數(shù)利用請求的設(shè)備號和塊號,在相應(yīng)的散列數(shù)組項中查找緩沖塊,檢查需要的數(shù)據(jù)塊是否已經(jīng)放入緩沖區(qū)中。若沒有,就會分配一個新的緩沖塊,然后調(diào)用底層塊設(shè)備讀寫函數(shù)ll_rw_block()去讀取相應(yīng)的數(shù)據(jù)塊。若有,直接讀回8.5.3緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)file_read()函數(shù)讀磁盤設(shè)備8.5.3緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)bread()函數(shù)讀取緩沖區(qū)8.5.3緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)bread()函數(shù)讀取緩沖區(qū)8.6
I/O控制
8.6
I/O控制教學(xué)內(nèi)容設(shè)備的接口與端口典型I/O控制方式8.6.1設(shè)備的接口與端口8.6.1設(shè)備的接口與端口在具有數(shù)據(jù)總線、地址總線、控制總線的計算機中,設(shè)備都是通過接口(設(shè)備控制器)連接到3組總線上。8.6.1設(shè)備的接口與端口接口內(nèi)部一般含有3類端口數(shù)據(jù)端口:暫存設(shè)備與CPU交互的數(shù)據(jù)。狀態(tài)端口:暫存設(shè)備產(chǎn)生的工作狀態(tài)信息??刂贫丝冢簳捍鍯PU發(fā)給設(shè)備的控制命令8.6.2典型I/O控制方式8.6.2典型I/O控制方式I/O控制CPU與外設(shè)之間進行數(shù)據(jù)傳輸?shù)倪^程稱。主要I/O控制方式有5種無條件傳送方式(也叫同步傳送)查詢傳送方式(也叫異步傳送、循環(huán)測試I/O)中斷傳送方式通道傳送方式DMA傳送方式8.6.2典型I/O控制方式無條件傳送方式(也叫同步傳送)CPU與設(shè)備進行無條件傳送數(shù)據(jù)時,CPU不需要查詢外設(shè)狀態(tài),直接進行數(shù)據(jù)傳輸。例如,如代碼8-5所示,直接從設(shè)備的80H端口讀取數(shù)據(jù),然后直接寫到設(shè)備的81H端口中。8.6.2典型I/O控制方式查詢傳送方式(也叫異步傳送、循環(huán)測試I/O)查詢方式是在傳送數(shù)據(jù)之前,CPU先對外設(shè)狀態(tài)進行檢測,直到確認(rèn)外設(shè)已經(jīng)準(zhǔn)備好才開始傳輸。在執(zhí)行輸入時,先獲取狀態(tài)端口的狀態(tài)數(shù)據(jù),檢測外設(shè)是否準(zhǔn)備好了輸入,即數(shù)據(jù)端口的數(shù)據(jù)是否已經(jīng)準(zhǔn)備好。若沒有準(zhǔn)備好,則繼續(xù)循環(huán)檢測,直到準(zhǔn)備好,才執(zhí)行對數(shù)據(jù)端口的讀操作。在執(zhí)行輸出時,先獲取狀態(tài)端口的狀態(tài)數(shù)據(jù),檢測外設(shè)是否準(zhǔn)備好了輸出,即數(shù)據(jù)端口是否已經(jīng)被清空。若沒有被清空,則繼續(xù)循環(huán)檢測,直到被清空,才執(zhí)行對數(shù)據(jù)端口的寫操作。8.6.2典型I/O控制方式查詢傳送方式(也叫異步傳送、循環(huán)測試I/O)查詢方式是在傳送數(shù)據(jù)之前,CPU先對外設(shè)狀態(tài)進行檢測,直到確認(rèn)外設(shè)已經(jīng)準(zhǔn)備好才開始傳輸。8.6.2典型I/O控制方式中斷傳送方式中斷方式的傳輸過程是指,當(dāng)外設(shè)數(shù)據(jù)準(zhǔn)備好或準(zhǔn)備好接收時,主動向CPU產(chǎn)生中斷信號。CPU收到中斷信號后,停止當(dāng)前工作,立即開始準(zhǔn)備進行數(shù)據(jù)傳輸。CPU在中斷服務(wù)程序中完成對數(shù)據(jù)的傳輸。中斷傳送的優(yōu)點(1)數(shù)據(jù)傳輸?shù)膶崟r性高(2)CPU與設(shè)備可以并行工作8.6.2典型I/O控制方式通道傳送方式通道(Channel)是用來控制外設(shè)與內(nèi)存數(shù)據(jù)傳輸?shù)膶iT部件。通道有獨立的指令系統(tǒng),既能受控于CPU,又能獨立于CPU主動控制外設(shè)的數(shù)據(jù)傳輸過程。當(dāng)進程向外設(shè)請求數(shù)據(jù)時就啟動通道,完成對通道的初始化,包括數(shù)據(jù)的存放地址、字節(jié)數(shù)等參數(shù)的初始化。通道被初始化后主動控制數(shù)據(jù)傳輸過程,實現(xiàn)設(shè)備和內(nèi)存之間直接的數(shù)據(jù)傳輸,不需要CPU干預(yù),直到數(shù)據(jù)傳輸結(jié)束為止。通道方式的數(shù)據(jù)傳輸過程以內(nèi)存為中心,可實現(xiàn)內(nèi)存與外設(shè)直接數(shù)據(jù)交互,能支持高速批量數(shù)據(jù)傳輸。8.6.2典型I/O控制方式DMA傳送方式直接內(nèi)存存?。―irectMemoryAccess)DMA方式支持在內(nèi)存與I/O設(shè)備之間、內(nèi)存與內(nèi)存之間、I/O設(shè)備與I/O設(shè)備之間直接傳送數(shù)據(jù),不需要CPU的干預(yù)。DMA傳送方式主要特點(1)數(shù)據(jù)傳輸支持塊傳送,即每次傳送一個數(shù)據(jù)塊的數(shù)據(jù)。(2)傳送過程直接在設(shè)備與內(nèi)存之間進行,不需要CPU參與。(3)僅在傳送數(shù)據(jù)開始和結(jié)束時,才需CPU干預(yù)。8.7設(shè)備驅(qū)動機制
8.7設(shè)備驅(qū)動機制 教學(xué)內(nèi)容設(shè)備驅(qū)動概念驅(qū)動程序基本接口Linux設(shè)備驅(qū)動Linux字符設(shè)備驅(qū)動示例 Linux雜項設(shè)備驅(qū)動示例8.7.1設(shè)備驅(qū)動概念8.7.1設(shè)備驅(qū)動概念程序訪問設(shè)備有兩種典型的方法方法一,直接通過I/O指令操作硬件方法二,通過系統(tǒng)調(diào)用間接地控制硬件。設(shè)備驅(qū)動程序(DeviceDriver)設(shè)備驅(qū)動程序是硬件設(shè)備的接口程序,負(fù)責(zé)直接控制硬件設(shè)備的各種操作。設(shè)備驅(qū)動程序向上為操作系統(tǒng)的I/O操作請求(來自文件系統(tǒng)的標(biāo)準(zhǔn)接口)提供服務(wù),向下執(zhí)行I/O指令控制硬件設(shè)備工作,完成操作系統(tǒng)與設(shè)備之間的通信。8.7.1設(shè)備驅(qū)動概念驅(qū)動程序在系統(tǒng)中的地位8.7.2驅(qū)動程序基本接口8.7.2驅(qū)動程序基本接口驅(qū)動程序的基本接口包括3類面向用戶程序的接口面向I/O管理器的接口面向設(shè)備的接口8.7.2驅(qū)動程序基本接口面向用戶程序的接口(1)設(shè)備的打開與釋放(2)設(shè)備的讀寫操作(3)設(shè)備的控制操作(4)設(shè)備的中斷處理(5)設(shè)備的輪詢處理8.7.2驅(qū)動程序基本接口面向I/O管理器的接口注冊函數(shù)注銷函數(shù)必需的數(shù)據(jù)結(jié)構(gòu)8.7.2驅(qū)動程序基本接口面向設(shè)備的接口這類接口的具體實現(xiàn)與設(shè)備密切相關(guān)主要功能是把用戶對設(shè)備的請求轉(zhuǎn)化為一系列的端口操作,實現(xiàn)無條件傳送、查詢傳送、中斷傳送或DMA傳送,實現(xiàn)用戶進程和設(shè)備之間的通信。8.7.3Linux設(shè)備驅(qū)動8.7.3Linux設(shè)備驅(qū)動可裝載內(nèi)核模塊LoadableKernelModule,LKM模塊機制用于解決單體內(nèi)核機制的不足??裳b載內(nèi)核模塊是一種未經(jīng)鏈接的可執(zhí)行代碼,但是經(jīng)過動態(tài)裝載(鏈接)后成為內(nèi)核一部分。可裝載內(nèi)核模塊也可以被動態(tài)地卸載。設(shè)備驅(qū)動程序是一種可以通過模塊的方式被添加到內(nèi)核而又無須對內(nèi)核重新編譯的程序。8.7.3Linux設(shè)備驅(qū)動設(shè)備驅(qū)動程序框架典型硬件設(shè)備驅(qū)動程序,需要3類接口面向用戶程序的接口面向I/O管理器的接口面向設(shè)備的接口8.7.3Linux設(shè)備驅(qū)動設(shè)備驅(qū)動程序框架(1)設(shè)備注冊函數(shù)將用戶定義好的設(shè)備加入到chrdev字符設(shè)備數(shù)組合適位置intregister_chrdev(intmajor,char*name,conststructfile_operations*fops);8.7.3Linux設(shè)備驅(qū)動fops參數(shù)是file_operations結(jié)構(gòu)體類型8.7.3Linux設(shè)備驅(qū)動fops參數(shù)的作用提供驅(qū)動程序內(nèi)部自定義的設(shè)備操作接口與標(biāo)準(zhǔn)文件操作接口之間的映射關(guān)系。8.7.3Linux設(shè)備驅(qū)動設(shè)備驅(qū)動程序框架(2)設(shè)備注銷函數(shù)當(dāng)不再需要這個設(shè)備時可以卸載unregister_chrdev()或unregister_blkdev()分別從內(nèi)核中注銷字符設(shè)備和塊設(shè)備。注銷的過程除釋放內(nèi)核相應(yīng)的數(shù)據(jù)結(jié)構(gòu),還會刪除設(shè)備文件和釋放設(shè)備號。8.7.3Linux設(shè)備驅(qū)動設(shè)備驅(qū)動程序框架(3)定義各種必要的設(shè)備操作函數(shù)設(shè)備可能有的操作函數(shù)包括設(shè)備的打開與釋放、設(shè)備的讀寫操作、設(shè)備的控制操作、設(shè)備的中斷處理、設(shè)備的輪詢處理等。但是,不是每個設(shè)備都需要實現(xiàn)這些接口。8.7.4Linux字符設(shè)備驅(qū)動示例8.7.4Linux字符設(shè)備驅(qū)動示例
示例1的功能支持用戶對設(shè)備內(nèi)部的一個變量進行讀和寫步驟1.定義設(shè)備內(nèi)部的全局變量8.7.4Linux字符設(shè)備驅(qū)動示例
步驟2.實現(xiàn)若干個設(shè)備操作函數(shù)8.7.4Linux字符設(shè)備驅(qū)動示例
步驟3.定義和初始化文件操作結(jié)構(gòu)體變量8.7.4Linux字符設(shè)備驅(qū)動示例
步驟4.實現(xiàn)設(shè)備的注冊函數(shù)和注銷函數(shù)8.7.4Linux字符設(shè)備驅(qū)動示例
步驟5.編譯驅(qū)動程序6.安裝和卸載驅(qū)動程序#insmodRWDevState.ko#rmmod
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 華律勞務(wù)合同范本
- 2025年人造纖維(纖維素纖維)項目合作計劃書
- 合同范例三級
- 吊裝機租賃合同范本
- 2025年急救室設(shè)備器具合作協(xié)議書
- 2025年成品漿板包裝輸送系統(tǒng)項目發(fā)展計劃
- 2025年制漿和造紙專用設(shè)備項目建議書
- 變更房產(chǎn)合同范本
- 出售取向硅鋼合同范本
- 幻彩美甲店入股合同范本
- 自身免疫性腦炎護理常規(guī)
- 《信息技術(shù)基礎(chǔ)》高職全套教學(xué)課件
- GB/T 19077-2024粒度分析激光衍射法
- 露天礦山開采施工組織方案
- 北京市西城區(qū)2022-2023學(xué)年高三上學(xué)期1月期末考試歷史試題 附答案
- 2024關(guān)于進一步提升基層應(yīng)急管理能力的意見學(xué)習(xí)解讀課件
- 幼兒園小班健康公開課《笑一笑》課件
- 《PLC應(yīng)用技術(shù)(西門子S7-1200)第二版》全套教學(xué)課件
- 單詞連連看答題闖關(guān)游戲課堂互動課件1
- 加強文物古籍保護利用(2022年廣東廣州中考語文試卷非連續(xù)性文本閱讀試題及答案)
- 2024小學(xué)數(shù)學(xué)義務(wù)教育新課程標(biāo)準(zhǔn)(2022版)必考題庫附含答案
評論
0/150
提交評論