內(nèi)存分頁機制幼兒園版
你是個打工仔,職位是內(nèi)存管理員,工作是每天幫職位叫程序的家伙分配網(wǎng)格,存數(shù)據(jù)到網(wǎng)格,或從網(wǎng)格取數(shù)據(jù)。每個網(wǎng)格可以存1byte數(shù)據(jù),我們簡稱為b。這里有十億個b,按順序從0到九億九千九百九十九萬九千九百九十九編好了號。
為了零活分配又避免浪費(內(nèi)存碎片)把這些b100個一組分開,每一組稱為一頁。原來的編號分成了頁編號和偏移編號,比如584b變成了5頁84b。
剛說著來了一個名字叫快播的程序要申請一百萬零一b的網(wǎng)格,你馬上開始給它分配網(wǎng)格,因為網(wǎng)格是按頁分配,首先要記算需要多少頁。一百萬零一b除以100等于一萬頁余一b,因為網(wǎng)格按頁分配,就算只余一b也要多分配一頁,所以是一萬零一頁。
先從0頁開始找,9到157頁空著,于是你在地址映射表上記上:0對9、1對10……148對157。第二段空頁是685到1085,你記下149對685、150對686……549對1085。這時,名字叫360的程序下班了,他占用的網(wǎng)格空了出來。其中有一段在1085頁前面:153到392頁空了出來,你馬上把它們利用了起來。記下550對153、551對154……788對392。然后接著找空頁……
終于分配好了,你把記好的地址映射表打上快播的標簽然后放好。這時一個叫qq的程序要把9b到571b的數(shù)據(jù)取出來。首先你把他給你的地址轉(zhuǎn)化為頁地址加偏移地址的形式:0頁9b到99b,1頁全部,2頁全部,3頁全部,4頁全部,5頁0b到71b。
你拿來帶著qq標簽的地址映射表查了起來。0對173,于是你把173頁9b到99b的數(shù)據(jù)取了出來。1對174,于是你把174頁全部數(shù)據(jù)取了出來。2對378,于是你把378頁全部數(shù)據(jù)取了出來。3對415,于是你把415頁全部數(shù)據(jù)取了出來。4對523,于是你把523頁全部數(shù)據(jù)取了出來。5對1207,于是你把1207頁0b到71b的數(shù)據(jù)取了出來。