日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java I/O底層是如何工作的?

瀏覽:33日期:2022-09-06 13:32:29

本博文主要討論I/O在底層是如何工作的。本文服務的讀者,迫切希望了解Java I/O操作是在機器層面如何進行映射,以及應用運行時硬件都做了什么。假定你熟悉基本的I/O操作,比如通過Java I/O API讀寫文件。這些內容不在本文的討論范圍。

Java I/O底層是如何工作的?

 緩存處理和內核vs用戶空間

緩沖與緩沖的處理方式,是所有I/O操作的基礎。術語“輸入、輸出”只對數據移入和移出緩存有意義。任何時候都要把它記在心中。通常,進程執行操作系統的I/O請求包括數據從緩沖區排出(寫操作)和數據填充緩沖區(讀操作)。這就是I/O的整體概念。在操作系統內部執行這些傳輸操作的機制可以非常復雜,但從概念上講非常簡單。我們將在文中用一小部分來討論它。

Java I/O底層是如何工作的?

上圖顯示了一個簡化的“邏輯”圖,它表示塊數據如何從外部源,例如一個磁盤,移動到進程的存儲區域(例如RAM)中。首先,進程要求其緩沖通過read()系統調用填滿。這個系統調用導致內核向磁盤控 制硬件發出一條命令要從磁盤獲取數據。磁盤控制器通過DMA直接將數據寫入內核的內存緩沖區,不需要主CPU進一步幫助。當請求read()操作時,一旦磁盤控制器完成了緩存的填 寫,內核從內核空間的臨時緩存拷貝數據到進程指定的緩存中。

有一點需要注意,在內核試圖緩存及預取數據時,內核空間中進程請求的數據可能已經就緒了。如果這樣,進程請求的數據會被拷貝出來。如果數據不可用,則進程被掛起。內核將把數據讀入內存。

 虛擬內存

你可能已經多次聽說過虛擬內存了。讓我再介紹一下。

所有現代操作系統都使用虛擬內存。虛擬內存意味著人工或者虛擬地址代替物理(硬件RAM)內存地址。虛擬地址有兩個重要優勢:

多個虛擬地址可以映射到相同的物理地址。一個虛擬地址空間可以大于實際可用硬件內存。

在上面介紹中,從內核空間拷貝到最終用戶緩存看起來增加了額外的工作。為什么不告訴磁盤控制器直接發送數據到用戶空間的緩存呢?好吧,這是由虛擬內存實現的。用到了上面的優勢1。

通過將內核空間地址映射到相同的物理地址作為一個用戶空間的虛擬地址,DMA硬件(只能方位物理內存地址)可以填充緩存。這個緩存同時對內核和用戶空間進程可見。

Java I/O底層是如何工作的?

這就消除了內核和用戶空間之間的拷貝,但是需要內核和用戶緩沖區使用相同的頁面對齊方式。緩沖區必須使用的塊大小的倍數磁盤控制器(通常是512字節的磁盤扇區)。操作系統將其內存地址空間劃分為頁面,這是固定大小的字節組。這些內存頁總是磁盤塊大小的倍數和通常為2倍(簡化尋址)。典型的內存頁面大小是1024、2048和4096字節。虛擬和物理內存頁面大小總是相同的。

 內存分頁

為了支持虛擬內存的第2個優勢(擁有大于物理內 存的可尋址空間)需要進行虛擬內存分頁(通常稱為頁交換)。這種機制憑借虛擬內存空間的頁可以持久保存在外部磁盤存儲,從而為其他虛擬頁放入物理內存提供了空間。本質上講,物理內存擔當了分頁區域的緩存。分頁區是磁盤上的空間,內存頁的內容被強迫交換出物理內存時會保存到這里。

調整內存頁面大小為磁盤塊大小的倍數,讓內核可以直接發送指令到磁盤控制器硬件,將內存頁寫到磁盤或者在需要時重新加載。事實證明,所有的磁盤I/O操作都是在頁面級別上完成的。這是數據在現代分頁操作系統上在磁盤與物理內存之間移動的唯一方式。

現代CPU包含一個名為內存管理單元(MMU)的子系統。這 個設備邏輯上位于CPU與物理內存之間。它包含從虛擬地址向物理內存地址轉化的映射信息。當CPU引用一個內存位置時,MMU決定哪些頁需要駐留(通常通過移位或屏蔽地址的某些位)以及轉化虛擬頁號到物理頁號(由硬件實現,速度奇快)。

 面向文件、塊I/O

文件I/O總是發生在文件系統的上下文切換中。文件系統跟磁盤是完全不同的事物。磁盤按段存儲數據,每段512字節。它是硬件設備,對保存的文件語義一無所知。它們只是提供了一定數量的可以保存數據的插槽。從這方面來說,一個磁盤的段與 內存分頁類似。它們都有統一的大小并且是個可尋址的大數組。

