內(nèi)存管理

前段時(shí)間看了進(jìn)程管理弓摘,覺得對(duì)編程簡(jiǎn)直大有裨益,至少對(duì)于多線程編程方面刃宵,對(duì)系統(tǒng)的進(jìn)程管理有了非常深刻的理解,看來還是要多學(xué)習(xí)徘公。今天開始學(xué)習(xí)內(nèi)存管理這一節(jié)牲证,看了一遍沒怎么看懂,于是在這里寫下筆記关面,慢慢咀嚼坦袍,直到看明白。

  1. 從源程序變成在內(nèi)存中執(zhí)行的程序
  • 編譯
    將源代碼編譯成若干個(gè)目標(biāo)模塊
  • 鏈接
    將目標(biāo)模塊和需要的庫函數(shù)鏈接在一起等太,形成完成的裝入模塊
  • 裝入
    由裝入程序?qū)⒀b入模塊裝入內(nèi)存執(zhí)行
  1. 程序鏈接三種方式
  • 靜態(tài)鏈接
    程序運(yùn)行之前捂齐,將目標(biāo)模塊和庫函數(shù)鏈接成完整的可執(zhí)行程序
  • 裝入時(shí)動(dòng)態(tài)鏈接
    在裝入內(nèi)存的時(shí)候,邊裝入邊對(duì)目標(biāo)模塊和庫函數(shù)進(jìn)行鏈接
  • 運(yùn)行時(shí)候動(dòng)態(tài)鏈接
    在程序執(zhí)行的時(shí)候需要該目標(biāo)模塊的時(shí)候缩抡,才對(duì)其進(jìn)行鏈接
  1. 程序裝入的時(shí)候的三種方式
  • 絕對(duì)裝入
    編譯程序產(chǎn)生的是絕對(duì)地址的目標(biāo)代碼奠宜,絕對(duì)裝入程序按照絕對(duì)地址,將程序和數(shù)據(jù)裝入內(nèi)存瞻想,程序的邏輯地址和實(shí)際內(nèi)存的地址完全相同压真,所以不需要進(jìn)行地址變換,只適用于單道程序環(huán)境蘑险。
  • 可重定位裝入
    多個(gè)目標(biāo)模塊的起始地址都是從0開始滴肿,程序中其它地址都是相對(duì)于起始地址的,根據(jù)內(nèi)存當(dāng)前情況佃迄,將裝入模塊裝入到內(nèi)存的適當(dāng)位置泼差,所以必須分配作業(yè)要求的全部內(nèi)存空間贵少。裝入的時(shí)候?qū)δ繕?biāo)程序的指令和數(shù)據(jù)的修改過程稱為重定位,地址變換是在裝入時(shí)候一次性完成的堆缘,因此稱為靜態(tài)重定位滔灶。
  • 動(dòng)態(tài)運(yùn)行時(shí)裝入
    裝入程序在把裝入模塊裝入內(nèi)存后,不把相對(duì)地址轉(zhuǎn)換為絕對(duì)地址套啤,直到程序真正執(zhí)行的時(shí)候完成轉(zhuǎn)換宽气,所以裝入內(nèi)存后的所有地址均為相對(duì)地址,需要硬件重定位寄存器的支持潜沦。
  1. 邏輯地址空間
    每個(gè)目標(biāo)模塊都是從0開始編址萄涯,稱為目標(biāo)模塊的相對(duì)地址也稱為邏輯地址,鏈接程序?qū)⒁来螌⒏鱾€(gè)模塊相對(duì)地址構(gòu)成統(tǒng)一的從0開始編址的邏輯地址空間唆鸡,不同進(jìn)程可以有相同的邏輯地址涝影,因?yàn)檫@些地址在裝入內(nèi)存的時(shí)候可以映射到主存的不同位置。

  2. 物理地址空間
    內(nèi)存中物理單元的集合争占,地址轉(zhuǎn)換的最終地址燃逻,進(jìn)程在運(yùn)行的時(shí)候指令和數(shù)據(jù)都要通過物理地址從主存中存取。地址重定位就是將邏輯地址轉(zhuǎn)換成物理地址臂痕。

  3. 內(nèi)存保護(hù)

  • CPU設(shè)置一對(duì)上伯襟,下限寄存器
    存放用戶作業(yè)在主存的下限和上線地址,CPU要訪問一個(gè)地址的時(shí)候握童,分別與這兩個(gè)地址進(jìn)行比較姆怪,判斷是否越界。
  • 重定位寄存器(基址寄存器)和界地址寄存器(限長寄存器)
    首先邏輯地址和界地址寄存器進(jìn)行比較澡绩,如果沒有發(fā)生越界稽揭,加上重定位寄存器的值后映射成物理地址,送交內(nèi)存單元肥卡。所以界地址寄存器含有邏輯地址的最大值溪掀。
  1. 覆蓋
    將用戶空間分成一個(gè)固定區(qū)和幾個(gè)覆蓋區(qū),程序中經(jīng)巢郊活躍的部分放在固定區(qū)揪胃,其余部分,將要訪問的段放入覆蓋區(qū)氛琢,其它段放在外存中只嚣,在需要調(diào)用前,系統(tǒng)將其掉入覆蓋區(qū)艺沼,替換覆蓋區(qū)原有的段册舞。不在覆蓋區(qū)的段會(huì)常駐內(nèi)存。

  2. 交換
    將處于等待狀態(tài)的程序從內(nèi)存移到輔存障般,換出调鲸。把準(zhǔn)備好競(jìng)爭(zhēng)CPU運(yùn)行的程序從輔存移到內(nèi)存盛杰,換入。內(nèi)存管理器的交換過程速度足夠快藐石,總有進(jìn)程在內(nèi)存中可以執(zhí)行即供。
    交換技術(shù)在不同進(jìn)程或者作業(yè)中進(jìn)行,覆蓋用于同一個(gè)進(jìn)程或者程序中于微。覆蓋技術(shù)要求給出程序段之間的覆蓋結(jié)構(gòu)逗嫡,對(duì)于主存無法存放用戶程序的矛盾,是通過虛擬內(nèi)存技術(shù)來解決的株依。

