操作系統(tǒng)第8章課件_第1頁(yè)
操作系統(tǒng)第8章課件_第2頁(yè)
操作系統(tǒng)第8章課件_第3頁(yè)
操作系統(tǒng)第8章課件_第4頁(yè)
操作系統(tǒng)第8章課件_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、24 七月 2022第8章 操作系統(tǒng)實(shí)例二:Linux 24 七月 2022目 錄8.1 Linux 的進(jìn)程管理8.2 Linux 的存儲(chǔ)管理8.3 Linux 的文件管理8.4 Linux 的設(shè)備管理24 七月 2022教學(xué)目標(biāo)熟練掌握: Linux進(jìn)程的組成,Linux的進(jìn)程調(diào)度,Linux的虛擬存儲(chǔ)空間,內(nèi)存分配和頁(yè)面淘汰策略,Linux文件系統(tǒng)的構(gòu)成,EXT2對(duì)磁盤的組織,Linux設(shè)備管理概述,Linux對(duì)字符設(shè)備的管理,Linux對(duì)塊設(shè)備的管理。掌握: Linux進(jìn)程間的通信消息隊(duì)列,EXT2文件的物理結(jié)構(gòu),虛擬文件系統(tǒng)VFS。了解: 管理虛擬存儲(chǔ)空間的數(shù)據(jù)結(jié)構(gòu),管理內(nèi)存空間的數(shù)據(jù)

2、結(jié)構(gòu)。24 七月 20228.1 Linux的進(jìn)程管理8.1.1 Linux的進(jìn)程 Linux系統(tǒng)的進(jìn)程分為兩大類: 一類是系統(tǒng)進(jìn)程,它運(yùn)行在內(nèi)核模式下,執(zhí)行操作系統(tǒng)代碼,完成一些管理性的工作; 另一類是用戶進(jìn)程,通常在用戶模式下運(yùn)行,并通過(guò)系統(tǒng)調(diào)用或在中斷、異常情況發(fā)生時(shí)進(jìn)入內(nèi)核模式。 當(dāng)考慮到響應(yīng)的及時(shí)性時(shí),Linux系統(tǒng)中的進(jìn)程也可分為實(shí)時(shí)進(jìn)程和普通進(jìn)程。24 七月 2022 Linux利用一個(gè)數(shù)據(jù)結(jié)構(gòu)task_struct來(lái)表示一個(gè)進(jìn)程。task_struct結(jié)構(gòu)包含在文件include/linux/sched.h中,主要包含以下信息: (1)進(jìn)程標(biāo)志:task_struct結(jié)構(gòu)中定義

3、了進(jìn)程標(biāo)志號(hào)PID、組標(biāo)志號(hào)GID、用戶標(biāo)志號(hào)UID等。 (2)進(jìn)程狀態(tài): TASK_RUNNING、TASK_INTERRUPTIBLE、 TASK_UNINTERRUPTIBLE、TASK_STOPPED、 TASK_ZOMBIE。 (3)進(jìn)程調(diào)度信息:Linux進(jìn)程調(diào)度程序利用這部分信息在就緒隊(duì)列(run_queue)中選出一個(gè)就緒進(jìn)程在CPU上運(yùn)行。24 七月 2022 (4) 進(jìn)程通信信息:用于消息隊(duì)列、管道、信號(hào)量等進(jìn)程通信。 (5) 進(jìn)程的家族關(guān)系:每個(gè)進(jìn)程的task_struct結(jié)構(gòu)中有許多進(jìn)程指針,分別指向祖先進(jìn)程即初始化進(jìn)程、父進(jìn)程、子進(jìn)程等的task_struct結(jié)構(gòu),使

4、系統(tǒng)中task_struct結(jié)構(gòu)形成了一棵進(jìn)程樹(shù)。 (6) 時(shí)間和定時(shí)器:用于記錄進(jìn)程執(zhí)行的總時(shí)間及進(jìn)行軟件定時(shí)。 (7) 文件系統(tǒng)信息:記錄進(jìn)程訪問(wèn)文件系統(tǒng)中相關(guān)文件的信息。 (8) 存儲(chǔ)管理信息:task_struct結(jié)構(gòu)中保存了進(jìn)程虛擬內(nèi)存空間信息及其與物理存儲(chǔ)有關(guān)的信息。 (9) 處理機(jī)現(xiàn)場(chǎng)保留信息24 七月 20228.1.2 Linux的進(jìn)程調(diào)度 在Linux系統(tǒng)中系統(tǒng)調(diào)度的基本單位是進(jìn)程,當(dāng)進(jìn)程調(diào)度時(shí)機(jī)成熟時(shí),進(jìn)程調(diào)度程序在多個(gè)進(jìn)程間進(jìn)行合理選擇,為條件最佳的進(jìn)程分配處理機(jī)并使之投入運(yùn)行。 Linux使用進(jìn)程調(diào)度統(tǒng)一處理進(jìn)程和內(nèi)核線程,所以通過(guò)進(jìn)程調(diào)度就可以得知線程調(diào)度的具體情況

