分頁系統(tǒng)的地址變換機構(gòu)

首先备闲,我們得理清分頁的概念;

在計算中,存儲的最小的單位是位(bit)捅暴,其值要么是0恬砂,要么是1。而單純的0或1所能表示的信息極為有限蓬痒,所以泻骤,在計算機中,我們以最小一個字節(jié)(Byte梧奢,字)為基本單位來進行操作狱掂,存儲我們的數(shù)據(jù)。(注釋:對于布爾類型亲轨,值為1或0趋惨,理論上只占一位,但在計算機中惦蚊,實際操作時一般是占用一個字節(jié)的空間器虾,當然,在具體實現(xiàn)中也可能多于一個字節(jié)养筒。)

操作系統(tǒng)對每一個字節(jié)進行了編號曾撤,比如從0000 0000開始端姚,然后是0000 0001晕粪,再然后是0000 0002,0000 0003 渐裸、巫湘、、

內(nèi)存示意圖

根據(jù)不同的系統(tǒng)昏鹃,不同的內(nèi)存大小尚氛,所用來進行地址計數(shù)的數(shù)的位數(shù)有所差別,但道理不變洞渤;

然后阅嘶,為了解決在操作中面臨的一些問題,我們想出了分頁的辦法,什么是分頁呢讯柔?就是原本是以一個字節(jié)為最小單位去存取數(shù)據(jù)抡蛙,這樣地址實在是太多了,每次一個一個的去找魂迄,實在是很麻煩粗截,而且,我們經(jīng)常會使用一段連續(xù)的空間捣炬。

有沒有什么辦法可以不這么麻煩呢 熊昌?有的,就是分頁湿酸。

我們將連續(xù)的一定數(shù)量的字節(jié)(通常一頁大小為1KB~8KB)視為一個整體(邏輯上)婿屹,即為一頁,然后對進行編號推溃,比如從0000 0000開始选泻,然后是0000 0001,再然后是0000 0002美莫,0000 0003 页眯、、厢呵、

舉例:計算機內(nèi)存物理地址編碼為0000 0000 0000 0000 ~ 1111 1111?1111 1111窝撵,(計算機內(nèi)存地址以二進制來計數(shù),我們在C語言中看到的16位地址襟铭,實際上是邏輯地址碌奉,是面向用戶的,并非實際進行操作時的最底層物理地址)

如果我們把連續(xù)的2KB(2^{11} Byte)視為一頁寒砖,那么內(nèi)存可以被分為2^{16}?÷?2^{11} ?= ?2^{5} 塊(在邏輯地址中赐劣,我們稱為頁,在實際物理地址中哩都,稱為塊魁兼。本質(zhì)是操作系統(tǒng)同時和用戶程序和實際物理地址打交道,對于用戶程序漠嵌,我們約定為頁咐汞;對于實際物理地址,操作系統(tǒng)將同樣大小的內(nèi)存空間視為塊),然后操作系統(tǒng)對塊進行編號,從 0000 0 到 1111 1疫赎;(這是操作系統(tǒng)和我們的約定,最底層的物理內(nèi)存可不知道我們把它們看成了一塊一塊的)

對內(nèi)存以2KB分頁植阴,同一種顏色的為一頁蟹瘾,并編號

然后,我們需要使用內(nèi)存的時候掠手,就去和操作系統(tǒng)打交道热芹,告訴它我們需要多少內(nèi)存,然后操作系統(tǒng)根據(jù)內(nèi)存使用情況惨撇,判別還有哪些塊是空的伊脓,然后分配給我們需要的大小的塊數(shù),分頁的優(yōu)點在這個步驟就體現(xiàn)出來了魁衙,可以不用一定分配連續(xù)的內(nèi)存空間給用戶程序报腔,而是分配?頁?給用戶程序,可以是不連續(xù)的剖淀〈慷辏可是,頁可以是不連續(xù)的纵隔,那我們怎么知道我們被分到了哪些頁呢翻诉?嗯,所以操作系統(tǒng)在分配內(nèi)存時要建立一個表捌刮,表中記錄你是哪個程序碰煌,分配給了你哪些頁。

在用戶程序的運行過程中绅作,各種操作都是給出邏輯上的操作芦圾,然后,交給操作系統(tǒng)去實現(xiàn)俄认。

比如:

我們在上面的假設的基礎上个少,現(xiàn)在一個程序向操作系統(tǒng)申請10KB(即5頁)的空間,操作系統(tǒng)就會根據(jù)目前的內(nèi)存使用情況眯杏,進行分配夜焦。假設內(nèi)存現(xiàn)在夠用, 操作系統(tǒng)分給程序5頁的內(nèi)存空間的使用權(quán)限岂贩,程序就會知道自己有5頁的內(nèi)存空間可用茫经,編號為 0 - 4,即 000 ~ 100河闰。但是科平,這5頁在程序看來是連續(xù)的,在操作系統(tǒng)這里姜性,其實不一定是連續(xù)的,可能是下圖的情況:


如果用戶程序想訪問邏輯地址為?0001 1101 1011 1010 的內(nèi)存髓考,需要由操作系統(tǒng)進行轉(zhuǎn)換部念,操作系統(tǒng)得到實際的物理地址后,告訴用戶程序,諾儡炼,這就是你要訪問的內(nèi)存妓湘,然后程序在上面操作,下面講解具體的過程乌询。

當用戶提出內(nèi)存訪問請求時榜贴,分頁地址變換機構(gòu)會將所提交訪問的邏輯地址轉(zhuǎn)換為實際物理地址

