大多數有關虛擬內存的文獻指出,作爲應用程序開發人員,理解虛擬內存可以幫助我利用其強大的功能。我一直參與在Linux上開發應用程序一段時間,但在編碼時並不在乎虛擬內存的複雜性。我錯過了什麼嗎?如果是這樣,請闡明我如何利用虛擬內存的運作。否則讓我知道如果我對這個問題沒有意義!虛擬內存
虛擬內存
回答
那麼,這個概念其實很簡單。我不會在這裏重複,但你應該拿起任何有關操作系統設計的書,它會在那裏解釋。我推薦Silberscahtz和Galvin的「操作系統概念」 - 這是我在大學裏使用的,它很好。
一對夫婦的事情,我能想到的是什麼虛擬內存知識,可能會給你的是:
- 學習到頁面邊界上分配內存以避免浪費(僅適用於虛擬內存,而不是通常的堆/堆棧內存);
- 鎖定RAM中的一些頁面,使它們不會被交換到HDD;
- 監護人頁面;
- 稍後保留一些地址範圍並提交實際內存;
- 也許使用NX(非可執行)位來提高安全性,但我不確定這一點。
- 在32位系統上訪問> 4GB的PAE。
儘管如此,所有這些東西只能用於相當具體的場景。事實上,99%的應用程序無需關心這一點。
加入:也就是說,知道所有這些事情是非常好的,以便您可以在出現這些情況時識別出這些情況。只要小心 - 權力來自責任。
對於今天的大多數應用程序,程序員可以保持不知道計算機內存的工作情況,而不會造成任何傷害。但有時 - 例如,當您想要改善程序的佔用空間時 - 您最終不得不自己操作內存。在這種情況下,知道內存如何設計工作是至關重要的。換句話說,雖然你確實可以在沒有它的情況下生存下來,但關於虛擬內存的學習只會讓你成爲一個更好的程序員。
而且我認爲Wikipedia article可以是一個好的開始。
可能有10個案例中有9個案例不需要擔心虛擬內存管理。這是內核的工作。可能在一些高度專業化的應用程序中,你需要對它們進行調整。
我知道一篇文章談論計算機內存管理,重點是Linux [http://lwn.net/Articles/250967]。希望這可以幫助。
這是一個模糊的問題。
您可以使用虛擬內存的方式主要是通過使用內存映射文件。有關更多詳細信息,請參見mmap()手冊頁。
儘管無論如何你可能會隱式地使用它,因爲任何動態庫都是作爲映射文件實現的,許多數據庫庫也都使用它們。
使用來自高級語言的映射文件的接口通常很不方便,這使得它們的用處不大。
使用映射文件的主要好處是:
- 沒有一個系統調用開銷訪問文件的部分時(這實際上可能是一個缺點,因爲頁面錯誤可能有儘可能多的開銷,無論如何,如果它發生)
- 無需將數據從OS緩衝區複製到應用程序緩衝區 - 這可以提高性能
- 能夠在進程之間共享內存。
有些缺點是:
- 32位機器可以運行出的地址空間輕鬆
- 棘手的處理文件正確
- 延長沒有簡單的方法,看看有多少/哪些網頁目前常駐(但可能有一些方法)
- 對實時應用程序不利,因爲頁面錯誤可能會導致IO請求阻塞線程(但文件可以鎖定在內存中,但是隻有當足夠)。
如果您關心的是性能 - 理解內存層次結構非常重要。
對於完全包含在物理內存中的小數據集,您需要關注緩存(從緩存訪問內存要快得多)。
當處理大型數據集時 - 由於缺少物理內存可能會導出頁面,因此您需要小心保持訪問模式的本地化。
例如,如果您在C中聲明矩陣(int a[rows][cols]
),它將按行分配。因此,在掃描矩陣時,您需要按行而不是按列掃描。否則,您將多次分頁輸入和輸出相同的數據。
另一個問題是髒和乾淨數據保存在內存之間的差異。清潔數據是從未被程序修改的文件加載的信息。操作系統可能會寫出乾淨的數據(可能取決於它如何加載)而不寫入磁盤。首先必須將髒頁寫入交換文件。
- 1. 虛擬內存?
- 2. 分配內存之前虛擬內存
- 3. 虛擬內存到物理內存
- 4. 物理內存與虛擬內存
- 5. 虛擬內存或物理內存
- 6. Excel虛擬內存問題
- 7. 虛擬內存處理
- 8. gdb:虛擬內存耗盡
- 9. 虛擬內存和sbrk
- 10. Linux上的虛擬內存
- 11. Android支持虛擬內存
- 12. mongodb虛擬內存大小
- 13. 需要虛擬內存嗎?
- 14. Memcached和虛擬內存
- 15. 什麼是虛擬內存?
- 16. 訪問linux虛擬內存
- 17. cc1plus:虛擬內存耗盡
- 18. 關於虛擬內存
- 19. Pytables vs虛擬內存
- 20. 虛擬內存的使用
- 21. 虛擬內存大小
- 22. Flash虛擬內存改進
- 23. 虛擬內存空間
- 24. 探索虛擬內存(ProcessWalker)
- 25. linux虛擬內存參數
- 26. 虛擬內核內存佈局:負值
- 27. 虛擬內存的虛擬頁面中包含什麼?
- 28. 虛擬地址空間vs虛擬內存
- 29. 虛擬主機內的虛擬主機
- 30. 內核虛擬內存如何映射到物理內存
另外;虛擬內存爲您提供了屏蔽物理內存碎片的功能。 – RandomNickName42 2011-03-18 22:02:50