1. 程式人生 > >Linux核心分析筆記----Page Cache和Page Writeback

Linux核心分析筆記----Page Cache和Page Writeback

頁快取記憶體是linux核心實現的一種主要磁碟快取,它主要用來減少對磁碟的IO操作,具體地講,是通過把磁碟中的資料快取到實體記憶體中,把對磁碟的訪問變為對實體記憶體的訪問。為什麼要這麼做呢?一,速度;二臨時區域性原理。有關這兩個概念,相信熟悉作業系統的我們不會太陌生。頁快取記憶體是由RAM中的物理頁組成的,快取中的每一頁都對應著磁碟中的多個塊。每當核心開始執行一個頁IO操作時,就先到快取記憶體中找。這樣就可以大大減少磁碟操作。
一個物理頁可能由多個不連續的物理磁碟塊組成。也正是由於頁面中對映的磁碟塊不一定連續,所以在頁快取記憶體中檢測特定資料是否已被快取就變得不那麼容易了。另外linux頁快取記憶體對被快取頁的範圍定義的非常寬。快取的目標是任何基於頁的物件,這包含各種型別的檔案和各種型別的記憶體對映。為了滿足普遍性要求,linux使用定義在linux/fs.h中的結構體address_space結構體描述頁快取記憶體中的頁面,如下:

01 struct address_space {
02         struct inode            *host;              /* owning inode */
03         struct radix_tree_root  page_tree;          /* radix tree of all pages */
04         spinlock_t              tree_lock;          /* page_tree lock */
05         unsigned int            i_mmap_writable;    /* VM_SHARED ma count */
06         struct prio_tree_root   i_mmap;             /* list of all mappings */
07         struct list_head        i_mmap_nonlinear;   /* VM_NONLINEAR ma list */
08         spinlock_t              i_mmap_lock;        /* i_mmap lock */
09         atomic_t                truncate_count;     /* truncate re count */
10         unsigned long           nrpages;            /* total number of pages */
11         pgoff_t                 writeback_index;    /* writeback start offset */
12         struct address_space_operations   *a_ops;   /* operations table */
13         unsigned long           flags;              /* gfp_mask and error flags */
14         struct backing_dev_info *backing_dev_info;  /* read-ahead information */
15         spinlock_t              private_lock;       /* private lock */
16         struct list_head        private_list;       /* private list */
17         struct address_space    *assoc_mapping;     /* associated buffers */
18 };

相關推薦

linux核心分析筆記----定時器時間管理

在這一次裡,主要講講和時間相關的東西,這個我們都比較熟悉,我就直接如主題。       首先要明白兩個概念:系統定時器和動態定時器。週期性產生的事件都是有系統定時器驅動的,這裡的系統定時器是一種可程式設計硬體晶片,它能以固定頻率產生中斷。該中斷就是定時器中斷

Linux核心分析筆記----Page CachePage Writeback

頁快取記憶體是linux核心實現的一種主要磁碟快取,它主要用來減少對磁碟的IO操作,具體地講,是通過把磁碟中的資料快取到實體記憶體中,把對磁碟的訪問變為對實體記憶體的訪問。為什麼要這麼做呢?一,速度;二臨時區域性原理。有關這兩個概念,相信熟悉作業系統的我們不會太陌生。頁快取記憶體是由RAM中的物理頁組

linux Page cachebuffer cache正解

Page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網上也有很多人在爭辯和猜想這兩個cache到底有什麼區別,討論到最後也一直沒有一個統一和正確的結論,在我工作的這一段時間,page cache和buffer cache的概念曾經困擾過我,但是仔細分析一下,這兩個概念實際上非常的

Linux Page cachebuffer cache深入理解

Page cache和buffer cache一直以來是兩個比較容易混淆的概念,在網上也有很多人在爭辯和猜想這兩個cache到底有什麼區別,討論到最後也一直沒有一個統一和正確的結論,在我工作的這一段時間,page cache和buffer cache的概念曾經困擾過我,但是仔細分析一下,這兩個概念實際上非常的

Linux Page cacheBlock I/O layer

下面內容是來自LKD和ULK的讀書筆記,見該書的LKD的《Chapter 16 The Page Cache and Page Writeback》和《Chapter 14 The Block I/O Layer》,以及ULK的《Chapter 18 The Ext2 an

【轉】Buffer cachepage cache的區別

轉自:http://alanwu.blog.51cto.com/3652632/1122077 Page cache和buffer cache到底有什麼區別呢?很多時候我們不知道系統在做IO操作的時候到底是走了page cache還是buffer cache?其實

linux核心引數tcp_syn_retries、tcp_retries1tcp_retries2的原始碼分析

