日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

file mmap

發布時間:2023/12/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 file mmap 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
do_set_pmd

統計參數只會在這里設置:

add_mm_counter(vma->vm_mm, MM_FILEPAGES, HPAGE_PMD_NR);

?但是這貌似都是處理大頁的情況哪,小頁呢?

alloc_set_pte中有函數:inc_mm_couter_fast(vma->vm_mm, mm_couter_file(page))

?其中,mm_counter_file是在include 目錄下設置的,注意一下,這個函數返回的是頁的類型,有兩種類型,一種是:

1446 static inline int mm_counter_file(struct page *page) 1447 { 1448 if (PageSwapBacked(page)) //如果這個頁是被swap出去了,那么這個頁就是MM_SHMEMPAGES, 1449 return MM_SHMEMPAGES; 1450 return MM_FILEPAGES; 1451 } 1452

SHMEMPAGES 感覺和ANON/FILE是兩種不同的考察維度呀,也就是說匿名頁和filebacked的頁都是可以當做SHMEM來用的。好像不對啊,匿名頁就是匿名頁,如果是可以共享的,也就是說MAP_ANONYMOUS? 和 MAP_SHARED 是可以同時設置的?【結論MAP_ANONYMOUS和MAP_SHARED是不可以同時設置的】,

PRIVATE 和 SHARED 都是對于文件來說的,是說多個

[什么叫做共享內存的頁呀: 下面這個patch中加了這個統計項,patch大致思想是:目前共享內存的頁,都和file-backed的文件一起去統計了(實際共享內存后面掛載的設備是/dev/zero,我們沒辦法看到共享內存的頁了,所以這個patch就是解決的就是區分這兩種頁]

eca56ff906bdd0239485e8b47154a6e73dd9a2f3

?那么下面一個問題還是沒有解決,為什么mm_counter_file中統計出來的page只會去統計MM_SHMEM / MM_FILE

?除了匿名頁之外,有兩種頁:共享內存的頁還有文件backed的頁

MAP_ANONYMOUS 是不能單獨出現的

SHMEMPAGES既可以當做

?這一部分好好講講文件系統的mmap file-backed

[ 一個進程所有的頁的類型包括:匿名頁,文件backed的頁,共享內存的頁,swap出去的頁.]

私有的文件映射如果改動的話會發生啥事情

《Linux環境編程》對該部分的解釋有亮點,但是避重就輕,過多地去講在MAP_SHARED的情況下,內存映射是如何完成的,比較難理解的是私有映射是如何完成的:

如果我設置了私有的映射,并且還具有寫權限,這個時候如果發生了寫,操作系統是如何實現的呢?這種情況也分明是存在的!

猜想:這個時候會發生寫時寫時復制機制,不會影響到文件的內容:【測試程序:

https://github.com/honpey/codebox/blob/master/mmap/mmap_file_private.c

設置了文件的MAP_PRIVATE 標志之后,我們發現,此時寫入的任何東西都不會保存,所以我們就大膽猜想,初始化時,是做了一個映射,但是第一次訪問之后,發生了缺頁中斷,而這個缺頁中斷的作用是從pagecache中copy一份數據到新的page中,即所謂的寫時復制!這是file-backed mmap類型的寫時復制。

這個

?

轉載于:https://www.cnblogs.com/honpey/p/7751834.html

總結

以上是生活随笔為你收集整理的file mmap的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。