精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

頁面緩存、內存和文件之間的那些事

系統 Linux Windows
上一篇文章中我們學習了內核怎么為一個用戶進程 管理虛擬內存,而沒有提及文件和 I/O。這一篇文章我們將專門去講這個重要的主題 —— 頁面緩存。文件和內存之間的關系常常很不好去理解,而它們對系統性能的影響卻是非常大的。

[[225278]]

上一篇文章中我們學習了內核怎么為一個用戶進程 管理虛擬內存,而沒有提及文件和 I/O。這一篇文章我們將專門去講這個重要的主題 —— 頁面緩存。文件和內存之間的關系常常很不好去理解,而它們對系統性能的影響卻是非常大的。

在面對文件時,有兩個很重要的問題需要操作系統去解決。***個是相對內存而言,慢的讓人發狂的硬盤驅動器,尤其是磁盤尋道。第二個是需要將文件內容一次性地加載到物理內存中,以便程序間共享文件內容。如果你在 Windows 中使用 進程瀏覽器 去查看它的進程,你將會看到每個進程中加載了大約 ~15MB 的公共 DLL。我的 Windows 機器上現在大約運行著 100 個進程,因此,如果不共享的話,僅這些公共的 DLL 就要使用高達 ~1.5 GB 的物理內存。如果是那樣的話,那就太糟糕了。同樣的,幾乎所有的 Linux 進程都需要 ld.so 和 libc,加上其它的公共庫,它們占用的內存數量也不是一個小數目。

幸運的是,這兩個問題都用一個辦法解決了:頁面緩存 —— 保存在內存中的頁面大小的文件塊。為了用圖去說明頁面緩存,我捏造出一個名為 render 的 Linux 程序,它打開了文件 scene.dat,并且一次讀取 512 字節,并將文件內容存儲到一個分配到堆中的塊上。***次讀取的過程如下:

Reading and the page cache

Reading and the page cache

  1. render 請求 scene.dat 從位移 0 開始的 512 字節。
  2. 內核搜尋頁面緩存中 scene.dat 的 4kb 塊,以滿足該請求。假設該數據沒有緩存。
  3. 內核分配頁面幀,初始化 I/O 請求,將 scend.dat 從位移 0 開始的 4kb 復制到分配的頁面幀。
  4. 內核從頁面緩存復制請求的 512 字節到用戶緩沖區,系統調用 read() 結束。

讀取完 12KB 的文件內容以后,render 程序的堆和相關的頁面幀如下圖所示:

Non-mapped file read

Non-mapped file read

它看起來很簡單,其實這一過程做了很多的事情。首先,雖然這個程序使用了普通的讀取(read)調用,但是,已經有三個 4KB 的頁面幀將文件 scene.dat 的一部分內容保存在了頁面緩存中。雖然有時讓人覺得很驚奇,但是,普通的文件 I/O 就是這樣通過頁面緩存來進行的。在 x86 架構的 Linux 中,內核將文件認為是一系列的 4KB 大小的塊。如果你從文件中讀取單個字節,包含這個字節的整個 4KB 塊將被從磁盤中讀入到頁面緩存中。這是可以理解的,因為磁盤通常是持續吞吐的,并且程序一般也不會從磁盤區域僅僅讀取幾個字節。頁面緩存知道文件中的每個 4KB 塊的位置,在上圖中用 #0#1 等等來描述。Windows 使用 256KB 大小的視圖view,類似于 Linux 的頁面緩存中的頁面page

不幸的是,在一個普通的文件讀取中,內核必須拷貝頁面緩存中的內容到用戶緩沖區中,它不僅花費 CPU 時間和影響 CPU 緩存在復制數據時也浪費物理內存。如前面的圖示,scene.dat 的內存被存儲了兩次,并且,程序中的每個實例都用另外的時間去存儲內容。我們雖然解決了從磁盤中讀取文件緩慢的問題,但是在其它的方面帶來了更痛苦的問題。內存映射文件是解決這種痛苦的一個方法:

