14681電子教案- -第8章_第1頁
14681電子教案- -第8章_第2頁
14681電子教案- -第8章_第3頁
14681電子教案- -第8章_第4頁
14681電子教案- -第8章_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余87頁可下載查看

下載本文檔

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

文檔簡介

第8章實(shí)例分析:Linux操作

系統(tǒng)

8.1Linux的處理機(jī)管理8.2Linux的存儲管理8.3Linux的文件管理8.4Linux的設(shè)備管理Linux操作系統(tǒng)實(shí)質(zhì)上是UNIX的變種,它繼承了多任務(wù)、多用戶等這樣的一些特性。

本章主要從Linux管理的角度出發(fā),著重講述以下4個方面的內(nèi)容。(1)Linux的三種進(jìn)程調(diào)度策略及消息隊(duì)列;(2)Linux的多級頁表地址轉(zhuǎn)換機(jī)制;(3)Linux的文件系統(tǒng)Ext2和虛擬文件系統(tǒng)VFS;(4)Linux對字符設(shè)備和塊設(shè)備的管理。8.1Linux的處理機(jī)管理

8.1.1Linux的進(jìn)程1.Linux進(jìn)程的兩種運(yùn)行模式在Linux里,一個進(jìn)程既可以運(yùn)行用戶程序,又可以運(yùn)行操作系統(tǒng)程序。

當(dāng)進(jìn)程運(yùn)行用戶程序時,稱其為處于“用戶模式”;當(dāng)進(jìn)程運(yùn)行時出現(xiàn)了系統(tǒng)調(diào)用或中斷事件,轉(zhuǎn)而去執(zhí)行操作系統(tǒng)內(nèi)核的程序時,稱其為處于“核心模式”。

在Linux里處理機(jī)就具有兩種運(yùn)行狀態(tài):核心態(tài)和用戶態(tài)。

在Linux里,把進(jìn)程定義為“程序運(yùn)行的一個實(shí)例”。

進(jìn)程一方面競爭并占用系統(tǒng)資源(比如設(shè)備和內(nèi)存),向系統(tǒng)提出各種請求服務(wù);進(jìn)程另一方面是基本的調(diào)度單位,任何時刻只有一個進(jìn)程在CPU上運(yùn)行。2.Linux進(jìn)程實(shí)體的組成

Linux中,每個進(jìn)程就是一個任務(wù)(task),一般具有以下四個部分:

進(jìn)程控制塊(在Linux里,也稱為進(jìn)程描述符。下面統(tǒng)一采用“進(jìn)程描述符”這個稱謂)。

進(jìn)程專用的系統(tǒng)堆棧空間;供進(jìn)程執(zhí)行的程序段(在Linux里,稱為正文段);進(jìn)程專用的數(shù)據(jù)段和用戶堆??臻g。圖8-2Linux對進(jìn)程描述符的管理3.Linux的進(jìn)程控制塊——進(jìn)程描述符在Linux中,進(jìn)程的進(jìn)程描述符是一個結(jié)構(gòu)類型的數(shù)據(jù)結(jié)構(gòu):task_struct。

進(jìn)程標(biāo)識(pid)。進(jìn)程狀態(tài)(state)。進(jìn)程調(diào)度信息,包括調(diào)度策略(policy)、優(yōu)先級別(priority和rt_priority)、時間片(counter)等。接收的信號(*sig)。

進(jìn)程家族關(guān)系。進(jìn)程隊(duì)列指針。

CPU的現(xiàn)場保護(hù)區(qū)。與文件系統(tǒng)有關(guān)的信息。4.Linux的進(jìn)程狀態(tài)

Linux的進(jìn)程可以有五種不同的狀態(tài),圖8-3給出了Linux的進(jìn)程狀態(tài),以及狀態(tài)間的變遷原因。圖8-3Linux的進(jìn)程狀態(tài)及其變遷

可運(yùn)行狀態(tài)可中斷狀態(tài)不可中斷狀態(tài)暫停狀態(tài)僵死狀態(tài)5.進(jìn)程的創(chuàng)建與撤銷