連續(xù)分配管理方式

給用戶程序分配一個(gè)連續(xù)的內(nèi)存空間驱证。

這塊將是非常關(guān)鍵而且重要的部分了,涉及了單一連續(xù)分配恋腕,固定區(qū)分配和動(dòng)態(tài)分區(qū)分配抹锄。

  1. 單一連續(xù)分配
    內(nèi)存分為系統(tǒng)區(qū)和用戶區(qū),因?yàn)橹挥幸坏莱绦蜍伲詿o需內(nèi)存保護(hù)伙单,無外部碎片,可以采用覆蓋技術(shù)哈肖,只能用于單用戶單任務(wù)的操作系統(tǒng)吻育,有內(nèi)部碎片,存儲(chǔ)器利用率低淤井。

  2. 固定分區(qū)分配
    將用戶內(nèi)存空間分為多個(gè)固定大小的區(qū)域布疼,每個(gè)分區(qū)只裝入一道作業(yè),有空閑分區(qū)的時(shí)候再從外存的后備作業(yè)隊(duì)列中庄吼,選擇適當(dāng)大小的作業(yè)裝入該分區(qū)。

  • 分區(qū)大小相等
  • 分區(qū)大小不等

便于內(nèi)存分配严就,將分區(qū)按照大小排隊(duì)总寻,建立一張分區(qū)說明表。回憶之梢为。包含每個(gè)分區(qū)的起始地址渐行,大小和狀態(tài)。
兩個(gè)問題铸董,程序可能太大而放不進(jìn)任何一個(gè)分區(qū)里祟印,這時(shí)需要使用覆蓋技術(shù)來使用內(nèi)存空間。內(nèi)部碎片粟害,當(dāng)程序小于固定分區(qū)大小的時(shí)候蕴忆,也占用了一個(gè)完整的內(nèi)存分區(qū)空間。

  1. 動(dòng)態(tài)分區(qū)分配
    可變分區(qū)分配悲幅,動(dòng)態(tài)劃分內(nèi)存的分區(qū)方法套鹅,根據(jù)進(jìn)程的大小動(dòng)態(tài)建立分區(qū)站蝠,使得分區(qū)大小正好適合進(jìn)程的需要。系統(tǒng)中的分區(qū)大小和數(shù)目是可以變化的卓鹿。
    在系統(tǒng)運(yùn)行過程中菱魔,會(huì)產(chǎn)生較多的小的內(nèi)存塊,稱為外部碎片吟孙±骄耄克服外部碎片可以通過緊湊技術(shù)解決,操作系統(tǒng)不時(shí)的對(duì)進(jìn)程進(jìn)行移動(dòng)和整理杰妓,需要?jiǎng)討B(tài)重定位寄存器的支持藻治。
    動(dòng)態(tài)分區(qū)的分配策略,是指將內(nèi)存中的空閑塊如何分配給進(jìn)程使用:
  • 首次適應(yīng)算法
    空閑分區(qū)按照地址遞增的順序稚失,分配內(nèi)存的時(shí)候按照順序查找栋艳,找到第一個(gè)能滿足要求的分區(qū)
  • 最佳適應(yīng)算法
    空閑分區(qū)按照容量遞增排序,找到第一個(gè)能夠滿足要求的分區(qū)
  • 最壞適應(yīng)算法
    空閑分區(qū)按照容量遞減排序句各,找到第一個(gè)能夠滿足要求的分區(qū)
  • 鄰近適應(yīng)算法
    分配內(nèi)存的時(shí)候從上次查找結(jié)束的位置開始繼續(xù)尋找吸占,循環(huán)首次適應(yīng)算法