Mapped file read

Mapped file read

當你使用文件映射時,內核直接在頁面緩存上映射你的程序的虛擬頁面。這樣可以顯著提升性能:Windows 系統編程 報告指出,在相關的普通文件讀取上運行時性能提升多達 30% ,在 Unix 環境中的高級編程 的報告中,文件映射在 Linux 和 Solaris 也有類似的效果。這取決于你的應用程序類型的不同,通過使用文件映射,可以節約大量的物理內存。

對高性能的追求是永恒不變的目標,測量是很重要的事情,內存映射應該是程序員始終要使用的工具。這個 API 提供了非常好用的實現方式,它允許你在內存中按字節去訪問一個文件,而不需要為了這種好處而犧牲代碼可讀性。在一個類 Unix 的系統中,可以使用 mmap 查看你的 地址空間,在 Windows 中,可以使用 CreateFileMapping,或者在高級編程語言中還有更多的可用封裝。當你映射一個文件內容時,它并不是一次性將全部內容都映射到內存中,而是通過 頁面故障 來按需映射的。在 獲取 需要的文件內容的頁面幀后,頁面故障句柄 映射你的虛擬頁面 到頁面緩存上。如果一開始文件內容沒有緩存,這還將涉及到磁盤 I/O。

現在出現一個突發的狀況,假設我們的 render 程序的***一個實例退出了。在頁面緩存中保存著 scene.dat 內容的頁面要立刻釋放掉嗎?人們通常會如此考慮,但是,那樣做并不是個好主意。你應該想到,我們經常在一個程序中創建一個文件,退出程序,然后,在第二個程序去使用這個文件。頁面緩存正好可以處理這種情況。如果考慮更多的情況,內核為什么要清除頁面緩存的內容?請記住,磁盤讀取的速度要慢于內存 5 個數量級,因此,***一個頁面緩存是一件有非常大收益的事情。因此,只要有足夠大的物理內存,緩存就應該保持全滿。并且,這一原則適用于所有的進程。如果你現在運行 render 一周后, scene.dat 的內容還在緩存中,那么應該恭喜你!這就是什么內核緩存越來越大,直至達到***限制的原因。它并不是因為操作系統設計的太“垃圾”而浪費你的內存,其實這是一個非常好的行為,因為,釋放物理內存才是一種“浪費”。(LCTT 譯注:釋放物理內存會導致頁面緩存被清除,下次運行程序需要的相關數據,需要再次從磁盤上進行讀取,會“浪費” CPU 和 I/O 資源)***的做法是盡可能多的使用緩存。

由于頁面緩存架構的原因,當程序調用 write() 時,字節只是被簡單地拷貝到頁面緩存中,并將這個頁面標記為“臟”頁面。磁盤 I/O 通常并不會立即發生,因此,你的程序并不會被阻塞在等待磁盤寫入上。副作用是,如果這時候發生了電腦死機,你的寫入將不會完成,因此,對于至關重要的文件,像數據庫事務日志,要求必須進行 fsync()(仍然還需要去擔心磁盤控制器的緩存失敗問題),另一方面,讀取將被你的程序阻塞,直到數據可用為止。內核采取預加載的方式來緩解這個矛盾,它一般提前預讀取幾個頁面并將它加載到頁面緩存中,以備你后來的讀取。在你計劃進行一個順序或者隨機讀取時(請查看 madvise()readahead()Windows 緩存提示 ),你可以通過提示hint幫助內核去調整這個預加載行為。Linux 會對內存映射的文件進行 預讀取,但是我不確定 Windows 的行為。當然,在 Linux 中它可能會使用 O_DIRECT 跳過預讀取,或者,在 Windows 中使用 NO_BUFFERING 去跳過預讀,一些數據庫軟件就經常這么做。

