国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

圖解 | Linux內存回收之LRU算法

系統 Linux 算法
內存 是操作系統非常重要的資源,操作系統要運行一個程序,必須先把程序代碼段的指令和數據段的變量從硬盤加載到內存中,然后才能被運行。

[[421791]]

內存 是操作系統非常重要的資源,操作系統要運行一個程序,必須先把程序代碼段的指令和數據段的變量從硬盤加載到內存中,然后才能被運行。如下圖所示:

但內存資源是有限的,隨著系統中運行的進程越來越多,系統中可用的內存就會越來越少。那么,當可用內存不足時,Linux 內核是怎么處理的呢?

本文將會介紹,當可用內存不足時,Linux 內核的處理方式。

一、內存不足的處理方式

我們思考一下,當系統的可用內存不足時,進程繼續申請內存會發生什么事情?

當系統的可用內存不足時,內核為了保證進程有足夠的內存可用,將會對內存進行回收工作。內存回收工作主要包括以下幾個步驟:

  • 內核為了加速某些操作(如文件 I/O),會對操作的結果進行緩存(如文件頁緩存),而緩存使用的內存是可以被回收的。所以,當可用內存不足時,首先會回收內核中的緩存。
  • 如果回收內核緩存后,系統的可用內存仍然處于不足。那么,內核將會觸發 swap 機制。swap 機制會將某些進程所占用的內存交換(寫入)到硬盤中,然后釋放這些內存,從而讓系統有更多可用的內存。本文將會重點介紹 swap 機制。
  • 如果觸發 swap 機制后,系統的可用內存仍不能滿足系統需求,那么將會觸發 OOM(Out Of Memory) 機制。OOM 機制將會挑選一些進程,然后將這些進程殺死來,從而獲取更多可用內存。

由于回收內存的方式有三種,所以本文重點以 swap 機制作為分析對象,來介紹當內存不足時,內核是怎么進行內存回收工作的。

二、swap機制原理

在分析 swap 機制的實現前,我們先來介紹一下 swap 機制的原理。

本文使用 Linux-2.6.23 版本內核。

swap 這個單詞是 交換 的意思,顧名思義就是把某些進程所占用的內存交換(寫入)到硬盤,然后把內存釋放給操作系統,這樣操作系統就有更多可用的內存。如下圖所示:

由于 swap 機制的本質是將進程所占用的內存寫入到硬盤中,然后釋放這些內存。那么,就涉及到應該將哪些進程的內存交換到硬盤中。

每個進程都不希望自己占用的內存被交換到硬盤中,因為內存被交換到硬盤后,如果進程要使用到這些內存時,必須先將這些內存從硬盤中加載到內存中,才能繼續使用,這樣進程的性能將會大打折扣。正因為這個原因,內核必須提供一種最優的方案來挑選一些內存交換到硬盤,并且對進程性能的影響降到最小。

由于進程的內存空間分為多個段,如 代碼段、數據段、mmap段、堆段 和 棧段 等。那么,哪些段的內存會被交換到硬盤中呢?

答案就是:所有段的內存都有可能交換到硬盤。不過對于 代碼段 和 mmap段 這些與文件有映射關系的內存區,只需要將數據寫回到文件即可(由于代碼段的內容不會改變,所以不用進行回寫)。

而對于 數據段、堆段 和 棧段 這些段中的內存頁,由于沒有與文件進行映射(稱為 匿名內存頁),所以內核必須提供一個文件(或硬盤分區)來存儲這些內存頁的數據,這個文件(或硬盤分區)被稱為 交換分區。

從上面的分析可以得出兩個重要的信息:

匿名內存頁:沒有與任何文件進行映射的內存頁。

交換分區:用于存儲匿名內存頁數據的文件或硬盤分區。

下面主要介紹當系統內存不足時,內核是怎樣將進程的 匿名內存頁 寫入到 交換分區 中,并且回收這些 匿名內存頁 的。

1. LRU 內存淘汰算法