首次適應(yīng)算法會(huì)使得在內(nèi)存的低地址處出現(xiàn)很多小的空閑分區(qū)(因?yàn)橐话阍趦?nèi)存低地址處分配空間),每次分配查找的時(shí)候凿宾,要經(jīng)過這些分區(qū)矾屯,增加了查找的開銷。
鄰近適應(yīng)算法會(huì)在內(nèi)存的末尾分配空間初厚,內(nèi)存在前面使用后釋放件蚕,不會(huì)參與分配,然后分裂成小碎片产禾,通常比首次適應(yīng)算法的結(jié)果要差排作。
最佳適應(yīng)算法以容量遞增的形式分配分區(qū),會(huì)留下很小的難以利用的內(nèi)存塊亚情,因此會(huì)產(chǎn)生最多的外部碎片妄痪。
最壞適應(yīng)算法以容量遞減的形式分配分區(qū),會(huì)把最大的連續(xù)內(nèi)存劃分開楞件,會(huì)很快導(dǎo)致沒有可用的大的內(nèi)存塊衫生。

內(nèi)部碎片:存在于固定分區(qū)中,分區(qū)內(nèi)部有空間浪費(fèi)土浸,稱為內(nèi)部碎片罪针。
外部碎片:指在所有分區(qū)外的存儲(chǔ)空間會(huì)變成越來越多的碎片,存在于動(dòng)態(tài)分區(qū)分配中黄伊,各個(gè)進(jìn)程將內(nèi)存區(qū)域分配后泪酱,內(nèi)存區(qū)域會(huì)殘留的小的內(nèi)存塊。

非連續(xù)分配管理方式

允許一個(gè)程序分散的裝入到不相鄰的內(nèi)存分區(qū)中,需要額外的空間去存儲(chǔ)它們分散區(qū)域的索引西篓,非連續(xù)分配方式的存儲(chǔ)密度小于連續(xù)存儲(chǔ)方式愈腾。

