參考Linux內(nèi)核源碼版本------linux-2.4.3文章來源:http://www.zghlxwxcb.cn/news/detail-744881.html
一.內(nèi)存中的文件管理(文件與進程)
-
操作系統(tǒng)之下,進程是計算機系統(tǒng)執(zhí)行計算任務(wù)的基本單位,進程訪問文件執(zhí)行數(shù)據(jù)讀寫之前,操作系統(tǒng)會從外設(shè)獲取相應(yīng)的文件信息,在內(nèi)存中建立
struct file
結(jié)構(gòu)體對象來描述和管理文件,進程借助struct file
結(jié)構(gòu)體提供的文件信息執(zhí)行文件操作. -
進程PCB
struct task_struct
與文件struct file
之間的關(guān)聯(lián): -
Linux系統(tǒng)下,打開文件的系統(tǒng)調(diào)用接口:
int open(const char *pathname, int flags, mode_t mode);
- 接口的返回值其實是
fd_array
列表中的元素數(shù)組下標,稱為文件描述符,通過數(shù)組下標和fd_array
列表,可以找到指定文件的struct file
對象
-
Linux系統(tǒng)下,文件重定向接口:
int dup2(int oldfd, int newfd);
dup2
接口原理:先關(guān)閉fd_array[newfd]
指向的文件,然后在fd_array
列表中,指針fd_array[oldfd]
覆蓋掉指針fd_array[newfd]
,后續(xù)使用oldfd
和newfd
執(zhí)行文件操作,操作的便是同一個文件。- 進程替換不會影響進程
PCB
的大部分內(nèi)容(包括struct file
結(jié)構(gòu)體),因此文件重定向在執(zhí)行進程替換之后仍然生效.
二 .Linux系統(tǒng)視角下的計算機外設(shè)
文章來源地址http://www.zghlxwxcb.cn/news/detail-744881.html
- 操作系統(tǒng)之下,計算機外設(shè)與計算機內(nèi)存之間的交互必須依托于進程
- 馮諾依曼計算機除了內(nèi)存和CPU外,其他的與計算機內(nèi)存進行交互的IO設(shè)備在Linux系統(tǒng)中統(tǒng)一被視為被進程打開的文件。
-
與其他被進程打開的文件相同,工作中的IO設(shè)備在Linux內(nèi)核中被統(tǒng)一描述為
struct file
結(jié)構(gòu)體對象,不同的具體IO設(shè)備的struct file
對象中的成員函數(shù)指針會指向不同的接口實現(xiàn): - 不同的IO設(shè)備對應(yīng)的
struct file
中的函數(shù)指針指向不同的接口實現(xiàn),這本質(zhì)上就是C語言的多態(tài)編程,“Linux下一切皆文件”其實就是在Linux系統(tǒng)內(nèi)核中體現(xiàn)的最早期的多態(tài)編程,這種編程模式在Linux內(nèi)核中被頻繁使用 (面向?qū)ο缶幊陶Z言的始祖)
三.磁盤上的文件管理
-
Linux系統(tǒng)視角下,磁盤空間在呈線性排列,一個磁盤被分為多個分區(qū),每個分區(qū)由多個塊組構(gòu)成,塊組的結(jié)構(gòu)如下:
-
塊組的組成部分:
SuperBlock
(超級塊):包含的是整個文件系統(tǒng)的全局信息,比如inode
總個數(shù)、塊總個數(shù)、每個塊組的inode
個數(shù)、每個塊組的塊個數(shù)等等。SuperBlock
的存在意義是備份文件系統(tǒng)的重要全局信息,保證文件系統(tǒng)的安全性和穩(wěn)定性GroupDescriptorTable
(塊組描述符):包含文件系統(tǒng)中所有塊組的屬性信息,與SuperBlock
的作用類似。BlockBitmap
(數(shù)據(jù)位圖)和inodeBitmap
(inode
位圖): 用于標識對應(yīng)的數(shù)據(jù)塊或inode
是空閑的,還是正在被使用中。inodeTable
(inode
列表):包含了塊組中所有的inode
,inode
與磁盤文件是一一對應(yīng)的關(guān)系,inode
中存儲磁盤文件的文件信息和文件的數(shù)據(jù)塊引索-
Data blocks
(數(shù)據(jù)塊):存儲文件的有效數(shù)據(jù).
到了這里,關(guān)于Linux文件系統(tǒng)(操作系統(tǒng)的文件管理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!