一個文件映射可以是私有的,也可以是共享的。當然,這只是針對內存中內容的更新而言:在一個私有的內存映射上,更新并不會提交到磁盤或者被其它進程可見,然而,共享的內存映射,則正好相反,它的任何更新都會提交到磁盤上,并且對其它的進程可見。內核使用寫時復制copy on write(CoW)機制,這是通過頁面表條目page table entry(PTE)來實現這種私有的映射。在下面的例子中,render 和另一個被稱為 render3d 的程序都私有映射到 scene.dat 上。然后 render 去寫入映射的文件的虛擬內存區域:

The Copy-On-Write mechanism

The Copy-On-Write mechanism

  1. 兩個程序私有地映射 scene.dat,內核誤導它們并將它們映射到頁面緩存,但是使該頁面表條目只讀。
  2. render 試圖寫入到映射 scene.dat 的虛擬頁面,處理器發生頁面故障。
  3. 內核分配頁面幀,復制 scene.dat 的第二塊內容到其中,并映射故障的頁面到新的頁面幀。
  4. 繼續執行。程序就當做什么都沒發生。

上面展示的只讀頁面表條目并不意味著映射是只讀的,它只是內核的一個用于共享物理內存的技巧,直到盡可能的***一刻之前。你可以認為“私有”一詞用的有點不太恰當,你只需要記住,這個“私有”僅用于更新的情況。這種設計的重要性在于,要想看到被映射的文件的變化,其它程序只能讀取它的虛擬頁面。一旦“寫時復制”發生,從其它地方是看不到這種變化的。但是,內核并不能保證這種行為,因為它是在 x86 中實現的,從 API 的角度來看,這是有意義的。相比之下,一個共享的映射只是將它簡單地映射到頁面緩存上。更新會被所有的進程看到并被寫入到磁盤上。最終,如果上面的映射是只讀的,頁面故障將觸發一個內存段失敗而不是寫到一個副本。

動態加載庫是通過文件映射融入到你的程序的地址空間中的。這沒有什么可奇怪的,它通過普通的 API 為你提供與私有文件映射相同的效果。下面的示例展示了映射文件的 render 程序的兩個實例運行的地址空間的一部分,以及物理內存,嘗試將我們看到的許多概念綜合到一起。

Mapping virtual memory to physical memory

Mapping virtual memory to physical memory

這是內存架構系列的第三部分的結論。我希望這個系列文章對你有幫助,對理解操作系統的這些主題提供一個很好的思維模型。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2019-07-15 15:37:31

頁面緩存內存

2022-07-08 15:09:26

Linux

2021-05-17 08:18:35

Java內存模型JMM

2018-03-01 15:03:11

2019-11-19 14:48:00

Kafka文件存儲

2014-06-06 16:08:17

初志科技

2020-07-29 08:14:59

云計算云遷移IT

2011-09-19 15:40:35

2013-03-12 10:19:20

計算機內存芯片數據

2011-05-19 16:47:50

軟件測試

2012-05-01 08:06:49

手機

2012-05-31 09:53:38

IT風云15年

2024-02-04 17:03:30

2017-05-15 21:50:54

Linux引號

2015-08-20 09:17:36

Java線程池

2015-08-13 10:54:46

2021-08-11 21:46:47

MySQL索引join

2015-09-14 09:28:47

2017-03-08 08:53:44

Git命令 GitHub

2012-10-08 11:55:05

點贊
收藏

51CTO技術棧公眾號

