精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我們一起學學加載根文件系統

系統 其他OS
可是硬盤中憑什么就有了這些信息呢?這就是個雞生蛋蛋生雞的問題了。你可以先寫一個操作系統,然后給一個硬盤做某種文件系統類型的格式化,這樣你就得到一個有文件系統的硬盤了,有了這個硬盤,你的操作系統就可以成功啟動了。

書接上回,上回書咱們說到,我們已經把硬盤的基本信息存入了 hd_info[]。

把硬盤的分區信息存入了 hd[]。

并且留了個讀取硬盤數據的 bread 函數沒有講,等主流程講完再展開這些函數的細節,我知道這是你們關心的內容。

這些都是 setup 方法里做的事情,也就是進程 0 fork 出的進程 1 所執行的第一個方法。

今天我們說 setup 方法中的最后一個函數 mount_root。

int sys_setup(void * BIOS) {
...
mount_root();
}

mount_root 直譯過來就是加載根。

再多說幾個字是加載根文件系統,有了它之后,操作系統才能從一個根兒開始找到所有存儲在硬盤中的文件,所以它是文件系統的基石,很重要。

我們翻開看看。

void mount_root(void) {
int i,free;
struct super_block * p;
struct m_inode * mi;

for(i=0;i<64;i++)
file_table[i].f_count=0;

for(p = &super_block[0] ; p < &super_block[8] ; p++) {
p->s_dev = 0;
p->s_lock = 0;
p->s_wait = NULL;
}
p=read_super(0);
mi=iget(0,1);

mi->i_count += 3 ;
p->s_isup = p->s_imount = mi;
current->pwd = mi;
current->root = mi;
free=0;
i=p->s_nzones;
while (-- i >= 0)
if (!set_bit(i&8191,p->s_zmap[i>>13]->b_data))
free++;

free=0;
i=p->s_ninodes+1;
while (-- i >= 0)
if (!set_bit(i&8191,p->s_imap[i>>13]->b_data))
free++;
}

很簡單。

從整體上說,它就是要把硬盤中的數據,以文件系統的格式進行解讀,加載到內存中設計好的數據結構,這樣操作系統就可以通過內存中的數據,以文件系統的方式訪問硬盤中的一個個文件了。

那其實搞清楚兩個事情即可:

第一,硬盤中的文件系統格式是怎樣的?

第二,內存中用于文件系統的數據結構有哪些?

我們一個個來。

硬盤中的文件系統格式是怎樣的?

首先硬盤中的文件系統,無非就是硬盤中的一堆數據,我們按照一定格式去解析罷了。Linux-0.11 中的文件系統是 MINIX 文件系統,它就長成這個樣子。

每一個塊結構的大小是 1024 字節,也就是 1KB,硬盤里的數據就按照這個結構,妥善地安排在硬盤里。

可是硬盤中憑什么就有了這些信息呢?這就是個雞生蛋蛋生雞的問題了。你可以先寫一個操作系統,然后給一個硬盤做某種文件系統類型的格式化,這樣你就得到一個有文件系統的硬盤了,有了這個硬盤,你的操作系統就可以成功啟動了。

總之,想個辦法給這個硬盤寫上數據唄。

好了,現在我們簡單看看 MINIX 文件系統的格式。

引導塊就是我們系列最開頭說的啟動區,當然不一定所有的硬盤都有啟動區,但我們還是得預留出這個位置,以保持格式的統一。

超級塊用于描述整個文件系統的整體信息,我們看它的字段就知道了,有后面的 inode 數量,塊數量,第一個塊在哪里等信息。有了它,整個硬盤的布局就清晰了。

inode 位圖和塊位圖,就是位圖的基本操作和作用了,表示后面 inode 和塊的使用情況,和我們之前講的內存占用位圖 mem_map[] 是類似的。

再往后,inode 存放著每個文件或目錄的元信息和索引信息,元信息就是文件類型、文件大小、修改時間等,索引信息就是大小為 9 的 i_zone[9] 塊數組,表示這個文件或目錄的具體數據占用了哪些塊。

其中塊數組里,0~6 表示直接索引,7 表示一次間接索引,8 表示二次間接索引。當文件比較小時,比如只占用 2 個塊就夠了,那就只需要 zone[0] 和 zone[1] 兩個直接索引即可。

再往后,就都是存放具體文件或目錄實際信息的塊了。如果是一個普通文件類型的 inode 指向的塊,那里面就直接是文件的二進制信息。如果是一個目錄類型的 inode 指向的塊,那里面存放的就是這個目錄下的文件和目錄的 inode 索引以及文件或目錄名稱等信息。

