緩衝區整理

2022-03-27 14:33:01 字數 1312 閱讀 3172

linux,unix在核心中設有 緩衝區高速緩衝或頁面高速緩衝,大多數磁碟i/o都通過緩衝進行,採用延遲寫技術。

sync:將所有修改過的快快取區排入寫佇列,然後返回,並不等待實際寫磁碟操作結束

fsync:只對有檔案描述符制定的單一檔案起作用,並且等待些磁碟操作結束,然後返回。

fdatasync:類似fsync,但它只影響檔案的資料部分。fsync還會同步更新檔案的屬性。

fflush:標準i/o函式(如:fread,fwrite)會在記憶體建立緩衝,該函式重新整理記憶體緩衝,將內容寫入核心緩衝,要想將其寫入磁碟,還需要呼叫fsync。(先呼叫fflush後呼叫fsync,否則不起作用)

傳統的u n i x實現在核心中設有緩衝儲存器,大多數磁碟i / o都通過快取進行。當將資料寫

到檔案上時,通常該資料先由核心複製到快取中,如果該快取尚未寫滿,則並不將其排入輸出

佇列,而是等待其寫滿或者當核心需要重用該快取以便存放其他磁碟塊資料時,再將該快取排

入輸出佇列,然後待其到達隊首時,才進行實際的i / o操作。這種輸出方式被稱之為延遲寫

(delayed write)(bach 〔1 9 8 6〕第3章詳細討論了延遲寫)。延遲寫減少了磁碟讀寫次數,但是

卻降低了檔案內容的更新速度,使得欲寫到檔案中的資料在一段時間內並沒有寫到磁碟上。當

系統發生故障時,這種延遲可能造成檔案更新內容的丟失。為了保證磁碟上實際檔案系統與緩

存中內容的一致性,u n i x系統提供了s y n c和f s y n c兩個系統呼叫函式。

#include

void sync(void);

int fsync(intf i l e d e s) ;

返回:若成功則為0,若出錯則為-1

s y n c只是將所有修改過的塊的快取排入寫佇列,然後就返回,它並不等待實際i / o操作結束。

系統精靈程序(通常稱為u p d a t e )一般每隔3 0秒呼叫一次s y n c函式。這就保證了定期重新整理內

核的塊快取。命令s y n c ( 1 )也呼叫s y n c函式。

函式f s y n c只引用單個檔案(由檔案描述符f i l e d e s指定),它等待i / o結束,然後返回。f s y n c可

用於資料庫這樣的應用程式,它確保修改過的塊立即寫到磁碟上。比較一下f s y n c和o _ s y n c標

志(見3 . 1 3節)。當呼叫f s y n c時,它更新檔案的內容,而對於o _ s y n c,則每次對檔案呼叫w r i t e

函式時就更新檔案的內容。

c庫緩衝-----fflush---------〉核心緩衝--------fsync-----〉磁碟

輸入緩衝區與輸出緩衝區

本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...

使用者程序緩衝區和核心緩衝區

常常聽到有程式設計師會跟你討論 我們在讀寫檔案的時候,系統是有快取的 但實際上有一部分人把使用者程序緩衝區和系統空間的緩衝區的概念混淆了,包括這兩種緩衝區的用法和所要解決的問題,還有其它類似的概念。本文就來區分一下不同的緩衝區概念 主要針對類unix平台 使用者程序和作業系統的關係 首先我用一張圖來...

php 緩衝區,PHP的輸出緩衝區

1 什麼是緩衝區?緩衝區的作用是把輸入或者輸出的內容先放進記憶體,而不顯示或者讀取,最本質的作用就是協調高速cpu和相對緩慢的io裝置 磁碟等 的運作。2 php在執行的時候,在什麼地方有用到緩衝區?當執行php的時候,如果碰到了echo print r之類的會輸出資料的 php就會將要輸出的資料放...