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

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

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

 緩存處理和內(nèi)核vs用戶空間

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

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

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

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

 虛擬內(nèi)存

你可能已經(jīng)多次聽說過虛擬內(nèi)存了。讓我再介紹一下。

所有現(xiàn)代操作系統(tǒng)都使用虛擬內(nèi)存。虛擬內(nèi)存意味著人工或者虛擬地址代替物理(硬件RAM)內(nèi)存地址。虛擬地址有兩個重要優(yōu)勢:

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

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

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

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

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

 內(nèi)存分頁

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

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

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

 面向文件、塊I/O

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

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

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

文件系統(tǒng)也有頁的概念,它的大小可能與一個基本內(nèi)存頁面大小相同或者是它的倍數(shù)。典型的文件系統(tǒng)頁面大小范圍從2048到8192字節(jié),并且總是一個基本內(nèi)存頁面大小的倍數(shù)。

分頁文件系統(tǒng)執(zhí)行I/O可以歸結(jié)為以下邏輯步驟:

確定請求跨越了哪些文件系統(tǒng)分頁(磁盤段的集合)。磁盤上的文件內(nèi)容及元數(shù)據(jù)可能分布在多個文件系統(tǒng)頁面上,這些頁面可能是不連續(xù)的。分配足夠多的內(nèi)核空間內(nèi)存頁面來保存相同的文件系統(tǒng)頁面。建立這些內(nèi)存分頁與磁盤上文件系統(tǒng)分頁的映射。對每一個內(nèi)存分頁產(chǎn)生分頁錯誤。虛擬內(nèi)存系統(tǒng)陷入分頁錯誤并且調(diào)度pagins(頁面調(diào)入),通過從磁盤讀取內(nèi)容來驗(yàn)證這些頁面。一旦pageins完成,文件系統(tǒng)分解原始數(shù)據(jù)來提取請求的文件內(nèi)容或?qū)傩孕畔ⅰ?p>需要注意的是,這個文件系統(tǒng)數(shù)據(jù)將像其它內(nèi)存頁一樣被緩存起來。在隨后的I/O請求中,一些數(shù)據(jù)或所有文件數(shù)據(jù)仍然保存在物理內(nèi)存中,可以直接重用不需要從磁盤重讀。

 文件鎖定

文件加鎖是一種機(jī)制,一個進(jìn)程可以阻止其它進(jìn)程訪問一個文件或限制其它進(jìn)程訪問該文件。雖然名為“文件鎖定”,意味著鎖定整個文件(經(jīng)常做的)。鎖定通常可以在一個更細(xì)粒度的水平。隨著粒度下降到字節(jié)級,文件的區(qū)域通常會被鎖定。鎖與特定文件相關(guān)聯(lián),起始于文件的指定字節(jié)位置并運(yùn)行到指定的字節(jié)范圍。這一點(diǎn)很重要,因?yàn)樗试S多個進(jìn)程協(xié)作訪問文件的特定區(qū)域而不妨礙別的進(jìn)程在文件其它位置操作。

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

 流I/O

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

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

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

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

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

學(xué)習(xí)快樂?。?/p>

