I O優化知識

2021-09-11 10:47:37 字數 1130 閱讀 9506

linux記憶體知識:

建立程序時,系統會為每個程序分配乙個4g大小的虛擬位址空間,且每個程序都有3g的使用者空間和1g的核心空間

1.32位作業系統中表示乙個位址需要32bit,因此最大可表示的位址數量為pow(2,32)

2.在同一時刻,乙個cpu中只有乙個程序在執行,cpu只能看見正在執行的程序對應的4g虛擬位址空間,程序間的切換會導致正在使用的虛擬位址的切換

3.3g使用者空間的私有的,1g的核心空間是共有的,且核心空間與物理記憶體空間的對映是位移對映,直接是虛擬位址-3g(可以這麼做是因為對映到物理記憶體卻總是從最低位址0x00000000開始,這也解釋了「1g的核心空間是共有的」),使用者空間與物理記憶體空間的對映方式是分頁或者分段的。

4.由於記憶體分頁,作業系統去獲取資料的時候一般是按照一頁一頁的去獲取。面向記憶體友好的**是可以充分利用這一機制來提高效率的,比如遍歷二維陣列時的方式

當我們在應用程式中呼叫read等操作時,首先到達vfs虛擬檔案系統(這個是具體檔案系統的介面層,為了遮蔽不同檔案系統的差別),如果在此時命中了檔案cache,則會直接獲取到資料,否則會去請求磁碟io,讀取磁碟的資料到記憶體,這一步效率和硬體效率有很大的關係,如圖:

檔案cache的說明:

在 linux 的實現中,檔案 cache 分為兩個層面,一是 page cache,另乙個 buffer cache,每乙個 page cache 包含若干 buffer cache。記憶體管理系統和 vfs 只與 page cache 互動,記憶體管理系統負責維護每項 page cache 的分配和**,同時在使用 memory map 方式訪問時負責建立對映;vfs 負責 page cache 與使用者空間的資料交換。而具體檔案系統則一般只與 buffer cache 互動,它們負責在外圍儲存裝置和 buffer cache 之間交換資料。

參考文章:

linux中虛擬位址

linux記憶體分頁

磁碟io那些事(美團)

linux記憶體

linux核心的檔案cache管理機制

c c 效能優化 I O優化(上)

這節本想直接介紹i o優化的,後來思考一下有必要對常用的i o操作函式的特點介紹一下,這樣要好些。下面就先介紹和i o有關的庫函式 以c99為準 不同的作業系統有不同的檔案管理方式,現行的主要有fat fileallocation table fat32 ntfs new technoly file...

IO效能的優化

一 載入前 1.預讀取,避免後面一下子讀取任務太多 使用預先讀取,分步讀取,避免記憶體峰值突然上公升。預載入 cctexturecache ccspriteframecache ccanimationcache 都可以為其新增乙個 key,後面通過 key索引獲取紋理 精靈或動畫。二 載入時 2.非...

IO流知識補充

再過幾天就要是c 的期末考,沒辦法這幾天只能靜下心來好好看看c 的一些基礎知識 以下就是自己最近複習io流時,獲得的一些新知識。首先,是在中的一些標準輸入輸出流物件 其次,是幾個函式 1.cin.clear 將流 cin中的所有狀態值都重設為有效狀態.通俗點的 流出現錯誤就恢復,不管是遇到檔案結束符...