5、。 Linux中進(jìn)程調(diào)度涉及了3方面:調(diào)度方式、調(diào)度時(shí)機(jī)和調(diào)度策略。24 七月 20221. 調(diào)度方式 Linux采用“有條件的可剝奪”調(diào)度方式。對(duì)于普通進(jìn)程,當(dāng)其時(shí)間片用完時(shí),調(diào)度程序挑選出下一個(gè)處于task_running狀態(tài)的進(jìn)程作為當(dāng)前進(jìn)程(自愿調(diào)度)。對(duì)于實(shí)時(shí)進(jìn)程,若其優(yōu)先級(jí)足夠高,則會(huì)從當(dāng)前的運(yùn)行進(jìn)程中搶占CPU成為新的當(dāng)前進(jìn)程(強(qiáng)制調(diào)度)。發(fā)生強(qiáng)制調(diào)度時(shí),若進(jìn)程在用戶空間中運(yùn)行,就會(huì)被直接剝奪CPU;若進(jìn)程在內(nèi)核空間中運(yùn)行,即使迫切需要其放棄CPU,也仍要等到它從系統(tǒng)空間返回之前才被剝奪CPU。24 七月 2022原因處理機(jī)執(zhí)行的進(jìn)程發(fā)生狀態(tài)轉(zhuǎn)換。直接執(zhí)行調(diào)度程序。就緒隊(duì)列中增加

6、了新進(jìn)程。正在執(zhí)行的進(jìn)程所分配的時(shí)間片用完。系統(tǒng)內(nèi)核結(jié)束中斷處理返回到用戶態(tài)。執(zhí)行系統(tǒng)調(diào)用的進(jìn)程返回到用戶態(tài)。 2.調(diào)度時(shí)機(jī) 調(diào)度時(shí)機(jī)是指重新進(jìn)行進(jìn)程調(diào)度,即重新分配處理機(jī)的時(shí)機(jī)。Linux中設(shè)置的進(jìn)程調(diào)度標(biāo)志為need_resched,當(dāng)該標(biāo)志為1時(shí),可以執(zhí)行進(jìn)程調(diào)度程序。通常引起Linux系統(tǒng)中進(jìn)程調(diào)度的原因有以下幾種:24 七月 20223. 調(diào)度策略1)數(shù)據(jù)結(jié)構(gòu)在task_struct中有4 個(gè)與進(jìn)程調(diào)度密切相關(guān)的參數(shù):policy進(jìn)程的調(diào)度策略。priority進(jìn)程的調(diào)度優(yōu)先級(jí)。普通進(jìn)程的可用的時(shí)間片的初值即為該值。Rt-priority實(shí)時(shí)進(jìn)程專用的調(diào)度優(yōu)先級(jí)。實(shí)時(shí)進(jìn)程的可用時(shí)間片

7、的初值即為該值。counter進(jìn)程可用的時(shí)間片記數(shù)。24 七月 2022搶占式調(diào)度。Vision 01用優(yōu)先級(jí)的設(shè)定,區(qū)分兩類進(jìn)程,實(shí)現(xiàn)多級(jí)調(diào)度。Vision 03進(jìn)程的分類和調(diào)度策略。Vision 02依據(jù)優(yōu)先級(jí)weight來(lái)選擇可運(yùn)行進(jìn)程。Vision 04特點(diǎn)2)調(diào)度策略的特點(diǎn)24 七月 20228.1.3 Linux進(jìn)程間的通信-消息隊(duì)列 Linux為進(jìn)程間的通信提供了多種機(jī)制,常見(jiàn)的有信號(hào)、信號(hào)量、管道、消息隊(duì)列和共享內(nèi)存儲(chǔ)區(qū)等。信號(hào)用于一個(gè)進(jìn)程向另一個(gè)進(jìn)程發(fā)出通知;而信號(hào)量則用于進(jìn)程間取得同步;管道、消息隊(duì)列和共享存儲(chǔ)區(qū)都用于在進(jìn)程間傳遞數(shù)據(jù)。 消息隊(duì)列是進(jìn)程間的一種異步通信方法。