另一方面,文件系統是更高層抽象。文件系統是安排和翻譯保存磁盤(或其它可隨機訪問,面向塊的設備)數據的一種特殊方法。你寫的代碼幾乎總是與文件系統交互,而不與磁盤直接交互。文件系統定義了文件名、路徑、文件、文件屬性等抽象。

一個文件系統組織(在硬盤中)了一系列均勻大小的數據塊。有些塊保存元信息,如空閑塊的映射、目錄、索引等。其它塊包含實際的文件數據。單個文件的元信息描述哪些塊包含文件數據、數據結束位置、最后更新時間等。當用戶進程發送請求來讀取文件數據時,文件系統實現準確定位數據在磁盤上的位置。然后采取行動將這些磁盤扇區放入內存中。

文件系統也有頁的概念,它的大小可能與一個基本內存頁面大小相同或者是它的倍數。典型的文件系統頁面大小范圍從2048到8192字節,并且總是一個基本內存頁面大小的倍數。

分頁文件系統執行I/O可以歸結為以下邏輯步驟:

確定請求跨越了哪些文件系統分頁(磁盤段的集合)。磁盤上的文件內容及元數據可能分布在多個文件系統頁面上,這些頁面可能是不連續的。分配足夠多的內核空間內存頁面來保存相同的文件系統頁面。建立這些內存分頁與磁盤上文件系統分頁的映射。對每一個內存分頁產生分頁錯誤。虛擬內存系統陷入分頁錯誤并且調度pagins(頁面調入),通過從磁盤讀取內容來驗證這些頁面。一旦pageins完成,文件系統分解原始數據來提取請求的文件內容或屬性信息。

需要注意的是,這個文件系統數據將像其它內存頁一樣被緩存起來。在隨后的I/O請求中,一些數據或所有文件數據仍然保存在物理內存中,可以直接重用不需要從磁盤重讀。

 文件鎖定

文件加鎖是一種機制,一個進程可以阻止其它進程訪問一個文件或限制其它進程訪問該文件。雖然名為“文件鎖定”,意味著鎖定整個文件(經常做的)。鎖定通常可以在一個更細粒度的水平。隨著粒度下降到字節級,文件的區域通常會被鎖定。鎖與特定文件相關聯,起始于文件的指定字節位置并運行到指定的字節范圍。這一點很重要,因為它允許多個進程協作訪問文件的特定區域而不妨礙別的進程在文件其它位置操作。

文件鎖有兩種形式:共享和獨占。多個共享鎖可以同時在相同的文件區域有效。另一方面,獨占鎖要求沒有其它鎖對請求的區域有效。

 流I/O

并非所有的I/O是面向塊的。還有流I/O,它是管道的原型,必須順序訪問I/O數據流的字節。常見的數據流有TTY(控制臺)設備、打印端口和網絡連接。

數據流通常但不一定比塊設備慢,提供間歇性輸入。大多數操作系統允許在非阻塞模式下工作。允許一個進程檢查數據流的輸入是否可用,不必在不可用時發生阻塞。這種管理允許進程在輸入到達時進行處理,在輸入流空閑時可以執行其他功能。

比非阻塞模式更進一步的是有條件的選擇(readiness selection)。它類似于非阻塞模式(并且通常建立在非阻塞模式基礎上),但是減輕了操作系統檢查流是否就緒準的負擔。操作系統可以被告知觀察流集合,并向進程返回哪個流準備好的指令。這種能力允許進程通過利用操作系統返回 的準備信息,使用通用代碼和單個線程復用多個活動流。這種方式被廣泛用于網絡服務器,以便處理大量的網絡連接。準備選擇對于大容量擴展是至關重要的。

到此為止,對這個非常復雜的話題有一大堆技術術語。

如果你有想法和疑問,請給給我發評論。

學習快樂!!

