www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 程序喵大人
[導(dǎo)讀]本文基于Linux-2.4.16內(nèi)核版本由于計(jì)算機(jī)的物理內(nèi)存是有限的,而進(jìn)程對內(nèi)存的使用是不確定的,所以物理內(nèi)存總有用完的可能性.那么當(dāng)系統(tǒng)的物理內(nèi)存不足時(shí),Linux內(nèi)核使用什么方案來避免申請不到物理內(nèi)存這個(gè)問題呢?相對于內(nèi)存來說,磁盤的容量是非常大的,所以Linux內(nèi)核實(shí)現(xiàn)了...

本文基于 Linux-2.4.16 內(nèi)核版本

由于計(jì)算機(jī)的物理內(nèi)存是有限的, 而進(jìn)程對內(nèi)存的使用是不確定的, 所以物理內(nèi)存總有用完的可能性. 那么當(dāng)系統(tǒng)的物理內(nèi)存不足時(shí), Linux內(nèi)核使用什么方案來避免申請不到物理內(nèi)存這個(gè)問題呢?

相對于內(nèi)存來說, 磁盤的容量是非常大的, 所以Linux內(nèi)核實(shí)現(xiàn)了一個(gè)叫?內(nèi)存交換?的功能 -- 把某些進(jìn)程的一些暫時(shí)用不到的內(nèi)存頁保存到磁盤中, 然后把物理內(nèi)存頁分配給更緊急的用戶使用, 當(dāng)進(jìn)程用到時(shí)再從磁盤讀回到內(nèi)存中即可. 有了?內(nèi)存交換?功能, 系統(tǒng)可使用的內(nèi)存就可以遠(yuǎn)遠(yuǎn)大于物理內(nèi)存的容量.

LRU算法

內(nèi)存交換?過程首先是找到一個(gè)合適的用戶進(jìn)程內(nèi)存管理結(jié)構(gòu),然后把進(jìn)程占用的內(nèi)存頁交換到磁盤中,并斷開虛擬內(nèi)存與物理內(nèi)存的映射,最后釋放進(jìn)程占用的內(nèi)存頁。由于涉及到IO操作,所以這是一個(gè)比較耗時(shí)的過程。如果被交換出去的內(nèi)存頁剛好又被訪問了,這時(shí)又需要從磁盤中把內(nèi)存頁的數(shù)據(jù)交換到內(nèi)存中。所以,在這種情況下不單不能解決內(nèi)存緊缺的問題,而且增加了系統(tǒng)的負(fù)荷。

為了解決這個(gè)問題,Linux內(nèi)核使用了一種稱為?LRU (Least Recently Used)?的算法, 下面介紹一下?LRU算法?的大體過程.

LRU?的中文翻譯是?最近最少使用, 顧名思義就是一段時(shí)間內(nèi)沒有被使用, 那么Linux內(nèi)核怎么知道哪些內(nèi)存頁面最近沒有被使用呢? 最簡單的方法就是把內(nèi)存頁放進(jìn)一個(gè)隊(duì)列里, 如果內(nèi)存頁被訪問了, 就把內(nèi)存頁移動到鏈表的頭部, 這樣沒被訪問的內(nèi)存頁在一段時(shí)間后便會移動到隊(duì)列的尾部, 而釋放內(nèi)存頁時(shí)從鏈表的尾部開始. 著名的緩存服務(wù)器?memcached?就是使用這種?LRU算法.

Linux內(nèi)核也使用了類似的算法, 但相對要復(fù)雜一些. Linux內(nèi)核維護(hù)著三個(gè)隊(duì)列: 活躍隊(duì)列, 非活躍臟隊(duì)列和非活躍干凈隊(duì)列. 為什么Linux需要維護(hù)三個(gè)隊(duì)列, 而不是使用一個(gè)隊(duì)列呢? 這是因?yàn)長inux希望內(nèi)存頁交換過程慢慢進(jìn)行, Linux內(nèi)核有個(gè)內(nèi)核線程?kswapd?會定時(shí)檢查系統(tǒng)的空閑內(nèi)存頁是否緊缺, 如果系統(tǒng)的空閑內(nèi)存頁緊缺時(shí)時(shí), 就會選擇一些用戶進(jìn)程把其占用的內(nèi)存頁添加到活躍鏈表中并斷開進(jìn)程與此內(nèi)存頁的映射關(guān)系. 隨著時(shí)間的推移, 如果內(nèi)存頁沒有被訪問, 那么就會被移動到非活躍臟鏈表. 非活躍臟鏈表中的內(nèi)存頁是需要被交換到磁盤的, 當(dāng)系統(tǒng)中空閑內(nèi)存頁緊缺時(shí)就會從非活躍臟鏈表的尾部開始把內(nèi)存頁刷新到磁盤中, 然后移動到非活躍干凈鏈表中, 非活躍干凈鏈表中的內(nèi)存頁是可以立刻分配給進(jìn)程使用的. 各個(gè)鏈表之間的移動如下圖:

lru links
如果在這個(gè)過程中, 內(nèi)存頁又被訪問了, 那么Linux內(nèi)核會把內(nèi)存頁移動到活躍鏈表中, 并且建立內(nèi)存映射關(guān)系, 這樣就不需要從磁盤中讀取內(nèi)存頁的內(nèi)容.

注意: 內(nèi)核只維護(hù)著一個(gè)活躍鏈表和一個(gè)非活躍臟鏈表, 但是非活躍干凈鏈表是每個(gè)內(nèi)存管理區(qū)都有一個(gè)的.
這是因?yàn)榉峙鋬?nèi)存是在內(nèi)存管理區(qū)的基礎(chǔ)上進(jìn)行的, 所以一個(gè)內(nèi)存頁必須屬于某一個(gè)內(nèi)存管理區(qū).

kswapd內(nèi)核線程

在Linux系統(tǒng)啟動時(shí)會調(diào)用?kswapd_init()?函數(shù), 代碼如下:

static?int?__init?kswapd_init(void)
{
????printk("Starting?kswapd?v1.8\n");
????swap_setup();
????kernel_thread(kswapd,?NULL,?CLONE_FS?|?CLONE_FILES?|?CLONE_SIGNAL);
????kernel_thread(kreclaimd,?NULL,?CLONE_FS?|?CLONE_FILES?|?CLONE_SIGNAL);
????return?0;
}
可以看到,?kswapd_init()?函數(shù)會創(chuàng)建?kswapd?和?kreclaimd?兩個(gè)內(nèi)核線程, 這兩個(gè)內(nèi)核線程負(fù)責(zé)在系統(tǒng)物理內(nèi)存緊缺時(shí)釋放一些物理內(nèi)存頁, 從而使系統(tǒng)的可用內(nèi)存達(dá)到一個(gè)平衡. 下面我們重點(diǎn)來分析?kswapd?這個(gè)內(nèi)核線程,?kswapd()?的源碼如下:

int?kswapd(void?*unused)
{
????struct?task_struct?*tsk?=?current;

????tsk->session?=?1;
????tsk->pgrp?=?1;
????strcpy(tsk->comm,?"kswapd");
????sigfillset(
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計(jì)工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