8、“異步”即發(fā)送消息的進(jìn)程在消息發(fā)出之后,不必等待接收進(jìn)程作出反應(yīng),就可以去做其他的事情了。Linux 對(duì)消息的長(zhǎng)度沒(méi)有限制。消息隊(duì)列使用完畢后,應(yīng)該予以釋放(即刪除)。24 七月 2022 1. 消息隊(duì)列的數(shù)據(jù)結(jié)構(gòu) 一個(gè)消息隊(duì)列是一個(gè)由消息緩沖區(qū)所構(gòu)成的鏈表,它允許一個(gè)或多個(gè)進(jìn)程從中讀出或?qū)懭胂ⅰ?采用這種通信機(jī)制時(shí),Linux需維護(hù)一個(gè)消息隊(duì)列數(shù)組msgque,每個(gè)數(shù)組元素是一個(gè)描述某個(gè)消息隊(duì)列的msqid_ds結(jié)構(gòu)的結(jié)構(gòu)體,Linux通過(guò)該結(jié)構(gòu)管理消息隊(duì)列。當(dāng)創(chuàng)建新的消息隊(duì)列時(shí),系統(tǒng)將從內(nèi)存中申請(qǐng)分配一個(gè)由msqid_ds結(jié)構(gòu)描述的內(nèi)存塊,并將它們插入到數(shù)組msgque中。24 七月 2

9、022該通信機(jī)制所用到的數(shù)據(jù)結(jié)構(gòu)描述如下:static struct msqid_ds msgque;/*每個(gè)消息隊(duì)列占一個(gè)msqid_ds結(jié)構(gòu)*/struct msqid_ds struct ipc_perm msg_prem; struct msg *msg_first;/*指向消息隊(duì)列的第一條消息*/ struct msg *msg_last;/*指向消息隊(duì)列的最后一條消息*/ time_t msg_stime; /*最后發(fā)送時(shí)間*/ time_t msg_rtime;/*最后接收時(shí)間*/ time_t msg_ctime;/*最后修改時(shí)間*/ struct wait_queue *wa

10、it;/*寫(xiě)消息進(jìn)程的等待隊(duì)列指針*/ struct wait_queue *rwait;/*讀消息進(jìn)程的等待隊(duì)列指針*/ ushort msg_cbytes;/*隊(duì)列中消息的字節(jié)數(shù)*/ ushort msg_qnum;/*隊(duì)列中消息數(shù)*/ ushort msg_qbytes;/*隊(duì)列中消息的最大字節(jié)數(shù)*/ ushort msg_lspid;/*最后一個(gè)發(fā)送消息的進(jìn)程的標(biāo)志號(hào)*/ ushort msg_lrpid;/*最后一個(gè)接收消息的進(jìn)程的標(biāo)志號(hào)*/ ;24 七月 2022struct msg/*每條信息占一個(gè)msg結(jié)構(gòu)*/ struct msg *msg_next;/*指向下一條消息的指針

11、*/ long msg_type;/*消息類型*/ char *msg_spot;/*消息文本的地址指針*/ time_t msg_stime;/*發(fā)送此條消息的時(shí)間*/ short msg_ts;/*消息文本的長(zhǎng)度*/ ; Linux系統(tǒng)中表示消息的結(jié)構(gòu)中含有指向下一條消息的指針msg_next,每個(gè)消息隊(duì)列均為一個(gè)單向鏈表。24 七月 2022Linux系統(tǒng)中的消息隊(duì)列24 七月 20222. 消息隊(duì)列相關(guān)的系統(tǒng)調(diào)用1)創(chuàng)建新消息隊(duì)列系統(tǒng)調(diào)用newque( )2)刪除消息隊(duì)列系統(tǒng)調(diào)用freeque( )3)發(fā)送消息系統(tǒng)調(diào)用msgsnd( )4)接收消息系統(tǒng)調(diào)用msgrcv( )24 七月

12、2022 1.虛擬地址空間 在Pentium計(jì)算機(jī)上,Linux系統(tǒng)采用3位虛擬地址,因而每個(gè)用戶的虛擬地址空間可達(dá)到4 GB,其中高地址的1 GB是系統(tǒng)空間,低地址的3 GB是用戶空間。 進(jìn)程實(shí)際用到的虛擬地址空間由若干個(gè)連續(xù)的區(qū)域構(gòu)成。Linux系統(tǒng)采用虛存段和鏈表來(lái)表示。每個(gè)虛存段表示進(jìn)程的一段連續(xù)區(qū)域,虛存段之間不一定是連續(xù)的。每個(gè)進(jìn)程通常占用幾個(gè)虛存段,分別為代碼段、數(shù)據(jù)段和堆棧段等,虛存段用單鏈表來(lái)管理。8.2.1 Linux的虛擬存儲(chǔ)空間8.2 Linux的存儲(chǔ)管理24 七月 2022Linux的虛擬存儲(chǔ)空間24 七月 2022 2.頁(yè)表管理 Linux系統(tǒng)采用請(qǐng)求頁(yè)式技術(shù)管理虛

