首先讓大家了解下Unix操作系統中設備的知識,然後全面介紹Unix操作系統中設備功能分析,希望對大家對Unix操作系統的學習有所幫助。
設備分為面向塊的設備和面向字符的設備,塊的如磁盤、磁帶等字符的如紙帶輸入/穿孔輸出機、打印機等。塊設備通過一層緩沖軟件管理,字符設備通過字符緩沖實現。
塊設備中存儲的信息從Unix操作系統硬件組織上是有結構的,由若干固定大小的塊所組成,信息的存取通常是以塊為單位的,從塊設備的用戶方面看。
有三種用法:
(1)程序對換系統使用,它有自己的數據結構和管理程序。
(2)文件系統使用,為了有效支持文件系統,利用了多重緩沖技術。
(3)將磁盤當作字符設備來使用,從塊設備管理系統的實現方式和程序組成看,可分為三個層次:最低層為設備驅動程序,它的主要數據結構是磁盤的各種控制寄存器和設備表;第二層是緩沖區的管理,包括申請、釋放、摘鏈、查鏈、清零、寫回和初啟,主要數據結構是15個緩沖首部和一個作為鏈頭的緩沖首部,主要有文件系統使用。最上層是與使用方式有關的程序,相當於塊設備與外部的接口。
Unix操作系統設備功能分析
塊設備除了用作程序對換空間之外,主要用於Unix操作系統文件系統。為了克服慢速外部設備和快速處理機加工速度之間的不匹配問題。Unix操作系統采用了多重緩沖技術,以便給文件系統以有效的服務,為此系統維持了一個緩沖池,內含15個緩沖,這些緩沖起著虛擬存儲器的作用,而getblk函數正是為了申請一塊指定設備,塊號的緩沖,其主要應用於:
1系統調用(exec())執行一個文件,為將要執行的文件申請新的緩沖。
2進程的自我終止(exit()),getblk為將要終止的進程查找相應的緩沖。
3讀一塊到緩沖(bread()),為其申請一塊緩沖。
4讀當前塊到緩沖,再預讀一塊(breada()),為將要讀的塊申請緩沖。
5從空閒盤區鏈中獲得一空閒盤塊(alloc()),函數根據分配到的盤塊號申請一緩沖區。
6將釋放的盤塊號記入專用的空閒塊棧中(free()),申請一緩沖區,將空閒塊棧中的信息復制到該緩沖區中。
7文件系統初啟(iinit()),申請一塊不與任何設備有聯系的內存專用區,存放專用塊。
8完成轉儲任務(update())為superblock復制回文件卷而申請緩沖區。
9系統文件卷的安裝(smount()),為存儲文件卷的superblock申請緩沖區。
10把文件復制到I/O緩沖區然後再記到外存(writei()),為I/O設備申請緩沖區。
這樣,我們對Unix操作系統的設備以及其功能分析就到這裡了。謝謝大家的閱讀。