首先,將邏輯地址拆分為兩部分妹田,頁號 + 頁內(nèi)地址 ?比如:

邏輯地址為0001 1101 1011 1010?的內(nèi)存地址唬党,根據(jù)前面的條件,頁號是 5 位鬼佣,即:

頁號: 0001 1 ?+ ?頁內(nèi)偏移: 101 1011 1010

然后去找到頁表驶拱,去其中找到與頁號對于的物理塊,在找之前晶衷,要根據(jù)頁號蓝纲,判斷一波,看頁號是不是越界了晌纫,比如税迷,在這里頁號是 0001 1 =》 3 ,沒有超過操作系統(tǒng)分配給程序的頁的上限5锹漱,所以沒有越界翁狐,如果越界了,操作系統(tǒng)會產(chǎn)生越界中斷凌蔬。

在這里露懒,有個問題需要解決,頁表在哪里呢砂心?在上面我們知道那個對應關(guān)系(頁=》塊)是由操作系統(tǒng)維持的懈词,操作系統(tǒng)把它放在哪里的呢?

由于邏輯地址到物理地址的轉(zhuǎn)換是很頻繁的操作辩诞,所以考慮用寄存器來存放頁表坎弯,這樣可以大大提高速度,但通常頁表很大译暂,如果全部放在寄存器里抠忘,那成本就太高了,所以外永,退一步崎脉,我們把頁表存放在內(nèi)存里。這里需要回顧一下伯顶,內(nèi)存是由一個個字節(jié)遞增的地址表示的囚灼,我們前面討論的都是內(nèi)存的管理與分配問題骆膝。我們前面的問題都還沒有解決,那我們把頁表放在內(nèi)存里灶体,怎么放呢阅签?它需要用到頁表嗎?那不成了它依賴自己的死循環(huán)了蝎抽?嗯政钟,實際是存放頁表時不需要依賴頁表,操作系統(tǒng)把頁表存在內(nèi)存中一段連續(xù)的空間樟结,然后有個起始地址(這個是真實的物理地址)养交,還有個頁表長度(即頁表有多大,占用了多少空間)狭吼,然后层坠,操作系統(tǒng)把這兩個信息放到一個寄存器里。

操作系統(tǒng)需要用到頁表的時候刁笙,就去寄存器處取得頁表相關(guān)信息(首地址+頁表大衅苹ā)。

那我們是怎樣去從頁表獲得物理塊的呢疲吸?

首先座每,將頁表在內(nèi)存中的開始地址作為起始地址(圖中紅色線的地址):

加上表項的增量,(即 ?頁號 ?× ?每個表項所占的內(nèi)存大姓病)峭梳,便來到了存放有該頁號在頁表中對應的表項的位置(圖中綠色線的位置)。取出其中的內(nèi)容(頁號+對應的塊號)蹂喻,便可獲得實際的物理塊號葱椭;僅僅得到物理塊是不夠的,還得知道在物理塊中的什么位置口四,因為具體操作的時候孵运,操作系統(tǒng)還是以字節(jié)為基本單位進行操作的÷剩回到所請求的地址(邏輯地址)治笨,我們利用了前面一部分,還有后面一部分〕嘟溃現(xiàn)在我們來將它利用起來旷赖,把它直接作為物理地址的后一部分就可以了。獲得了實際的物理塊更卒,我們加上頁內(nèi)偏移(邏輯地址的后一部分)等孵,即可獲得物理地址,所以物理地址是:

3 + 101 1011 1010 ?=》 ?1011 0 + 101 1011 1010 ?=》?1011 0101 1011 1010

于是逞壁,一個用戶程序邏輯地址就被操作系統(tǒng)轉(zhuǎn)換為了實際物理地址流济。

總結(jié):

操作系統(tǒng)需要借助頁表來管理锐锣、分配內(nèi)存腌闯,而頁表本身就是存放在內(nèi)存空間中一段連續(xù)的空間中的绳瘟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姿骏,隨后出現(xiàn)的幾起案子糖声,更是在濱河造成了極大的恐慌,老刑警劉巖分瘦,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蘸泻,死亡現(xiàn)場離奇詭異,居然都是意外死亡嘲玫,警方通過查閱死者的電腦和手機悦施,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來去团,“玉大人抡诞,你說我怎么就攤上這事⊥僚悖” “怎么了昼汗?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鬼雀。 經(jīng)常有香客問我顷窒,道長,這世上最難降的妖魔是什么源哩? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任鞋吉,我火速辦了婚禮,結(jié)果婚禮上励烦,老公的妹妹穿的比我還像新娘谓着。我一直安慰自己,他們只是感情好崩侠,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布漆魔。 她就那樣靜靜地躺著,像睡著了一般却音。 火紅的嫁衣襯著肌膚如雪改抡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天系瓢,我揣著相機與錄音阿纤,去河邊找鬼。 笑死夷陋,一個胖子當著我的面吹牛欠拾,可吹牛的內(nèi)容都是我干的胰锌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼藐窄,長吁一口氣:“原來是場噩夢啊……” “哼资昧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荆忍,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤格带,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刹枉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叽唱,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年微宝,在試婚紗的時候發(fā)現(xiàn)自己被綠了棺亭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蟋软,死狀恐怖镶摘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钟鸵,我是刑警寧澤钉稍,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站棺耍,受9級特大地震影響贡未,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒙袍,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一俊卤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧害幅,春花似錦消恍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至邑遏,卻和暖如春佣赖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背记盒。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工憎蛤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓俩檬,卻偏偏與公主長得像萎胰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棚辽,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容