Linux中的每個進(jìn)程,都有一個創(chuàng)建、調(diào)度運(yùn)行、撤銷死亡的生命期。Linux系統(tǒng)中的各個進(jìn)程,相互之間構(gòu)成了一個樹型的進(jìn)程族系。8.1.2Linux的進(jìn)程調(diào)度1.Linux的進(jìn)程調(diào)度類型在Linux中,進(jìn)程調(diào)度被分為實(shí)時進(jìn)程調(diào)度和非實(shí)時進(jìn)程調(diào)度兩種。2.Linux進(jìn)程描述符中與調(diào)度有關(guān)的字段

Linux進(jìn)程描述符中,有四個字段與進(jìn)程調(diào)度有關(guān),它們是:policy、priority、rt_priority和counter。3.Linux的三種進(jìn)程調(diào)度策略

Linux進(jìn)程描述符中的policy字段,可以取三個值:SCHED_FIFO、SCHED_RR以及SCHED_OTHER。(1)SCHED_FIFO——實(shí)時進(jìn)程的先進(jìn)先出調(diào)度策略(2)SCHED_RR——實(shí)時進(jìn)程的輪轉(zhuǎn)調(diào)度(3)SCHED_OTHER——非實(shí)時進(jìn)程的輪轉(zhuǎn)調(diào)度圖8-4Linux實(shí)時調(diào)度的例子4.Linux的等待隊(duì)列圖8-5Linux中的等待隊(duì)列8.1.3Linux進(jìn)程間的通信——消息隊(duì)列消息隊(duì)列是進(jìn)程間的一種異步通信方法。所謂“異步”,即發(fā)送消息的進(jìn)程在消息發(fā)出之后,不必等待接收進(jìn)程做出反應(yīng),就可以去做其他的事情了。1.“消息”的數(shù)據(jù)結(jié)構(gòu)

Linux中的每個消息,由兩個部分組成:消息頭和消息緩沖區(qū)。圖8-6Linux的消息及消息隊(duì)列結(jié)構(gòu)2.“消息隊(duì)列”的數(shù)據(jù)結(jié)構(gòu)

Linux消息隊(duì)列是structmsqid_ds型的數(shù)據(jù)結(jié)構(gòu)。3.“消息隊(duì)列表”的數(shù)據(jù)結(jié)構(gòu)進(jìn)程間借助消息隊(duì)列來傳遞數(shù)據(jù),因此系統(tǒng)中可以建立多個消息隊(duì)列。Linux是通過“消息隊(duì)列表”來管理所有消息隊(duì)列的。圖8-7消息管理諸數(shù)據(jù)結(jié)構(gòu)間的邏輯關(guān)系4.有關(guān)消息隊(duì)列的系統(tǒng)調(diào)用創(chuàng)建一個新的消息隊(duì)列:newque()

刪除一個消息隊(duì)列:freeque()

向一個消息隊(duì)列發(fā)送一條消息:msgsnd()

從一個消息隊(duì)列中接收一條消息:msgrcv()8.2Linux的存儲管理

8.2.1Linux的虛擬存儲空間1.Linux的虛擬存儲空間在Linux中,虛擬地址用32個二進(jìn)制位表示。這意味系統(tǒng)向每個進(jìn)程提供的虛存空間,最多可以高達(dá)232字節(jié)=4GB。Linux的內(nèi)核把這樣的4GB空間劃分為兩個部分:最高的1GB用于內(nèi)核本身,稱為“系統(tǒng)空間”,并為所有的進(jìn)程共享;將較低的3GB供進(jìn)程使用,稱為“用戶空間”。圖8-8Linux的虛擬地址空間結(jié)構(gòu)2.多級頁表的地址轉(zhuǎn)換

Linux在對虛擬地址空間進(jìn)行分頁時,采用兩級頁表的機(jī)制:先是對虛擬地址空間進(jìn)行分頁,形成頁表;再對頁表進(jìn)行分頁,形成頁表的頁表。

這樣一來,不僅虛擬地址空間里的頁,可以存放在內(nèi)存的不連續(xù)塊中;頁表中的頁,也能夠存放在不連續(xù)的內(nèi)存塊里,這就是所謂的多級頁表結(jié)構(gòu)。這種“頁表的頁表”,被稱為頁表索引。圖8-9Linux虛擬地址的劃分圖8-10Linux的二級頁表式地址轉(zhuǎn)換

