前段時(shí)間看了進(jìn)程管理弓摘,覺得對(duì)編程簡(jiǎn)直大有裨益,至少對(duì)于多線程編程方面刃宵,對(duì)系統(tǒng)的進(jìn)程管理有了非常深刻的理解,看來還是要多學(xué)習(xí)徘公。今天開始學(xué)習(xí)內(nèi)存管理這一節(jié)牲证,看了一遍沒怎么看懂,于是在這里寫下筆記关面,慢慢咀嚼坦袍,直到看明白。
- 從源程序變成在內(nèi)存中執(zhí)行的程序
- 編譯
將源代碼編譯成若干個(gè)目標(biāo)模塊 - 鏈接
將目標(biāo)模塊和需要的庫函數(shù)鏈接在一起等太,形成完成的裝入模塊 - 裝入
由裝入程序?qū)⒀b入模塊裝入內(nèi)存執(zhí)行
- 程序鏈接三種方式
- 靜態(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)行鏈接
- 程序裝入的時(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ì)地址,需要硬件重定位寄存器的支持潜沦。
邏輯地址空間
每個(gè)目標(biāo)模塊都是從0開始編址萄涯,稱為目標(biāo)模塊的相對(duì)地址也稱為邏輯地址,鏈接程序?qū)⒁来螌⒏鱾€(gè)模塊相對(duì)地址構(gòu)成統(tǒng)一的從0開始編址的邏輯地址空間唆鸡,不同進(jìn)程可以有相同的邏輯地址涝影,因?yàn)檫@些地址在裝入內(nèi)存的時(shí)候可以映射到主存的不同位置。物理地址空間
內(nèi)存中物理單元的集合争占,地址轉(zhuǎn)換的最終地址燃逻,進(jìn)程在運(yùn)行的時(shí)候指令和數(shù)據(jù)都要通過物理地址從主存中存取。地址重定位就是將邏輯地址轉(zhuǎn)換成物理地址臂痕。內(nèi)存保護(hù)
- CPU設(shè)置一對(duì)上伯襟,下限寄存器
存放用戶作業(yè)在主存的下限和上線地址,CPU要訪問一個(gè)地址的時(shí)候握童,分別與這兩個(gè)地址進(jìn)行比較姆怪,判斷是否越界。 - 重定位寄存器(基址寄存器)和界地址寄存器(限長寄存器)
首先邏輯地址和界地址寄存器進(jìn)行比較澡绩,如果沒有發(fā)生越界稽揭,加上重定位寄存器的值后映射成物理地址,送交內(nèi)存單元肥卡。所以界地址寄存器含有邏輯地址的最大值溪掀。
覆蓋
將用戶空間分成一個(gè)固定區(qū)和幾個(gè)覆蓋區(qū),程序中經(jīng)巢郊活躍的部分放在固定區(qū)揪胃,其余部分,將要訪問的段放入覆蓋區(qū)氛琢,其它段放在外存中只嚣,在需要調(diào)用前,系統(tǒng)將其掉入覆蓋區(qū)艺沼,替換覆蓋區(qū)原有的段册舞。不在覆蓋區(qū)的段會(huì)常駐內(nèi)存。交換
將處于等待狀態(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ū)分配抹锄。
單一連續(xù)分配
內(nèi)存分為系統(tǒng)區(qū)和用戶區(qū),因?yàn)橹挥幸坏莱绦蜍伲詿o需內(nèi)存保護(hù)伙单,無外部碎片,可以采用覆蓋技術(shù)哈肖,只能用于單用戶單任務(wù)的操作系統(tǒng)吻育,有內(nèi)部碎片,存儲(chǔ)器利用率低淤井。固定分區(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ū)空間。
- 動(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ǔ)管理方式岂津。
- 基本分頁存儲(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)的地址映射拉庵。
- 基本地址變換機(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)程來決定的。
- 具有快表的地址變換機(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)行替換真椿。
- 兩級(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)都在這里了利虫。
- 基本分段存儲(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)偏移一定要顯示給出,因此分段管理的地址空間是二維的敬尺。
- 段頁式管理方式
作業(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ù)碼胶惰。
段頁式管理的地址空間是二維的。