好了,文件系統格式的說明,我們就簡單說明完畢了,MINIX 文件系統已經過時。

內存中用于文件系統的數據結構有哪些?

趕緊回過頭來看我們的代碼,是如何加載以這樣一種格式存放在硬盤里的數據,以被我們操作系統所管控的。

從頭看。

struct file {
unsigned short f_mode;
unsigned short f_flags;
unsigned short f_count;
struct m_inode * f_inode;
off_t f_pos;
};

void mount_root(void) {
for(i=0;i<64;i++)
file_table[i].f_count=0;
...
}

把 64 個 file_table 里的 f_count 清零。

這個 file_table 表示進程所使用的文件,進程每使用一個文件,都需要記錄在這里,包括文件類型、文件 inode 索引信息等,而這個 f_count 表示被引用的次數,此時還沒有引用,所以設置為零。

而這個 file_table 的索引,就是我們通常說的文件描述符。比如有如下命令。

echo "hello" > 0

就表示把 hello 輸出到 0 號文件描述符。

0 號文件描述符是哪個文件呢?就是 file_table[0] 所表示的文件。

這個文件在哪里呢?注意到 file 結構里有個 f_inode 字段,通過 f_inode 即可找到它的 inode 信息,inode 信息包含了一個文件所需要的全部信息,包括文件的大小、文件的類型、文件所在的硬盤塊號,這個所在硬盤塊號,就是文件的位置咯。

接著看。

struct super_block super_block[8];
void mount_root(void) {
...
struct super_block * p;
for(p = &super_block[0] ; p < &super_block[8] ; p++) {
p->s_dev = 0;
p->s_lock = 0;
p->s_wait = NULL;
}
...
}

又是把一個數組 super_block 做清零工作。

這個 super_block 存在的意義是,操作系統與一個設備以文件形式進行讀寫訪問時,就需要把這個設備的超級塊信息放在這里。

這樣通過這個超級塊,就可以掌控這個設備的文件系統全局了。

果然,接下來的操作,就是讀取硬盤的超級塊信息到內存中來。

void mount_root(void) {
...
p=read_super(0);
...
}

read_super 就是讀取硬盤中的超級塊。

接下來,讀取根 inode 信息。

struct m_inode * mi;
void mount_root(void) {
...
mi=iget(0,1);
...
}

然后把該 inode 設置為當前進程(也就是進程 1)的當前工作目錄和根目錄。

void mount_root(void) {
...
current->pwd = mi;
current->root = mi;
...
}

然后記錄塊位圖信息。

void mount_root(void) {
...
i=p->s_nzones;
while (-- i >= 0)
set_bit(i&8191, p->s_zmap[i>>13]->b_data);
...
}

最后記錄 inode 位圖信息。

void mount_root(void) {
...
i=p->s_ninodes+1;
while (-- i >= 0)
set_bit(i&8191, p->s_imap[i>>13]->b_data);
}

就完事了。

其實整體上就是把硬盤中文件系統的各個信息,搬到內存中。之前的圖可以說非常直觀了。

有了內存中的這些結構,我們就可以順著根 inode,找到所有的文件了。

至此,加載根文件系統的 mount_root 函數就全部結束了。同時,讓我們回到全局視野,發現 setup 函數也一并結束了。

void main(void) {
...
move_to_user_mode();
if (!fork()) {
init();
}
for(;;) pause();
}

void init(void) {
setup((void *) &drive_info);
...
}

int sys_setup(void * BIOS) {
...
mount_root();
}

setup 的主要工作就是我們今天所講的,加載根文件系統。

我們繼續往下看 init 函數。

void init(void) {
setup((void *) &drive_info);
(void) open("/dev/tty0",O_RDWR,0);
(void) dup(0);
(void) dup(0);
}

看到這相信你也明白了。

之前 setup 函數的一番折騰,加載了根文件系統,順著根 inode 可以找到所有文件,就是為了下一行 open 函數可以通過文件路徑,從硬盤中把一個文件的信息方便地拿到。

在這里,我們 open 了一個 /dev/tty0 的文件,那我們接下來的焦點就在這個 /dev/tty0 是個啥?

責任編輯:武曉燕 來源: 低并發編程
相關推薦

2022-07-28 08:52:08

Docker命令操作系統

2022-12-09 08:34:38