當系統內存不足,并且觸發 swap機制 時,內核應該選擇哪些 匿名內存頁 寫入到 交換分區 中呢?如果隨機選擇一些 匿名內存頁 寫入到 交換分區,就有可能出現如下問題:

把某個進程的 匿名內存頁 寫入到 交換分區 后,進程又馬上訪問這個內存頁,從而又要把這個內存頁從 交換分區 中讀入到內存中。這樣只會增加系統的負荷,并且不能解決系統內存不足的問題。

為了解決這個問題,Linux 內核引入了 LRU內存淘汰算法,用過 Memcached 或者 Redis 的同學應該都了解過 LRU算法。當系統內存不足時,Memcached 和 Redis 都是使用 LRU算法 來淘汰內存的。

LRU(Least Recently Used) 中文翻譯是 最近最少使用 的意思,其原理就是:當內存不足時,淘汰系統中最少使用的內存,這樣對系統性能的損耗是最小的。

為了實現 LRU算法,內核維護了兩個雙向鏈表:active_list 和 inactive_list。下面介紹下這兩個鏈表的作用:

  • active_list:活躍內存頁鏈表。也就是說進程會經常訪問這個鏈表中的內存頁,所以進行內存淘汰時,不應該淘汰這個鏈表中的內存頁。
  • inactive_list:不活躍內存頁鏈表。也就是說進程很少會訪問這個鏈表中的內存頁,所以進行內存淘汰時,主要淘汰這個鏈表中的內存頁。

在 Linux 內核中,每個 內存區(zone) 都會維護著一個 active_list 和一個 inactive_list。內存區 是內存管理中的一個對象,為了描述更加清晰,我們暫時當成內核中只有一個內存區,也就是說暫時認為內核中只維護著一個 active_list 和一個 inactive_list。如下圖所示:

另外,每個內存頁都有個 PG_referenced 的標志位,表示此內存頁是否被訪問過,這個標志位在內存回收過程中起著至關重要的作用。

當某個進程申請一個匿名內存頁時,內核會把這個內存頁添加到 活躍內存頁鏈表(active_list) 中,并且將 PG_referenced 標志位設置為 0。如下圖所示:

而當某個匿名內存頁被進程訪問時,根據內存頁所在的 LRU 鏈表作不同的操作:

  • 如果內存頁原來處于 活躍鏈表 中,那么就會把此內存頁的 PG_referenced 設置為 1。
  • 如果內存頁原來處于 非活躍鏈表 中,并且 PG_referenced 為 0。那么將內存頁的 PG_referenced 標志位設置為 1。
  • 如果內存頁原來處于 非活躍鏈表 中,并且 PG_referenced 為 1。那么將會把內存頁從 非活躍鏈表 移動到 活躍鏈表,并且將 PG_referenced 設置為 0。

下圖展示了上述各種情況的流轉過程:

而當系統內存不足時,需要進行內存淘汰過程。內存頁淘汰過程與上述過程剛好相反,下面介紹一下內存頁淘汰的過程。

內存淘汰時,只能從 非活躍鏈表 中進行淘汰,淘汰過程如下:

  • 從 非活躍鏈表 的尾部開始進行內存淘汰,如果內存頁的 PG_referenced 標志位為 1 時,將跳過此內存頁,并且將此內存頁的 PG_referenced 標志位設置為 0。
  • 如果內存頁的 PG_referenced 標志位為 0 時,那么將此內存頁寫入到 交換分區 中,并且將所有與此內存頁的映射解除綁定,然后釋放此內存頁。

上述過程是由 shrink_inactive_list 函數完成,如下圖所示:

另外,處于 活躍鏈表 的內存頁也有衰退的過程,衰退過程如下:

  • 如果內存頁的 PG_referenced 標志位為 1,那么衰退過程將會把此內存頁的 PG_referenced 標志位設置為 0。
  • 如果內存頁的 PG_referenced 標志位為 0,那么衰退過程將會把此內存頁移動到 非活躍鏈表 中。

