正文
存儲(chǔ)管理是操作系統(tǒng)非常重要的功能之一,本文主要介紹操作系統(tǒng)存儲(chǔ)管理的基礎(chǔ)知識(shí),包括緩存相關(guān)知識(shí)、連續(xù)內(nèi)存分配、伙伴系統(tǒng)、非連續(xù)內(nèi)存分配、內(nèi)存碎片等,并結(jié)合linux系統(tǒng)對(duì)這些知識(shí)進(jìn)行簡(jiǎn)單的驗(yàn)證。文章內(nèi)容來(lái)自筆者學(xué)習(xí)清華大學(xué)和UCSD的操作系統(tǒng)課程的筆記和總結(jié),以及自己的思考和實(shí)踐。
分層的存儲(chǔ)管理:
CPU(Central Processing Unit)是計(jì)算機(jī)的核心,其主要工作是解釋計(jì)算機(jī)指令、處理數(shù)據(jù)。那么這些指令和數(shù)據(jù)來(lái)自哪里呢?和TCP/IP的分層設(shè)計(jì)思想一樣,數(shù)據(jù)的存儲(chǔ)管理也分為以下四層:
寄存器
cache
內(nèi)存
外存(外設(shè))
四層中,越上層的速度越快,同時(shí)造價(jià)也更為昂貴,自然空間也更小。寄存器通常只有幾十之多幾百個(gè)字節(jié),主要用來(lái)存放固定的指針或者計(jì)算的中間結(jié)果。cache是一個(gè)比較通用的術(shù)語(yǔ),在計(jì)算機(jī)體系機(jī)構(gòu)中,稱之為高速緩沖存儲(chǔ)器,直接由硬件來(lái)管理,不同的CPU有不同級(jí)別的cache內(nèi)存由操作系統(tǒng)來(lái)管理。內(nèi)存(一般又稱為主存)在cache失效的時(shí)候訪問(wèn),速度要比cache慢至少一個(gè)數(shù)量級(jí),內(nèi)存管理是操作系統(tǒng)中最復(fù)雜的功能之一。外存又稱之為虛擬內(nèi)存,是將外設(shè)的一部分空間用來(lái)存儲(chǔ)未能加載到內(nèi)存中的數(shù)據(jù),當(dāng)內(nèi)存缺頁(yè)(頁(yè)的概念后面會(huì)介紹)的時(shí)候就會(huì)用到外存,外存的速度與內(nèi)存比起來(lái)與天壤之別,慢個(gè)幾十萬(wàn)倍都是可能的。
cache:
在計(jì)算機(jī)系統(tǒng)中,CPU的運(yùn)行速度與主存(即我們平常所說(shuō)的內(nèi)存)的訪問(wèn)速度極不匹配,導(dǎo)致CPU的利用率比較低。為了提高CPU利用率,現(xiàn)代計(jì)算機(jī)體系結(jié)構(gòu)中廣泛采用高速緩沖存儲(chǔ)器(Cache)技術(shù)。
cache也分為好多級(jí),比如一級(jí)緩存(L1 cache)、二級(jí)緩存(L2 cache),基本上的CPU都至少有L1 cache與L2 cache,目前稍微好一點(diǎn)的CPU也會(huì)有L3 cache,對(duì)于性能更好的CPU還會(huì)有L4 cache。L1 cache、L2 cache一般都只有幾十K個(gè)字節(jié),存儲(chǔ)指令或者數(shù)據(jù),L3cache可以有幾百個(gè)字節(jié)或者幾M,L4 cache可以有幾十、幾百M(fèi)。同樣的,空間大小與速度、價(jià)格相關(guān)。
局部性原理:
我們看到,cache的容量(特別是效率最高的L1 cache、L2 cache)都非常小,那怎么保證有比較高的命中率呢,如果命中率比較低,每次還得去內(nèi)存取數(shù)據(jù),還要置換cache中的數(shù)據(jù),反而得不償失。幸好,程序的局部性原理保證了cache能有比較高的命中率。什么是局部性原理:程序一般以模塊的形式組織,某一模塊的程序