包括分頁存儲(chǔ)管理方式和分段存儲(chǔ)管理方式,其中分頁存儲(chǔ)管理方式分為基本分頁存儲(chǔ)管理方式和請(qǐng)求分頁存儲(chǔ)管理方式岂津。

  1. 基本分頁存儲(chǔ)管理方式
    把主存空間劃分為大小相等而且固定的比較小的塊虱黄,作為主存的基本單位,每個(gè)進(jìn)程也以塊為單位進(jìn)行劃分吮成,進(jìn)程在執(zhí)行的時(shí)候橱乱,以塊為單位逐個(gè)申請(qǐng)主存中的塊空間。
    這樣的分配方法不會(huì)產(chǎn)生外部碎片粱甫,進(jìn)程只會(huì)為最后一個(gè)不完整的塊申請(qǐng)一個(gè)主存塊空間的時(shí)候泳叠,產(chǎn)生主存碎片,不過這個(gè)碎片相對(duì)于進(jìn)程來講也是非常小的茶宵,每個(gè)進(jìn)程平均產(chǎn)生半個(gè)塊大小的內(nèi)部碎片危纫,頁內(nèi)碎片。
    • 頁面
      進(jìn)程的塊稱之為頁乌庶。
      內(nèi)存中的塊稱之為頁框种蝶,也稱為頁幀。
      外存中也以同樣的單位進(jìn)行劃分瞒大,稱為塊螃征。
      進(jìn)程在執(zhí)行時(shí)候需要申請(qǐng)主存空間,就是為每個(gè)頁面分配主存中可用的頁框透敌,所以頁和頁框一一對(duì)應(yīng)盯滚。
      頁面大小就是說進(jìn)程分成的基本單位頁的大小,應(yīng)該是2的整數(shù)冪酗电。頁面大小適中魄藕,太小會(huì)導(dǎo)致頁面數(shù)過多,頁表就太長撵术,占用大量內(nèi)存背率,增加硬件地址轉(zhuǎn)換的開銷,降低頁面換入/換出效率荷荤。頁面過大導(dǎo)致頁內(nèi)碎片增大退渗,降低內(nèi)存的利用率移稳。
    • 地址結(jié)構(gòu)
      前一部分為頁號(hào)12-31位蕴纳,所以地址空間最多有2^20頁,后一部分是頁內(nèi)偏移量W个粱,12位古毛,0-11位,所以每頁大小為4KB。地址結(jié)構(gòu)決定了虛擬內(nèi)存的尋址空間有多大稻薇。
      其實(shí)整個(gè)頁面就是地址的集合嫂冻,所以頁面便移量也就確定了一定位置的物理地址。從而確定了從邏輯地址轉(zhuǎn)換到物理地址的一個(gè)位置塞椎。
  • 頁表
    在內(nèi)存中找到進(jìn)程的每個(gè)頁面所對(duì)應(yīng)的物理塊桨仿,系統(tǒng)為每個(gè)進(jìn)程建立了一個(gè)頁表。記錄頁面在內(nèi)存中對(duì)應(yīng)的物理塊號(hào)案狠,頁面存放在內(nèi)存中服傍。
    頁表由頁表項(xiàng)組成,頁表項(xiàng)第一部分是進(jìn)程的頁號(hào)骂铁,第二部分是物理內(nèi)存中的塊號(hào)吹零,該塊號(hào)和地址的第二部分頁內(nèi)偏移量共同組成物理地址。
    頁表的作用是實(shí)現(xiàn)從頁號(hào)到物理塊號(hào)的地址映射拉庵。
  1. 基本地址變換機(jī)構(gòu)
    頁表長度指的是一共有多少頁M灿椅。
    頁表項(xiàng)長度指的是每一頁表項(xiàng)占多大的內(nèi)存空間。
    頁面大小是指每一頁占多大的內(nèi)存空間L钞支。
    所以地址變換機(jī)構(gòu)將邏輯地址轉(zhuǎn)換成內(nèi)存的物理地址的一般步驟如下:
  • 從邏輯地址A計(jì)算頁號(hào)P和頁內(nèi)偏移量茫蛹,P=A/L,W=A%L伸辟。L是頁面大小麻惶。
  • 比較頁號(hào)P和頁表長度M,P>=M信夫,則產(chǎn)生越界中斷窃蹋,否則繼續(xù)執(zhí)行。
  • 計(jì)算對(duì)應(yīng)頁號(hào)的頁表項(xiàng)地址静稻,從該頁表項(xiàng)中提取物理塊號(hào)警没。對(duì)應(yīng)的頁表項(xiàng)地址=P*頁表項(xiàng)長度+F(頁表起始地址F),索引到該頁表項(xiàng)后振湾,取得物理塊號(hào)b
  • 計(jì)算出內(nèi)存中物理地址E=b*L+W,因?yàn)檫M(jìn)程中的頁面和內(nèi)存中的頁面大小都是一致的杀迹,一一對(duì)應(yīng)。所以通過物理塊號(hào)乘以頁面大小押搪,加上頁面便移量就可以找到對(duì)應(yīng)的物理地址树酪。
    頁式管理只要給出一個(gè)整數(shù)就能確定對(duì)應(yīng)的物理地址,因?yàn)轫撁娲笮是固定的大州,頁式管理中地址空間是一維的续语。
  • 頁表項(xiàng)大小的確定
    頁表項(xiàng)是為了找到相應(yīng)頁在內(nèi)存中的位置。32位的邏輯地址空間(4GB)厦画,一頁4KB疮茄,那么地址空間內(nèi)一共可以有1M頁面滥朱,所以至少需要20位來表示所有頁面,所以頁表項(xiàng)大小至少有3B(20/8)力试,為了保證頁表項(xiàng)能夠指向所有頁面徙邻,頁表項(xiàng)的大小應(yīng)該大于3B,當(dāng)然可以選擇更大的頁表項(xiàng)讓一個(gè)頁面正好容下整個(gè)頁表項(xiàng)以方便存儲(chǔ)畸裳,如果是4B缰犁,那么一頁存儲(chǔ)1024個(gè)頁表項(xiàng)。一個(gè)頁表是由頁表項(xiàng)組成的怖糊,但是有多少頁表項(xiàng)是由有多少頁面來決定的民鼓,多少頁面又是由多少進(jìn)程來決定的。
  1. 具有快表的地址變換機(jī)構(gòu)
    如果頁表全部放在內(nèi)存中蓬抄,則存取一個(gè)數(shù)據(jù)或一條指令需要訪問兩次內(nèi)存:第一次試訪問頁表丰嘉,找到物理地址,然后通過物理地址存取數(shù)據(jù)和指令嚷缭。
    在地址變換機(jī)構(gòu)中增設(shè)了一個(gè)具有并行查找能力的高速緩沖存儲(chǔ)器-快表饮亏,又稱為聯(lián)想寄存器TLB,用來存放當(dāng)前訪問的若干頁表項(xiàng)阅爽,加速地址變換的過程路幸,主存中頁表稱為慢表。
    具有快表的分頁機(jī)制中付翁,地址的變換過程:
  • CPU給出邏輯地址后简肴,由硬件進(jìn)行地址轉(zhuǎn)換將頁號(hào)送入高速緩存寄存器中,將頁號(hào)和快表中的所有頁號(hào)進(jìn)行比較百侧。
  • 如果找到匹配的頁號(hào)砰识,那么直接從中取出該頁對(duì)應(yīng)的頁框號(hào),也就是物理塊號(hào)佣渴,算出物理地址辫狼,存取數(shù)據(jù)僅需要訪問一次主存。
  • 沒有找到辛润,那么訪問主存中的頁表膨处,讀出頁表項(xiàng)后放入快表,快表滿了的話砂竖,按照一定的算法對(duì)舊的頁表進(jìn)行替換真椿。
  1. 兩級(jí)頁表
  • 對(duì)頁表以及相應(yīng)過程的進(jìn)一步理解
    頁面就是將進(jìn)程以塊為單位進(jìn)行劃分,所以比如40M的進(jìn)程乎澄,頁表項(xiàng)就是40MB/4KB*4B突硝,4KB是頁面大小,也就是每一塊的大小三圆,所以需要1萬個(gè)頁面狞换,乘以4B頁表項(xiàng)大小,也就是頁表的大小舟肉。如果將所有的頁表項(xiàng)內(nèi)容保存在內(nèi)存中修噪,需要10個(gè)內(nèi)存頁框來保存整個(gè)頁表,因?yàn)槊總€(gè)頁面框可以保存1024個(gè)頁表項(xiàng)路媚,4KB/4B黄琼。
    頁框也是將主存進(jìn)行同樣的劃分,所以對(duì)于32位的邏輯地址空間整慎,頁面大小4KB脏款,頁表項(xiàng)4B,實(shí)現(xiàn)進(jìn)程對(duì)整個(gè)邏輯地址空間進(jìn)行映射裤园,則每個(gè)進(jìn)程需要2^20撤师,100萬個(gè)頁表項(xiàng),所以每個(gè)進(jìn)程僅頁表這一項(xiàng)就要4MB的主存空間拧揽,并且需要100萬*4B/4KB=1024頁剃盾,也就是說頁表需要1024頁才能存儲(chǔ)完。