當(dāng)虛擬地址用64位表示時,虛擬地址空間的頁面更多,用二級索引后的頁表仍然很大。因此,Linux還可以提供三級頁表式的分頁式結(jié)構(gòu)。8.2.2管理虛擬存儲空間的數(shù)據(jù)結(jié)構(gòu)

Linux進(jìn)程的各個分區(qū)可以是不連續(xù)的,因此形成了若干個離散的虛擬區(qū)間。為了對它們加以管理,定義了vm_area_struct型及mm_struct型數(shù)據(jù)結(jié)構(gòu)。圖8-11Linux虛存管理的數(shù)據(jù)結(jié)構(gòu)1.管理分區(qū)虛擬區(qū)間的數(shù)據(jù)結(jié)構(gòu)vm_area_struct(VMA)一個進(jìn)程虛擬存儲空間中的每一個虛擬區(qū)間,都對應(yīng)著一個vm_area_struct,通常被縮寫為VMA。

進(jìn)程的每個VMA,都代表著它的虛擬地址空間中的一個連續(xù)區(qū)間。一個進(jìn)程的兩個VMA絕對不會重疊。2.管理VMA的數(shù)據(jù)結(jié)構(gòu)mm_struct

一個進(jìn)程所有的VMA,都由mm_struct來管理。8.2.3管理內(nèi)存空間的數(shù)據(jù)結(jié)構(gòu)在Linux存儲管理中,系統(tǒng)設(shè)置了一張存儲分塊表mem_map,它的每一個表項(xiàng)對應(yīng)著一個內(nèi)存塊,記錄著該塊的有關(guān)信息。

為了記錄內(nèi)存各塊的使用情況,Linux設(shè)置了位示圖bitmap,但是,Linux并不是用bitmap來進(jìn)行存儲分配和釋放的,而是通過所謂的“空閑區(qū)隊(duì)列表”:free_area。圖8-12Linux的空閑區(qū)隊(duì)列表8.2.4內(nèi)存區(qū)的分配和頁面淘汰策略進(jìn)程提出存儲請求或釋放時,都要與空閑區(qū)隊(duì)列表free_area進(jìn)行交往。Linux是采用所謂的“伙伴(Buddy)”算法,來進(jìn)行內(nèi)存區(qū)的分配和釋放的。

當(dāng)進(jìn)程提出存儲請求時,Linux將大于、等于這個數(shù)目的最小2n個內(nèi)存塊分配出去。圖8-13“伙伴”算法的實(shí)施過程8.3Linux的文件管理

8.3.1Linux文件系統(tǒng)的構(gòu)成所謂虛擬文件系統(tǒng),就是基于多種不同的文件系統(tǒng),Linux通過軟件的方法,隱去它們各自的實(shí)現(xiàn)細(xì)節(jié),抽象出一組標(biāo)準(zhǔn)的有關(guān)文件操作的系統(tǒng)調(diào)用。

把這樣的系統(tǒng)調(diào)用提供給用戶后,他們就可以使用統(tǒng)一的界面,去完成對各種不同文件系統(tǒng)中文件的操作了。

有了虛擬文件系統(tǒng)之后,Linux就可以支持多種不同的文件系統(tǒng)了。這時的文件系統(tǒng),可以看作是由兩級構(gòu)成:上面是用戶面對的虛擬文件系統(tǒng)VFS,內(nèi)核里面則是各個不同的文件系統(tǒng)。圖8-14Linux的VFS與各文件系統(tǒng)之間的關(guān)系8.3.2Ext2對磁盤的組織1.Ext2的文件類型按照文件所含的內(nèi)容,Ext2把文件分成以下3類。(1)普通文件(2)目錄文件(3)特別文件圖8-15Ext2文件目錄項(xiàng)的格式2.Ext2對磁盤的組織

Ext2把磁盤的分區(qū)或軟盤視為一個文件卷,把其上相鄰磁道的物理塊稱為所謂的“塊組”。

