日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

對IO概念模糊:計算機IO過程與零拷貝

來源: 責編: 時間:2023-10-08 07:04:51 281觀看
導讀一、前置知識1.1 內存分段現代計算機在加載操作系統、正常啟動后,其內存會主要分成兩大段:內核段用戶段內核段:操作系統本質上是一個計算機的管理程序,該程序相關的所有資源,被存放在內核段中。用戶段:用戶段用來存放各個進

一、前置知識

1.1 內存分段

現代計算機在加載操作系統、正常啟動后,其內存會主要分成兩大段:ovl28資訊網——每日最新資訊28at.com

  • 內核段
  • 用戶段

內核段:ovl28資訊網——每日最新資訊28at.com

操作系統本質上是一個計算機的管理程序,該程序相關的所有資源,被存放在內核段中。ovl28資訊網——每日最新資訊28at.com

用戶段:ovl28資訊網——每日最新資訊28at.com

用戶段用來存放各個進程的數據和指令。ovl28資訊網——每日最新資訊28at.com

根據所訪問的內存段的不同,CPU會處于不同的態,訪問用戶段的時候處于用戶態,訪問內核段的時候處于內核態。ovl28資訊網——每日最新資訊28at.com

1.2 CPU的態

1.2.1 CPU的工作過程

CPU要執行的指令的地址存在寄存器中,指令存放在內存中,而CPU本質上就是一個去內存中根據地址取指令,然后執行指令的硬件。ovl28資訊網——每日最新資訊28at.com

舉一個例子:ovl28資訊網——每日最新資訊28at.com

例如PC寄存器中存放50,CPU讀到存放的50,發出一條取址指令,去取出地址為50的內存單元中的指令,再傳回給CPU。ovl28資訊網——每日最新資訊28at.com

ovl28資訊網——每日最新資訊28at.com

ovl28資訊網——每日最新資訊28at.com

1.4 IO與內存

計算機進行IO的時候,本質上會為每一個IO設備在內存中分配一塊空間,向這塊空間里進行讀寫,即可完成IO。為什么給IO設備分配的內存會是在內核段里喃?主要是基于兩點進行考慮的:ovl28資訊網——每日最新資訊28at.com

  • 安全性
  • 特權操作

1.4.1 安全性:

I/O 操作通常需要與計算機的外部設備(如磁盤、網絡設備等)進行交互,如果允許各個進程自己私自與外部設備進行交互,IO的內存放在各個進程內部,太散了,不是很好進行安全控制,相反,如果將IO的內存放在內核段,就很便于集中管理,可以附加一些安全機制上去。ovl28資訊網——每日最新資訊28at.com

1.4.2 特權操作:

首先IO指令本身就是特權指令,會讓CPU進入內核態,其次進行IO的時候會用到中斷信號,也涉及到特權指令,也要求CPU處于內核態,所以如果IO內存是在內核段中,讓CPU提前進入內核狀態,也避免了后面來回切狀態造成的時間浪費。ovl28資訊網——每日最新資訊28at.com

整個IO在內存中的流轉過程如下:ovl28資訊網——每日最新資訊28at.com

讀的時候磁盤拷貝到內核段、內核段拷貝到用戶段,ovl28資訊網——每日最新資訊28at.com

寫的時候用戶段拷貝到內核段、內核段拷貝到磁盤。ovl28資訊網——每日最新資訊28at.com

一共四次復制。ovl28資訊網——每日最新資訊28at.com

ovl28資訊網——每日最新資訊28at.com

特別說明:ovl28資訊網——每日最新資訊28at.com

我知道其它很多地方這里將圖畫成了這個樣子:ovl28資訊網——每日最新資訊28at.com

ovl28資訊網——每日最新資訊28at.com

之所以能實現這樣的效果是得益于操作系統底層有兩種讀操作:ovl28資訊網——每日最新資訊28at.com

讀取數據:常見的系統調用如 read()(用于文件描述符)或 recv()(用于套接字)用于從文件或套接字中讀取數據。這些系統調用從相應的輸入源(如磁盤、網絡等)讀取數據,并將其復制到應用程序提供的緩沖區中。這種方式涉及了數據的復制,因為數據需要從內核態復制到用戶態緩沖區中。ovl28資訊網——每日最新資訊28at.com

