版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章 實(shí)例分析:Linux操作系統(tǒng)8.18.28.3本章講述內(nèi)容:8.4Linux的處理機(jī)管理;Linux的存儲(chǔ)管理 ; Linux的文件管理 ; Linux 的設(shè)備管理 。8.1 Linux的處理機(jī)管理8.1.1 Linux的進(jìn)程Linux進(jìn)程的兩種運(yùn)行模式1. Linux里,當(dāng)進(jìn)程運(yùn)行用戶(hù)程序時(shí),稱(chēng)為“用戶(hù)模式”;當(dāng)進(jìn)程運(yùn)行中出現(xiàn)系統(tǒng)調(diào)用或中斷事件,轉(zhuǎn)去執(zhí)行操作系統(tǒng)內(nèi)核程序時(shí),稱(chēng)為“核心模式”。進(jìn)程在核心模式時(shí),從事資源管理及各種控制活動(dòng);在用戶(hù)模式時(shí),在操作系統(tǒng)管理和控制下做自己的工作。 . 在Linux里處理機(jī)有兩種運(yùn)行狀態(tài):在核心態(tài),CPU執(zhí)行操作系統(tǒng)的程序;在用戶(hù)態(tài),CPU執(zhí)行用
2、戶(hù)程序。這兩種運(yùn)行狀態(tài),會(huì)在一定時(shí)機(jī)按需要進(jìn)行轉(zhuǎn)換。 . Linux把進(jìn)程定義為是“程序運(yùn)行的一個(gè)實(shí)例”。進(jìn)程競(jìng)爭(zhēng)并占用系統(tǒng)資源,向系統(tǒng)提出各種請(qǐng)求服務(wù);進(jìn)程也是調(diào)度單位,任何時(shí)刻只有一個(gè)進(jìn)程在CPU上運(yùn)行。 Linux進(jìn)程實(shí)體的組成2. Linux中,每個(gè)進(jìn)程是一個(gè)任務(wù)(task),有四個(gè)部分:進(jìn)程描述符,即進(jìn)程控制塊;進(jìn)程專(zhuān)用的系統(tǒng)堆棧空間;正文段,即供進(jìn)程執(zhí)行的程序段;進(jìn)程專(zhuān)用的數(shù)據(jù)段和用戶(hù)堆??臻g。 Linux進(jìn)程的四個(gè)部分. 在Linux中,進(jìn)程描述符是一個(gè)結(jié)構(gòu)類(lèi)型的數(shù)據(jù)結(jié)構(gòu):task_struct,主要有以下信息: 接收的信號(hào) 進(jìn)程隊(duì)列指針CPU的現(xiàn)場(chǎng)保護(hù)區(qū)與文件系統(tǒng)有關(guān)的信息 產(chǎn)
3、生一個(gè)新進(jìn)程時(shí),系統(tǒng)就分配總量為8KB的空間 (即兩個(gè)連續(xù)的內(nèi)存塊),用于存放進(jìn)程描述符和組成系統(tǒng)堆棧。進(jìn)程因系統(tǒng)調(diào)用進(jìn)入Linux內(nèi)核時(shí)(這時(shí)CPU被切換成核心態(tài)),就使用系統(tǒng)堆棧。 .進(jìn)程描述符和核心棧 兩個(gè)連續(xù)的物理塊(8KB)堆棧進(jìn)程描述符進(jìn)程的核心棧(7KB)(1KB)Linux對(duì)進(jìn)程描述符的管理 Linux在內(nèi)核存儲(chǔ)區(qū)里開(kāi)辟一個(gè)指針數(shù)組task,長(zhǎng)度為NR_TASKS,每個(gè)數(shù)組元素里存放一個(gè)已創(chuàng)建進(jìn)程的進(jìn)程描述符地址。即每個(gè)數(shù)組元素都指向一個(gè)已創(chuàng)建進(jìn)程的進(jìn)程描述符,通過(guò)它,就可以找到當(dāng)前系統(tǒng)中所有進(jìn)程的進(jìn)程描述符。 一個(gè)進(jìn)程描述符一個(gè)進(jìn)程描述符一個(gè)進(jìn)程描述符NR_TASKS個(gè)元素指
4、針數(shù)組taskLinux進(jìn)程描述符的內(nèi)容3.進(jìn)程標(biāo)識(shí) .進(jìn)程狀態(tài) .進(jìn)程調(diào)度信息 進(jìn)程家族關(guān)系 暫停狀態(tài):運(yùn)行進(jìn)程由于接收到一個(gè)信號(hào),執(zhí)行被暫時(shí)停止。處于該狀態(tài)的進(jìn)程,只能由來(lái)自另一個(gè)進(jìn)程發(fā)來(lái)的信號(hào)改變成就緒狀態(tài)。 不可中斷狀態(tài):這是另外一種阻塞狀態(tài)。處于這種狀態(tài)的進(jìn)程,表示進(jìn)程不能被信號(hào)中斷,而是在等待硬件條件的到來(lái)。 可中斷狀態(tài):進(jìn)程由于等待某些條件,而處于這種阻塞狀態(tài),直到那些條件出現(xiàn)將其喚醒。4.Linux的進(jìn)程狀態(tài) 可運(yùn)行狀態(tài):進(jìn)程已做好了運(yùn)行的準(zhǔn)備。該狀態(tài)實(shí)際上包含兩個(gè)狀態(tài),要么在CPU上運(yùn)行(為執(zhí)行狀態(tài)),要么已經(jīng)做好準(zhǔn)備,隨時(shí)可以投入運(yùn)行(為就緒狀態(tài))。 暫停狀態(tài)可中斷狀態(tài)不可
5、中斷狀態(tài)僵死狀態(tài)可運(yùn)行狀態(tài)就緒執(zhí)行調(diào)度被搶先創(chuàng)建事件信號(hào)終止信號(hào)或事件信號(hào).僵死狀態(tài):進(jìn)程已經(jīng)被終止,正在結(jié)束中。 5.Linux的進(jìn)程族系 Linux系統(tǒng)初啟時(shí),自動(dòng)建立系統(tǒng)的第一個(gè)進(jìn)程:初始化進(jìn)程。之后,所有的進(jìn)程都由它以及它的子孫創(chuàng)建。因此,Linux系統(tǒng)中的各個(gè)進(jìn)程,相互之間構(gòu)成了一個(gè)樹(shù)型的進(jìn)程族系。 8.1.2 Linux的進(jìn)程調(diào)度1.SCHED_FIFO實(shí)時(shí)進(jìn)程的先進(jìn)先出調(diào)度策略 SCHED_FIFO是一種搶占式的調(diào)度策略。原則上,把CPU分給進(jìn)程后,該進(jìn)程就占用CPU直到釋放為止。但若在此期間另有更高優(yōu)先級(jí)的FIFO進(jìn)程就緒,那就會(huì)把CPU搶奪過(guò)來(lái)。若有多個(gè)進(jìn)程都有最高優(yōu)先級(jí),那
6、就選擇等待時(shí)間最長(zhǎng)的投入運(yùn)行。該調(diào)度策略適合實(shí)時(shí)進(jìn)程,它們對(duì)時(shí)間性要求較強(qiáng),每次運(yùn)行所需的時(shí)間較短。SCHED_RR實(shí)時(shí)進(jìn)程的輪轉(zhuǎn)調(diào)度 SCHED_RR是一種搶占式的調(diào)度策略。分配給進(jìn)程一個(gè)時(shí)間片后,若在此期間有另一個(gè)更高優(yōu)先級(jí)的RR進(jìn)程就緒,那么就允許它搶奪過(guò)CPU投入運(yùn)行。若有多個(gè)進(jìn)程都具有最高優(yōu)先級(jí),那就選擇其中等待時(shí)間最長(zhǎng)的投入運(yùn)行??梢?jiàn),SCHED_RR調(diào)度策略適合于每次運(yùn)行需要時(shí)間較長(zhǎng)的實(shí)時(shí)進(jìn)程。 SCHED_OTHER非實(shí)時(shí)進(jìn)程的輪轉(zhuǎn)調(diào)度 SCHED_OTHER是基于動(dòng)態(tài)優(yōu)先級(jí)的輪轉(zhuǎn)調(diào)度策略,它適合于交互式的分時(shí)應(yīng)用。在這種調(diào)度策略里,進(jìn)程的動(dòng)態(tài)優(yōu)先級(jí)用所謂的優(yōu)先數(shù)來(lái)表示:優(yōu)先數(shù)
7、越小,相應(yīng)的優(yōu)先級(jí)越高。操作系統(tǒng)對(duì)核心態(tài)進(jìn)程和對(duì)用戶(hù)態(tài)進(jìn)程,采取不同的方法來(lái)改變其優(yōu)先數(shù),從而改變優(yōu)先級(jí) 。Linux的三種調(diào)度策略. 消息隊(duì)列是進(jìn)程間的一種異步通信方法。所謂“異步”,即發(fā)送消息的進(jìn)程在消息發(fā)出之后,不必等待接收進(jìn)程做出反應(yīng),就可以去做其他的事情了。 Linux為進(jìn)程間的通信提供多種機(jī)制,如有消息隊(duì)列、信號(hào)、信號(hào)量、管道以及共享內(nèi)存儲(chǔ)區(qū)等。信號(hào)用于一個(gè)進(jìn)程向另一個(gè)進(jìn)程發(fā)通知,有某個(gè)事件發(fā)生;信號(hào)量用于進(jìn)程間取得同步;消息隊(duì)列、管道、共享存儲(chǔ)區(qū),都用于在進(jìn)程之間傳遞數(shù)據(jù)。 處理各種等待時(shí),Linux把等待隊(duì)列和等待的事件聯(lián)系在一起。需要等待事件的進(jìn)程,根據(jù)等待的事件進(jìn)入不同的等
8、待隊(duì)列。 .2.Linux的等待隊(duì)列因某事件等待的隊(duì)列頭指針nexttasknexttaskNULLtask進(jìn)程描述符進(jìn)程描述符進(jìn)程描述符8.1.3 Linux進(jìn)程間的通信消息隊(duì)列. 在進(jìn)程間通信前,先要建立消息隊(duì)列。有了消息隊(duì)列,進(jìn)程就可以向(或從)消息隊(duì)列發(fā)送(或接收)消息了。消息在消息隊(duì)列里,按照到達(dá)的先后順序排成隊(duì)。類(lèi)型相同的消息,先進(jìn)入隊(duì)列的先被接收。Linux對(duì)消息的長(zhǎng)度沒(méi)有限制。消息隊(duì)列使用完畢后,應(yīng)該予以釋放(即刪除)。 進(jìn)程都有自己的正文段,數(shù)據(jù)段,堆棧段等。Linux按這種邏輯單位,把虛擬空間劃分成若干分區(qū),然后進(jìn)行分頁(yè)。這樣,進(jìn)程每一個(gè)分區(qū)段位于一個(gè)連續(xù)的虛擬空間里,那里
9、的內(nèi)容有相同的特性,有利于對(duì)它們分別實(shí)行存儲(chǔ)保護(hù)和共享。另外,虛擬空間在各個(gè)分區(qū)之間可以不連續(xù)。即進(jìn)程所用的虛擬地址并不一定是連成一片的,可以有空洞存在。 8.2.1 Linux的虛擬存儲(chǔ)空間1.Linux的虛擬存儲(chǔ)空間 在Linux中,虛擬地址用32個(gè)二進(jìn)制位表示。這意味系統(tǒng)向每個(gè)進(jìn)程提供的虛存空間,最多可以高達(dá)232 字節(jié) = 4GB。 8.2 Linux的存儲(chǔ)管理. Linux把4GB的虛擬空間劃分為兩部分:最高的1GB用于內(nèi)核本身,稱(chēng)為“系統(tǒng)空間”,為所有的進(jìn)程共享;較低的3GB供進(jìn)程使用,稱(chēng)為“用戶(hù)空間”。 .進(jìn)程A的用戶(hù)空間(3GB)進(jìn)程B的用戶(hù)空間(3GB)進(jìn)程N(yùn)的用戶(hù)空間(3G
10、B)共享的系統(tǒng)空間(3GB)4GB的虛擬空間2.多級(jí)頁(yè)表的地址變換 Linux向用戶(hù)提供的最大虛擬空間為4GB。由于內(nèi)存塊長(zhǎng)度是4KB,因此一個(gè)虛擬地址空間最多可有220(4GB/4KB=1M)個(gè)頁(yè)面。即用戶(hù)虛擬地址空間的頁(yè)表,最多要用一百萬(wàn)個(gè)表項(xiàng)來(lái)記錄頁(yè)面與物理塊的對(duì)應(yīng)關(guān)系,不利于存儲(chǔ)空間的利用。 . Linux在對(duì)虛擬地址空間進(jìn)行分頁(yè)時(shí),采用兩級(jí)頁(yè)表的機(jī)制:先是對(duì)虛擬地址空間進(jìn)行分頁(yè),形成頁(yè)表;再對(duì)頁(yè)表進(jìn)行分頁(yè),形成頁(yè)表的頁(yè)表。 頁(yè)面索引號(hào)p1頁(yè)號(hào)p2位移量d32位虛擬地址:10位10位12位一個(gè)頁(yè)面一個(gè)頁(yè)面用戶(hù)虛擬地址空間1M個(gè)頁(yè)面1M個(gè)表項(xiàng)(1024個(gè)頁(yè)面)1024個(gè)表項(xiàng)頁(yè)表頁(yè)表索引3
11、.二級(jí)頁(yè)表的地址轉(zhuǎn)換過(guò)程 在知道一個(gè)虛擬地址后,就可根據(jù)地址的前10位,先去查頁(yè)表索引,以便得到該索引所對(duì)應(yīng)的頁(yè)表放在哪一個(gè)內(nèi)存塊。 .再由地址中間的10位,去查這個(gè)頁(yè)表,得到該頁(yè)所對(duì)應(yīng)的內(nèi)存塊的起始地址。 .最后,與位移量d相加后,就得到最終所需要的物理地址。 p1p2d索引項(xiàng)頁(yè)表索引p11頁(yè)1頁(yè)表項(xiàng)頁(yè)表p2d內(nèi)存物理地址1塊1塊 Linux進(jìn)程的各個(gè)分區(qū)可以是不連續(xù)的,因此形成了若干個(gè)離散的虛擬區(qū)間。為了對(duì)它們加以管理,定義了vm_area_struct型及mm_struct型數(shù)據(jù)結(jié)構(gòu)。 8.2.2 管理虛擬存儲(chǔ)空間的數(shù)據(jù)結(jié)構(gòu). vm_area_struct用于管理進(jìn)程的每一個(gè)虛擬區(qū)間,m
12、m_struct用于管理進(jìn)程的整個(gè)虛擬空間、頁(yè)表索引和頁(yè)表。因此,一個(gè)進(jìn)程可以有多個(gè)vm_area_struct型數(shù)據(jù)結(jié)構(gòu),但只有一個(gè)mm_struct型數(shù)據(jù)結(jié)構(gòu)。 task_structmm*mmap*pgdmap_countmm_struct*vm_next*vm_startvm_endvm_area_struct*vm_next*vm_startvm_endvm_area_struct一段虛擬區(qū)間一段虛擬區(qū)間頁(yè)表頁(yè)表頁(yè)表索引0000000000000000000000000000000000000574537113426762542451 為了記錄內(nèi)存各塊的使用情況,Linux設(shè)置了位示
13、圖bitmap,其某位為1,表示對(duì)應(yīng)塊空閑;為0,表示對(duì)應(yīng)塊正在使用。 8.2.3 管理內(nèi)存空間的數(shù)據(jù)結(jié)構(gòu) Linux存儲(chǔ)管理中,內(nèi)存塊(長(zhǎng)度為4KB)是進(jìn)行存儲(chǔ)分配和釋放的單位。系統(tǒng)設(shè)置存儲(chǔ)分塊表mem_map,每一個(gè)表項(xiàng)是mem_map_t型結(jié)構(gòu),對(duì)應(yīng)一個(gè)內(nèi)存塊,記錄著該塊的有關(guān)信息。 Linux不用bitmap進(jìn)行存儲(chǔ)分配和釋放,而是用“空閑區(qū)隊(duì)列表”:free_area。在空閑區(qū)隊(duì)列表里,Linux按照不同的方式,形成最多11個(gè)空閑區(qū)隊(duì)列 。. free_area的第1項(xiàng),是由單個(gè)空閑塊形成的雙向鏈表;free_area的第2項(xiàng),是由兩個(gè)連續(xù)空閑塊(形成一個(gè)空閑區(qū))形成的雙向鏈表 ;f
14、ree_area的第3項(xiàng),是由四個(gè)連續(xù)空閑塊(形成一個(gè)空閑區(qū))形成的雙向鏈表;如此等等。.111111111111111111111111111bitmapfree_area表空閑區(qū)隊(duì)列表123 Linux采用所謂的“伙伴( Buddy)”算法,來(lái)進(jìn)行內(nèi)存區(qū)的分配和釋放。當(dāng)進(jìn)程提出存儲(chǔ)請(qǐng)求時(shí),它將大于、等于這個(gè)數(shù)目的最小2n個(gè)內(nèi)存塊分配出去。比如要求3個(gè)內(nèi)存塊,就分配22 =4塊;要求16個(gè)內(nèi)存塊,就分配24 =16塊;如此等等。 系統(tǒng)總是按進(jìn)程所需連續(xù)存儲(chǔ)塊的數(shù)量,到空閑區(qū)隊(duì)列表free_area中能夠滿(mǎn)足要求的最小空閑區(qū)隊(duì)列里查找。若隊(duì)列不空,就把第1個(gè)空閑區(qū)分配出去;若該隊(duì)列為空,那么就
15、繼續(xù)查找下面的隊(duì)列(其空閑區(qū)的尺寸為上一個(gè)隊(duì)列的2倍)。當(dāng)它里面有空閑區(qū)時(shí),就把該空閑區(qū)一分為二:一個(gè)分配給進(jìn)程使用;余下的一半,排到它前面的空閑區(qū)隊(duì)列中去。 .8.2.4 內(nèi)存區(qū)的分配和頁(yè)面淘汰策略. 存儲(chǔ)釋放時(shí),將釋放區(qū)域連接到相應(yīng)尺寸的空閑區(qū)隊(duì)列里去。不過(guò),應(yīng)考慮空閑區(qū)的合并,以便能夠得到更大的空閑區(qū)。做法是若隊(duì)列里有與所釋放空閑區(qū)相鄰接的空閑區(qū),那么就把它們合并,然后排到該隊(duì)列后面的空閑區(qū)隊(duì)列里去。 . 發(fā)生缺頁(yè)中斷、要把所需頁(yè)面調(diào)入內(nèi)存,而內(nèi)存又無(wú)空閑區(qū)域時(shí),就要把已在內(nèi)存的頁(yè)面淘汰出去。Linux采用稱(chēng)為“時(shí)鐘(clock)”的算法。該算法涉及mem_map的表項(xiàng)mem_map_t
16、里面的age字段。每當(dāng)內(nèi)存塊被訪(fǎng)問(wèn)時(shí),其age就加1。另外,Linux定時(shí)對(duì)所有內(nèi)存塊進(jìn)行掃描,若它的age不為0,就對(duì)age減1。這樣,在淘汰頁(yè)面時(shí),就把a(bǔ)ge取值最小的塊里的頁(yè)面作為淘汰的對(duì)象。 Linux有了虛擬文件系統(tǒng),就可支持多種不同的文件系統(tǒng)了。這時(shí)的文件系統(tǒng),可看成是由兩級(jí)構(gòu)成:上面是用戶(hù)面對(duì)的虛擬文件系統(tǒng)VFS,內(nèi)核里則是不同的文件系統(tǒng),如Minix、Ext2、MSDOS。這時(shí)VFS接收來(lái)自用戶(hù)對(duì)文件操作的請(qǐng)求,通過(guò)系統(tǒng)調(diào)用,把那些抽象的功能轉(zhuǎn)換成針對(duì)某文件系統(tǒng)的具體操作,然后加以完成。 8.3.1 Linux文件系統(tǒng)的構(gòu)成.8.3 Linux的文件管理 所謂“虛擬文件系統(tǒng)(V
17、FS)”,即是通過(guò)軟件的方法,隱去多種不同文件系統(tǒng)各自的實(shí)現(xiàn)細(xì)節(jié),抽象出一組標(biāo)準(zhǔn)的有關(guān)文件操作的系統(tǒng)調(diào)用。把這樣的系統(tǒng)調(diào)用提供給用戶(hù)后,就可以使用統(tǒng)一的界面,去完成對(duì)各種不同文件系統(tǒng)中文件的操作。 .Linux 的虛擬文件系統(tǒng):VFSVFS提供的系統(tǒng)調(diào)用界面用戶(hù)空間系統(tǒng)空間用戶(hù)程序(進(jìn)程)MinixExt2WSDOS 特別文件:Ext2里,把塊存儲(chǔ)設(shè)備(如磁盤(pán)) 和字符設(shè)備(如鍵盤(pán)、打印機(jī)) 等都視為文件,不過(guò)它們只有文件目錄項(xiàng)和相應(yīng)的索引節(jié)點(diǎn)inode,并不占用實(shí)際的物理存儲(chǔ)塊。因此,有時(shí)也稱(chēng)它們?yōu)樵O(shè)備文件。 普通文件:即通常意義下的磁盤(pán)文件,存放著用戶(hù)和系統(tǒng)的有關(guān)數(shù)據(jù)和程序。它們都被視為無(wú)
18、結(jié)構(gòu)、無(wú)記錄概念的字符流,文件的長(zhǎng)度可以動(dòng)態(tài)增減。 .8.3.2 Ext2對(duì)磁盤(pán)的組織1.Ext2的文件類(lèi)型 . 目錄文件:由文件目錄項(xiàng)組成的文件。在Ext2中,為了加快對(duì)文件目錄的搜索速度,便于共享,把文件控制塊分成兩部分:一個(gè)為文件的“索引節(jié)點(diǎn)”( 即文件控制塊),簡(jiǎn)記為inode,里面存放著文件的長(zhǎng)度、類(lèi)型和訪(fǎng)問(wèn)權(quán)限、文件在輔存的位置、共享信息等;另一個(gè)仍稱(chēng)為“文件目錄項(xiàng)”,它里面只含文件名和該文件索引節(jié)點(diǎn)的編號(hào)。 .Linux目錄項(xiàng)的組成:文件名inode編號(hào)2.Ext2對(duì)磁盤(pán)的組織 . Ext2中,普通文件、目錄文件以及每個(gè)文件的inode節(jié)點(diǎn)都存儲(chǔ)在磁盤(pán)上。它把磁盤(pán)分區(qū)或軟盤(pán)視為一
19、個(gè)文件卷,把其上相鄰磁道的物理塊稱(chēng)為“塊組”。因此,一個(gè)文件卷上可有多個(gè)塊組。在一個(gè)塊組上,既可存放普通文件的信息,存放目錄文件的信息,也可存放文件的inode節(jié)點(diǎn),另外還存放有對(duì)塊組的管理信息(比如該塊組中塊的尺寸,塊的數(shù)目,哪些塊是空閑的,哪些塊是已分配的等)。 索引節(jié)點(diǎn)位圖:用來(lái)管理塊組中的索引節(jié)點(diǎn),占用一個(gè)盤(pán)塊。位圖中的某位為0,表示索引節(jié)點(diǎn)表中的相應(yīng)節(jié)點(diǎn)為空閑;為1,表示表中的相應(yīng)節(jié)點(diǎn)已分配給某個(gè)文件使用。索引節(jié)點(diǎn)位圖中位的編號(hào),就是那個(gè)文件相應(yīng)的inode節(jié)點(diǎn)的編號(hào)。 索引節(jié)點(diǎn)表:文件索引節(jié)點(diǎn)的集合,構(gòu)成Ext2的索引節(jié)點(diǎn)表。因此塊組中的索引節(jié)點(diǎn)表,就是存放在該塊組里的所有文件的文
20、件控制塊的集合。 數(shù)據(jù)區(qū):存放文件具體信息的地方,它占用了該塊組中最多的盤(pán)塊。 Ext2塊組的組織結(jié)構(gòu) .引導(dǎo)塊塊組0塊組i塊組i 的放大塊組n超級(jí)塊組描述符盤(pán)塊位圖索引節(jié)點(diǎn)位圖索引節(jié)點(diǎn)表數(shù)據(jù)區(qū)1塊k 塊1塊1塊m 塊n 塊(1)(2)(3)1010000000011111索引節(jié)點(diǎn)位圖索引節(jié)點(diǎn)表一個(gè)索引節(jié)點(diǎn)一個(gè)索引節(jié)點(diǎn)一個(gè)索引節(jié)點(diǎn)16個(gè)索引節(jié)點(diǎn)(4)盤(pán)塊位圖 盤(pán)塊位圖用來(lái)管理塊組中數(shù)據(jù)區(qū)里的盤(pán)塊。在塊組中,它占據(jù)一個(gè)盤(pán)塊。位圖中的某位為0,表示數(shù)據(jù)區(qū)中的相應(yīng)盤(pán)塊為空閑;為1,表示數(shù)據(jù)區(qū)中的相應(yīng)盤(pán)塊已經(jīng)分配給某個(gè)文件使用。 (5)組描述符 每個(gè)塊組都有一個(gè)組描述符,用于給出有關(guān)這個(gè)塊組整體的管理
21、信息。 (6)超級(jí)塊 每個(gè)具體的文件系統(tǒng)(如Minix、Ext2等),都有自己的超級(jí)塊,用來(lái)描述該文件系統(tǒng)的信息。因此,超級(jí)塊是一個(gè)文件系統(tǒng)的核心。每個(gè)塊組里雖然都有一個(gè)超級(jí)塊,但通常只用塊組0里的超級(jí)塊,其他塊組里的超級(jí)塊只是作為備份而已。 8.3.3 Ext2文件的物理結(jié)構(gòu) 把文件存儲(chǔ)到磁盤(pán)上時(shí),Ext2采用索引式結(jié)構(gòu),即通過(guò)該文件inode節(jié)點(diǎn)里的數(shù)組i_block ,建立起文件的邏輯塊號(hào)與相應(yīng)物理塊號(hào)間的對(duì)應(yīng)關(guān)系,形成文件存儲(chǔ)的索引表。該數(shù)組有15個(gè)元素,每個(gè)元素為一個(gè)索引項(xiàng)??梢孕纬伤姆N不同的索引類(lèi)型:索引項(xiàng) i_block0i_block11 共12個(gè)元素,直接給出文件數(shù)據(jù)存放的磁
22、盤(pán)物理塊號(hào),是直接索引;索引項(xiàng) i_block12 為一次間接索引;索引項(xiàng) i_block13 為二次間接索引;索引項(xiàng) i_block14 為三次間接索引。 1.Ext2文件的多級(jí)索引結(jié)構(gòu) 2.Ext2文件的各種索引結(jié)構(gòu)i_block0i_block 物理塊i_block1i_block2i_block3i_block4i_block5i_block6i_block7i_block8i_block9i_block10i_block11i_block12i_block13i_block1412塊直接索引.小型索引結(jié)構(gòu)i_block0i_block 物理塊i_block1i_block2i_blo
23、ck3i_block4i_block5i_block6i_block7i_block8i_block9i_block10i_block11i_block12i_block13i_block1412塊一次間接索引物理塊一塊一次間接索引塊b/4塊.中型索引結(jié)構(gòu)i_block0i_block 物理塊i_block1i_block2i_block3i_block4i_block5i_block6i_block7i_block8i_block9i_block10i_block11i_block12i_block13i_block1412塊二次間接索引物理塊一塊一次間接索引塊b/4塊.大型索引結(jié)構(gòu)b/4塊
24、一次間接索引塊二次間接索引塊(b/4)*(b/4)塊物理塊8.3.4 虛擬文件系統(tǒng)VFS的數(shù)據(jù)結(jié)構(gòu)1.Linux的虛擬文件系統(tǒng)VFS Linux的VFS隨系統(tǒng)的初啟建立,隨系統(tǒng)的關(guān)閉消逝。為了管理所有安裝的文件系統(tǒng),VFS通過(guò)使用描述整個(gè)VFS的一組數(shù)據(jù)結(jié)構(gòu),以及描述實(shí)際安裝的文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),來(lái)處理實(shí)際文件系統(tǒng)之間的差別,達(dá)到管理的目的。VFS向用戶(hù)提供一個(gè)統(tǒng)一的文件系統(tǒng)界面,實(shí)現(xiàn)從抽象功能到具體操作的轉(zhuǎn)換。 2.超級(jí)塊(super_block) VFS是通過(guò)超級(jí)塊來(lái)描述和管理文件系統(tǒng)的,每個(gè)已安裝的文件系統(tǒng),在VFS里都有一個(gè)相應(yīng)的超級(jí)塊存在。對(duì)于VFS的超級(jí)塊來(lái)說(shuō),它由兩部分組成:一是
25、VFS為了管理一個(gè)文件系統(tǒng)所需要的信息,一是所管理的文件系統(tǒng)的超級(jí)塊信息。 3.索引節(jié)點(diǎn)(inode) VFS中的每個(gè)文件(包括數(shù)據(jù)文件和目錄文件等),都有一個(gè)唯一的索引節(jié)點(diǎn)。VFS的索引節(jié)點(diǎn)由兩部分組成:一是VFS為了管理一個(gè)文件所需要的信息,一是所管理的文件的索引節(jié)點(diǎn)信息。有了這些內(nèi)容,再加上拼接過(guò)來(lái)的具體文件的索引節(jié)點(diǎn)信息,就形成了VFS對(duì)一個(gè)文件進(jìn)行管理的索引節(jié)點(diǎn)。 8.4 Linux的設(shè)備管理8.4.1 Linux設(shè)備管理概述Linux設(shè)備驅(qū)動(dòng)的分層結(jié)構(gòu)1.進(jìn)程設(shè)備file結(jié)構(gòu).設(shè)備驅(qū)動(dòng)程序應(yīng)用層文件系統(tǒng)層inode節(jié)點(diǎn):設(shè)備文件設(shè)備驅(qū)動(dòng)層物理設(shè)備層 Linux內(nèi)核中,利用控制寄存器
26、來(lái)控制硬設(shè)備完成輸入/輸出任務(wù)的軟件,叫 “設(shè)備驅(qū)動(dòng)程序”,也稱(chēng)為 “設(shè)備驅(qū)動(dòng)器”。通過(guò)抽象,Linux的VFS向用戶(hù)提供使用設(shè)備的統(tǒng)一接口(如打開(kāi)open(),讀read(),寫(xiě)write()等)。在用戶(hù)發(fā)出輸入/輸出請(qǐng)求后,首先進(jìn)入文件系統(tǒng),然后才去到相應(yīng)的設(shè)備驅(qū)動(dòng)程序,在指定設(shè)備上完成所要求的輸入/輸出。因此,文件系統(tǒng)是用戶(hù)與設(shè)備之間的接口:一個(gè)進(jìn)程要使用設(shè)備,要經(jīng)過(guò)文件系統(tǒng),再由設(shè)備驅(qū)動(dòng)程序去控制物理設(shè)備完成各種具體的操作。這是一種層次結(jié)構(gòu):進(jìn)程位于應(yīng)用層,設(shè)備位于最底層,中間是文件系統(tǒng)層和設(shè)備驅(qū)動(dòng)層。 Linux的三類(lèi)設(shè)備2.字符設(shè)備(character device) 字符設(shè)備以字
27、符為存取單位。在文件系統(tǒng)里,字符設(shè)備有自己的inode節(jié)點(diǎn)(比如/dev/tty1,/dev/lp0等)。找到了字符設(shè)備的索引節(jié)點(diǎn),就可以得到對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)程序,實(shí)現(xiàn)對(duì)設(shè)備的訪(fǎng)問(wèn)。 .塊設(shè)備(block device) 塊設(shè)備以“塊”為存取單位。通常,512字節(jié)或1024字節(jié)為一塊。一般地,系統(tǒng)中塊的尺寸為2n*512字節(jié)(n為正整數(shù))。塊設(shè)備也是通過(guò)其在文件系統(tǒng)里的節(jié)點(diǎn)而訪(fǎng)問(wèn)。這兩種設(shè)備間的不同,只是體現(xiàn)在內(nèi)部數(shù)據(jù)管理方式上,這些差異對(duì)于用戶(hù)來(lái)說(shuō)是透明的。 .網(wǎng)絡(luò)設(shè)備(net device) 網(wǎng)絡(luò)是一種經(jīng)網(wǎng)絡(luò)接口與主機(jī)交換數(shù)據(jù)的設(shè)備,在內(nèi)核網(wǎng)絡(luò)子系統(tǒng)的驅(qū)動(dòng)下,網(wǎng)絡(luò)接口完成對(duì)數(shù)據(jù)包的發(fā)送和接收
28、。由于這種數(shù)據(jù)傳輸?shù)奶厥庑?,無(wú)法把網(wǎng)絡(luò)設(shè)備納入到文件系統(tǒng)進(jìn)行統(tǒng)一管理。因此,在Linux的文件系統(tǒng)里,沒(méi)有與網(wǎng)絡(luò)設(shè)備相對(duì)應(yīng)的索引節(jié)點(diǎn)。 .字符設(shè)備和塊設(shè)備的文件名 文件名由兩部分組成:主設(shè)備號(hào),次設(shè)備號(hào)?!爸髟O(shè)備號(hào)”代表設(shè)備的類(lèi)型,用來(lái)確定需要哪一個(gè)設(shè)備驅(qū)動(dòng)程序;“次設(shè)備號(hào)”代表同類(lèi)設(shè)備中的序號(hào),以便在相同設(shè)備間進(jìn)行區(qū)分。在請(qǐng)求設(shè)備進(jìn)行輸入/輸出時(shí),必須指定主設(shè)備號(hào)和次設(shè)備號(hào)。8.4.2 Linux對(duì)字符設(shè)備的管理 在Linux中,打印機(jī)、終端等字符設(shè)備,都是以字符特別文件的形式,出現(xiàn)在用戶(hù)的面前。用戶(hù)對(duì)字符設(shè)備的讀寫(xiě),使用標(biāo)準(zhǔn)的系統(tǒng)調(diào)用進(jìn)行操作。 .device_struct結(jié)構(gòu) Linux
29、為每個(gè)已初始化的設(shè)備建立一個(gè)device_struct結(jié)構(gòu),該結(jié)構(gòu)由name(登記該設(shè)備的設(shè)備驅(qū)動(dòng)程序名)和*fops(指向該特別文件的文件操作表,即file_operations結(jié)構(gòu) )組成。由一個(gè)device_struct結(jié)構(gòu),可知該設(shè)備使用的是哪個(gè)設(shè)備驅(qū)動(dòng)程序,可知對(duì)該設(shè)備可以做哪些操作。.chrdevs結(jié)構(gòu)數(shù)組 它里面的每個(gè)元素,都是一個(gè)device_struct結(jié)構(gòu)。從設(shè)備文件的 inode 節(jié)點(diǎn),可以得到設(shè)備的主設(shè)備號(hào);以主設(shè)備號(hào)為索引查 chrdevs數(shù)組,可以得到該設(shè)備的device_struct結(jié)構(gòu);由該設(shè)備的device_struct結(jié)構(gòu),可以知道應(yīng)執(zhí)行什么驅(qū)動(dòng)程序,以及對(duì)設(shè)備可以做哪些操作。 lseek ( )read ( )write ( )readdir ( )select ( )open ( )release ( )file_operations結(jié)構(gòu)i設(shè)備文件的inode節(jié)點(diǎn)主設(shè)備號(hào):name*fopsname*fopsname*fopschrdevs0:chrdevsi:chrdevsn:一個(gè)device_struct結(jié)構(gòu)Chrdevs數(shù)組8.4.3 Linux對(duì)塊設(shè)備的管理塊設(shè)備管理的數(shù)據(jù)結(jié)構(gòu) 1.device_struct結(jié)構(gòu) L
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《職業(yè)農(nóng)民培育》課件
- 2024年鄉(xiāng)鎮(zhèn)組織員個(gè)人年終工作總結(jié)
- 《旅行社的戰(zhàn)略管理》課件
- 協(xié)力共贏:團(tuán)隊(duì)力量
- 酒店前廳保安執(zhí)勤要領(lǐng)
- 保險(xiǎn)行業(yè)銷(xiāo)售技巧培訓(xùn)總結(jié)
- 2001年天津高考語(yǔ)文真題及答案(圖片版)
- 媒體行業(yè)客服工作感想
- 景觀設(shè)計(jì)師年終總結(jié)7篇
- 2023年項(xiàng)目管理人員安全培訓(xùn)考試題(能力提升)
- 房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)(2024版)宣傳畫(huà)冊(cè)
- 老舊小區(qū)改造工程安全管理體系管理制度及措施
- 2024年山西省晉中市公開(kāi)招聘警務(wù)輔助人員(輔警)筆試摸底測(cè)試(3)卷含答案
- 2024夏令營(yíng)項(xiàng)目家長(zhǎng)溝通與反饋服務(wù)協(xié)議3篇
- 文史哲與藝術(shù)中的數(shù)學(xué)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋吉林師范大學(xué)
- 2024年秋季新人教版七年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)教案
- 13485質(zhì)量管理培訓(xùn)
- 9《復(fù)活(節(jié)選)》練習(xí) (含答案)統(tǒng)編版高中語(yǔ)文選擇性必修上冊(cè)
- 工程主合同補(bǔ)充協(xié)議書(shū)范本(2篇)
- 智慧樓宇I(lǐng)BMS整體解決方案
- 《客房服務(wù)與管理》課程標(biāo)準(zhǔn)課程內(nèi)容與要求
評(píng)論
0/150
提交評(píng)論