但是實(shí)際執(zhí)行的時(shí)候只需要幾十個(gè)頁面進(jìn)入內(nèi)存頁框就可以運(yùn)行淤袜,但是如果要將10個(gè)頁面的頁表都放入內(nèi)存痒谴,卻只用幾十個(gè)頁面,不到一個(gè)頁面的頁表铡羡,這樣就極大的降低了內(nèi)存利用率积蔚。并且大部分情況下,映射需要的頁表項(xiàng)都在頁表的同一個(gè)頁面中烦周。
使用層次結(jié)構(gòu)的頁表:將頁表的10頁空間也進(jìn)行地址映射尽爆,建立上一級(jí)頁表,存儲(chǔ)頁表的映射關(guān)系读慎,10個(gè)頁面進(jìn)行映射只需要10個(gè)頁表項(xiàng)教翩,而上一級(jí)頁表僅僅需要1頁就足夠了,1頁可以存儲(chǔ)1024個(gè)頁表項(xiàng)贪壳。
所以需要一張索引表來尋找對(duì)應(yīng)的表饱亿,并且不用把所有的頁表都調(diào)入內(nèi)存,只有需要的時(shí)候才調(diào)入闰靴。構(gòu)造一個(gè)頁表的頁表彪笼,就是二級(jí)頁表。頂級(jí)頁表最多只能由1個(gè)頁面蚂且,也就是1024個(gè)頁表項(xiàng)配猫,對(duì)應(yīng)1024個(gè)頁面,占用的地址位數(shù)是10位杏死,log2(1024)=10
所以對(duì)于一個(gè)32位的邏輯地址空間泵肄,32-10-12(頁內(nèi)偏移地址)=10位捆交,所以二級(jí)頁表大小也在一頁之內(nèi)。
所以假設(shè)第一級(jí)頁表有10個(gè)頁表項(xiàng)腐巢,則說明頁表有10個(gè)頁面品追,如果第一級(jí)頁表有1024個(gè)頁表項(xiàng),說明頁表有1024個(gè)頁面冯丙,也就是32位邏輯空間最大的頁表項(xiàng)了肉瓦。然后第一級(jí)頁表的頁表項(xiàng)分別索引第二級(jí)頁表,假設(shè)第一個(gè)頁表項(xiàng)下的第二級(jí)頁表胃惜,這就是說明索引了原來第一個(gè)頁表頁面的所有頁表項(xiàng)泞莉。所以10個(gè)頁面的頁表恰好被整個(gè)二級(jí)頁表索引完全。第一級(jí)頁表大小在一頁之內(nèi)船殉,第二級(jí)頁表大小也在一頁之內(nèi)鲫趁。
換一種說法就是第一級(jí)頁表的頁表項(xiàng)表示你想索引哪一個(gè)頁面的頁表,第二級(jí)頁表的頁表項(xiàng)就是表明你想索引的頁面的頁表的所有能索引到物理塊的頁表項(xiàng)都在這里了利虫。

  1. 基本分段存儲(chǔ)管理方式
    分段管理方式是考慮用戶和程序員饮寞,以滿足方便編程,信息保護(hù)和共享列吼,動(dòng)態(tài)增長及動(dòng)態(tài)鏈接等多方面的需要幽崩。
  • 分段
    段式管理方式按照用戶進(jìn)程中的自然段劃分邏輯空間,段內(nèi)要求連續(xù)寞钥,段間不要求連續(xù)慌申,整個(gè)作業(yè)的地址空間是二維的,這里的意思指的是一個(gè)進(jìn)程可以分為好幾個(gè)段的邏輯地址理郑。
    邏輯地址由段號(hào)S和段內(nèi)偏移量W兩部分組成蹄溉,S有16位,因此一個(gè)作業(yè)最多有65536個(gè)段您炉,W有16位柒爵,最大段長為64KB。
    段式系統(tǒng)中赚爵,段號(hào)和段內(nèi)偏移量必須由用戶顯示提供棉胀,高級(jí)程序設(shè)計(jì)語言中,工作由編譯程序完成冀膝。
  • 段表
    每一個(gè)段表項(xiàng)對(duì)應(yīng)進(jìn)程的一個(gè)段唁奢,段表項(xiàng)記錄段號(hào),段長以及段在內(nèi)存中的起始地址窝剖。執(zhí)行中的進(jìn)程可以通過查找段表麻掸,找到每個(gè)段對(duì)應(yīng)的內(nèi)存區(qū)。段表用于實(shí)現(xiàn)從邏輯段到物理內(nèi)存區(qū)的映射赐纱。
  • 地址變換機(jī)構(gòu)
    段表寄存器:用于存放段表起始地址F和段表長度M脊奋。
    • 從邏輯地址A取出前幾位是段號(hào)S熬北,后幾位是段內(nèi)偏移量W,段式管理一般以二進(jìn)制給出邏輯地址诚隙。
    • 比較段號(hào)S和段表長度M讶隐,如果S>=M,產(chǎn)生越界中斷最楷,否則繼續(xù)執(zhí)行。
    • 求出段號(hào)S對(duì)應(yīng)的段表項(xiàng)的地址=段表起始地址F+段號(hào)S*段表項(xiàng)長度待错,然后取出段長C籽孙,如果段內(nèi)偏移量>=C,產(chǎn)生越界中斷火俄,否則繼續(xù)執(zhí)行犯建,取出段在內(nèi)存的起始地址b,從這里可以看出其實(shí)段表只有兩項(xiàng)瓜客,就是段長和段在內(nèi)存中的起始地址适瓦。段號(hào)其實(shí)可以省略。
    • 計(jì)算物理內(nèi)存地址E=b+W
  • 段的共享和保護(hù)
    段的共享是通過兩個(gè)作業(yè)的段表中相應(yīng)表項(xiàng)指向被共享的段的同一個(gè)物理副本來實(shí)現(xiàn)的谱仪,純代碼或者可重入代碼和不能修改的數(shù)據(jù)是可以共享的玻熙,可修改的代碼和數(shù)據(jù)不能共享。
    分段管理的保護(hù)由兩種:
    • 存取控制保護(hù)
    • 地址越界保護(hù)
      段表寄存器中段表長度和邏輯地址中的段號(hào)進(jìn)行比較疯攒。
      另外一個(gè)是段表項(xiàng)中的段長和邏輯地址中的段內(nèi)位移進(jìn)行比較嗦随。

