基本分段存儲管理方式

前言

??上篇文章基本分頁存儲管理介紹了不連續(xù)分配的第一種方式——基本分頁存儲管理蔑祟,本文繼續(xù)介紹另一種不連續(xù)分配方式——基本分段存儲管理方式须板。
本文內(nèi)容


1 分段

??進程的地址空間:按照程序自身的邏輯關系劃分為若干個段闸准,每個段都有一個段名(在低級語言中,程序員使用段名來編程)锭汛,每段從0開始編址秃臣。
??內(nèi)存分配規(guī)則:以段為單位進行分配,每個段在內(nèi)存中占據(jù)連續(xù)空間淮蜈,但各段之間可以不相鄰斋攀。
??舉例說明,進程A大小為16KB梧田,其中main函數(shù)占7KB淳蔼,某個子函數(shù)占3KB,用于保存全局變量的占6KB裁眯,所以按照邏輯功能將進程A劃分為3個段鹉梨,每個段的邏輯地址都是從0開始的。程序運行時各個段在內(nèi)存中占用連續(xù)的空間穿稳,但是各個段之間可以不相鄰存皂。

??由于是按邏輯功能模塊劃分,用戶編程更方便逢艘,程序可讀性更高旦袋。

注:K表示數(shù)字大小,KB表示存儲容量大小埋虹。1K = 1024,1KB = 1024B猜憎。

??分段系統(tǒng)的邏輯地址結構是由段號(段名)和段內(nèi)地址(段內(nèi)偏移量)所組成娩怎。
??例如搔课,若系統(tǒng)是按字節(jié)尋址,用32個二進制位表示邏輯地址,如果段號占和段內(nèi)地址各占16位爬泥,那么它的邏輯地址結構圖如下所示柬讨。


??段號的位數(shù)決定了每個進程最多可以分幾個段。
??段內(nèi)地址位數(shù)決定了每個段的最大長度袍啡。
??在上述的例子中踩官,段號占16位,所以每個進程最多有216 = 64K(64 * 1024)個段境输,段內(nèi)地址占16位蔗牡,因此每個段的最大長度是216 = 64KB。

2 段表

??和分頁存儲一樣嗅剖,為了能保證程序能正常運行辩越,就必須能從物理內(nèi)存中找到各個邏輯段存放的位置。為此每個進程建立一張段映射表信粮,簡稱“段表”黔攒。


(1) 每個段對應一個段表項,其中記錄了該段在內(nèi)存中的起始位置(又稱“基址”)和段的長度强缘。頁表中沒有頁長是因為所有的頁的長度都是相等的督惰。
(2) 各個段表項的長度是相同的。

??例如上圖旅掂,某關系系統(tǒng)中按字節(jié)尋址赏胚,采用分段存儲管理,邏輯結構為(段號16位商虐,段內(nèi)地址16位)栅哀,因此用16位即可表示最大段長。物理內(nèi)存大小為4GB(可用32位表示整個物理內(nèi)存的存儲地址空間)称龙。因此留拾,可以讓每個段表項占 16 + 32 = 48位,即6B鲫尊。由于段表項長度是相同的痴柔,因此段號可以是隱含的,不占存儲空間疫向。若段表在內(nèi)存中存放的起始地址為M咳蔚,則K號段對應的段表項存放的地址M + 6 * K。
??下面介紹一下上面的幾個參數(shù):

(1) 段內(nèi)地址決定了段的最大段長搔驼,上例中最大段長是7K = 7 * 210 < 8 * 210 谈火,所以最少需要13個二進制位就可以表示改進程的最大段長,即最少需要2個字節(jié)(16個二進制位)舌涨。
(2) 內(nèi)存4GB = 232 B 糯耍,按字編址,一個內(nèi)存單元大小為1B,所以共有232 B/ 1B = 232個內(nèi)存單元温技,所以內(nèi)存的編號0~232 - 1革为,給基址分配的空間大小就需要可以表示0~232 - 1中的任何一個數(shù),最大是232 - 1舵鳞,所以需要32個二進制位震檩,即4個字節(jié)。
(3) 所以蜓堕,一個段表項的大小就是 2 + 4 = 6B(字節(jié))抛虏。

