小編給大家分享一下操作系統(tǒng)頁(yè)面更換與redis內(nèi)存淘汰的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)達(dá)州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
操作系統(tǒng)為什么需要頁(yè)面更換呢,因?yàn)槲锢韮?nèi)存不夠,不可能同時(shí)加載所需的所有數(shù)據(jù)頁(yè),因此只能加載正在或最近要使用的內(nèi)存頁(yè)。頁(yè)面更換的目標(biāo)是,盡量替換掉不再使用或者一段時(shí)間內(nèi)不再使用的內(nèi)存頁(yè),要不然會(huì)很容易觸發(fā)缺頁(yè)中斷,該操作代價(jià)較大,涉及到從磁盤加載,因此頁(yè)面更換可不是隨便的事情。
為了達(dá)到降低隨后發(fā)生缺頁(yè)中斷的次數(shù)或者概率,人們?cè)O(shè)計(jì)出了各種各樣的頁(yè)面替換算法,這些算法大致可分為公平算法和非公平算法。
公平算法:隨機(jī)算法、FIFO算法、時(shí)鐘算法。
非公平算法:NRU算法、LRU算法、工作集算法。
這種就是簡(jiǎn)單的隨機(jī)選擇進(jìn)行頁(yè)替換,無(wú)需多言,簡(jiǎn)單粗暴。
這種就是先來(lái)后到,可以使用鏈表記錄頁(yè)分配的先后順序,淘汰時(shí)按照順序淘汰即可,也是非常的簡(jiǎn)單粗暴。
內(nèi)存使用中的頁(yè)按照時(shí)鐘的邏輯形狀,淘汰頁(yè)時(shí)按照時(shí)鐘順序檢查,如果頁(yè)未訪問(wèn)到(每個(gè)頁(yè)對(duì)應(yīng)一個(gè)訪問(wèn)標(biāo)識(shí),未訪問(wèn)到時(shí)設(shè)置為0),則直接替換;如果訪問(wèn)過(guò)則設(shè)置訪問(wèn)位為0,方便下次淘汰。時(shí)鐘邏輯圖如下:
最近未使用算法,將最近一段時(shí)間沒(méi)有訪問(wèn)過(guò)的頁(yè)面進(jìn)行替換,作出這種選擇是基于程序訪問(wèn)的時(shí)空局域性。依據(jù)時(shí)空局域性,一個(gè)最近沒(méi)有訪問(wèn)過(guò)的頁(yè)面,在隨后的時(shí)間內(nèi)也不太可能被訪問(wèn),而NRU的實(shí)現(xiàn)就是利用頁(yè)面的訪問(wèn)和修改位來(lái)實(shí)現(xiàn)的。
時(shí)空局限性在很多程序設(shè)計(jì)思想中有體現(xiàn),比如rocketmq中page cache緩存最近讀寫的消息數(shù)據(jù)等。
LRU是對(duì)NRU算法的改進(jìn),其考慮的是最近使用的頻率而不是最近是否使用過(guò)。LRU算法的實(shí)現(xiàn)必須以某種方式記錄每個(gè)頁(yè)面被訪問(wèn)的次數(shù),簡(jiǎn)單的辦法就是在頁(yè)表的記錄項(xiàng)里面增加一個(gè)計(jì)數(shù)域,一個(gè)頁(yè)面被訪問(wèn)一次,則這個(gè)計(jì)數(shù)器的值加1;或者使用鏈表結(jié)構(gòu),每訪問(wèn)一次就將該頁(yè)移動(dòng)到鏈表頭。
考慮到LRU算法實(shí)現(xiàn),其需要對(duì)每個(gè)頁(yè)面保持某種記錄,并在每次頁(yè)面訪問(wèn)時(shí)或周期性對(duì)這些記錄更新,造成時(shí)間空間成本高。工作集概念來(lái)源于程序訪問(wèn)的時(shí)空局域性,在一段時(shí)間內(nèi),程序訪問(wèn)的頁(yè)面將局限在一組頁(yè)面集合上。
例如,最近K次訪問(wèn)均發(fā)生在某m個(gè)頁(yè)面上,那么m就是參數(shù)為k時(shí)的工作集。用w(k, t)表示時(shí)間t時(shí)k次訪問(wèn)所涉及的頁(yè)面數(shù)量。顯然隨著k的增長(zhǎng),w(k, t)的值將隨之增長(zhǎng),在k增長(zhǎng)至某個(gè)數(shù)值后,w(k, t)值增長(zhǎng)將及其緩慢甚至接近停滯,并維持一段時(shí)間。
工作集算法就是操作系統(tǒng)局限性的一種體現(xiàn),一段時(shí)間內(nèi),CPU操作的數(shù)據(jù)大都集中在少量數(shù)據(jù)上,因此可以應(yīng)用工作集算法來(lái)進(jìn)行頁(yè)的替換操作。
以上分析了操作系統(tǒng)中的頁(yè)面更換算法,更廣義來(lái)講,頁(yè)面更換就是內(nèi)存淘汰,操作系統(tǒng)的頁(yè)面更換算法可能不能直接讓開(kāi)發(fā)者感同身受
,畢竟這是OS層面的東東。下面就以實(shí)際開(kāi)發(fā)中常用到的Redis為例,來(lái)分析下Redis內(nèi)存淘汰策略,對(duì)比加深對(duì)內(nèi)存淘汰的理解。
Redis的內(nèi)存淘汰策略是指在Redis的用于緩存的內(nèi)存不足時(shí),怎么處理需要新寫入且需要申請(qǐng)額外空間的數(shù)據(jù)。目前Redis的內(nèi)存淘汰策略有如下幾種:
noeviction:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),新寫入操作會(huì)報(bào)錯(cuò)。
allkeys-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在鍵空間中,移除最近最少使用的key。
allkeys-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在鍵空間中,隨機(jī)移除某個(gè)key。
volatile-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在設(shè)置了過(guò)期時(shí)間的鍵空間中,移除最近最少使用的key。
volatile-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在設(shè)置了過(guò)期時(shí)間的鍵空間中,隨機(jī)移除某個(gè)key。
volatile-ttl:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在設(shè)置了過(guò)期時(shí)間的鍵空間中,有更早過(guò)期時(shí)間的key優(yōu)先移除。
對(duì)于LRU(Least Recent Used),淘汰掉最不經(jīng)常使用的,LRU可以通過(guò)hashMap + 雙向鏈表
來(lái)實(shí)現(xiàn),如果Redis也基于hashMap + 雙向鏈表實(shí)現(xiàn),顯然要對(duì)目前的數(shù)據(jù)結(jié)構(gòu)做較大改動(dòng),為了追求空間的利用率,Redis采用權(quán)衡的實(shí)現(xiàn)方案:Redis會(huì)基于server.maxmemory_samples配置選取固定數(shù)目的key,然后比較它們的lru訪問(wèn)時(shí)間,然后淘汰最近最久沒(méi)有訪問(wèn)的key,maxmemory_samples的值越大,Redis的近似LRU算法就越接近于嚴(yán)格LRU算法,但是相應(yīng)消耗也變高,對(duì)性能有一定影響,樣本值默認(rèn)為5。
從Redis的內(nèi)存淘汰實(shí)現(xiàn)方案來(lái)看,雖然遵循了LRU思想但不完全照搬,根據(jù)實(shí)際應(yīng)用場(chǎng)景進(jìn)行trade-off。
以上是“操作系統(tǒng)頁(yè)面更換與Redis內(nèi)存淘汰的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享名稱:操作系統(tǒng)頁(yè)面更換與Redis內(nèi)存淘汰的示例分析
標(biāo)題來(lái)源:http://chinadenli.net/article30/gshjpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、域名注冊(cè)、服務(wù)器托管、自適應(yīng)網(wǎng)站、靜態(tài)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)