上述過程是由 shrink_active_list 函數完成,如下圖所示:

2. LRU算法狀態流轉

我們最后以一張狀態流轉圖來描述 LRU 算法的過程:

三、總結

 

本文主要介紹了 Linux 內核內存回收過程中使用的 LRU 算法的原理,在下一篇文章中,我們將會介紹 Linux 內核是如何實現內存回收的,有興趣的敬請期待。

 

責任編輯:武曉燕 來源: Linux內核那些事
相關推薦

2013-10-11 17:32:18

Linux運維內存管理

2010-06-02 13:00:43

Linux 內存監控

2024-05-06 08:09:10

Linux內存管理

2021-09-26 09:23:01

GC算法垃圾

2010-01-14 11:28:54

JVM分代垃圾回收

2010-09-25 15:19:01

2021-07-15 14:29:06

LRU算法

2020-05-15 17:05:51

Oracle數據庫LRU算法

2019-12-24 10:32:01

OracleLRU臟塊

2022-01-26 00:10:00

Linux內存磁盤

2025-03-26 00:00:05

2021-09-30 10:45:33

Linux進程通信

2022-06-17 07:49:14

緩存LRU

2020-09-18 10:31:47

LRU算法數組

2022-05-09 19:59:15

RedisLRU 算法

2022-06-10 07:13:29

JVM垃圾回收

2023-12-19 21:52:51

Go垃圾回收開發

2016-08-16 13:30:49

LinuxCachetmpfs

2020-02-19 19:18:02

緩存查詢速度淘汰算法

2017-08-04 10:53:30

回收算法JVM垃圾回收器
點贊
收藏

51CTO技術棧公眾號

