10029 I O 基礎之緩衝區

2021-07-09 16:42:22 字數 685 閱讀 1922

原文

緩衝區以及緩衝區是如何工作,是所有i/o的基礎。「輸入/輸出」就是把資料移進或移出緩衝區。

程序執行i/o操作,就是向作業系統發出請求,讓它要麼把緩衝區的資料排乾(寫),要麼用資料把緩衝區填滿(讀)。程序使用這一機制處理所有資料進出操作。

從磁碟讀資料到程序記憶體區:

程序使用read()系統呼叫,要求其緩衝區被填滿。核心隨即向磁碟控制硬體發出命令,要求其從磁碟讀取資料。

磁碟控制器把資料直接寫入核心記憶體緩衝區,這一步通過dma完成,無需主cpu 協助。

一旦磁碟控制器把緩衝區裝滿,核心即把資料從核心空間的臨時緩衝區拷貝到程序執行read()呼叫時指定的緩衝區。

使用者空間與核心空間

所有i/o都直接或間接通過核心空間,通過請求頁面排程完成。

當程序請求i/o操作的時候,它執行乙個系統呼叫將控制權移交給核心。核心隨即採取必要步驟,找到程序所需資料,並把資料傳送到使用者空間內指定的緩衝區。如果資料已在核心空間,直接拷貝即可;如果不在核心空間,則程序被掛起,核心著手把資料讀進記憶體



I O 基礎之緩衝區

緩衝區以及緩衝區是如何工作,是所有i o的基礎。輸入 輸出 就是把資料移進或移出緩衝區。程序執行i o操作,就是向作業系統發出請求,讓它要麼把緩衝區的資料排乾 寫 要麼用資料把緩衝區填滿 讀 程序使用這一機制處理所有資料進出操作。從磁碟讀資料到程序記憶體區 程序使用read 系統呼叫,要求其緩衝區被...

後台開發之IO緩衝區管理

linux系統io中write原型為 ssize t write int filedes,const void buff,size t nbytes 當呼叫write寫資料的時候,呼叫完成後write直接返回,但是磁碟是個慢速裝置,作業系統會將資料儲存在核心中的緩衝區中,並負責非同步地將資料寫至磁碟...

後台開發之IO緩衝區管理

linux系統io中write原型為 ssize t write int filedes,const void buff,size t nbytes 當呼叫write寫資料的時候,呼叫完成後write直接返回,但是磁碟是個慢速裝置,作業系統會將資料儲存在核心中的緩衝區中,並負責非同步地將資料寫至磁碟...