13、擬內(nèi)存。在Linux中,采用二級(jí)頁(yè)目表的形式,即把頁(yè)表分為二級(jí)結(jié)構(gòu):頁(yè)目錄表(PGD)和頁(yè)表(PTE)。每個(gè)進(jìn)程有一個(gè)頁(yè)目錄表,其大小為4 KB,以4 B為一個(gè)表項(xiàng),共包含1 024個(gè)表項(xiàng),每個(gè)頁(yè)目錄表項(xiàng)指向頁(yè)表中的一頁(yè)。同樣,每個(gè)頁(yè)表大小也為4 KB,包含1 024個(gè)表項(xiàng),每個(gè)頁(yè)表項(xiàng)指向該進(jìn)程的一個(gè)頁(yè)面。虛擬地址結(jié)構(gòu)頁(yè)目錄3122頁(yè)號(hào)2112頁(yè)內(nèi)位移量11024 七月 2022 3.地址轉(zhuǎn)換 當(dāng)調(diào)用fork()創(chuàng)建一個(gè)進(jìn)程時(shí),系統(tǒng)為之建立一個(gè)PCB,稱為task_struct結(jié)構(gòu),其中包含了一個(gè)用于描述該進(jìn)程存儲(chǔ)管理相關(guān)信息的mm_struct數(shù)據(jù)結(jié)構(gòu),頁(yè)目錄表的起始地址存放在mm_stru

14、ct中。 每次將虛擬地址轉(zhuǎn)換成物理地址時(shí),都要首先通過(guò)mm_struct中的指針pgd找到該進(jìn)程的頁(yè)目錄表;然后根據(jù)頁(yè)目錄在頁(yè)目錄表中找到相應(yīng)的表項(xiàng),從中得到頁(yè)表的入口地址;其次根據(jù)頁(yè)號(hào)在頁(yè)表中找到相應(yīng)的表項(xiàng),從中得到該頁(yè)在內(nèi)存中的物理塊號(hào);最后根據(jù)頁(yè)內(nèi)位移量就可以訪問(wèn)所需內(nèi)容。24 七月 2022地址轉(zhuǎn)換過(guò)程示意圖24 七月 20228.2.2 管理虛擬存儲(chǔ)空間的數(shù)據(jù)結(jié)構(gòu) Linux在管理進(jìn)程虛擬空間時(shí)定義了虛存段(vma)。 虛存段是進(jìn)程一段連續(xù)的虛存空間,在這段虛存空間里,所有單元擁有相同特征。這樣分割是因?yàn)槊總€(gè)虛擬內(nèi)存區(qū)域的來(lái)源可能不同,有的可能來(lái)自可執(zhí)行映像,有的可能來(lái)自共享庫(kù)等,每

15、一個(gè)虛存段的處理操作有所不同。 Linux用數(shù)據(jù)結(jié)構(gòu)vm_area_struct描述了虛存段的屬性,它主要包括: (1)vma在虛存中的起始地址和終止地址。 (2)vma的內(nèi)容來(lái)源。 (3)一系列對(duì)vma的操作例程。24 七月 2022 在進(jìn)程運(yùn)行過(guò)程中,經(jīng)常需要為進(jìn)程動(dòng)態(tài)分配、撤銷、擴(kuò)展或縮減vma,因此vm_area_struct結(jié)構(gòu)訪問(wèn)頻繁。為了提高對(duì)vma查詢、插入和刪除的速度,Linux同時(shí)使用了AVL平衡樹(shù)來(lái)維護(hù)組織vm_area_struct結(jié)構(gòu)。 Linux用結(jié)構(gòu)mm_struct描述一個(gè)進(jìn)程的整個(gè)虛擬地址空間。mm_struct結(jié)構(gòu)包含了當(dāng)前可執(zhí)行文件信息和進(jìn)程頁(yè)目錄指針pg

16、d,以及指向vm_area_struct結(jié)構(gòu)鏈表的指針。進(jìn)程的task_struct內(nèi)嵌了mm_struct的指針mm。24 七月 2022虛擬存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)的關(guān)系24 七月 20228.2.3 管理內(nèi)存空間的數(shù)據(jù)結(jié)構(gòu) Linux使用位示圖的方式記錄所有物理內(nèi)存的空間情況。位示圖實(shí)際為表,該表在系統(tǒng)初始化時(shí),由free_area_init()函數(shù)創(chuàng)建。 在Linux系統(tǒng)內(nèi)核定義了bitmap表,該表的每一項(xiàng)描述某一種頁(yè)塊的信息。 free_area數(shù)組的每一項(xiàng)包含兩個(gè)元素:list和map,list是一個(gè)雙向鏈表的頭指針,指向空閑頁(yè)塊的起始物理頁(yè)編號(hào),而map指針指向一個(gè)記錄頁(yè)塊組合分配情況的位

