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