一個文件卷上可能有多個塊組。在一個塊組上,可以存放普通文件的信息,存放目錄文件的信息,存放文件的inode節(jié)點(diǎn),當(dāng)然還應(yīng)該存放對塊組的管理信息。圖8-16Ext2塊組的組織結(jié)構(gòu)(1)數(shù)據(jù)區(qū)(2)索引節(jié)點(diǎn)表(3)索引節(jié)點(diǎn)位圖(4)盤塊位圖(5)組描述符(6)超級塊圖8-17Ext2索引節(jié)點(diǎn)位圖與索引節(jié)點(diǎn)表的關(guān)系8.3.3Ext2文件的物理結(jié)構(gòu)在把文件存儲到磁盤上時,Ext2采用的是索引式結(jié)構(gòu),即通過該文件inode節(jié)點(diǎn)里的數(shù)組i_block[],建立起文件的邏輯塊號與相應(yīng)物理塊號之間的對應(yīng)關(guān)系,形成文件存儲的索引表。1.小型文件的索引結(jié)構(gòu)當(dāng)一個文件的長度在1~12個磁盤塊之間時,在Ext2里就稱為小型文件。

這時,用文件inode節(jié)點(diǎn)里數(shù)組i_block[]的前12個元素i_block[0]~i_block[11],直接給出文件數(shù)據(jù)存放的磁盤塊號。2.中型文件的索引結(jié)構(gòu)當(dāng)一個文件的長度超過12個磁盤塊時,在Ext2里就稱為中型文件。

這時,除了需要用到文件inode節(jié)點(diǎn)里數(shù)組i_block[]的前12個元素,直接給出12個磁盤塊外,還需要使用它的第13個元素i_block[12],形成一次間接索引。圖8-18Ext2小型、中型文件的索引結(jié)構(gòu)3.大型和巨型文件的索引結(jié)構(gòu)當(dāng)一個文件所需磁盤塊數(shù)超過b/4+12時,就成為一個Ext2的大型文件。

這時除了用到i_block[0]~i_block[11]外,要用到i_block[12]形成一次間接索引,還要用到i_block[13]形成二次間接索引。圖8-19Ext2的大型文件索引結(jié)構(gòu)

當(dāng)一個文件所需的磁盤塊數(shù)大于(b/4)*(b/4)+(b/4)+12個時,就成為Ext2的巨型文件了。

這時除了用到i_block[0]~i_block[11]外,要用到i_block[12],要用到i_block[13],還要用到i_block[14],以形成三次間接索引。8.3.4虛擬文件系統(tǒng)VFS的數(shù)據(jù)結(jié)構(gòu)

Linux的VFS既然是虛擬的,因此它不是一個實(shí)際的文件系統(tǒng),磁盤上并沒有一個VFS存在。Linux的VFS隨系統(tǒng)的初啟而建立,隨系統(tǒng)的關(guān)閉而消逝。

為了管理所有安裝的文件系統(tǒng),VFS通過使用描述整個VFS的一組數(shù)據(jù)結(jié)構(gòu),以及描述實(shí)際安裝的文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),來處理實(shí)際文件系統(tǒng)之間的各種差別,達(dá)到管理的目的。1.超級塊(super_block)2.索引節(jié)點(diǎn)(inode)3.file結(jié)構(gòu)4.flies_struct結(jié)構(gòu)5.vfsmount結(jié)構(gòu)圖8-20task_struct、files_struct、file、file_operations之間的關(guān)系圖8-21vfsmount單鏈表的結(jié)構(gòu)8.4Linux的設(shè)備管理

在Linux里,把I/O設(shè)備都當(dāng)作文件來處理,稱它們?yōu)樘貏e文件或設(shè)備文件。8.4.1Linux設(shè)備管理概述圖8-22Linux設(shè)備驅(qū)動的分層結(jié)構(gòu)示意1.字符設(shè)備(characterdevice)2.塊設(shè)備(blockdevice)3.網(wǎng)絡(luò)設(shè)備(netdevice)8.4.2Linux對字符設(shè)備的管理

Linux為了對字符設(shè)備進(jìn)行管理,設(shè)置了如下的一些數(shù)據(jù)結(jié)構(gòu)。1.device_stru

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論