讀取映射:另一種方式是通過內存映射(Memory Mapping)來實現讀取操作。通過將文件或設備的數據映射到進程的內存區域中,應用程序可以直接訪問內存映射區域中的數據,而無需使用傳統的 read() 系統調用。在這種情況下,應用程序可以通過直接讀取內存映射區域中的數據來獲取文件或設備的內容,避免了中間的數據復制。ovl28資訊網——每日最新資訊28at.com

特別說明:ovl28資訊網——每日最新資訊28at.com

還是和上文類似,畫圖的問題。這里為了涵蓋,本地IO和網絡IO兩種情況,內核段沒拆成幾個設備的不同地址空間,但是如果是從磁盤中讀,然后向網絡中寫,是跨了IO設備的,所以中間有個內核段地址間的復制過程,如下圖:ovl28資訊網——每日最新資訊28at.com

ovl28資訊網——每日最新資訊28at.com

三、JAVA中的零拷貝

零拷貝需要進行系統調用才能實現,很明顯要我們手寫實現零拷貝是很底層、很麻煩的,好在JAVA在NIO中封裝了mmap、SendFile兩種零拷貝的API,當我們想在JAVA中使用零拷貝時,直接調API即可。ovl28資訊網——每日最新資訊28at.com

很多同學在NIO中老是搞不明白channel和buffer的關,容易暈,這里博主一句話總結一下:ovl28資訊網——每日最新資訊28at.com

JavaNlO中 的Channel就相當于操作系統中的內核緩沖區,而Buffer就相當于操作系統中的用戶緩沖區。ovl28資訊網——每日最新資訊28at.com

mmap:ovl28資訊網——每日最新資訊28at.com

MappedByteBuffer mappedByteBuffer = new RandomAccessFile(file, "r")                                  .getChannel()                                 .map(FileChannel.MapMode.READ_ONLY, 0, len);

SendFile:ovl28資訊網——每日最新資訊28at.com

sendFile進行網絡傳輸:ovl28資訊網——每日最新資訊28at.com

FileChannel sourceChannel = new RandomAccessFile(sourceFile, "rw").getChannel();SocketChannel socketChannel = SocketChannel.open(sa);sourceChannel.transferTo(0, sourceChannel.size(), socketChannel);

sendFile進行文件拷貝:ovl28資訊網——每日最新資訊28at.com

try (FileChannel srcChannel = new FileInputStream(src).getChannel();     FileChannel targetChannel = new FileInputStream(target).getChannel()) {     srcChannel.transferTo(0, srcChannel.size(), targetChannel ); } catch (IOException e) {     e.printStackTrace(); }


ovl28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12196-0.html對IO概念模糊:計算機IO過程與零拷貝

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 深入了解快速排序:原理、性能分析與 Java 實現

下一篇: 三個殺手級VS Code插件

標簽:
  • 熱門焦點
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • 多線程開發帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結束訪問某一數據期間,該數據被其他的線程所修改,那么對于當前線程而言,該線程
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 電視息屏休眠仍有網絡上傳 愛奇藝被質疑“薅消費者羊毛”

    記者丨寧曉敏 見習生丨汗青出品丨鰲頭財經(theSankei) 前不久,愛奇藝發布了一份亮眼的一季報,不僅營收和會員營收創造歷史最佳表現,其運營利潤也連續6個月實現增長。自去年年初
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元“人在職場,應該選擇什么樣的著裝?”近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 華為和江淮汽車合作開發百萬元問界MPV?雙方回應來了

    8月1日消息,郭明錤今天在社交平臺發文稱,華為正在和江淮汽車合作,開發售價在100萬元的問界MPV,預計在2024年第2季度量產,銷量目標為上市首年交付5萬輛。
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統和圖形事業部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
Top 主站蜘蛛池模板: 宝清县| 晋江市| 贵阳市| 林甸县| 比如县| 密云县| 扬中市| 西盟| 织金县| 南川市| 措美县| 平塘县| 石楼县| 鹤山市| 同仁县| 赤壁市| 寻甸| 兰考县| 克东县| 铜川市| 资兴市| 兴山县| 手游| 桑日县| 河曲县| 阿图什市| 桂平市| 河北省| 武清区| 盐池县| 阜城县| 宜城市| 苏尼特右旗| 晋城| 南雄市| 九台市| 滨州市| 吴川市| 佛冈县| 和田县| 衡阳市|