3 地址的轉換

??進程運行時,操作系統(tǒng)會將內(nèi)存中PCB中段表的起始地址F和段表長度M傳送到段表寄存器中套才。


(1) 根據(jù)邏輯地址得到段號嘉蕾、段內(nèi)地址。
(2) 判斷段號是否越界霜旧。
(3) 查詢段表错忱,找到對應的段表項,段表項存放的地址為F + S * 段表項長度挂据。
(4) 檢查段內(nèi)地址是否超過段長以清。這是分段和分頁的區(qū)別,具體后面分析崎逃。
(5) 計算得到物理地址掷倔,物理地址 = 段基址 + 段內(nèi)地址。
(6) 訪問目標內(nèi)存單元个绍。

??在分頁中為什么不需判斷頁內(nèi)偏移量是否大于頁長勒葱?而分段需要判斷段內(nèi)偏移量大于段長?

??在分頁系統(tǒng)中巴柿,頁面大辛菟洹(頁長)是固定的L,如4KB = 4096广恢,而頁內(nèi)偏移量W = 邏輯地址 % 頁面大小L凯旋,所以頁內(nèi)偏移量W一定是小于L的,所以不需要判斷頁內(nèi)偏移量大于頁長钉迷。
??同理至非,根據(jù)邏輯地址也可以判斷。如果每個頁面的大小為2kB糠聪,用二進制表示邏輯地址荒椭,則末尾的K位表示頁內(nèi)偏移量,其余部分就是頁號舰蟆。例如趣惠,如果頁面大小為2KB狸棍,則邏輯地址結構圖如下,那么頁內(nèi)偏移量最大為212 - 1 < 2KB信卡。

對于分段存儲管理的系統(tǒng)中隔缀,由于段長的不固定的题造,這就可能會有段內(nèi)地址(段內(nèi)偏移量)大于段長的情況傍菇,所以需要判斷段內(nèi)偏移量是否大于段長。拿第二節(jié)的圖為例界赔,用16位表示段內(nèi)地址丢习,即段內(nèi)偏移量最大為64K,而三個段的段長都小于64K淮悼,所以需要進行判斷咐低。

4 分段、分頁管理的對比

??(1) 信息是物理單位袜腥。分頁的主要目的是為了實現(xiàn)離散分配见擦,提高內(nèi)存利用率。分頁僅僅是系統(tǒng)管理上需要羹令,完全是系統(tǒng)行為鲤屡,對用戶不可見。
??(2) 信息的邏輯單位福侈。分段的主要目的是更好的滿足用戶需求酒来。一個段通常包含一組屬于一個邏輯塊的信息。分段對用戶是可見的肪凛,用戶編程時需要顯示給出段名堰汉。
??(3) 頁的大小固定且由系統(tǒng)決定。段的長度不固定伟墙,決定于用戶編寫的程序翘鸭。
??分頁的用戶進程地址空間是一維的。在確定頁的大小情況下戳葵,只需要給出邏輯地址就可以定位到相應的內(nèi)存地址矮固。分段的用戶進程地址空間是二維的。要標識一個地址必須給出段名和段內(nèi)地址譬淳。
??(4) 分段比分頁更容易實現(xiàn)信息的共享和保護档址。
??不能被修改的代碼稱為純代碼或可重入代碼(不屬于臨界資源),這樣的代碼是可以被共享的邻梆。而可修改的代碼一般是不用于共享的守伸,如一個代碼中有多個變量,各進程并發(fā)同時訪問可能造成數(shù)據(jù)不一致浦妄。
??例如尼摹,如下圖见芹,將生產(chǎn)者進程分為三段,其中1號段是允許被生產(chǎn)者和消費者共享訪問的蠢涝。


??如果想要將1好號段給消費者共享玄呛,只需將消費者進程段表中加入與生產(chǎn)者進程相同的1號段的段表項即可。