国产a久久麻豆| 亚洲香蕉视频| 国产亚洲综合性久久久影院| 久久综合久中文字幕青草| 国产免费观看高清视频| 99久久久国产精品无码免费| 欧美色女视频| 色先锋资源久久综合| 国产福利久久精品| 久久久久久久久久网站| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 女女色综合影院| 久久激情中文| 国产视频精品在线| 国产成人无码精品久久久性色| 精品国产一级片| 一区二区电影| 91精品国产高清一区二区三区| 亚洲综合第一| 亚洲天堂手机在线| 日韩欧美二区| 在线播放国产精品二区一二区四区| 亚洲欧洲日韩综合二区| 欧美日韩 一区二区三区| 国产探花一区在线观看| 色88888久久久久久影院按摩| 免费在线成人av| 人人爽人人爽人人片av| 欧美极品中文字幕| 在线精品视频一区二区三四| 日韩久久不卡| 中文字幕一区二区三区四区视频 | 国产麻豆精品在线观看| 蜜臀久久99精品久久久久久宅男 | 久久精品国产91精品亚洲| 美女少妇一区二区| 黄色一级大片在线免费看产| 国内久久精品视频| 欧美日本在线视频中文字字幕| 久久av一区二区三| 蜜桃视频在线观看免费视频| 久久久久亚洲蜜桃| 国产日韩视频在线观看| 强行糟蹋人妻hd中文| 噜噜噜天天躁狠狠躁夜夜精品| 色系网站成人免费| 免费看av软件| 神宫寺奈绪一区二区三区| 亚洲免费综合| 日韩亚洲欧美中文在线| 少妇丰满尤物大尺度写真| av人人综合网| 国产欧美日韩精品一区| 亚洲r级在线观看| 国产性xxxx高清| sdde在线播放一区二区| 日韩精品专区在线| 成年人观看网站| 免费黄色网址在线观看| 不卡欧美aaaaa| 国产精品中文字幕在线观看| 欧美日韩精品一区二区三区视频播放 | 日韩欧美在线观看视频| 中文字幕一区二区三区在线乱码 | 成人av综合一区| 国产精品黄色影片导航在线观看| 黄视频网站免费看| 免费看av成人| 日韩欧美中文一区| 91视频免费版污| ****av在线网毛片| 中文字幕一区二区在线播放| 国产亚洲情侣一区二区无| 午夜视频网站在线观看| 亚洲日韩成人| 日韩中文理论片| 久久久久成人精品无码中文字幕| 久久久国产精品网站| 亚洲福利电影网| 午夜一区二区三区| 性感美女福利视频| 国产精品乡下勾搭老头1| 国产精品免费在线免费 | 成人综合网网址| 国产午夜麻豆影院在线观看| 欧美性色综合| 播播国产欧美激情| 亚洲av成人无码久久精品| 粉嫩的18在线观看极品精品| 91麻豆精品国产91久久久久久| 免费无码av片在线观看| 肉体视频在线| 亚洲人吸女人奶水| 五月天色一区| 免费黄网站在线观看| www.在线欧美| 国产精品日韩一区二区三区| 99久久精品日本一区二区免费| 麻豆精品久久精品色综合| 欧洲午夜精品久久久| 影音先锋亚洲天堂| 亚洲国产高清一区二区三区| 色综合久久久久久中文网| 国产色无码精品视频国产| 日韩欧美二区| 日韩一区二区久久久| 亚洲一级片在线播放| 国产精品一在线观看| 日韩精品在线免费| 精品无码一区二区三区| 亚洲亚洲免费| 亚洲人成人99网站| 国精产品一区二区三区| 国产精品一区高清| 这里只有精品在线观看| www成人啪啪18软件| 91日韩欧美| 麻豆国产精品va在线观看不卡| www.av成人| 欧美国产高清| 韩日欧美一区二区| 成人午夜视频精品一区| 每日更新成人在线视频| 国产精品视频在线播放| 91国产精品一区| 粉嫩嫩av羞羞动漫久久久| 国产精品日本一区二区 | 中文欧美在线视频| 日本成人精品视频| 午夜欧美精品| 韩国精品美女www爽爽爽视频| 日韩精品在线免费看| 美女视频一区免费观看| 国产在线精品一区免费香蕉| 精品久久久久中文慕人妻| 成人黄色一级视频| 欧洲久久久久久| 国产婷婷视频在线| 亚洲国产aⅴ天堂久久| 国产主播在线看| 国产美女久久| 亚洲成人精品av| 最新中文字幕av| 68国产成人综合久久精品| 久久久久久久久久久免费| 亚洲成人av影片| 韩日精品视频一区| 久久99导航| 日本最新在线视频| 亚洲激情成人在线| 日韩 欧美 高清| 国产亚洲高清在线观看| 亚洲激情成人网| 91导航在线观看| 国模大胆一区二区三区| 国产精品成人一区二区| 午夜精品在线播放| 国产喂奶挤奶一区二区三区 | 一本色道久久综合亚洲精品不| 国产精品白丝jk喷水视频一区| 成人av无码一区二区三区| 2023国产精品自拍| 成人污网站在线观看| 写真福利精品福利在线观看| 精品久久久久久综合日本欧美| 久久成人激情视频| 激情久久久久久久| 国产欧美日韩91| 牛牛热在线视频| 亚洲激情图片一区| 污版视频在线观看| 日韩超碰人人爽人人做人人添| 久久成人精品一区二区三区| 午夜久久久久久久久久影院| 成人av在线电影| 色爽爽爽爽爽爽爽爽| 99久久精品一区二区成人| 日韩av在线一区二区| 欧美日韩在线视频免费| 久久成人综合网| 日韩久久久久久久| 爱情电影社保片一区| 精品99999| 青青草国产在线观看| 久久成人免费电影| 日韩片电影在线免费观看| 亚洲欧美一区二区三区| 亚洲成人av中文字幕| 激情视频在线播放| 国产一区二区三区四区五区入口| 亚洲一区二区在线观| 深夜成人影院| 亚洲欧美资源在线| 日韩毛片一区二区三区| 99久久婷婷国产精品综合| 免费人成自慰网站| 一区二区三区四区视频免费观看| 久久视频国产精品免费视频在线| 亚洲性猛交富婆| 国产日韩一级二级三级| 欧美视频第三页| 精品一区二区三| 国产精品99久久久久久人 | 中文字幕亚洲一区| wwwwww在线观看| 国产精品久久久久婷婷| 色悠悠久久综合网| 我不卡影院28| 亚洲中国色老太| 手机电影在线观看| 日韩精品一区二区三区在线播放| 久草网站在线观看| 成人性生交大片| 内射国产内射夫妻免费频道| 亚洲美女久久| 国产精品免费观看在线| 精品国产丝袜高跟鞋| 欧美一区二区女人| 久久精品99久久久久久| yourporn久久国产精品| 免费大片在线观看| 91亚洲人成网污www| 147欧美人体大胆444| 韩国日本一区| 亚洲人成电影网| 亚洲午夜精品久久久| 樱桃国产成人精品视频| 亚洲熟女一区二区| 久久精品欧洲| 一本一道久久a久久综合精品| 91成人小视频| 国内精品久久影院| 精品推荐蜜桃传媒| 在线不卡的av| 国产精品2020| 久久精品视频免费| 国产福利精品一区二区三区| 禁久久精品乱码| 日韩欧美亚洲在线| 麻豆视频久久| 欧洲中文字幕国产精品 | 国内精品国产三级国产在线专| 亚洲av成人无码久久精品老人| 欧美这里有精品| 麻豆疯狂做受xxxx高潮视频| 久久久综合精品| www.成年人| 亚洲中字在线| dy888午夜| 精品在线手机视频| 亚洲一区二区免费| 日韩大尺度黄色| 亚洲精品二区三区| 亚洲成av人乱码色午夜| 欧美一区二区激情视频| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲精品欧美专区| 美女又爽又黄视频毛茸茸| 蜜臀av性久久久久蜜臀aⅴ流畅| 91国在线高清视频| 国产一区二区三区四区| 99视频网站| 国产精品一区二区免费福利视频 | 国产一级片视频| 国产亚洲一区二区三区在线观看 | 日韩激情综合| 国产91在线播放| 成年人视频免费在线播放| 色噜噜国产精品视频一区二区| 婷婷五月综合激情| 欧美一卡2卡3卡4卡| 国产美女www| 欧美午夜女人视频在线| 日本黄色小说视频| 国产精品视频你懂的| 中文字幕一区二区久久人妻网站| 国产乱对白刺激视频不卡| 国产三级日本三级在线播放| 夜夜精品视频| 国产成人一区二区三区别| 91精品精品| 视频一区二区精品| 亚洲影院天堂中文av色| 激情五月综合色婷婷一区二区| 久久国产精品美女| 国产在线视频91| 超碰这里只有精品| 国产91露脸中文字幕在线| 交100部在线观看| 国内免费久久久久久久久久久| 91网址在线观看| 久久成人在线视频| av香蕉成人| 日韩网站免费观看高清| 日本视频在线免费观看| 最近2019中文字幕在线高清| √新版天堂资源在线资源| 国产小视频国产精品| 国产在线视频网址| 亚洲人成电影网站色…| 国产一级片在线播放| 亚洲天堂男人天堂| 国产女主播在线写真| 一区二区三区黄色| 国产黄色在线播放| 一色桃子一区二区| av女优在线| www.亚洲人.com| a级毛片免费观看在线| 欧美裸体男粗大视频在线观看| 在线中文字幕第一页| 欧美激情久久久久久| 91资源在线观看| 欧美在线视频免费| 欧美色片在线观看| 国产区精品在线观看| 99tv成人影院| 成人区精品一区二区| 里番精品3d一二三区| 欧美一区2区三区4区公司二百| 精品视频97| 中国黄色录像片| 亚洲无毛电影| 欧美日韩亚洲第一| 美女爽到高潮91| 中文字幕人妻熟女人妻a片| 成人免费视频app| 四虎国产精品成人免费入口| 国产精品久久久久影院亚瑟 | 国产欧美日韩免费| 国产精品久久免费视频 | 午夜精品久久久久久久99热黄桃| 亚洲第一免费播放区| 高清美女视频一区| 超在线视频97| 三级在线看中文字幕完整版| 国产精品美女免费视频| 中文无码日韩欧| 欧美区高清在线| 自拍偷拍欧美专区| 免费无码av片在线观看| 国产综合色产在线精品| 亚洲一级av无码毛片精品| 中文av字幕一区| 久久这里只有精品免费| 色88888久久久久久影院按摩| 国产色片在线观看| 亚洲欧美日韩国产中文专区| 国产三级在线播放| 日韩美女视频中文字幕| 天堂va在线高清一区| 免费av一区二区三区| 婷婷综合久久| 国产男女激情视频| 盗摄精品av一区二区三区| 免费黄在线观看| 亚洲成人久久影院| 中文字幕乱码无码人妻系列蜜桃| 精品国产凹凸成av人导航| 在线看免费av| 欧美在线激情视频| 日韩成人视屏| 亚洲日本精品一区| 国产亚洲一级| 天堂va欧美va亚洲va老司机| 国产精品美女久久福利网站| 日韩三级免费看| 日韩欧美精品三级| 日本中文字幕视频在线| 欧美性视频精品| 99re91这里只有精品| 亚洲一区二区三区加勒比 | 一区二区三区 日韩| 成人国产电影网| 一区二区国产精品精华液| 欧美性xxxxxx少妇| 色av男人的天堂免费在线| 久久久久久久电影一区| 免费一级欧美片在线观看网站| 色综合影院在线观看| 先锋影音国产一区| 亚洲综合自拍网| 亚洲午夜久久久久中文字幕久| 国产精品久久久久久久成人午夜| 亚洲区一区二区| 中文字幕在线看片| 好吊妞www.84com只有这里才有精品 | 狠狠v欧美v日韩v亚洲ⅴ| 大吊一区二区三区| 欧美性淫爽ww久久久久无| 国产乱视频在线观看| 青青草精品毛片| 亚洲欧洲免费| 日韩视频第二页| 久久精品一区蜜桃臀影院| 成人公开免费视频| 一本色道久久88亚洲综合88| 欧美日韩尤物久久| 亚洲精品影院| 麻豆成人久久精品二区三区红 |