段號(hào)和段內(nèi)偏移一定要顯示給出,因此分段管理的地址空間是二維的敬尺。

  1. 段頁式管理方式
    作業(yè)的地址空間首先被分成了若干個(gè)邏輯段枚尼,每段都有自己的段號(hào),然后將每一段分成若干個(gè)大小固定的頁砂吞,對(duì)內(nèi)存空間的管理和分頁存儲(chǔ)管理一樣署恍,將其分為若干個(gè)和頁面大小相同的存儲(chǔ)塊,對(duì)內(nèi)存的分配以存儲(chǔ)塊為單位蜻直。
  • 地址變換
    每個(gè)進(jìn)程一個(gè)段表盯质,每個(gè)分段一張頁表,段表表項(xiàng)中至少包括段號(hào)概而,頁表長度和頁表起始地址唤殴,頁表表項(xiàng)中至少包括頁號(hào)和塊號(hào)。
    系統(tǒng)中還有段表寄存器到腥,作業(yè)的段表起始地址和段表長度朵逝,還有一個(gè)頁表寄存器。作用有兩個(gè)乡范,一是段表或者頁表中尋址配名,二是判斷是否越界啤咽。在一個(gè)進(jìn)程中,段表只有一個(gè)渠脉,頁表有多個(gè)宇整。
    地址變換,通過段表查到頁表起始地址芋膘,通過頁表找到頁幀號(hào)鳞青,最后形成物理地址。一次訪問要訪問三次主存为朋,可以添加快表來加快查找速度臂拓,關(guān)鍵字由段號(hào),頁號(hào)組成习寸,值是對(duì)應(yīng)的頁幀號(hào)和保護(hù)碼胶惰。
    段頁式管理的地址空間是二維的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霞溪,一起剝皮案震驚了整個(gè)濱河市孵滞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疼鸟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡幼东,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門科雳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來根蟹,“玉大人,你說我怎么就攤上這事糟秘〖虼” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵尿赚,是天一觀的道長散庶。 經(jīng)常有香客問我,道長凌净,這世上最難降的妖魔是什么悲龟? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮冰寻,結(jié)果婚禮上须教,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好轻腺,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布乐疆。 她就那樣靜靜地躺著,像睡著了一般贬养。 火紅的嫁衣襯著肌膚如雪挤土。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天误算,我揣著相機(jī)與錄音仰美,去河邊找鬼。 笑死儿礼,一個(gè)胖子當(dāng)著我的面吹牛咖杂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜘犁,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼翰苫,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼止邮!你這毒婦竟也來了这橙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤导披,失蹤者是張志新(化名)和其女友劉穎屈扎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撩匕,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹰晨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了止毕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片模蜡。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扁凛,靈堂內(nèi)的尸體忽然破棺而出忍疾,到底是詐尸還是另有隱情,我是刑警寧澤谨朝,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布卤妒,位于F島的核電站,受9級(jí)特大地震影響字币,放射性物質(zhì)發(fā)生泄漏则披。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一洗出、第九天 我趴在偏房一處隱蔽的房頂上張望士复。 院中可真熱鬧,春花似錦翩活、人聲如沸判没。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澄峰。三九已至嫉沽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俏竞,已是汗流浹背绸硕。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留魂毁,地道東北人玻佩。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像席楚,于是被迫代替她去往敵國和親咬崔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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

  • 內(nèi)存管理 objectsto provide a detailed description of various ...
    woodsouthmmm閱讀 581評(píng)論 0 0
  • >計(jì)算機(jī)系統(tǒng)中有幾類存儲(chǔ)設(shè)備:cache烦秩、內(nèi)存垮斯、外存。cache的存取速度最高只祠,可以和CPU匹配兜蠕,因此其代價(jià)最高,...
    一生信仰閱讀 1,148評(píng)論 0 0
  • 物理內(nèi)存管理為程序運(yùn)行提供服務(wù)抛寝。程序駐留在外存熊杨,并使用邏輯地址。 邏輯內(nèi)存管理的核心工作:邏輯地址空間到物理空間的...
    minlover閱讀 3,203評(píng)論 1 4
  • 從家到班車點(diǎn)的路上盗舰,有兩個(gè)地方可以買早餐晶府。一家是有固定門面的天津包子店,現(xiàn)做的包子和醬香餅钻趋,現(xiàn)打的豆?jié){川陆。上班的白領(lǐng)...
    多瑞果閱讀 189評(píng)論 0 0
  • 文檔說明 表示0個(gè)或者多個(gè) +表示一個(gè)或者多個(gè) {}表示括號(hào)內(nèi)的東西當(dāng)做一個(gè)元素處理2.2.1定義(define ...
    jarod_chan閱讀 561評(píng)論 0 0