嵌入式Web容器

2024-03-11 10:30:31

Linux文件系統

2021-12-14 09:34:31

丑數順序指針

2022-01-10 06:52:59

拖拽庫項目搜索

2022-09-22 08:06:29

計算機平板微信

2023-11-06 08:28:43

2024-04-29 13:07:00

運維保命原則Oracle

2024-02-28 08:47:29

文件系統數據

2021-09-15 19:02:42

Node.jsFs模塊

2023-08-02 08:35:54

文件操作數據源

2022-03-08 17:52:58

TCP格式IP

2021-07-28 07:53:20

Github ActiDotnet 應用

2022-01-17 06:59:40

Grep指令linux

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2021-12-29 08:27:05

ByteBuffer磁盤服務器

2022-03-31 18:59:43

數據庫InnoDBMySQL

2023-06-30 08:18:51

敏捷開發模式

2023-08-10 08:28:46

網絡編程通信
點贊
收藏

51CTO技術棧公眾號

久久久亚洲精品无码| 亚洲最大福利视频网站| 在线看片中文字幕| 高清久久一区| 亚洲成人av电影| 日韩高清av| 国产情侣激情自拍| 一本久久综合| 久久久精品在线| 黄色污在线观看| yiren22亚洲综合| 亚洲综合成人网| 四虎影视永久免费在线观看一区二区三区 | 亚洲国产综合网| 亚洲专区免费| 欧美成年人视频| 在线观看国产精品一区| 日韩一区二区三区色| 色综合久久久网| 欧美在线观看视频免费| yiren22综合网成人| 高清国产一区二区三区| 国产日本欧美一区二区三区| 成年人一级黄色片| 国产亚洲一区| 亚洲国产高清福利视频| 日韩在线一区视频| 欧美三级网址| 午夜精品福利在线| 婷婷视频在线播放| 国产69久久| 91在线高清观看| 99久久精品久久久久久ai换脸| 激情高潮到大叫狂喷水| 亚洲免费福利一区| 亚洲精品一区二区三区香蕉| 亚洲欧美天堂在线| 欧美大片免费| 欧美日韩免费在线观看| 国产精品无码电影在线观看| 日本在线观看免费| 欧美激情在线看| 欧美一区二区三区成人久久片 | 亚洲看片免费| 久青草国产97香蕉在线视频| 国产又粗又硬视频| 精品色999| 亚洲天堂网在线观看| 丰满少妇一区二区| 久久97精品| 亚洲国产精品福利| 一级欧美一级日韩片| 丁香一区二区| 亚洲成av人片在线观看香蕉| 波多野结衣三级视频| 亚洲精品v亚洲精品v日韩精品| 欧美日韩免费一区| 国产黄视频在线| 成av人片在线观看www| 亚洲成av人**亚洲成av**| 欧美这里只有精品| brazzers在线观看| 亚洲精品少妇30p| www.国产在线视频| 美女搞黄视频在线观看| 精品日本美女福利在线观看| 亚洲精品无码久久久久久| 91av亚洲| 精品视频在线免费| 激情久久综合网| 视频精品国内| 日韩av在线播放资源| 可以直接看的无码av| 美女毛片一区二区三区四区最新中文字幕亚洲 | 黄色网zhan| www久久日com| 亚洲尤物在线视频观看| 日韩欧美视频网站| 日韩免费va| 欧美肥妇毛茸茸| 在线中文字日产幕| 最新国产精品视频| 精品国内亚洲在观看18黄 | 欧美劲爆第一页| 99免费在线观看| 狂野欧美一区| 国产日产欧美a一级在线| 亚洲欧美激情国产综合久久久| 日韩1区2区日韩1区2区| 91精品免费视频| 欧美一级在线免费观看| 中文字幕成人网| 成人毛片100部免费看| 日本蜜桃在线观看视频| 欧美日韩高清一区二区| 亚洲女则毛耸耸bbw| 国产乱码精品一区二区亚洲| 久久成人在线视频| 青草视频在线观看免费| 韩国一区二区在线观看| 激情五月综合色婷婷一区二区| www.狠狠干| www日韩大片| 中文字幕日韩精品久久| 91资源在线观看| 欧美人xxxx| 中文成人无字幕乱码精品区| 91精品电影| 国产va免费精品高清在线观看| 成人精品在线看| 精品一区二区综合| 欧美污视频久久久| 国产午夜精品久久久久免费视| 中文字幕中文字幕中文字幕亚洲无线| 欧美在线播放一区| 中日韩高清电影网| 欧美视频一区二区在线观看| 亚洲蜜桃精久久久久久久久久久久| 欧美午夜寂寞| 欧美大成色www永久网站婷| 天天干天天色综合| 成年人国产精品| 7777在线视频| 欧美在线va视频| 日韩电影中文字幕在线| 青青草成人免费| 麻豆精品一区二区三区| 清纯唯美一区二区三区| 午夜激情在线播放| 精品久久久三级丝袜| 久久久精品少妇| 免费成人性网站| 久久精品人人做人人爽电影| 久久不射影院| 日韩午夜激情视频| 91日韩中文字幕| 精品在线免费观看| 亚洲一区三区| 欧美韩国日本| 色悠悠久久久久| 国产精华7777777| 国产午夜亚洲精品午夜鲁丝片| 亚洲最新免费视频| 四虎影视4hu4虎成人| 亚洲精品一二区| 欧美日韩综合在线观看| 99国产精品一区| 欧美 日韩 国产 高清| 韩国精品福利一区二区三区| 欧美精品video| 亚洲免费一级片| 天天综合天天综合色| 三级黄色片网站| 久久久精品网| 亚洲第一导航| 免费视频成人| 欧美成人激情在线| 亚洲h视频在线观看| 亚洲午夜久久久| 制服丝袜第一页在线观看| 在线观看的日韩av| 久久成人资源| 日本综合字幕| 日韩在线视频二区| 国产99对白在线播放| 亚洲国产日韩在线一区模特| 污污内射在线观看一区二区少妇| 久久久久亚洲| 99久久综合狠狠综合久久止| 欧美24videosex性欧美| 日韩电影在线观看永久视频免费网站 | 农村妇女一区二区| 久久久精品久久久久| 狠狠躁日日躁夜夜躁av| 精品毛片网大全| 成人国产精品久久久网站| 久久国产精品99精品国产 | 水蜜桃久久夜色精品一区| 成人免费视频网址| 日本乱理伦在线| 亚洲欧美日韩区| 中文字幕日韩经典| 一区二区成人在线视频| 国产吞精囗交久久久| 日本在线不卡一区| 国产乱人伦精品一区二区三区| 本网站久久精品| 欧美激情免费看| 国产视频网址在线| 日韩欧美激情在线| 一级特黄免费视频| 一区二区三区精品视频| 三上悠亚ssⅰn939无码播放| 久久精品久久99精品久久| 996这里只有精品| 精品国内自产拍在线观看视频 | 91在线视频免费91| 狠狠热免费视频| 国产精品videosex极品| 免费亚洲精品视频| 人人爱人人干婷婷丁香亚洲| 日韩av电影手机在线观看| yellow91字幕网在线| 亚洲无亚洲人成网站77777| www.麻豆av| 欧美亚洲动漫制服丝袜| 99免费在线观看| 亚洲欧洲国产日本综合| 日韩av在线看免费观看| 国产盗摄精品一区二区三区在线 | 人妻一区二区视频| 国产成人免费视频精品含羞草妖精| 久久av秘一区二区三区| 精品三级av在线导航| 亚洲tv在线观看| 国产经典一区| 91豆花精品一区| caoporn97在线视频| 中文字幕久热精品在线视频| 视频二区在线| 亚洲成人网在线| 国产巨乳在线观看| 欧美午夜在线一二页| 日韩 欧美 中文| 亚洲一级二级在线| 麻豆视频在线免费看| 中文字幕中文字幕一区二区| 一区二区三区伦理片| 91丨九色丨国产丨porny| 美国黄色一级视频| 国产毛片精品视频| 欧美日韩精品区别| 麻豆91小视频| 国产一伦一伦一伦| 免费高清成人在线| 午夜两性免费视频| 日本中文一区二区三区| 黄色免费网址大全| 三级不卡在线观看| 91免费视频网站在线观看| 亚洲三级毛片| 黄色网页免费在线观看| 亚洲精品美女91| 你真棒插曲来救救我在线观看| 视频一区欧美| 欧美性色黄大片人与善| 欧美美女在线观看| 日韩啊v在线| 欧美午夜精彩| 亚洲人久久久| 亚洲国产精品久久久久蝴蝶传媒| 黄色99视频| 精品一区二区男人吃奶| 久久久久久国产精品一区| 天天躁日日躁狠狠躁欧美巨大小说| 91九色综合久久| 免费一区二区三区在线视频| 亚洲一区亚洲二区亚洲三区| 亚洲91网站| 国内外成人免费视频| 免费看久久久| 日韩欧美亚洲在线| 91欧美日韩| 91亚洲精品国产| a91a精品视频在线观看| 日韩手机在线观看视频| 男男视频亚洲欧美| 91在线第一页| 北条麻妃国产九九精品视频| 欧美图片一区二区| 中文字幕 久热精品 视频在线 | 欧美激情一区二区三区高清视频 | 国产一区二区三区四区视频 | 日韩中文字幕第一页| 久久精品视频观看| 久久男人的天堂| 国偷自产一区二区免费视频| 国产欧美日韩免费看aⅴ视频| 亚洲www.| 成人在线一区二区| 精品欧美午夜寂寞影院| 色噜噜一区二区| 欧美黄免费看| 成人午夜视频免费在线观看| 久久精品国内一区二区三区| 老熟女高潮一区二区三区| 久久婷婷色综合| 中国一级片在线观看| 亚洲v日本v欧美v久久精品| 在线观看国产区| 日韩丝袜情趣美女图片| 猫咪在线永久网站| 欧美剧在线观看| 亚洲第一影院| http;//www.99re视频| 国内成人自拍| av女优在线播放| 极品销魂美女一区二区三区| 国产乱了高清露脸对白| 亚洲三级在线免费观看| www.国产高清| 日韩三级av在线播放| 国产精品视频二区三区| 欧美极度另类性三渗透| 青青草国产一区二区三区| 欧美18视频| 一区二区亚洲精品| 九九久久久久久| www.黄色网| 亚洲欧美日韩一区| 自拍偷拍校园春色| 亚洲成人精品av| av香蕉成人| 国产精品视频久久久| 小说区图片区色综合区| 国产精品三级一区二区| 韩国一区二区三区| 91动漫免费网站| 色久综合一二码| 午夜激情在线视频| 欧美二区在线播放| 精品国产伦一区二区三区观看说明 | 成人免费va视频| 永久免费未视频| 欧美性大战久久久久久久蜜臀| 中文字幕一级片| 日韩精品极品视频免费观看| 美足av综合网| 91九色极品视频| 欧美成人高清| 51自拍视频在线观看| 亚洲图片你懂的| 97超碰人人模人人人爽人人爱| 亚洲电影免费观看高清完整版在线观看 | 日韩成人av在线播放| caopen在线视频| 成人精品aaaa网站| 久久美女视频| 天天干天天操天天做| 国产精品你懂的在线| 中文字幕激情视频| 在线成人免费网站| 国产精品蜜月aⅴ在线| 亚洲欧洲精品一区二区三区波多野1战4| 在线观看国产精品入口| 蜜桃福利午夜精品一区| 亚洲天堂成人网| 99热精品在线播放| 久久视频在线播放| 欧美激情精品| 污污污污污污www网站免费| 国产精品亚洲一区二区三区妖精| 亚洲自拍偷拍一区二区| 欧美日韩国产精品一区| 神宫寺奈绪一区二区三区| 97精品国产97久久久久久春色| 一级欧美视频| 韩国黄色一级大片| 国产成人综合自拍| 日本a在线观看| 亚洲精品理论电影| 婷婷午夜社区一区| 亚洲欧洲精品一区二区| 国产麻豆9l精品三级站| 国产在线视频你懂的| 亚洲成人激情在线| 欧美日韩123区| 国产又大又长又粗又黄| 成人久久18免费网站麻豆| 精品国产乱码一区二区| 亚洲人午夜精品| 日韩护士脚交太爽了| 97在线免费视频观看| 91在线免费视频观看| 中文有码在线播放| 欧美人交a欧美精品| 羞羞色国产精品网站| 中文字幕第38页| 亚洲国产另类精品专区| 三级做a全过程在线观看| 国产日韩精品视频| 亚洲国产一区二区精品专区| 中文字幕国产综合| 欧美一区二区成人| 三级在线看中文字幕完整版| 宅男av一区二区三区| 不卡的电视剧免费网站有什么| 亚洲一区二区91| 亚洲最新中文字幕| 亚洲精品v亚洲精品v日韩精品| 91xxx视频| 91麻豆.com| aaa一区二区三区| 日本亚洲欧洲色α| 欧美精品黄色| 谁有免费的黄色网址| 欧美tk—视频vk| 国产一区高清| 日韩激情免费视频| 一区二区三区免费观看|