17、示圖。如果第N個(gè)頁(yè)面是空閑的,則該位示圖的第N個(gè)位置為0;在該頁(yè)面塊中只要有一個(gè)頁(yè)被占用,該位置即為1。24 七月 2022free_area數(shù)據(jù)結(jié)構(gòu)24 七月 20228.2.4 內(nèi)存的分配和頁(yè)面淘汰策略 1內(nèi)存的分配 在給進(jìn)程分配空閑塊時(shí),Linux系統(tǒng)首先在free_area數(shù)組中尋找一個(gè)與請(qǐng)求大小相同的空閑頁(yè)塊。如果沒(méi)有所請(qǐng)求大小的空閑頁(yè)塊,則繼續(xù)搜索是請(qǐng)求大小空閑頁(yè)塊兩倍的空間。這個(gè)過(guò)程將一直持續(xù)到free_area數(shù)組被搜索完或找到滿足條件的最小頁(yè)塊為止。如果找到的空閑頁(yè)塊正好等于請(qǐng)求的塊長(zhǎng)時(shí),將它從中刪除。如果找到的空閑塊大于請(qǐng)求的頁(yè)塊時(shí),將空閑塊一分為二,前半部分插入free_

18、area中前一條list鏈表中,取后半部分。若還大,則繼續(xù)對(duì)其半分,留一半取一半,直至相等。在分配的過(guò)程中要相應(yīng)調(diào)整bitmap表,將相應(yīng)位置設(shè)為0或1。24 七月 2022 系統(tǒng)回收內(nèi)存空間時(shí),會(huì)檢查回收塊與插入點(diǎn)前后相鄰的情況,若空閑,則要合并成一個(gè)大的空閑塊組,并從free_area的空閑鏈表中刪除該相鄰塊,然后再繼續(xù)查找合并空閑塊的相鄰空閑塊。重復(fù)上述過(guò)程,直到找不到相鄰空閑塊為止,把最后得到的空閑塊插入free_area中的相應(yīng)空閑鏈表中。24 七月 2022 2.頁(yè)面淘汰策略 Linux淘汰頁(yè)的依據(jù)是年齡。每頁(yè)在mem_map_t結(jié)構(gòu)中有一個(gè)表示年齡的計(jì)數(shù)器,供內(nèi)核保護(hù)交換進(jìn)程決策

19、該頁(yè)面是否被換出。當(dāng)頁(yè)面未被使用時(shí),則會(huì)變老,內(nèi)核保護(hù)交換進(jìn)程僅淘汰出那些最近一直沒(méi)有使用的頁(yè)面。其缺省操作是:頁(yè)面年齡初始值為3,每引用一次其年齡將增加3,最大值為20。每當(dāng)內(nèi)核保護(hù)交換進(jìn)程要淘汰出一個(gè)頁(yè)面時(shí),便將它的值減1,直到減為0為止。系統(tǒng)會(huì)首先選擇那些年齡值為0的頁(yè)面換出或是淘汰。24 七月 2022 Linux最早的文件系統(tǒng)是Minix,它受限很大且性能低下。其文件名最長(zhǎng)不能超過(guò)14個(gè)字符且最大文件為64 MB。 第一個(gè)專門為L(zhǎng)inux設(shè)計(jì)的文件系統(tǒng)被稱為擴(kuò)展文件系統(tǒng)(extended file system)或EXT,擴(kuò)展文件系統(tǒng)第2版或稱EXT2,被設(shè)計(jì)出來(lái)并添加到 Linux

20、中。 每個(gè)實(shí)際文件系統(tǒng)從操作系統(tǒng)和系統(tǒng)服務(wù)中分離出來(lái),它們之間通過(guò)一個(gè)接口層虛擬文件系統(tǒng)或VFS來(lái)通信。VFS使得Linux可以支持多個(gè)不同的文件系統(tǒng),每個(gè)表示一個(gè)VFS的通用接口。由于軟件將Linux文件系統(tǒng)的所有細(xì)節(jié)進(jìn)行了轉(zhuǎn)換,所以Linux核心的其他部分及系統(tǒng)中運(yùn)行的程序?qū)⒖吹浇y(tǒng)一的文件系統(tǒng)。 Linux文件系統(tǒng)采用了多級(jí)目錄的樹(shù)形層次結(jié)構(gòu)。樹(shù)形結(jié)構(gòu)的最上層是根目錄,用/表示(這與Windows和DOS操作系統(tǒng)中用表示根目錄不同)。其中,矩形表示目錄,圓形表示文件。系統(tǒng)在運(yùn)行中可以通過(guò)使用命令或系統(tǒng)調(diào)用進(jìn)入任何一層目錄,這時(shí)系統(tǒng)所處的目錄成為當(dāng)前目錄。8.3.1 Linux文件系統(tǒng)的構(gòu)成

