freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

操作系統(tǒng)課程設(shè)計(jì)(編輯修改稿)

2025-08-03 14:30 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 備上,這就是i_dev。其次,如果索引節(jié)點(diǎn)所代表的并不是常規(guī)文件,而是某個(gè)設(shè)備,那就還得有個(gè)設(shè)備號(hào),這就是i_rdev。 每當(dāng)一個(gè)文件被訪問時(shí),系統(tǒng)都要在這個(gè)文件的inode中記下時(shí)間標(biāo)記,這就是inode中與時(shí)間相關(guān)的幾個(gè)域。 每個(gè)索引節(jié)點(diǎn)都會(huì)復(fù)制磁盤索引節(jié)點(diǎn)包含的一些數(shù)據(jù),比如文件占用的磁盤塊數(shù)。如果i_state域的值等于I_DIRTY,該索引節(jié)點(diǎn)就是“臟”的,也就是說,對(duì)應(yīng)的磁盤索引節(jié)點(diǎn)必須被更新。i_state域的其它值有I_LOCK(這意味著該索引節(jié)點(diǎn)對(duì)象已加鎖),I_FREEING(這意味著該索引節(jié)點(diǎn)對(duì)象正在被釋放)。每個(gè)索引節(jié)點(diǎn)對(duì)象總是出現(xiàn)在下列循環(huán)雙向鏈表的某個(gè)鏈表中:(1) 未用索引節(jié)點(diǎn)鏈表。變量inode_unused的next域 和prev域分別指向該鏈表中的首元素和尾元素。這個(gè)鏈表用做內(nèi)存高速緩存。(2) 正在使用索引節(jié)點(diǎn)鏈表。變量inode_in_use指向該鏈表中的首元素和尾元素。(3) 臟索引節(jié)點(diǎn)鏈表。由相應(yīng)超級(jí)塊的s_dirty域指向該鏈表中的首元素和尾元素。這三個(gè)鏈表都是通過索引節(jié)點(diǎn)的i_list域鏈接在一起的。 屬于“正在使用”或“臟”鏈表的索引節(jié)點(diǎn)對(duì)象也同時(shí)存放在一個(gè)稱為inode_hashtable鏈表中。哈希表加快了對(duì)索引節(jié)點(diǎn)對(duì)象的搜索,前提是系統(tǒng)內(nèi)核要知道索引節(jié)點(diǎn)號(hào)及對(duì)應(yīng)文件所在文件系統(tǒng)的超級(jí)塊對(duì)象的地址。由于散列技術(shù)可能引發(fā)沖突,所以,索引節(jié)點(diǎn)對(duì)象設(shè)置一個(gè)i_hash域,其中包含向前和向后的兩個(gè)指針,分別指向散列到同一地址的前一個(gè)索引節(jié)點(diǎn)和后一個(gè)索引節(jié)點(diǎn);該域由此創(chuàng)建了由這些索引節(jié)點(diǎn)組成的一個(gè)雙向鏈表。 與索引節(jié)點(diǎn)關(guān)聯(lián)的方法也叫索引節(jié)點(diǎn)操作,由inode_operations結(jié)構(gòu)來描述,該結(jié)構(gòu)的地址存放在i_op域中,該結(jié)構(gòu)也包括一個(gè)指向文件操作方法的指針(參見下一節(jié)“文件對(duì)象”)。每個(gè)文件除了有一個(gè)索引節(jié)點(diǎn)inode數(shù)據(jù)結(jié)構(gòu)外,還有一個(gè)目錄項(xiàng)dentry(directory enrty)數(shù)據(jù)結(jié)構(gòu)。dentry 結(jié)構(gòu)中有個(gè)d_inode指針指向相應(yīng)的inode結(jié)構(gòu)。讀者也許會(huì)問,既然inode結(jié)構(gòu)和dentry結(jié)構(gòu)都是對(duì)文件各方面屬性的描述,那為什么不把這兩個(gè)結(jié)構(gòu)“合而為一”呢?這是因?yàn)槎咚枋龅哪繕?biāo)不同,dentry結(jié)構(gòu)代表的是邏輯意義上的文件,所描述的是文件邏輯上的屬性,因此,目錄項(xiàng)對(duì)象在磁盤上并沒有對(duì)應(yīng)的映像;而inode結(jié)構(gòu)代表的是物理意義上的文件,記錄的是物理上的屬性,對(duì)于一個(gè)具體的文件系統(tǒng)(如Ext2),Ext2_ inode結(jié)構(gòu)在磁盤上就有對(duì)應(yīng)的映像。所以說,一個(gè)索引節(jié)點(diǎn)對(duì)象可能對(duì)應(yīng)多個(gè)目錄項(xiàng)對(duì)象。 dentry 的定義在include/linux/: struct dentry { atomic_t d_count。 /* 目錄項(xiàng)引用計(jì)數(shù)器 */ unsigned int d_flags。 /* 目錄項(xiàng)標(biāo)志 */ struct inode * d_inode。 /* 與文件名關(guān)聯(lián)的索引節(jié)點(diǎn) */ struct dentry * d_parent。 /* 父目錄的目錄項(xiàng) */ struct list_head d_hash。 /* 目錄項(xiàng)形成的哈希表 */ struct list_head d_lru。 /*未使用的 LRU 鏈表 */ struct list_head d_child。 /*父目錄的子目錄項(xiàng)所形成的鏈表 */ struct list_head d_subdirs。 /* 該目錄項(xiàng)的子目錄所形成的鏈表*/ struct list_head d_alias。 /* 索引節(jié)點(diǎn)別名的鏈表*/ int d_mounted。 /* 目錄項(xiàng)的安裝點(diǎn) */ struct qstr d_name。 /* 目錄項(xiàng)名(可快速查找) */ unsigned long d_time。 /* 由 d_revalidate函數(shù)使用 */ struct dentry_operations *d_op。 /* 目錄項(xiàng)的函數(shù)集*/ struct super_block * d_sb。 /* 目錄項(xiàng)樹的根 (即文件的超級(jí)塊)*/ unsigned long d_vfs_flags。 void * d_fsdata。 /* 具體文件系統(tǒng)的數(shù)據(jù) */ unsigned char d_iname[DNAME_INLINE_LEN]。 /* 短文件名 */}。下面對(duì)dentry結(jié)構(gòu)給出進(jìn)一步的解釋。一個(gè)有效的dentry結(jié)構(gòu)必定有一個(gè)inode結(jié)構(gòu),這是因?yàn)橐粋€(gè)目錄項(xiàng)要么代表著一個(gè)文件,要么代表著一個(gè)目錄,而目錄實(shí)際上也是文件。所以,只要dentry結(jié)構(gòu)是有效的,則其指針d_inode必定指向一個(gè)inode結(jié)構(gòu)。可是,反過來則不然,一個(gè)inode卻可能對(duì)應(yīng)著不止一個(gè)dentry結(jié)構(gòu);也就是說,一個(gè)文件可以有不止一個(gè)文件名或路徑名。這是因?yàn)橐粋€(gè)已經(jīng)建立的文件可以被連接(link)到其他文件名。所以在inode結(jié)構(gòu)中有一個(gè)隊(duì)列i_dentry,凡是代表著同一個(gè)文件的所有目錄項(xiàng)都通過其dentry結(jié)構(gòu)中的d_alias域掛入相應(yīng)inode結(jié)構(gòu)中的i_dentry隊(duì)列。 在內(nèi)核中有一個(gè)哈希表dentry_hashtable ,是一個(gè)list_head的指針數(shù)組。一旦在內(nèi)存中建立起一個(gè)目錄節(jié)點(diǎn)的dentry 結(jié)構(gòu),該dentry結(jié)構(gòu)就通過其d_hash域鏈入哈希表中的某個(gè)隊(duì)列中。 內(nèi)核中還有一個(gè)隊(duì)列dentry_unused,凡是已經(jīng)沒有用戶(count域?yàn)?)使用的dentry結(jié)構(gòu)就通過其d_lru域掛入這個(gè)隊(duì)列。 Dentry結(jié)構(gòu)中除了d_alias 、d_hash、d_lru三個(gè)隊(duì)列外,還有d_vfsmnt、d_child及d_subdir三個(gè)隊(duì)列。其中d_vfsmnt僅在該dentry為一個(gè)安裝點(diǎn)時(shí)才使用。另外,當(dāng)該目錄節(jié)點(diǎn)有父目錄時(shí),則其dentry結(jié)構(gòu)就通過d_child掛入其父節(jié)點(diǎn)的d_subdirs隊(duì)列中,同時(shí)又通過指針d_parent指向其父目錄的dentry結(jié)構(gòu),而它自己各個(gè)子目錄的dentry結(jié)構(gòu)則掛在其d_subdirs域指向的隊(duì)列中。 從上面的敘述可以看出,一個(gè)文件系統(tǒng)中所有目錄項(xiàng)結(jié)構(gòu)或組織為一個(gè)哈希表,或組織為一顆樹,或按照某種需要組織為一個(gè)鏈表,這將為文件訪問和文件路徑搜索奠定下良好的基礎(chǔ)。在具體介紹這幾個(gè)結(jié)構(gòu)以前,我們需要解釋一下文件描述符、打開的文件描述、系統(tǒng)打開文件表、用戶打開文件表的概念以及它們的聯(lián)系。在Linux中,進(jìn)程是通過文件描述符(file descriptors,簡(jiǎn)稱fd)而不是文件名來訪問文件的,文件描述符實(shí)際上是一個(gè)整數(shù)。Linux中規(guī)定每個(gè)進(jìn)程能最多能同時(shí)使用NR_OPEN個(gè)文件描述符,為1024*1024()。每個(gè)文件都有一個(gè)32位的數(shù)字來表示下一個(gè)讀寫的字節(jié)位置,這個(gè)數(shù)字叫做文件位置。每次打開一個(gè)文件,除非明確要求,否則文件位置都被置為0,即文件的開始處,此后的讀或?qū)懖僮鞫紝奈募拈_始處執(zhí)行,但你可以通過執(zhí)行系統(tǒng)調(diào)用LSEEK(隨機(jī)存儲(chǔ))對(duì)這個(gè)文件位置進(jìn)行修改。Linux中專門用了一個(gè)數(shù)據(jù)結(jié)構(gòu)file來保存打開文件的文件位置,這個(gè)結(jié)構(gòu)稱為打開的文件描述(open file description)。這個(gè)數(shù)據(jù)結(jié)構(gòu)的設(shè)置是煞費(fèi)苦心的,因?yàn)樗c進(jìn)程的聯(lián)系非常緊密,可以說這是VFS中一個(gè)比較難于理解的數(shù)據(jù)結(jié)構(gòu)。首先,為什么不把文件位置干脆存放在索引節(jié)點(diǎn)中,而要多此一舉,設(shè)一個(gè)新的數(shù)據(jù)結(jié)構(gòu)呢?我們知道,Linux中的文件是能夠共享的,假如把文件位置存放在索引節(jié)點(diǎn)中,則如果有兩個(gè)或更多個(gè)進(jìn)程同時(shí)打開同一個(gè)文件時(shí),它們將去訪問同一個(gè)索引節(jié)點(diǎn),于是一個(gè)進(jìn)程的LSEEK操作將影響到另一個(gè)進(jìn)程的讀操作,這顯然是不允許也是不可想象的。另一個(gè)想法是既然進(jìn)程是通過文件描述符訪問文件的,為什么不用一個(gè)與文件描述符數(shù)組相平行的數(shù)組來保存每個(gè)打開文件的文件位置?這個(gè)想法也是不能實(shí)現(xiàn)的,原因就在于在生成一個(gè)新進(jìn)程時(shí),子進(jìn)程要共享父進(jìn)程的所有信息,包括文件描述符數(shù)組。我們知道,一個(gè)文件不僅可以被不同的進(jìn)程分別打開,而且也可以被同一個(gè)進(jìn)程先后多次打開。一個(gè)進(jìn)程如果先后多次打開同一個(gè)文件,則每一次打開都要分配一個(gè)新的文件描述符,并且指向一個(gè)新的file結(jié)構(gòu),盡管它們都指向同一個(gè)索引節(jié)點(diǎn),但是,如果一個(gè)子進(jìn)程不和父進(jìn)程共享同一個(gè)file結(jié)構(gòu),而是也如上面一樣,分配一個(gè)新的file結(jié)構(gòu),會(huì)出現(xiàn)什么情況了?讓我們來看一個(gè)例子:假設(shè)有一個(gè)輸出重定位到某文件A的shell script(shell腳本),我們知道,shell是作為一個(gè)進(jìn)程運(yùn)行的,當(dāng)它生成第一個(gè)子進(jìn)程時(shí),將以0作為A的文件位置開始輸出,假設(shè)輸出了2K的數(shù)據(jù),則現(xiàn)在文件位置為2K。然后,shell繼續(xù)讀取腳本,生成另一個(gè)子進(jìn)程,它要共享shell的file結(jié)構(gòu),也就是共享文件位置,所以第二個(gè)進(jìn)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1