原文鏈接:howtodoinjava 翻譯:ImportNew

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
另类小说一区二区三区| 久久久国产精品网站| 日韩制服丝袜先锋影音| 99在线精品免费视频九九视| 久久国产影院| 欧美一区在线观看视频| 国产精品色在线网站| 久久久国产精品网站| 国产精品入口久久| 国产女人18毛片水真多18精品| 欧美日本三区| 久久国产中文字幕| 亚洲午夜黄色| 国产精品普通话对白| 石原莉奈在线亚洲三区| 视频一区日韩精品| 久久亚洲黄色| 久久久久久免费视频| 高清av一区| 免费精品视频在线| 亚洲精品伦理| 国产精品亚洲四区在线观看| 国产精品综合色区在线观看| 国产精品一区二区三区av麻| 美腿丝袜亚洲一区| 久久人人97超碰国产公开结果| 婷婷综合网站| 国产精品男女| 国产精品99一区二区| 狠狠操综合网| 亚洲视频国产精品| 日韩在线二区| 亚洲三级观看| 三级久久三级久久久| 久久精品免费看| 国产91精品对白在线播放| 国产精品视区| 国产欧美自拍| 国产日韩电影| 日韩av一区二区在线影视| 国产欧美一区二区三区米奇| 成人一区而且| 777久久精品| 午夜av成人| 国产一区二区三区黄网站| 日本欧美不卡| 四虎精品永久免费| 亚洲国产福利| 男人天堂欧美日韩| 日韩欧美一区二区三区免费观看| 亚洲经典在线| 桃色一区二区| 久久不射网站| 久久av网址| 蜜桃成人av| 奇米亚洲欧美| 久久网站免费观看| 日本午夜精品| 久久国产毛片| 天使萌一区二区三区免费观看| 国产精品日本一区二区三区在线| 欧美日韩黑人| 久久一区视频| 性欧美69xoxoxoxo| 久久精品国产在热久久| 日本欧美在线看| 国产精品成人a在线观看| 婷婷色综合网| 免费一级欧美在线观看视频 | 日韩午夜视频在线| 久久久人人人| 日本精品在线播放| 欧美亚洲日本精品| 欧美一级久久| 亚洲深夜影院| 日韩在线看片| 97精品资源在线观看| 久久精品高清| 另类欧美日韩国产在线| 蜜臀久久99精品久久久久宅男| 欧美国产不卡| 婷婷五月色综合香五月| 999国产精品999久久久久久| 7m精品国产导航在线| 欧美日韩国产传媒| 成人三级高清视频在线看| 亚洲bt欧美bt精品777| 亚洲黑丝一区二区| 日韩精品电影| 国产一区不卡| 国产精品久久久久久av公交车 | 日精品一区二区三区| 极品裸体白嫩激情啪啪国产精品| 国产成人免费| 久久99影视| 国产欧美日韩综合一区在线播放| 久久成人精品| 不卡一区综合视频| 免费高潮视频95在线观看网站| 国产乱码精品一区二区三区四区 | 久久精品欧洲| 国产日韩三级| 日本不卡在线视频| 亚洲九九精品| 深夜日韩欧美| 四虎在线精品| 日韩欧美中文字幕电影| 久色成人在线| 午夜亚洲福利在线老司机| av一区在线| 在线天堂资源www在线污| 亚洲精品高潮| 亚洲另类黄色| 蜜臀久久久久久久| 麻豆91精品| 鲁大师影院一区二区三区| 日韩av一级| 欧美日韩视频免费观看| 国产精品毛片久久| 鲁鲁在线中文| 视频二区不卡| 久久一区二区中文字幕| 久久五月天小说| 欧美日韩国产欧| 黄色成人精品网站| 西西人体一区二区| 丝瓜av网站精品一区二区| 久久国产高清| 亚洲精品一级二级三级| 日韩精品免费一区二区夜夜嗨 | 精品久久视频| 国产videos久久| 国产精品毛片久久| 亚洲天堂1区| 国产一区二区三区精品在线观看| 国产一区二区三区日韩精品| 日韩一区电影| 亚洲激情中文| 在线一区免费观看| 中文在线日韩| 国产精品成人3p一区二区三区| 久久精品免费看| 视频二区不卡| 鲁大师成人一区二区三区| 亚洲精品护士| 蜜臀精品久久久久久蜜臀| 视频在线观看一区| 日韩精品国产欧美| 精品国产亚洲一区二区三区| 黄在线观看免费网站ktv| 亚洲二区视频| 国产精品女主播一区二区三区| 视频一区日韩精品| 久久精品国产999大香线蕉| 精品五月天堂| 91精品国产调教在线观看| 久久亚洲图片| 日韩精品2区| 国产一区导航| 日韩精品视频网站| 精品精品国产三级a∨在线| 天堂网av成人| 在线免费观看亚洲| 卡一卡二国产精品| 欧美亚洲国产精品久久| 亚洲最新av| 精品久久久久久久| 伊人影院久久| 国产日韩欧美三级| 日韩欧美一区二区三区免费看| 伊人影院久久| 国产精品99久久久久久董美香| 日韩免费福利视频| 亚洲精品一级| 精品国产一区二区三区av片| jiujiure精品视频播放| 欧美日韩91| 亚洲先锋成人| 久久激情综合网| 国产精品一区高清| 激情综合网五月| 国产伦精品一区二区三区千人斩| 日韩精品网站| 日韩va亚洲va欧美va久久| 久久精品观看| 国产精品一区二区三区av| 欧洲激情综合| 久久丁香四色| 美女网站久久| 精品视频97| 亚洲精品精选| 国产精品13p| 婷婷久久免费视频| 久久婷婷激情| 国产精成人品2018| 免费日韩精品中文字幕视频在线| 精品一区二区三区在线观看视频| 国产午夜精品一区二区三区欧美| 久久精品国产久精国产| 一区二区不卡|