21、8.3 Linux的文件管理24 七月 2022Linux文件系統(tǒng)的樹(shù)形結(jié)構(gòu)24 七月 2022 Linux采用了目錄分解的方法來(lái)管理文件目錄。在樹(shù)形目錄中的目錄項(xiàng)是文件的符號(hào)目錄。它的基本目錄是一個(gè)稱為i結(jié)點(diǎn)(i-node)的結(jié)構(gòu)體,其中記錄著文件的管理信息。每個(gè)文件對(duì)應(yīng)一個(gè)i結(jié)點(diǎn),它們?cè)谙到y(tǒng)中有唯一的編號(hào),稱為i結(jié)點(diǎn)號(hào)。 Linux符號(hào)目錄的目錄項(xiàng)只有兩部分組成:文件名和i結(jié)點(diǎn)號(hào)。 Linux的文件名是由字母、數(shù)字、下劃線和圓點(diǎn)組成的字符串構(gòu)成,文件名的長(zhǎng)度限制在255個(gè)字符以內(nèi)。一個(gè)文件的兩個(gè)目錄結(jié)構(gòu)由符號(hào)目錄項(xiàng)中的i結(jié)點(diǎn)號(hào)構(gòu)成。24 七月 2022Linux文件系統(tǒng)的目錄項(xiàng)24 七月

22、20228.3.2 EXT2對(duì)磁盤的組織 1EXT2文件系統(tǒng) EXT2文件系統(tǒng)把它所使用的磁盤邏輯分區(qū)劃分成若干組(block group),并從0開(kāi)始依次編號(hào)。每個(gè)塊組中包含若干數(shù)據(jù)塊,數(shù)據(jù)塊中就是目錄或文件內(nèi)容。對(duì)于不同的EXT2文件系統(tǒng),數(shù)據(jù)塊長(zhǎng)度可以不同。 EXT2文件系統(tǒng)的邏輯分區(qū)包含的塊組數(shù)量是由分區(qū)大小和數(shù)據(jù)塊大小決定的。每個(gè)塊組中除數(shù)據(jù)塊之外還包含著用于管理和控制的5種管理信息塊:超級(jí)塊、組塊描述符、塊位圖、i結(jié)點(diǎn)位圖和i結(jié)點(diǎn)表。如圖8-9所示,5種信息塊分布在每一個(gè)塊組的前部,其后是文件的數(shù)據(jù)塊。24 七月 2022EXT2文件系統(tǒng)結(jié)構(gòu)24 七月 2022 2.5種管理信息塊

23、 1)超級(jí)塊(superblock) 超級(jí)塊是用來(lái)描述EXT2文件系統(tǒng)整體信息的數(shù)據(jù)結(jié)構(gòu),以及主要描述文件在邏輯分區(qū)中的靜態(tài)分布情況的,描述文件系統(tǒng)的各種組成結(jié)構(gòu)的尺寸、數(shù)量等。超級(jí)塊對(duì)于文件系統(tǒng)的維護(hù)是至關(guān)重要的。超級(jí)塊位于每個(gè)塊組的最前面,所有塊組中包含的超級(jí)塊內(nèi)容是相同的。在系統(tǒng)運(yùn)行期間,需要把超級(jí)塊的內(nèi)容復(fù)制到內(nèi)存的系統(tǒng)緩沖區(qū)中。一般情況下,只需把塊組0的超級(jí)塊讀入內(nèi)存,其他塊組的超級(jí)塊僅作為備份。24 七月 2022 2)組塊描述符 一個(gè)組塊描述符用以描述一個(gè)組塊的屬性。組塊描述符組由若干組塊描述符組成,描述了文件系統(tǒng)中所有組塊的屬性,存放于終極塊所在塊的下一個(gè)塊中。 組塊描述符里給

