2012-04-18 72 views
1

我目前正在學習我的OS決賽。一些論文中的老師簡要提及mmap函數(內存映射)。mmap使用案例

據我所知(糾正我,如果我錯了),mmap用於加載一些文件從物理內存到RAM(默認頁面後)。問題是,我沒有看到任何其他的實際原因,以便更快地訪問該文件。

我正確嗎? mmap僅用於此?

+0

計算機可用於執行大量的數值計算。問題是我沒有看到任何其他的實際原因,除了使計算更快。 – pmr 2012-04-18 21:36:22

+1

「從物理內存到RAM」 - 常見用法「物理內存」和「RAM」是同義詞。 – 2012-04-18 21:40:45

回答

5

「MMAP」擁有大量用途:

  1. 映射一個文件更快讀/寫訪問是肯定一個使用

  2. 共享存儲器(例如,用於進程間通信)是另一種

  3. MMAP也用於映射爲低級別的設備通信的I/O端口地址

+0

感謝您輸入@ paulsm4。最後一件事,你會有一個mmap使用的具體例子(真的只是出於好奇)。 – Erwald 2012-04-18 21:45:17

3

MMAP用於加載從物理內存爲RAM一些文件(後頁面默認)

加載失蹤頁。也可以用同樣的方法將修改寫入磁盤!

  • 性能(不必加載整個文件),作品真的很好,如果你有隨機訪問。
  • 它可以使您的代碼更加緊湊,您不必擔心文件I/O。
  • 操作系統可以處理內存管理,決定將哪些頁面保留在內存中以及放棄哪些頁面。
+0

感謝您輸入@Karoly Horvath。最後一件事,你會有一個mmap使用的具體例子(真的只是出於好奇)。 – Erwald 2012-04-18 21:45:44

3

除了@ paulsm4的回答是:

  1. ...
  2. ...
  3. ...
  4. 大多數現代malloc(3)實現使用mmap(2)來管理私人進程內存。
  5. 動態鏈接加載器ld.so(8)將其用於映射共享庫。
+0

感謝您的意見。 – Erwald 2012-04-18 21:49:33

1

MMAP需要的內存管理出來的程序員之手,在很大程度上,並把它在操作系統手中。

這是關於使用虛擬內存子系統從磁盤到物理內存的按需分頁。

因此,要查看文件的第11111個字節,而不是查找和讀取,可以使用mmap並使用數組索引。操作系統會將環境數據保存在其「緩衝區緩存」(真正的頁面緩存)中。

下面是一個例子: http://stromberg.dnsalias.org/~strombrg/pbmonherc.html

的例子是一個有點亂,因爲它是在當Linux已經在它的內核MMAP支持一次寫入,但C庫還不具備存根調用它。但你幾乎可以忽略mmap.c.該示例使用mmap使用單色顯示適配器設置和禁用像素。

另一個合理的使用爲布隆過濾器: http://stromberg.dnsalias.org/~strombrg/drs-bloom-filter/

...但在32位操作系統的,一個mmap'd存儲器區域的最大尺寸有點疼。

+0

謝謝!這些都是很棒的文章。 – Erwald 2012-04-18 22:34:20