作業系統中關於將資料從磁碟傳送網路過程中發生的動作

2021-08-17 21:03:06 字數 985 閱讀 9927

純粹作為在netty課程中關於零拷貝的筆記輸出,各位看官勿噴!

在linux作業系統中,jvm在使用者空間下向核心空間傳送read命令,並切換至核心態,核心向硬碟燈其他硬體裝置讀取對應的資料至核心緩衝當中,這裡就產生了第一次資料拷貝;

資料準備完畢之後,作業系統由核心態轉到使用者態,並將核心緩衝中的資料拷貝至使用者空間的緩衝區當中,這裡就產生了第二次資料拷貝

;當資料拷貝完成之後,使用者空間向核心傳送write命令,並且

換至核心態

,將資料從使用者空間拷貝到核心緩衝區,

這裡就產生了

第三次資料拷貝

,當資料拷貝完成之後,核心需要將資料從核心緩衝拷貝至socket緩衝區,

並切換至使用者態

,這就產生了

第四次資料拷貝

;最後當socket緩衝資料完畢之後,會將資料拷貝至協議引擎,並傳送至網路,這就產生了

第五次資料拷貝;

而在當前的描述過程中可以看出,使用者空間中的緩衝區僅僅作為了乙個資料媒介,並沒有發揮任何的作用,這樣就造成了一些不必要的資料拷貝以及效能丟失,所以jvm利用作業系統的另乙個底層命令,將不必要的操作進行優化。

在linux作業系統中,jvm在使用者空間下向核心空間傳送sendfile命令,並且換至核心態

,核心從硬體中讀取資料至核心緩衝區,這就產生了

第一次資料拷貝

;當資料在核心空間準備完成之後,核心直接將資料拷貝至socket緩衝區,這就產生了

第二次資料拷貝,

並從核心態切換至使用者態

;當socket緩衝區的資料準備完成之後,將資料拷貝至協議引擎,並傳送至網路,這就產生了

第三次資料拷貝

;隨著作業系統發展,人們發現,其實在核心中發生一次拷貝也是可以省略的,即(將核心緩衝區的資料拷貝至socket緩衝區),它只是將核心緩衝區的描述符寫入socket緩衝區,而協議引擎中的資料通過核心緩衝區和socket緩衝區進行gather操作,即完成資料的拷貝,這樣就免去了一次資料拷貝,實現了真正意義上的零拷貝。

作業系統中磁碟排程演算法詳解

磁碟排程演算法 1 先來先服務 2 最短尋道時間優先 3 電梯演算法 4 單向掃瞄排程演算法 1 磁碟排程 當多個訪盤請求在等待時,採用一定的策略,對這些請求的服務順序調整安排,旨在降低平均磁碟服務時 間,達到公平 高效。公平 乙個i 0請求在有限時間內滿足 高效 減少裝置機械運動所帶來的時間浪費 ...

36 作業系統中磁碟的排程演算法

1.先來先服務 優點 簡單 公平。缺點 效率低。這個問題很難解決 公平的社會效率不高,效率高的社會往往不是那麼公平 資本主義就是後者,但是理想的社會主義社會應該是在不需要效率的情況下實現的 2.最短尋道時間優先 優點 改善了磁碟的平均服務時間,畢竟花在尋道的時間少了 缺點 尋道時間長的長期得不到服務...

作業系統中的協議棧是如何處理資料傳送請求的

一 建立套接字 協議棧內部有一塊用於存放控制資訊的記憶體空間,這裡記錄了用於控制通訊操作的控制資訊。套接字本質上是乙個概念,沒有實體,為了便於理解,我們可以把控制資訊當做是套接字的實體。應用程式socket申請建立套接字,在這個過程中,協議棧會分配乙個用於存放乙個套接字的記憶體空間 因為用於記錄套接...