linux 0 11 原始碼學習(十四)

2022-02-21 01:07:36 字數 902 閱讀 3267

檔案系統綜述

linux 檔案系統是基於minix 1.0檔案系統,這部分的**量是整個核心裡最大的,但**結構對應著minix檔案系統的構成,還是比較清晰易讀的。

minix檔案系統

minix的檔案系統由以下幾部分組成:

struct

super_block ;

struct

d_inode ;

同時在linux 0.11中還在記憶體開闢了緩衝區,通過hash雜湊表的形式支援資料塊讀取的緩衝。

功能分塊:

從功能的角度分,linux 0.11 檔案系統原始碼主要分為以下幾塊:

linux檔案系統對上提供的呼叫封裝:

open:sys_create、sys_open等系統呼叫實現;

exec.c:主要實現do_execute,即實現載入並啟動乙個可執行檔案.out或shell指令碼;

fcontl.c:sys_fcntl、sys_dup等系統呼叫介面;

stat.c:sys_stat等系統呼叫介面;

核心業務流程

以建立乙個檔案為例,看下linux 0.11中檔案系統各部分原始碼的關係:

呼叫sys_open開啟乙個檔案,輸入檔名、模式等;

呼叫open_namei獲取其i節點,open_namei會呼叫和bitmap和inode.c的底層操作,找到該檔案對應的邏輯塊;

呼叫buffer.c中的操作讀取這些邏輯塊,當緩衝中不存在邏輯塊資料時,會呼叫塊裝置驅動;這些邏輯塊的位址(應該是緩衝區的位址)會儲存在m_inode結構體中;

從file_table陣列中返回乙個檔案控制代碼(即陣列索引),其指向的file結構中包含了m_inode。

linux 0 11 原始碼學習(六)

main.c main函式其實是核心的初始化,如果把核心功能比作業務軟體的話,就相當於是業務的初始化,從該檔案的資料夾歸屬 init資料夾 也可以看出這一點。main主函式很短,從 中可以基本看出整個核心的功能模組,如下 void main void for pause 注 在linux中fork乙...

linux 0 11 原始碼學習(五)

head.s head.s 是系統模組的入口,其編譯器已經是gnu彙編,但從功能上將仍然屬於核心啟動階段,主要的功能是對386 cpu的初始化,如使用者堆疊 idt gdt和頁表。因此從資料夾的歸屬看,它仍然放在boot資料夾中,與bootsect和setup一塊。head.s的核心功能 簡單的暫存...

linux 0 11 原始碼學習(十三)

字元裝置驅動 在linux 0.11版本中,字元裝置驅動原始碼分為三塊 向上暴露的字元裝置驅動介面tty io.c與tty ioctl.c,與塊裝置驅動一樣,在字元驅動檔案 read write.c 操作中被呼叫 實現串列埠的驅動rs io.s和serial.c 實現鍵盤驅動的keyboard.s以...