欧美日韩亚洲视频一区| 老司机av福利| 国产激情精品久久久第一区二区 | 欧美xxxx18| 亚洲第一中文字幕在线观看| 丝袜美腿综合| 欧美 日韩 国产在线| 久久国产乱子精品免费女| av网址在线看| 国产成人在线精品| 久久精品一区蜜桃臀影院| 秋霞午夜理伦电影在线观看| 91a在线视频| 毛片一区二区三区| 日本中文字幕一区二区有码在线| 伊人久久大香线蕉av一区二区| 亚洲精华一区二区三区| 欧美12一14sex性hd| 另类视频在线观看| 亚洲乱码国产乱码精品精98午夜| 欧美一区网站| 中日韩高清电影网| 亚洲.欧美.日本.国产综合在线| 亚洲国产精久久久久久久| 欧美成免费一区二区视频| 僵尸世界大战2 在线播放| 欧美色综合天天久久综合精品| 奇米777日韩| 国产在线视频一区| 一区二区三区四区乱视频| 国产一区二区三区不卡在线| 亚洲精品欧美日韩| 亚洲成人在线网站| 999精品在线| av黄色免费| www国产精品视频| 亚洲视频大全| 国产精品视频一区二区久久| 2022国产精品| 欧美综合视频在线观看| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 日日鲁鲁鲁夜夜爽爽狠狠视频97| 亚洲国产91精品在线观看| 日韩中文字幕亚洲一区二区va在线 | 久久97久久97精品免视看秋霞| 成人在线免费观看视频网站| 精品视频全国免费看| 蜜臀av一区二区在线免费观看| 四虎成人在线| 伦理电影国产精品| 性欧美暴力猛交69hd| 日韩精品一区在线观看| 精品久久久久久中文字幕大豆网| 国产一区二区三区四区在线观看| 亚洲国产视频二区| 日本在线免费| 色偷偷福利视频| 欧美极品日韩| 日韩av片电影专区| 日韩欧美你懂的| 亚洲一二三四在线观看| 国产专区欧美精品| 国产一区二区三区黄视频 | 久久国产高清| 欧洲av不卡| 99re热在线观看| 欧美一区国产一区| 日韩av手机在线看| 91精品国产黑色紧身裤美女| 2023国产精品| 国产伦精品一区二区三区在线播放| 亚洲一区三区| 亚洲sss综合天堂久久| 欧美大片免费看| 亚洲成人av福利| 丁香五精品蜜臀久久久久99网站| 香蕉久久精品| www国产精品| 青青草原av在线| 午夜视频国产| 1024av视频| 国产精品91久久久| 亚洲国产精品麻豆| 国产欧美1区2区3区| 丁香啪啪综合成人亚洲小说| 久久精品国产久精国产| 亚洲一级高清| 成人动漫免费在线观看| 亚洲电影二区| 免费高潮视频95在线观看网站| 国产免费视频在线| 欧美日韩黄色一级片| 免费av一区二区| 久久成年人视频| 久久精品2019中文字幕| 欧美人动与zoxxxx乱| 黄网动漫久久久| 亚洲欧美综合在线精品| 成人丝袜高跟foot| 激情综合一区二区三区| 欧美国产激情二区三区| 婷婷丁香久久五月婷婷| 欧美日韩和欧美的一区二区| 日韩精品欧美国产精品忘忧草 | 女性女同性aⅴ免费观女性恋| 成人蜜桃视频网站网址| 中文字幕在线视频观看| 亚洲成av人影片在线观看| 午夜影院免费| 亚洲一区在线日韩在线深爱| 免费观看v片在线观看| 一级理论片在线观看| www.97.| 亚洲三级欧美| 中文字幕av一区二区三区人| 伊人成人在线视频| 九九视频精品免费| 高清av一区二区| 一区二区三区在线免费视频| 亚洲电影一区二区三区| 亚洲成人动漫在线观看| 欧洲国内综合视频| 国产视频精品va久久久久久| 欧美有码在线观看视频| 日本成人性视频| 综合色婷婷一区二区亚洲欧美国产| 免费在线看黄色片| 三级成人黄色影院| 丝袜亚洲另类欧美| 欧美日韩日日骚| 国产精品久久久| 亚洲美女网站18| 成人在线播放网站| a在线视频v视频| 99这里只有精品视频| 中文在线日韩| 精品一区二区免费| 99久久国产综合精品色伊| 成人久久视频在线观看| 欧美色图天堂网| 亚洲免费一级电影| 蜜桃麻豆www久久国产精品| 四虎影视在线观看2413| 538任你躁精品视频网免费| 成人在线国产| 成人av综合一区| 这里只有精品久久| 热re99久久精品国99热蜜月| 亚洲人成77777| av网址在线看| 久久久久久穴| 日韩精品一区二区三区在线观看| av在线不卡观看| 中文字幕无码不卡免费视频| 欧美孕妇性xxxⅹ精品hd| 免费成人直播| 亚洲精品国产成人影院| 国产精品高清亚洲| 国产精品va在线播放| а√最新版在线天堂| 精品亚洲a∨一区二区三区18| 加勒比av一区二区| 综合久久五月天| 五月天av在线播放| 18+视频在线观看| 奇米888四色在线精品| 精品久久一区二区| 欧美性猛交内射兽交老熟妇| 午夜小视频福利在线观看| 日韩av电影一区| 欧洲一区在线观看| 免费人成自慰网站| 久久av资源| 久久久久久久久岛国免费| 日本三级韩国三级久久| 99爱免费视频| 国产精品久久777777毛茸茸| 另类图片亚洲另类| 激情影院在线观看| 亚洲一二三四久久| 婷婷久久伊人| 在线一区电影| 97不卡在线视频| 中文字幕在线直播| 色婷婷综合视频在线观看| 国产特级黄色大片| 日韩国产欧美在线视频| 一区av在线播放| 亚洲精品一区二区三区樱花 | 青青草观看免费视频在线| 国产一区二区在线观看免费| 欧洲亚洲在线视频| 色呦呦网站在线观看| 亚洲色图在线看| www.av毛片| 理论电影国产精品| 成人免费视频网站| 久久99青青| 热re91久久精品国99热蜜臀| 91精品亚洲一区在线观看|