linux 內存管理優化,Linux性能優化實戰 內存篇 閱讀筆記

第十五講 基礎篇:Linux內存是怎么工作的(2020.6.8)

這一講相關的內容正好之前看csapp的時候總結了一下,可以直接貼出來作為總結了。

Linux的內存工作原理,這又是一個特別大的話題。一切向著盡量利用物理資源的方向在發展,

在沒有虛擬內存的世界里,所以的進程都能看到同一個物理內存在這種模式下如果有多個進程那么這個內存管理就很復雜了(在DSP,嵌入時系統中可能總共就一個程序這時候完全可以直接使用物理內存)。針對Unix這種多進程的系統后來就有了虛擬內存的概念。

虛擬內存 是硬件異常,硬件地址翻譯,主存,磁盤和內核軟件的完美交互,他為沒有進程提供一個很大的,一致的地址空間。

它將內存看成一個存儲在磁盤上很大的連續的空間,在主存中只保存活動區域,并根據需要在磁盤和主存之間來回傳遞數據,通過這種方式很好的使用了內存。

為每個進程提供了一致的地址空間,從而簡化了內存管理

每個進程的地址空間是獨立的,避免了進程之間在地址空間上的破壞

物理地址和虛擬地址

物理尋址(嵌入式設備/DSP設備):

c160e13fd228d5aeffa2c5939a8246ba.png

虛擬尋址系統(現代處理器):

7188880ca9abaa8ecb922ccbe65fb4f9.png

虛擬內存作為磁盤的高速緩存工具

DRAM 作為磁盤的緩存,通過虛擬內存來管理磁盤上的那個塊緩存到內存中來。

VP(virtual page):將虛擬內存分割成大小固定的塊

PP(physical page):物理頁(葉幀)

VP---->PP 關系

ef1975798804a6d94408e2e83fa3ebb7.png

通過頁表(page table) 來判定一個虛擬頁是否緩存在DRAM中。如果命中就指向一個物理頁中, 如果不命中,系統必須判斷這個虛擬頁存放在磁盤的那個位置,在物理內存中選擇犧牲一個頁,將虛擬頁從磁盤復制到DRAM中,替換掉犧牲頁。

b0185ed3e42b8b0f67681fd1c81fdb8b.png

頁命中:

43b6446bd769916a143dd6f5ab881c2b.png

缺頁:

9f3a4296dc3f569622ea1690b8d909c3.png

虛擬內存作為內存管理工具

5ac764ff03585a8038342583ede1fbc8.png

虛擬內存除了作為磁盤的高速緩存之外,還作為Linux的內存管理工具,這樣Linux中的每個進程都有相同的的地址空間格式,兩個進程通過將虛擬頁面映射到相同的物理頁幀上是實現了共享內存。

b434755e0f989a56ff2659b138dc2417.png

虛擬內存作為內存保護的工具

d21b94246ffba1b404674d8059d3721d.png

地址翻譯

02fd7760ee7d6c05b27cc77d8bb1c160.png

165ecc364a266ae607dfc268a180dc0b.png

d03110390fba4778cea9c3f7649a935d.png

多級頁表:

3fc7454f7e91ba31fe7b1416878dddac.png

5f9d7e3d13d9bdcd735dcc93e8572e52.png

linux 內存系統

fe53328edb5915607fb5c58e4b9da57f.png

86ef4c8f01a2e6f802513b5a014add48.png

dc8552f8c25e26de00d09855d351b2d7.png

內存分配與回收

標準庫中的malloc有兩種實現方式:

小塊內存(小于128k) 使用sbrk分配(釋放并不返還給系統,容易造成系統碎片(詳細見參考2))

大塊內存(大于128k) 使用mmap內存映射的方式分配(每次unmap之后都會返還給系統,所以每次mallo都會導致缺頁異常,內核的管理負擔增大)

系統回收內存三種方式

LRU

回收不常訪問的內存,把不常訪問的內存通過交換分區直接寫入磁盤

OOM

參考資料

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396169.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396169.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

傅里葉變換與大數乘法