24、出的,都是涉及該組塊的一些重要信息。當(dāng)新建一個(gè)文件時(shí),先應(yīng)從bg_free_blocks_count 和 bg_free_i-nodes_count 里,得知有沒(méi)有空閑的磁盤塊,以及有沒(méi)有空閑的i結(jié)點(diǎn)。如果本組里面沒(méi)有了,那么就談不上在這里分配的問(wèn)題了。如果有,才可以從bg_block_bitmap、bg_inode_bitmap和bg_i-node_table里,得到空閑的i結(jié)點(diǎn)以及空閑的磁盤塊。24 七月 2022 3)塊位圖 盤塊位圖是用來(lái)管理組塊中數(shù)據(jù)區(qū)里的盤塊的。在塊組中,盤塊位圖自己占據(jù)一個(gè)盤塊。盤塊位圖中的某位為0,表示數(shù)據(jù)區(qū)中的相應(yīng)盤塊為空閑;為1,表示數(shù)據(jù)區(qū)中的相應(yīng)盤塊已分配

25、給某個(gè)文件使用。因此,盤塊位圖中位的數(shù)目,決定了塊組中盤塊的個(gè)數(shù),也就是該塊組中能夠有多少盤塊用來(lái)存放文件內(nèi)容。 由于盤塊位圖被局限在一個(gè)盤塊里,如果假定b是一個(gè)盤塊所含字節(jié)的個(gè)數(shù),那么每個(gè)塊組中最多可以有 8b 個(gè)盤塊。又假定 s 為文件卷里盤塊的數(shù)目,那么該文件卷的塊組數(shù)約為s/(8b)。顯然,在文件卷大小不變的情況下,b越小,s就越大。也就是說(shuō),文件卷中盤塊越小,塊組的數(shù)目就越多。24 七月 2022 4)i結(jié)點(diǎn)位圖 i結(jié)點(diǎn)位圖用來(lái)管理塊組中的i結(jié)點(diǎn),它占用一個(gè)盤塊。位圖中的某位為0,表示i結(jié)點(diǎn)表中的相應(yīng)結(jié)點(diǎn)為空閑;為1,表示i結(jié)點(diǎn)表中的相應(yīng)結(jié)點(diǎn)已經(jīng)分配給某個(gè)文件使用。因此,i結(jié)點(diǎn)位圖中

26、位的數(shù)目,決定了i結(jié)點(diǎn)表中索引結(jié)點(diǎn)的個(gè)數(shù),也就是該塊組中能夠容納的文件個(gè)數(shù)。而i結(jié)點(diǎn)位圖中位的編號(hào),就是那個(gè)文件相應(yīng)的i結(jié)點(diǎn)的編號(hào)。24 七月 2022 5)i結(jié)點(diǎn)表 在EXT2中,任何文件都有自己的i結(jié)點(diǎn),即一般所說(shuō)的文件控制塊。這些i結(jié)點(diǎn)的集合,就稱為i結(jié)點(diǎn)表。因此,塊組中的i結(jié)點(diǎn)表,也就是存放在該塊組里的所有文件的文件控制塊的集合。EXT2中,每個(gè)i結(jié)點(diǎn)給出相應(yīng)文件的如下一些信息: 文件類型和訪問(wèn)權(quán)限(i_mode)。 文件主標(biāo)志(i_uid)。以字節(jié)為單位的文件長(zhǎng)度(i_size)。文件占用的盤塊數(shù)(i_blocks)。文件索引表(i_block )。 24 七月 20228.3.3

27、EXT2文件的物理結(jié)構(gòu) 1小型文件的索引結(jié)構(gòu) 當(dāng)一個(gè)文件的長(zhǎng)度為112個(gè)磁盤塊時(shí),在 EXT2里就稱為小型文件。這時(shí),用文件i結(jié)點(diǎn)里數(shù)組i_block 的前12個(gè)元素i_block0i_block11,直接給出文件數(shù)據(jù)存放的磁盤塊號(hào)。于是,文件邏輯塊號(hào)011與物理塊號(hào)間的對(duì)應(yīng)關(guān)系,就由它們直接索引得到。24 七月 2022EXT2的小型、中型文件結(jié)構(gòu)24 七月 2022 2.中型文件的索引結(jié)構(gòu) 當(dāng)一個(gè)文件的長(zhǎng)度超過(guò)12個(gè)磁盤塊時(shí),在 EXT2里就稱為中型文件。這時(shí),除了需要用到文件i結(jié)點(diǎn)里數(shù)組 i_block 的前 12 個(gè)元素,直接給出 12 個(gè)磁盤塊外,還需要使用它的第 13個(gè)元素i_bl