原文鏈接:howtodoinjava 翻譯:ImportNew

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
综合国产精品| 成人综合一区| 桃色一区二区| 日本久久综合| 日韩1区2区| 国产精品99视频| 日韩激情av在线| 69堂精品视频在线播放| 国产精品夜夜夜| 久久精品国产一区二区| 丁香六月综合| 蜜桃视频欧美| 首页国产欧美久久| 日本亚洲视频在线| 久久av中文| 日韩欧美另类一区二区| 激情婷婷综合| 一区二区三区国产在线| 欧美日韩1区2区3区| 丰满少妇一区| 婷婷久久一区| 日韩天堂av| 日韩国产欧美在线播放| 国产精品高清一区二区| 国产91在线播放精品| 99久久夜色精品国产亚洲狼 | caoporn视频在线| 亚洲国产专区校园欧美| 免费看精品久久片| 国产精品成人自拍| 香蕉成人av| 亚洲欧洲日韩精品在线| 麻豆精品新av中文字幕| 国产成人精品三级高清久久91 | 精品一区二区三区亚洲| 日韩中文视频| 免费观看在线综合色| 欧美一区成人| 欧美13videosex性极品| 免费在线看一区| 久久天堂影院| 9色国产精品| 国产激情欧美| 亚洲天堂久久| 欧美一区成人| 天堂av在线| 亚洲精品成人一区| 国产精品网在线观看| 久久九九精品| 日韩欧美高清一区二区三区| 精品久久亚洲| 久久一二三区| 国产一区三区在线播放| 亚洲一区不卡| 国产一区二区三区四区二区| aa国产精品| 麻豆国产精品一区二区三区| 欧美精品自拍| 另类综合日韩欧美亚洲| 老鸭窝毛片一区二区三区| 久久99精品久久久野外观看| 一区在线视频观看| 国产亚洲一卡2卡3卡4卡新区| 久久久久久久久99精品大| 日韩高清中文字幕一区| 蜜桃av.网站在线观看| 日韩欧美2区| 欧美亚洲激情| 国产在线视频欧美一区| 日本不卡一区二区三区| 久久国产日韩| 久久av网址| 日韩在线电影| 日韩一区二区免费看| 国产精品久久观看| 日本va欧美va欧美va精品| 国产精品7m凸凹视频分类| 免费在线播放第一区高清av| 日韩亚洲精品在线| 日韩国产欧美一区二区| 欧美一级二级视频| 久久成人亚洲| 欧美亚洲在线日韩| 国产精品久久久久久久久妇女| 欧美日本久久| 亚洲精品伊人| 国产精品呻吟| 欧美二区视频| 日本精品不卡| 成人精品动漫一区二区三区| 国产视频一区二| 亚洲香蕉久久| 欧美粗暴jizz性欧美20| 日韩免费久久| 精品精品99| 国产精品v亚洲精品v日韩精品| 亚洲综合婷婷| 丝袜亚洲另类欧美| 亚洲精华国产欧美| 黑丝一区二区| 亚洲经典在线| 好看不卡的中文字幕| 激情欧美日韩一区| 91精品国产成人观看| 日韩精品诱惑一区?区三区| 成人免费一区| 国际精品欧美精品| 久久精品国产精品亚洲毛片| 欧美视频精品全部免费观看| 亚洲精品美女91| 亚洲免费中文| 亚洲欧美日韩专区| 国产亚洲精品v| 国产在线日韩| 1024精品久久久久久久久| 亚洲91精品| 成人看片网站| 久久久久国产一区二区| 欧美成人精品三级网站| 国产一区二区视频在线看| 国产一区不卡| 亚洲性色av| 亚洲日本网址| 99精品一区| 午夜日韩av| 在线免费观看亚洲| 亚洲人成高清| 欧美日韩1区2区3区| 国产精品久久亚洲不卡| 国产精品成人**免费视频| 久久尤物视频| 成人一区不卡| 久久久人人人| 日韩av一级| 影音先锋久久| 亚洲乱码视频| 国产精品一区二区av日韩在线| 国产日韩免费| 精品高清久久| 久久婷婷久久| 免费不卡在线视频| 青青国产精品| 国产中文欧美日韩在线| 999国产精品视频| 国产精品美女| 日韩av不卡一区二区| 麻豆成人91精品二区三区| 亚洲国产成人二区| 激情综合自拍| 日韩在线成人| 国产成人精品一区二区免费看京| 天堂日韩电影| 日韩在线观看一区二区| 欧美久久久网站| 国产精品99久久精品| 国产一区二区三区自拍| 亚洲精品视频一二三区| 久久精品资源| 亚洲一级影院| 欧美一区二区三区久久精品| 日产午夜精品一线二线三线| 黄色精品网站| 日韩av影院| 午夜影院一区| 老牛影视一区二区三区| 国产精品**亚洲精品| 亚洲国产专区校园欧美| 日本亚洲欧洲无免费码在线| 国产精品不卡| 中文字幕视频精品一区二区三区| 国产精品久久久免费| 99久久www免费| 亚洲专区视频| 国产aa精品| 亚洲精品观看| 日产精品一区| 日本国产欧美| 久久精品国语| 国产精品一线天粉嫩av| 91精品成人| 麻豆精品久久| 在线观看一区| 麻豆网站免费在线观看| 在线免费观看亚洲| 日本在线高清| 老司机久久99久久精品播放免费| 国产精品久一| 国产精品日本| 国产a亚洲精品| 亚洲精品四区| 欧美日韩视频网站| 日韩av黄色在线| 欧美日韩高清| 久久久精品国产**网站| 国产亚洲毛片在线| 日韩88av| 国产剧情一区| 一区久久精品| 色乱码一区二区三区网站| 日本不卡的三区四区五区|