我們知道,兩個 N 位數字的整數的乘法,如果使用常規的算法,時間復雜度是 O(N2)。然而,使用快速傅里葉變換,時間復雜度可以降低到 O(N logN loglogN)。 假設我們要計算以下兩個 N 位數字的乘積: a (aN-1aN-2…

idea 啟動界面導入項目_如何為您的項目啟動有效的登錄頁面

idea 啟動界面導入項目by Christian-Peter Heimbach通過克里斯蒂安彼得海姆巴赫 如何為您的項目啟動有效的登錄頁面 (How to launch an effective landing page for your project) I began my career 10 years ago doing online marketing and advertising for video games. S…

linux程序已經在后臺運行凍結了_如何使程序在Linux后臺運行

經常在Linux上面運行程序都有這樣的體驗:某個程序運行的時候,會產生大量的log(提示)信息,但實際上我們只想讓它跑一下而已,log暫時不需要或者后面才有需要。同時run多個相同或者不同程序的時候,占了好多的命令行界面&a…

數字時代的精益組織

精益IT應該幫助簡化和改善我們為客戶創造價值的方式,并提出面向未來的更好的解決方案。未來的組織將專注于同行業的產品或業務流——其他的一切,包括專家和管理者在內,都是為了讓一線工作人員可以第一時間就做好,而又不會遇到任何…

9th week blog

1、第一個計算機語言:Fortran Fortran I誕生于1957年,由IBM設計,是世界上第一個真正的計算機語言。 Fortran I運行于IBM 704計算機上。 Fortran I支持:變量(變量名最多6個字符)、If和do語句、格式化IO。 不…

cas單點登錄系統:客戶端(client)詳細配置(包含統一單點注銷配置)

最近一直在研究cas登錄中心這一塊的應用,分享一下記錄的一些筆記和心得。后面會把cas-server端的配置和重構,另外還有這幾天再搞nginxcas的https反向代理配置,以及cas的證書相關的知識分享出來。 Cas由兩部分組成,Cas Server和Cas…

open 端口打開Linux,linux – nmap顯示打開的端口,但netstat沒有

如果我使用nmap掃描我的服務器,則表明已打開21端口.但是當我登錄到這個服務器并運行netstat時,我什么也看不見.$nmap -sT serverStarting Nmap 4.76 ( http://nmap.org ) at 2009-06-24 11:54 MSDInteresting ports on server (x.x.x.x):Not shown: 994 filtered portsPORT STA…

技能學習重要的古語_學習方法:最重要的開發人員技能

技能學習重要的古語by Preethi Kasireddy通過Preethi Kasireddy 學習方法:最重要的開發人員技能 (Learning How to Learn: The Most Important Developer Skill) Being an efficient learner is at least as important as being an efficient coder.成為高效的學習…

Git submodule 的筆記

這次不造輪子,寫寫文章。file最近想把自己的 blog 整理到 github 上,但由于其中依賴了一些主題以及插件,這時候 git submodule 就能很好的處理這種情況了。 submodule 是什么? submodule 顧名思義,子模塊。在一個項目依…

Leetcode690.Employee Importance員工的重要性

給定一個保存員工信息的數據結構,它包含了員工唯一的id,重要度 和 直系下屬的id。 比如,員工1是員工2的領導,員工2是員工3的領導。他們相應的重要度為15, 10, 5。那么員工1的數據結構是[1, 15, [2]],員工2的數據結構是…

linux進程管理類命令大全,Linux進程管理類命令

一、htop命令選項-d #:指定延遲時間間隔;-u UserName:僅顯示指定用戶的進程;-s COLUME:以指定字段進行排序;子命令:l:顯示選定的進程打開的文件列表;s:跟蹤選…

C#操作Excel

1.System.Data.DataTable連接數據庫 ExcelFile 是excel的完整路徑//OleDbConnection conExcel new OleDbConnection("ProviderMicrosoft.Jet.OLEDB.4.0;Data Source" ExcelFile ";Extended PropertiesExcel 8.0");//if (conExcel.State ConnectionStat…

android抓包工具——使用fiddler4在安卓手機抓包

Fiddler是一款非常流行并且實用的http抓包工具,它的原理是在本機開啟了一個http的代理服務器,然后它會轉發所有的http請求和響應,因此,它比一般的firebug或者是chrome自帶的抓包工具要好用的多。不僅如此,它還可以支持…

rust風化速度_反駁《Golang、Rust的執行速度的對照,讓人大吃一驚。》——不會別瞎說...

首先我無意引戰,但是今天看到某位同學的文章里有某些錯誤,不得不指正一下。1. 測量時間的時候我們使用 std::time::SystemTime::elapsed 即可,不必蹩腳的使用兩個 system 輸出出來還得手動算一下。(當然你說對Rust不熟也就無所謂了)2. 最重要…

css flexbox模型_代碼簡介:CSS Flexbox有點像旅行

css flexbox模型Here are three stories we published this week that are worth your time:這是我們本周發布的三個值得您關注的故事: CSS Flexbox explained by road tripping across the country: 7 minute read CSS Flexbox在全國各地的旅途中進行了解釋&#…

Sharepoint 2013設置customErrors

原文地址:http://www.cnblogs.com/renzh/archive/2013/03/05/2944309.html#3407239 一、首先設置IIS中的Web.config文件 找到對應的IIS應用程序目錄,如:C:\inetpub\wwwroot\wss\VirtualDirectories\3000 在此文件夾下包含一個web.config文件&…

ddt數據驅動

數據驅動原理 1.測試數據為多個字典的list類型 2.測試類前加修飾ddt.ddt 3.case前加修飾ddt.data() 4.運行后用例會自動加載成三個單獨的用例 5.測試結果: Testing started at 21:51 ...start!{username: selenium\xe7\xbe\xa4, psw: 232607095}end!start!{username…

http協議報文體_HTTP報文基本概念學習

HTTP是什么HTTP是HyperText Transfer Protocol的縮寫,中文就是超文本傳輸協議,所謂的超,是個學術用語,是基于某種事物增加了更多的信息維度,比如超像素xxx之類的.協議是什么,協議說白了就是約定,約定就是模板,就是表格,就和你去銀行辦手續一樣,客戶不知道要提供什么信息,銀行又…

yeoman_使用yeoman輕松創建Yeoman生成器

yeomanby Krist Wongsuphasawat克里斯特旺蘇帕薩瓦(Krist Wongsuphasawat) 使用yeoman輕松創建Yeoman生成器 (Creating Yeoman generators easily with yeoman-easily) I’ve used Yeoman to start many of my projects. It’s an amazing web scaffolding tool.我已經用Yeoma…