??下面在看分頁存儲系統(tǒng)中的信息共享
??同樣將生產(chǎn)者進程分段和二,假設頁面大小為4KB徘铝,那么分頁后的共享的一號段被分為兩頁,同時每頁還有不可共享代碼惯吕,都只有一部分功能共享代碼惕它,從而就很難實現(xiàn)信息保護。



??(5) 訪問內(nèi)存的次數(shù)

(1) 分頁(單機頁表):第一次訪問內(nèi)存——查詢內(nèi)存中的頁表废登,第二次訪問內(nèi)存——訪問目標內(nèi)存單元淹魄。總共兩次訪問內(nèi)存堡距。
(2) 分段:第一次訪問內(nèi)存——查內(nèi)存中段表甲锡,第二次訪問內(nèi)存——訪問目標內(nèi)存單元∮鸾洌總共訪問兩次內(nèi)存缤沦。
??與分頁系統(tǒng)類似,分段系統(tǒng)也可以引入*快表機構半醉,將近期訪問過的段表項放到快表中疚俱,這樣可以少訪問一次內(nèi)存,加速地址變換速度缩多。

5 小結


??本文完

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呆奕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衬吆,更是在濱河造成了極大的恐慌梁钾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逊抡,死亡現(xiàn)場離奇詭異姆泻,居然都是意外死亡,警方通過查閱死者的電腦和手機冒嫡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門拇勃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人孝凌,你說我怎么就攤上這事方咆。” “怎么了蟀架?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵瓣赂,是天一觀的道長榆骚。 經(jīng)常有香客問我,道長煌集,這世上最難降的妖魔是什么妓肢? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮苫纤,結果婚禮上碉钠,老公的妹妹穿的比我還像新娘。我一直安慰自己方面,他們只是感情好放钦,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布色徘。 她就那樣靜靜地躺著恭金,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褂策。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天遍搞,我揣著相機與錄音钩杰,去河邊找鬼。 笑死,一個胖子當著我的面吹牛瓶摆,可吹牛的內(nèi)容都是我干的群井。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼稍坯,長吁一口氣:“原來是場噩夢啊……” “哼混巧!你這毒婦竟也來了陨亡?” 一聲冷哼從身側響起蛙埂,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤欲账,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡帚戳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年玷或,在試婚紗的時候發(fā)現(xiàn)自己被綠了儡首。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡偏友,死狀恐怖蔬胯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情位他,我是刑警寧澤氛濒,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站鹅髓,受9級特大地震影響舞竿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窿冯,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一骗奖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靡菇,春花似錦重归、人聲如沸米愿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽育苟。三九已至较鼓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間违柏,已是汗流浹背博烂。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漱竖,地道東北人禽篱。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像馍惹,于是被迫代替她去往敵國和親躺率。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

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

  • 一万矾、分段系統(tǒng)的基本原理 1悼吱、程序通過分段(segmentation)劃分為多個模塊,每個段定義一組邏輯信息良狈。如代碼...
    e9f3ca3721bc閱讀 2,896評論 0 0
  • 非連續(xù)分配允許一個程序分散地裝入到不相鄰的內(nèi)存分區(qū)中后添,根據(jù)分區(qū)的大小是否固定分為分頁存儲管理方式和分段存儲管理方式...
    saviochen閱讀 1,980評論 0 4
  • 前段時間看了進程管理,覺得對編程簡直大有裨益薪丁,至少對于多線程編程方面遇西,對系統(tǒng)的進程管理有了非常深刻的理解馅精,看來還是...
    KevinCool閱讀 1,159評論 0 1
  • 內(nèi)存管理 總的來說,包括內(nèi)存管理和虛擬內(nèi)存管理粱檀。內(nèi)存管理包括程序裝入等概念硫嘶、交換技術、連續(xù)分配管理方式和非連續(xù)分配...
    楚_kw閱讀 7,053評論 0 5
  • 大家都有一個特殊的技能梧税,有的是打籃球沦疾,有的是踢足球,有的彈吉他第队,有的喜歡數(shù)學哮塞,等等等等,我的特殊技能是籃球今天...
    07小石頭奧特曼閱讀 473評論 0 1