28、ock12,形成一次間接索引。 在EXT2的小型、中型文件結(jié)構(gòu)圖中,由i_block12給出一個(gè)物理塊,這塊并不存放文件的數(shù)據(jù),而是利用它形成新的一級(jí)索引。EXT2 里,用 4 B 空間放一個(gè)磁盤塊號(hào)。因此,在這個(gè)盤塊里,可以放 b/4 個(gè)磁盤塊號(hào)(其中 b表示磁盤塊所含字節(jié)數(shù))。這樣,文件邏輯塊號(hào)011 與物理塊號(hào)間的關(guān)系,仍然由直接索引得到,但邏輯塊號(hào)12(b/4 + 12)與物理塊號(hào)間的關(guān)系,則要由一次間接索引得到。24 七月 2022 3.大型和巨型文件的索引結(jié)構(gòu) 當(dāng)一個(gè)文件所需磁盤塊數(shù)超過(guò) b/4+12 時(shí),就成為一個(gè) EXT2 的大型文件。這時(shí)除了用到i_block0i_block

29、11外,要用到 i_block12形成一次間接索引,還要用到i_block13形成二次間接索引。 通過(guò) b/4 個(gè)索引、每個(gè)指向 b/4 個(gè)磁盤塊,就又可以得到(b/4)(b/4)個(gè)磁盤塊。于是,EXT2的大型文件最多可以擁有的磁盤塊數(shù)是:(b/4)(b/4)+(b/4)+12。 當(dāng)一個(gè)文件所需的磁盤塊數(shù)大于(b/4)(b/4)+(b/4)+12個(gè)時(shí),就成為EXT2的巨型文件。這時(shí)除了用到i_block0i_block11外,還要用到 i_block12、i_block13和i_block14,以形成三次間接索引。24 七月 2022EXT2的大型文件索引結(jié)構(gòu)24 七月 20228.3.4 虛

30、擬文件系統(tǒng)VFS的數(shù)據(jù)結(jié)構(gòu) 1虛擬文件VFS VFS必須管理同時(shí)掛接在系統(tǒng)上的不同文件系統(tǒng)。為此,VFS維護(hù)一些描述整個(gè)VFS以及實(shí)際已掛接文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)。VFS對(duì)文件的描述方法與EXT2文件系統(tǒng)類似,也使用了超級(jí)塊和索引結(jié)點(diǎn)。24 七月 2022VFS與真實(shí)文件系統(tǒng)間的關(guān)系示意圖24 七月 2022用于存儲(chǔ)已安裝文件的信息,通常對(duì)應(yīng)磁盤文件系統(tǒng)的文件系統(tǒng)控制塊。超級(jí)塊用于存儲(chǔ)一個(gè)打開(kāi)的文件和一個(gè)進(jìn)程的關(guān)聯(lián)信息。只要文件一經(jīng)打開(kāi),這個(gè)文件就一直存在,文件用struct file結(jié)構(gòu)描述。文件用于存儲(chǔ)某個(gè)文件的信息。每個(gè)文件在文件系統(tǒng)內(nèi)有唯一的i結(jié)點(diǎn)號(hào),通常對(duì)應(yīng)磁盤文件系統(tǒng)的文件控制塊。索引

31、結(jié)點(diǎn)目錄項(xiàng)與i結(jié)點(diǎn)之間是多對(duì)一的關(guān)系目錄項(xiàng)年金現(xiàn)狀2. VFS中的主要數(shù)據(jù)結(jié)構(gòu)24 七月 2022 為了能夠使用戶通過(guò)統(tǒng)一的方法使用各種不同的外設(shè),I/O子系統(tǒng)必須提供一個(gè)統(tǒng)一而簡(jiǎn)單的系統(tǒng)調(diào)用接口。 Linux把設(shè)備驅(qū)動(dòng)程序也稱為設(shè)備驅(qū)動(dòng)器。設(shè)備驅(qū)動(dòng)器把設(shè)備處理過(guò)程抽象化,把硬件作為設(shè)備文件看待。因此,對(duì)設(shè)備也可以進(jìn)行打開(kāi)、關(guān)閉、讀、寫(xiě)文件等操作。 用戶程序是通過(guò)文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序來(lái)請(qǐng)求硬件設(shè)備的。當(dāng)用戶進(jìn)程發(fā)出使用設(shè)備的請(qǐng)求時(shí),系統(tǒng)把處理該請(qǐng)求的任務(wù)通過(guò)系統(tǒng)調(diào)用接口交給文件系統(tǒng),文件系統(tǒng)通過(guò)設(shè)備驅(qū)動(dòng)程序提供的接口將任務(wù)傳遞給設(shè)備驅(qū)動(dòng)程序,設(shè)備驅(qū)動(dòng)程序?qū)υO(shè)備控制器進(jìn)行控制編碼,最后由設(shè)備控制器來(lái)控制設(shè)備本身的運(yùn)行。8.4.1 Linux設(shè)備管理概述8.4 Linux的設(shè)備管理24 七月 2022Linux設(shè)備管理的結(jié)構(gòu)模塊24 七月 2022

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論