Linux tmpfs 原始碼分析 一

2021-08-31 20:02:50 字數 929 閱讀 2893

tmpfs是linux 系統中基於記憶體/交換分割槽作的檔案系統,與ramdisk不同的是,ramdisk是作為塊裝置,基於ext的檔案系統,所以不可繞過的是page cache的記憶體複製,具體可以參考前面寫的關於ramdisk, 對tmpfs來說就是直接操作記憶體做為檔案系統的,而不是基於塊裝置的。

如何繞過page cache,實際上很簡單,只要直接在setup檔案系統的時候,設定自己的file的const struct file_operations,讓我們來看tmpfs是如何實現的。

在linux 2.6.18中tmpfs的原始碼主要在 shmem.c檔案中

1.定義tmpfs的檔案系統

static struct file_system_type tmpfs_fs_type = ;

在函式init_tmpfs 裡,通過 register_filesystem 吧tmpfs的註冊到檔案系統中

2. 更改file 的結構體的file_operations

在shmem_file_setup函式中,更改了 file->f_op = &shmem_file_operations; 下面來看具體的結構體

static struct file_operations shmem_file_operations = ;

也就是說在操作在 tmpfs 檔案時候,並沒有使用常用的ext檔案系統中的函式do_sync_read (read_write.c),而是呼叫了tmpfs 自己封裝的函式shmem_file_read,當然在shmem_file_read 並沒有對page cache進行操作,雖然裡面還是使用了page cache中maping,file, inode等結構體和演算法。

3. 函式shmem_file_read主要是呼叫do_shmem_file_read函式,在do_shmem_file_read函式中核心是shmem_getpage,通過索引和inode快速找到page.

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...