enum { TCP_ESTABLISHED = 1, TCP_SYN_SENT, TCP_SYN_RECV, TCP_FIN_WAIT1, TCP_FIN_WAIT2, TCP_TIME_WAIT, TCP_CLOSE, TCP_CLOSE_WAIT,

網易公開課《Linux核心分析》學習心得-Linux核心如何裝載啟動一個可執行程式

實驗 設定斷點sys_execeve,並繼續 程式碼執行到了SyS_execve。在QEMU中執行exec,可以看到只能出現兩句,沒有完全執行完畢。 設定斷點load_elf_binary和start_thread,並執行,可以看到程式碼停在了

linux核心分析之軟定時器筆記

定時器是一種軟體功能,即允許在將來的某個時刻,函式在給定的時間間隔用完時被呼叫。超時表示與定時器相關的時間間隔已經用完的那個時刻。 linux上考慮兩種型別的定時器,即動態定時和間隔定時器。第一種型別由核心使用,而間隔定時器由程序在使用者態建立。 動態定時器 動態定時的主要

Linux核心分析(六):程序的描述程序的建立

一、Linux中的程序簡析 程序是具有多道程式設計的作業系統的基本概念,關於程序的定義就是程式執行的一個例項,也是系統資源排程的最小單位。如果同一個程式被多個使用者同時執行,那麼這個程式就有多個相對獨立的程序,與此同時他們又共享相同的執行程式碼。在Li

linux核心分析--中斷中斷處理程式

寫在前面:       在前面的這篇文章講解了關於中斷的基本概念,從巨集觀的角度瞭解了中斷的基本知識。從這篇文章中要明白幾點知識       1、中斷是由硬體產生的非同步中斷,而異常則是處理器產生的同步中斷       2、中斷質上是一種特殊的電訊號,由硬體裝置發向處理器,

第7節 Linux核心如何裝載啟動一個可執行程式【Linux核心分析

一、實驗要求 分析exec*函式對應的系統呼叫處理過程 二、實驗內容 理解編譯連結的過程和ELF可執行檔案格式,詳細內容參考本週第一節; 程式設計使用exec*庫函式載入一個可執行檔案,動態連結分為可執行程式裝載時動態連結和執行時動態連結,程式設

Linux核心分析Linux核心如何裝載啟動一個可執行程式

1.編譯連結的過程和ELF可執行檔案格式 從一個原始碼檔案到一個可執行程式檔案大概要經歷如下過程: 以C程式碼為例子,有如下程式碼的一個hello.c檔案 //hello.c #include <stdio.h> int ma

計算機底層知識拾遺(六)理解頁快取page cache地址空間address_space

在這篇計算機底層知識拾遺(五)理解塊IO層 中講了塊快取buffer cache塊快取,這篇說說頁快取page cache以及相關的地址空間address_space的要點。 在Linux 2.4核心中塊快取buffer cache和頁快取page cache是並存的,表現

Linux核心分析之七——Linux核心如何裝載啟動一個可執行程式

作者:姚開健 原創作品轉載請註明出處 《Linux核心分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 1、ELF的檔案格式。 通常我們將程式檔案編譯後得到的目標檔案,在Linux上其格式就是ELF

動態替換Linux核心函數的原理實現

c函數 路徑 pla ges sta images 語句 堆棧 mit 轉載:https://www.ibm.com/developerworks/cn/linux/l-knldebug/ 動態替換Linux核心函數的原理和實現 在調試Linux核心模塊時,有時需要

Linux核心分析第二次作業

  這周學習了《庖丁解牛Linux核心分析》並且學習了實驗樓的相關知識。 在實驗樓的虛擬環境下編寫程式碼: 通過gcc編譯後,使用檢視檔案命令:cat  -n 20189223.c        在vim中,通過“g/\.s

Linux 核心分析及應用

編輯推薦 本書分模組介紹了 Linux 作業系統的核心設計和實現,針對關鍵概念、演算法和資料結構做了重點的講解。同時,對諸多經典應用程式進行了剖析,如 Nginx、Memcached、Redis、LVS 等,講解如何利用作業系統提供的底層支援進行合理的應用設計和實現。 內容簡介 本書由架構師親

Linux核心分析第六次作業

分析system_call中斷處理過程 一、先在實驗樓的虛擬機器中MenuOs增加utsname和utsname-asm指令。 具體實現如下: 1、克隆最新新版本的menu,之後進入menu 2、進入test.c,完成之後make rootfs,使系統自動編譯自動執行 3.設定分割點,用gdb追

Linux核心分析第七次作業

分析Linux核心建立一個新程序的過程 Linux中建立程序一共有三個函式: 1. fork,建立子程序 2. vfork,與fork類似,但是父子程序共享地址空間,而且子程序先於父程序執行。 3. clone,主要用於建立執行緒 程序建立的大概過程 通過之前的學習,我們