




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、簡單多用戶文件系統(tǒng)目錄一、課程設計任務描述2二、設計思想說明22.1 對該任務的理解分析22.2 設計任務剖析32.3 程序設計環(huán)境及工具選擇42.4 函數(shù)層次圖(即模塊關系圖)5三、EXT2文件系統(tǒng)簡介53.1文件系統(tǒng)概述53.2 EXT2文件系統(tǒng)簡介5四、數(shù)據(jù)設計與表示74.1 頭文件說明74.1.1 頭文件:types.h74.1.2頭文件:filetype.h74.1.3頭文件:sys.h84.2數(shù)據(jù)結構說明84.2.1 超級塊(super block)84.2.2 組描述符84.2.3 磁盤索引節(jié)點94.2.4 內存索引節(jié)點10磁盤目錄項結構體104.2.6當前目錄結構體114.2.
2、7用戶打開文件表結構體114.2.8系統(tǒng)打開文件表結構體114.2.9用戶結構體124.3 宏定義說明124.4 主要函數(shù)列表134.5 算法流程圖14五、數(shù)據(jù)分析175.1 輸入數(shù)據(jù)175.2 輸出數(shù)據(jù)分析17六、使用說明186.1歡迎界面186.2 用戶登陸界面186.3 系統(tǒng)使用界面196.4 創(chuàng)建目錄及顯示目錄界面19七、課程設計總結207.1 與給定文件系統(tǒng)的對比分析207.2 未完成部分及改進方法207.2 課程設計總結20八、參考文獻20九、程序源代碼及注解21一、課程設計任務描述為LINUX設計一個簡單的二級文件系統(tǒng)。要求做到以下幾點:1、 可以實現(xiàn)下列幾條命令Login 用戶
3、登錄Dir列文件目錄Create創(chuàng)建文件Delete刪除文件Open打開文件Close關閉文件Read讀文件Write 寫文件2、列目錄時要列出文件名、物理地址、保護碼和文件長度。3、源文件可以進行讀寫保護。二、設計思想說明2.1 對該任務的理解分析一個文件系統(tǒng)從功能上劃分程序為四個部分,第一部分是有關高速緩沖區(qū)的管理程序,主要實現(xiàn)了對硬盤等塊設備進行數(shù)據(jù)高速存取的函數(shù);第二部分代碼描述了文件系統(tǒng)的底層通用函數(shù),說明了文件索引節(jié)點的管理、磁盤數(shù)據(jù)塊的分配和釋放以及文件名與i節(jié)點的轉換算法;第三部分程序是有關對文件中數(shù)據(jù)進行讀寫操作,包括對字符設備、管道、塊讀寫文件中數(shù)據(jù)的訪問;第四部分的程序與
4、文件的系統(tǒng)調用接口的實現(xiàn)有關,主要涉及文件打開、關閉、創(chuàng)建以及有關文件目錄操作等的系統(tǒng)調用。由于我們不能親自設計驅動程序,所以我們要模擬文件系統(tǒng)的設計、實現(xiàn)和功能,就不能把它直接做為操作系統(tǒng)實際的文件系統(tǒng)進行掛接。鑒于此,我們就有兩個思路來完成該任務,一是在實際的硬盤上創(chuàng)建一個文件,把它做為磁盤進行各種對磁盤的模擬操作,這樣做的好處是可以對它進行連續(xù)操作,只要在退出文件系統(tǒng)時,及時保存它的狀態(tài),當我們下次啟動程序時,就能繼續(xù)以前的操作,相比而言這更接近于實際;二是在內存中開辟一塊空間,譬如1M或2M大小,繼而對這塊內存區(qū)域模擬磁盤操作,操作靈活但這樣需每次開辟空間,極有可能隱藏一些需要關閉文件
5、系統(tǒng)才能發(fā)現(xiàn)的錯誤,也就是說這樣做不易于排錯。在本次的課程設計中,我們決定采用第一種方案。由于是在文件級上的操作,所以我們不必去寫設備驅動程序,只需要開辟文件調用fwrite、fread、fseek、ftell、fput、fget等庫函數(shù)進行讀寫即可。在文件系統(tǒng)四部分程序中,我們只需要編寫第二部分文件系統(tǒng)的底層通用函數(shù)即可。2.2 設計任務剖析在本次的課程設計中,我們沒有沿用課程設計指導書上文件系統(tǒng)的例子程序,而是決定模擬Linux的標準根文件系統(tǒng)EXT2,其原因我們會在課程設計總結中給出。我們認為EXT2主要的設計思想是磁盤分區(qū)再分組,數(shù)據(jù)存儲使用混合索引方式。這也是我們要實現(xiàn)的主要功能。在
6、參考了Linux0.11文件系統(tǒng)Minix2.0及Linux2.4EXT2的底層通用函數(shù)后,本著設計簡單可表達EXT2設計思想的原則,我們需要編寫的程序要實現(xiàn)下列功能:l 格式化程序。在硬盤上創(chuàng)建一個文件,用來模擬磁盤;對磁盤按照EXT2文件系統(tǒng)結構進行劃分;主要數(shù)據(jù)的寫入,包括根目錄、登陸文檔、超級塊、組描述符的初始化及組描述符表、塊位圖索引節(jié)點位圖的初始化及索引節(jié)點表。l 磁盤讀寫函數(shù)。這部分的函數(shù)要完成的功能包括:讀寫指定的磁盤塊;讀寫指定的索引節(jié)點表和塊位圖;讀寫指定的超級塊和組描述符。l 數(shù)據(jù)塊分配和回收函數(shù)。按照先組從小到大,后邏輯塊編號從小到大的順序分配數(shù)據(jù)塊;回收指定的邏輯塊改
7、寫相應組內的塊位圖。l 索引節(jié)點分配和回收。按照先組從小到大,后索引編號從小到大的順序分配索引節(jié)點;回收指定的索引節(jié)點改寫相應組內的索引節(jié)點位圖。l 目錄操作函數(shù)。列表顯示當前目錄內目錄項,更改目錄及刪除目錄。l 文件操作函數(shù)。組織進程和文件系統(tǒng)的關系,包括用戶打開文件表和系統(tǒng)打開文件表的初始化和管理。創(chuàng)建文件、刪除文件、打開文件、關閉文件、讀文件和寫文件。程序是引用文件描述符來操作文件的。l 用戶認證。讀取文件系統(tǒng)的密碼文檔,對登陸用戶驗證。由于EXT2文件系統(tǒng)是相對較大的程序的組合,在較短的時間內很難全面模仿,所以我們對它在不改變其主要設計思想的基礎上,進行了適當簡化。編寫程序時主要遵循的
8、設計思想如下:l 設置全局宏定義。在實際中,文件系統(tǒng)要引用一些常量,是在各種數(shù)據(jù)結構體中查找的,而我們?yōu)榱耸沟贸绦蛟O計的簡單,使用了全局的宏定義,在程序的任何地方都可方便的使用。l 數(shù)據(jù)分配采用混合索引方式。在數(shù)據(jù)塊的組織上我們使用EXT2的混合索引方式,但我們不準備照搬EXT2的方式,而是把數(shù)據(jù)指針定為5個,前4個作為直接指針,第5個做為單級指針。這樣我們文件系統(tǒng)中文件最大就定為了:(BLOCKSIZE_BT是以字節(jié)表示的磁盤塊大小)4*BLOCKSIZE_BT+(BLOCKSIZE_BT/4)*BLOCKSIZE_BT=4*512B+(512/4)*512B=67584B=67584B/(
9、1024B/K)=66KBl 目錄采用直接指針方式。在創(chuàng)建目錄項時,我們把這5個數(shù)據(jù)指針都作為了直接指針。那么每個目錄可包含的目錄項為:5*(BLOCKSIZE_BT/DIR_ENTRY_LEN)=40l 在進程和文件系統(tǒng)的關系上,使用了EXT2的組織方式,可用下圖表示:2.3 程序設計環(huán)境及工具選擇該試驗程序是小組成員在Windows2000平臺下,使用Microsoft Visual C+ 6.0編輯、編譯及調試通過的。之所以選擇這種組合是在考慮了Windows平臺的易用性、廣泛性和程序文件轉儲簡單等特性,另外Visual C+可自己組織程序的調用和編譯,省去了在Linux平臺下使用GNU
10、/GCC書寫Makefile文件系統(tǒng)的麻煩。這樣可以在較短的時間內完成文件系統(tǒng)復雜程序的編寫??紤]到Visual C+是32位的編譯器,為了在其他一些16位編譯器如TC下編譯通過,我們特意為此設計了通用模式。關于此下文有詳細的說明。2.4 函數(shù)層次圖(即模塊關系圖)圖例說明: 為shell調用命令為程序調用函數(shù)三、EXT2文件系統(tǒng)簡介3.1文件系統(tǒng)概述簡單地說,文件系統(tǒng)就是操作系統(tǒng)與存儲介質之間交換數(shù)據(jù)的一種協(xié)議約定,它對文件的組織和存取規(guī)則進行詳細描述,同時保證數(shù)據(jù)的完整性。有了這種邏輯上的約定,文件系統(tǒng)就不必了解數(shù)據(jù)塊的物理存儲位置,它只需保存邏輯塊的編號,而對磁盤的物理操作是由文件系統(tǒng)磁
11、盤函數(shù)庫(Disk Library)中的各種底層函數(shù),通過塊設備驅動程序,來完成由邏輯塊編號到物理存儲位置的轉換。3.2 EXT2文件系統(tǒng)簡介Linux第一版的文件系統(tǒng)來自Minix,隨著Linux的逐步成熟,從而為Linux量身定做了EXT文件系統(tǒng),但其性能差強人意,并不能滿足實際的需要。1993年由Remy Card做了進一步改良,EXT演變?yōu)镋XT2,它同樣是建立在文件的數(shù)據(jù)以數(shù)據(jù)塊為組織單位的前提下。因其高效和強健的特性,成為了Linux內核使用的標準根文件系統(tǒng)。EXT2的英文全稱是Second Extrended File System,亦即第二擴展文件系統(tǒng)的意思,它負責管理系統(tǒng)外存
12、上的文件,為操作系統(tǒng)和用戶提供對文件的存取、共享和保護的手段。Ext2的優(yōu)點是:l 支持達 4 TB 的內存。 l 文件名稱最長可以到 1012 個字符。 l 當創(chuàng)建文件系統(tǒng)時,管理員可以選擇邏輯塊的大小(通常大小可選擇 1024、2048 和 4096 字節(jié))。 l 實現(xiàn)快速符號鏈接:不需要為此目的而分配數(shù)據(jù)塊,并且將目標名稱直接存儲在索引節(jié)點(inode)表中。這使性能有所提高,特別是在速度上。因為 Ext2 文件系統(tǒng)的穩(wěn)定性、可靠性和健壯性,所以幾乎在所有基于 Linux 的系統(tǒng)(包括臺式機、服務器和工作站 并且甚至一些嵌入式設備)上都使用 Ext2 文件系統(tǒng)。然而,當在嵌入式設備中使用
13、 Ext2fs 時,它有一些缺點:Ext2是為象 IDE 設備那樣的塊設備設計的,這些設備的邏輯塊大小是 512 字節(jié),1 K 字節(jié)等這樣的倍數(shù)。這不太適合于扇區(qū)大小因設備不同而不同的閃存設備。Ext2 文件系統(tǒng)沒有提供對基于扇區(qū)的擦除寫操作的良好管理。在 Ext2中,為了在一個扇區(qū)中擦除單個字節(jié),必須將整個扇區(qū)復制到 RAM,然后擦除,然后重寫入??紤]到閃存設備具有有限的擦除壽命(大約能進行 100,000 次擦除),在此之后就不能使用它們,所以這不是一個特別好的方法。在出現(xiàn)電源故障時,Ext2fs 不是防崩潰的。Ext2 文件系統(tǒng)不支持損耗平衡,因此縮短了扇區(qū)閃存的壽命。(損耗平衡確保將地
14、址范圍的不同區(qū)域輪流用于寫和或擦除操作以延長閃存設備的壽命。)Ext2fs 沒有特別完美的扇區(qū)管理,這使設計塊驅動程序十分困難。EXT2把硬盤分成多個分區(qū),通常必須有一個主分區(qū)(Native)和一個交換分區(qū)(Swap),Linux把每一個分區(qū)都當作一個獨立的設備對待。主分區(qū)的大部分空間用來存儲系統(tǒng)中的各種數(shù)據(jù),例如普通文件、目錄文件等文件,少部分用來定義文件系統(tǒng)的數(shù)據(jù)結構;交換分區(qū)用作系統(tǒng)的虛擬內存。實際上每個分區(qū)都是一個文件系統(tǒng),有它們各自的頂層目錄和下面的目錄層次結構。這些單獨的文件系統(tǒng)按照一定的掛接方式形成一個總的目錄層次結構。邏輯分區(qū)繼續(xù)分成多個塊組(block group) ,塊組下
15、面又分為超級塊(SuperBlock)、組描述符表(group descriptors)、塊位圖(Bitmap)、索引節(jié)點(inode)位圖、索引節(jié)點表、目錄塊和數(shù)據(jù)塊等,它們各自占有不同數(shù)量的邏輯塊,在文件系統(tǒng)中起著不同的作用。在塊組0之前還有一個引導塊,它位于任何EXT2分區(qū)中的第1塊,是為分區(qū)的啟動扇區(qū)保留的,不受Ext2 文件系統(tǒng)的管理。若該分區(qū)為系統(tǒng)的主引導分區(qū)時,引導塊的內容就為引導信息含有可執(zhí)行代碼,否則為空。在同一個文件系統(tǒng)中,數(shù)據(jù)塊的大小是固定的,對于不同的EXT2 文件系統(tǒng)這個值可以不同。數(shù)據(jù)塊的大小是在建立EXT2文件系統(tǒng)時,由系統(tǒng)管理員指定或由文件系統(tǒng)的創(chuàng)建程序根據(jù)硬盤
16、分區(qū)的大小,自動選擇一個較合理的值確定的,這個值一經確定,文件系統(tǒng)就把它作為基本參數(shù)保存起來,在運行期間就不會改動了。以后文件所需的存儲空間就依照這個指定大小的數(shù)據(jù)塊為基本單位進行分配。EXT2文件系統(tǒng)的邏輯硬盤布局在每個塊組中重復保存著相對于其分區(qū)文件系統(tǒng)的一些重要信息,包括一份超級塊的拷貝和一組塊組描述符的拷貝。這種對文件系統(tǒng)完整性關鍵信息的重復保存,雖然浪費了一些存儲空間,但有助于文件系統(tǒng)在發(fā)生故障時的還原。實際上只有塊組0 中所包含的超級塊和組描述符才被內核讀取使用,其余的拷貝信息一般保持不變,只有當出現(xiàn)數(shù)據(jù)損壞,并且塊組0中的主超級塊和主描述符表變?yōu)闊o效時,才被文件系統(tǒng)引用,通過e2
17、fsck 程序把Ext2 分區(qū)恢復到某個一致的狀態(tài)。四、數(shù)據(jù)設計與表示4.1 頭文件說明4.1.1 頭文件:types.h#ifndef _I386_TYPES_H#define _I386_TYPES_H#define VARTYPE 1 /1為在vc下編譯#if VARTYPE=1typedef unsigned int _U32; typedef unsigned short _U16;typedef unsigned char _U8;typedef int _S32; typedef short _S16;typedef char _S8;#elsetypedef unsigned
18、long _U32;typedef unsigned int _U16;typedef unsigned char _U8;typedef long _S32;typedef int _S16;typedef char _S8;#endif#endif因為在16位和32位的編譯器下表達int的字節(jié)是不同的,而在寫各種數(shù)據(jù)塊時又必須按照字節(jié)對應寫入,這就照成了程序的不能通用。鑒于此,我們使用typedef命令把數(shù)據(jù)類型進行了規(guī)定。4.1.2頭文件:filetype.h#ifndef _FILETYPE_#define _FILETYPE_#define UKN0x0000 /0 未知#defin
19、e REG0x0001 /1 普通文件#define DIR0x0002 /2 目錄文件#define CHR0x0003 /3 字符設備#define BLK0x0004 /4 塊設備#define FIFO 0x0005 /5 命名管道#define SOCK 0x0006 /6 套接字#define LNK0x0007 /7 符號鏈接#defineS_IREG(flag)(flag=0x01)?REG:0/1 判斷普通文件#defineS_IDIR(flag)(flag=0x02)?DIR:0/2 判斷目錄文件#defineS_ICHR(flag)(flag=0x03)?CHR:0/3
20、判斷字符設備#defineS_IBLK(flag)(flag=0x04)?BLK:0/4 判斷塊設備#defineS_IFIFO(flag)(flag=0x05)?FIFO:0/5 判斷命名管道#defineS_ISOCK(flag)(flag=0x06)?SOCK:0/6 判斷套接字#defineS_ILNK(flag)(flag=0x07)?LNK:0/7 判斷符號鏈接#endif按照UNIX的文件屬性設置定義該頭文件,及用來對文件屬性的判斷。4.1.3頭文件:sys.h該頭文件包括了系統(tǒng)使用的各種宏定義和數(shù)據(jù)結構,這部分的內容將在“數(shù)據(jù)結構說明”和“宏定義說明”部分予以介紹。4.2數(shù)據(jù)結
21、構說明4.2.1 超級塊(super block)超級塊位于每個塊組的最前面,如前所述對于每個塊組其內容是相同的,在任何一個塊組中超級塊只占用1個數(shù)據(jù)塊。它是用來描述EXT2文件系統(tǒng)整體布局信息的數(shù)據(jù)結構,包含其所在分區(qū)文件系統(tǒng)目錄和文件的靜態(tài)分布情況,并給出文件系統(tǒng)各組成部分的大小和形狀等信息。struct ext2_super_block _U32s_inodes_count; /* 索引節(jié)點的總數(shù) Inodes count */_U32s_blocks_count; /* 以塊為單位的文件系統(tǒng)的大小 Blocks count */_U32s_free_blocks_count; /* 空
22、閑塊計數(shù)器 Free blocks count */_U32s_free_inodes_count; /* 空閑索引節(jié)點計數(shù)器 Free inodes count */_U32s_first_data_block; /* 第一個使用的塊號 First Data Block */_U32s_log_block_size; /* 塊的大小 Block size */_U32s_blocks_per_group; /* 每組中的塊數(shù) Blocks per group */_U32s_inodes_per_group; /* 每組中的節(jié)點數(shù) Inodes per group */_U32s_mtime
23、; /* 最后一次安裝操作的時間 Mount time */_U32s_wtime; /* 最后一次寫操作的時間 Write time */_U16s_magic; /* 魔數(shù)簽名 Magic signature */_U32s_first_ino; /* 第一個非保留的索引節(jié)點號 */_U16 s_inode_size; /* 磁盤上索引節(jié)點結構的大小 */;#define SUPER_BLOCK_LEN sizeof(struct ext2_super_block) /56B4.2.2 組描述符在設計上Linux深受BSD FFS(快速文件系統(tǒng))的影響,它的塊組與 FFS的柱面組很類似。然
24、而,塊組與磁盤上塊的物理布局沒有關系,因為現(xiàn)代驅動器趨向于順序訪問優(yōu)化設計,并向操作系統(tǒng)隱藏了其中的物理幾何參數(shù)。這個結構也同樣在性能上帶來好處:通過減少i節(jié)點表與數(shù)據(jù)塊之間的距離,就有可能降低磁頭對文件I/O操作尋道的時間,從而提高了文件存取的效率。分區(qū)在邏輯上把塊組看作是一個線性數(shù)組,所含塊組的數(shù)量取決于該分區(qū)的大小和預設的塊的大小,主要限制在于塊位圖。每個塊組中的塊位圖必須存放在1個單獨的塊中,用來標識一個組中塊的占用和空閑狀況。在數(shù)據(jù)塊的大小確定以后,每個塊組的大小也同時被固定了下來,由下面的公式可以得到一組重要的信息:設數(shù)據(jù)塊及分區(qū)容量分別為: N KB S KB每組中含數(shù)據(jù)塊的最大
25、數(shù): DBMAX=N*1024*8=8192*N塊組最大容量: BGSIZE=DBMAX*N=8192*N2分區(qū)中塊組最小數(shù): BGMIN=S/DBSIZE=S/(8192* N2)每個塊組與一個組描述符(ext2_group_desc,見includelinuxext2_fs.h)對應,組描述符記錄該塊組的一些重要信息的位置以及該塊組的空間使用情況,struct ext2_group_desc_U32bg_block_bitmap; /* 塊位圖的塊號 */_U32 bg_inode_bitmap; /* 索引節(jié)點位圖的塊號 */_U32 bg_inode_table; /* 第一個索引節(jié)點
26、表塊的塊號 */_U16 bg_free_blocks_count; /* 組中空閑塊的個數(shù) */_U16 bg_free_inodes_count; /* 組中索引節(jié)點的個數(shù) */_U16 bg_used_dirs_count; /* 組中目錄的個數(shù) */_U16 bg_id; /* 該組描述副的編號 */_U32bg_reserved3; /* 填充字符 */;#define GROUP_DESC_LEN sizeof(struct ext2_group_desc) /32B4.2.3 磁盤索引節(jié)點struct ext2_inode_U16 i_mode; /* 文件類型和訪問權限 */_
27、U16 i_uid; /* 擁有者標識符 */_U32 i_size; /* 以字節(jié)為單位的文件長度 */_U32 i_atime; /* 最后一次訪問文件的時間 */_U32 i_ctime; /* 索引節(jié)點最后改變的時間 */_U32 i_mtime; /* 文件內容最后改變的時間 */_U32 i_dtime; /* 文件刪除的時間 */_U16 i_gid; /* 組標識符 */_U16 i_links_count; /* 硬鏈接計數(shù)器 */ _U32 i_blocks; /* 文件的數(shù)據(jù)塊數(shù) */_U32 i_flags; /* 文件標志 */ _U32 i_blockEXT2_N_
28、BLOCKS; /* 指向數(shù)據(jù)塊的指針 */_U32 re2;#define INODE_LEN sizeof(struct ext2_inode) /644.2.4 內存索引節(jié)點struct ext2_inode_info struct ext2_inode_info *i_next;struct ext2_inode_info *i_pri;_U16i_mode; /* 文件類型和訪問權限 */_U32i_dataEXT2_N_BLOCKS; /* 邏輯塊指針 */_U32i_count; /* 內存關聯(lián)文件數(shù) */_U32i_inode; /* 索引接點編號 */_U8i_dirty;
29、/* 臟數(shù)據(jù) */_U32i_links_count; /* 硬鏈接計數(shù)器 */ _U16i_blocks; /* 文件大小(以塊表示) */_U32i_size; /* 以字節(jié)為單位的文件長度 */_U16 i_uid; /* 擁有者標識符 */_U32i_atime; /* 最后一次訪問文件的時間 */_U32i_ctime; /* 索引節(jié)點最后改變的時間 */_U32i_mtime; /* 文件內容最后改變的時間 */_U32i_dtime; /* 文件刪除的時間 */;#define INODE_INFO_LEN sizeof(struct ext2_inode_info)4.2.5磁
30、盤目錄項結構體在ext2文件系統(tǒng)中,目錄文件包含有下屬文件與子目錄的登記項。當創(chuàng)建一個文件時,就構成一個目錄項,并添加到相應的目錄文件中。一個目錄文件可以包含很多目錄項,每個目錄項(如ext2文件系統(tǒng)的ext2_dir_entry_2)包含的信息如下:(1)索引節(jié)點號。這是相應文件在數(shù)據(jù)塊組中的索引節(jié)點號碼,即檢索索引節(jié)點表數(shù)組的索引值。(2)目錄項長度。記載該目錄項占多少字節(jié)。(3)名字長度。記載相應文件名的字節(jié)數(shù)。(4)文件類型。用一個數(shù)字表示文件的類型,例如,1表示普通文件,2表示目錄,3表示字符設備文件,4表示塊設備文件等。(5)文件名字。文件名(不包括路徑部分)的最大長度為255個字
31、符。每個目錄的前兩個目錄始終是標準的“.”和“.”,它們分別代表目錄自身和其父目錄。當用戶需要打開某個文件時,首先要指定該文件的路徑和名稱,文件系統(tǒng)根據(jù)路徑和名稱搜索對應的索引節(jié)點,找到該文件的數(shù)據(jù)塊,從而讀取文件中的數(shù)據(jù)。struct ext2_dir_entry _U32inode; /* 索引節(jié)點號 Inode number*/_U16 rec_len; /* 目錄項的長度 Directory entry length */ _U16 file_type; /* 文件類型 */charnameEXT2_NAME_LEN; /* 文件名 File name length*/;#define
32、 DIR_ENTRY_LEN sizeof(struct ext2_dir_entry) /64B4.2.6當前目錄結構體struct fs_struct _U32 count;_U32 lock;_U32 umask;struct ext2_inode_info * root, * pwd;char d_pwdEXT2_NAME_LEN,d_rootEXT2_NAME_LEN;#define FS_STRUCT_LEN sizeof(struct fs_struct)4.2.7用戶打開文件表結構體struct files_struct _U32 count;_U32 file_lock;/*
33、 Protects all the below members. Nests inside tsk-alloc_lock */_S32 max_fds;_S32 max_fdset;_S32 next_fd;struct file * fd;/* current fd array */struct file * fd_arrayNR_OPEN_DEFAULT;#define FILES_STRUCT_LEN sizeof(struct files_struct)4.2.8系統(tǒng)打開文件表結構體struct file struct file * f_next;struct dentry* f_de
34、ntry; /* 所在目錄 */_U32f_count; /* 連接計數(shù)器 */_U32 f_flags;_U16f_mode;_U32f_pos; /* 文件位移 */_U32f_uid, f_gid;_U32f_maxcount;#define FILE_STRUCT sizeof(struct file)4.2.9用戶結構體#define USER_NAME_LENGTH 10#define PSDMAX 10#define PATH 40struct user_struct _U16 u_uid;_U16 u_gid;char u_nameUSER_NAME_LENGTH;char u
35、_psdPSDMAX;char u_pathPATH;#define USER_STRUCT_LEN sizeof(struct user_struct) /32B4.3 宏定義說明#define EXT2_SUPER_MAGIC0xEF53#define VDISKSIZE_MB 16 /* 表示磁盤為多少M */#define BLOCKSIZE_BT 512 /* 磁盤塊的大小 (512字節(jié)) */#define RDISKSIZE_MB(VDISKSIZE_MB-VDISKSIZE_MB%GROUPSIZE_MB)#define RDISKSIZE_BT(RDISKSIZE_MB*10
36、24*1024)#define GROUPSIZE_BK (BLOCKSIZE_BT*8) /* 組容量:以邏輯塊個數(shù)表示 */#define GROUPSIZE_BT (GROUPSIZE_BK*BLOCKSIZE_BT) /* 組容量:以字節(jié)表示 */#define GROUPSIZE_MB (GROUPSIZE_BT/1024/1024) /* 組容量:以M表示 */#define GROUPNUM_FS(RDISKSIZE_MB/GROUPSIZE_MB) /* 文件系統(tǒng)組的總數(shù) */#define GROUPDESCNUM_PBLK(BLOCKSIZE_BT/GROUP_DESC_L
37、EN) /* 每個邏輯塊含組描述符的個數(shù) */#define GROUPDESCNUM_BK(GROUPNUM_FS/GROUPDESCNUM_PBLK) /* 組描述符占的數(shù)據(jù)塊數(shù) */#if VDISKSIZE_MB32#define GROUPDESCNUM_BK 1#endif#define DINODENUM_PGUP(BLOCKSIZE_BT*8)/* 每組含索引節(jié)點的個數(shù) */#define DINODENUM_PBLK(BLOCKSIZE_BT/INODE_LEN)/* 每個邏輯塊含索引節(jié)點的個數(shù) */#define DINODETBL_PGUP(DINODENUM_PGUP/DINODENUM_PBLK) /* 索引節(jié)點表占的塊數(shù) */#define DINODENUM_FS(DINODENUM_PGUP*GROUPNUM_FS) /* 索引節(jié)點總數(shù) */#define FREEBLKNUM_PGUP(GROUPDESCNUM_BK-4-DINODETBL_PGUP) /* 每組空閑塊數(shù) */#define FRISTDATA(4+GROUPDESCNUM_BK+DINODETBL_PGUP)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 漳州衛(wèi)生職業(yè)學院《中外建筑鑒賞》2023-2024學年第二學期期末試卷
- 西北師范大學《機器人技術雙語》2023-2024學年第二學期期末試卷
- 溫州理工學院《大數(shù)據(jù)應用開發(fā)語言》2023-2024學年第二學期期末試卷
- 廣西電力職業(yè)技術學院《施工企業(yè)會計》2023-2024學年第二學期期末試卷
- 湖南工商職業(yè)學院《管理會計模擬實訓》2023-2024學年第二學期期末試卷
- 蘇州百年職業(yè)學院《計算機二維設計》2023-2024學年第二學期期末試卷
- 西安高新科技職業(yè)學院《實驗室安全》2023-2024學年第二學期期末試卷
- 青島酒店管理職業(yè)技術學院《材料與工藝(木材)》2023-2024學年第二學期期末試卷
- 綏化學院《智能控制技術基礎》2023-2024學年第二學期期末試卷
- 天津城市建設管理職業(yè)技術學院《小學教育學》2023-2024學年第二學期期末試卷
- 《成人心肺復蘇術》課件
- 國家秘密載體的管理要求
- 車間照明施工合同范例
- 硫酸安全使用管理及使用制度(4篇)
- 高教版2023年中職教科書《語文》(基礎模塊)下冊教案全冊
- 康復醫(yī)療行業(yè):社會辦康復醫(yī)療50企業(yè)報告
- 雪茄知識及侍茄培訓
- 三檢制培訓資料
- 2024年填海工程土石方合同
- 【高考復習】文言文閱讀專題:特殊句式-(公開課課件)
- 超齡員工用工免責協(xié)議書
評論
0/150
提交評論