)。當(dāng)PG=1 時(shí),系統(tǒng)使用分頁(yè)機(jī)制。80386使用大小位4K的頁(yè),并且每一個(gè)頁(yè)的邊界隊(duì)奇。即每一個(gè)頁(yè)的起始位置都可以被4K整除。這樣4G的字節(jié)就被分成了1M 頁(yè)。分頁(yè)機(jī)制把線性頁(yè)映射成物理頁(yè)。真正的起到了轉(zhuǎn)換作用
下面我們看一下LINUXE得分頁(yè)結(jié)構(gòu):
1.多級(jí)頁(yè)表結(jié)構(gòu)
在LINUX中含有1M個(gè)頁(yè)。其中每個(gè)頁(yè)表占4個(gè)字節(jié)。則需要占用4M的連續(xù)內(nèi)存因此LINUX引入了2 級(jí)頁(yè)表結(jié)構(gòu)。在線性地址中的后10 位(22-32)定義了二級(jí)頁(yè)表。
二級(jí)頁(yè)表有1K 個(gè)字節(jié),頁(yè)正好存在]一個(gè)4K 的頁(yè)中。并且通過(guò)前20位進(jìn)行索引,從而實(shí)現(xiàn)實(shí)際的物理地址。
這個(gè)地方我說(shuō)不太清楚。大致可以這樣理解。
如:有N 個(gè)鏈表。每一個(gè)便是一頁(yè)?勺詈笠豁(yè)的內(nèi)容是指向另一個(gè)二級(jí)煉表的指針(或者是索引項(xiàng))
2,頁(yè)面項(xiàng)和頁(yè)目錄項(xiàng)
對(duì)于每一個(gè)頁(yè)。都會(huì)存在一個(gè)頁(yè)面項(xiàng)。用來(lái)表示該頁(yè)的使用狀況,是否空閑。是否在內(nèi)存中等等。而這些相會(huì)存儲(chǔ)成一個(gè)連標(biāo)。以減少使用表時(shí)的查詢時(shí)間等。
而每一個(gè)頁(yè)表,會(huì)存在1024個(gè)頁(yè)面項(xiàng),這才是真正的“頁(yè)“。
3,線性地址到物理地址的切換
- CR
包含頁(yè)目錄的起始地址,用32 位地址中的31-22位的內(nèi)容作頁(yè)目錄的頁(yè)目錄項(xiàng)的索引,于CR3種的頁(yè)目錄的起始地址相加。得到相應(yīng)頁(yè)表的地址 - 從指定的地址中取出
32 位頁(yè)目錄項(xiàng)。它的提12 位是0用這32 位地址中21-12位作為頁(yè)表中的頁(yè)面的索引。將它乘以4和頁(yè)表的起始地址相加,得到32位地址 - 獎(jiǎng)
11-0位作為相對(duì)一頁(yè)面地址的偏移量,于32位頁(yè)面地址相加。形成32 位的物理地址。
4,頁(yè)面CACHE
當(dāng)然,系統(tǒng)頻繁的訪問(wèn)二級(jí)頁(yè)表,會(huì)造成很大的時(shí)間浪費(fèi),因此引入了頁(yè)表CACHE,用來(lái)保存最近使用的頁(yè)面,或者頻繁使用的頁(yè)面,關(guān)于CACHE 的原理這里不再詳細(xì)講解,有興趣的朋友可以查一些,計(jì)算機(jī)專(zhuān)業(yè)的基礎(chǔ)教材
至此,LINUX使用的836保護(hù)模式,基本上講解完畢。至于控制轉(zhuǎn)移和任務(wù)切換。和一般的匯編編程差不多少,本人匯編水平太低。不在獻(xiàn)丑
總的說(shuō)來(lái),多任務(wù)的切換,以及保護(hù)模式的應(yīng)用。虛擬存儲(chǔ)系統(tǒng)的實(shí)現(xiàn),是建立在硬件的技術(shù)支持之上的。
個(gè)人認(rèn)為,LINUX的存儲(chǔ)管理。在不同的機(jī)器上是完全不同的,至于linux是否為他們提供了統(tǒng)一的接口。我還不太清楚。可以參見(jiàn)其他機(jī)型的源碼