操作系統(tǒng)基本原理 - 段式存儲管理
段式存儲管理的思想
段式存儲管理與頁式存儲管理相似。分段的基本思想是把用戶作業(yè)按邏輯意義上有完整意義的段來劃分,并以段為單位作為內(nèi)外存交換的空間尺度。
一個作業(yè)是由若干個具有邏輯意義的段(如主程序、子程序、數(shù)據(jù)段等)組成。分段系統(tǒng)中,容許程序(作業(yè))占據(jù)內(nèi)存中許多分離的分區(qū)。每個分區(qū)存儲一個程序分段。這樣,每個作業(yè)需要幾對界限地址寄存器,判定訪問地址是否越界也就更困難了。在分段存儲系統(tǒng)中常常利用存儲保護鍵實現(xiàn)存儲保護。分段系統(tǒng)中虛地址是一個有序?qū)Γǘ翁?,位移)。系統(tǒng)為每個作業(yè)建立一個段表,其內(nèi)容包括段號、段長、內(nèi)存起始地址和狀態(tài)等。狀態(tài)指出這個段是否已調(diào)入內(nèi)存,即內(nèi)存起始地址指出這個段,狀態(tài)指出這個段的訪問權(quán)限。
【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ??


段式存儲的地址轉(zhuǎn)換
分段系統(tǒng)的動態(tài)地址轉(zhuǎn)換是這樣進行的:進程執(zhí)行時,其段表的首地址已在基本地址寄存器中,執(zhí)行的指令訪問虛存(s,d)(取指令或取操作數(shù))時,首先根據(jù)段號 s 查段表,若段已經(jīng)調(diào)入內(nèi)存,則得到該段的內(nèi)存起始地址,然后與段內(nèi)相對地址(段內(nèi)偏移量 d)相加,得到實地址。如果該段尚未調(diào)入內(nèi)存,則產(chǎn)生缺段中斷,以裝入所需要的段。段式存儲與頁式存儲的地址轉(zhuǎn)換方式類似。

段式存儲管理是如何執(zhí)行的
當(dāng)作業(yè)可以投入執(zhí)行時,做如下操作:
(1)首先把當(dāng)前需要的一段或幾段裝入內(nèi)存。
(2)作業(yè)執(zhí)行時,如果要訪問的段已經(jīng)在內(nèi)存,則按照“段式存儲管理”中的方式進行地址轉(zhuǎn)換;如果要訪問的段不在內(nèi)存中,則產(chǎn)生一個“缺段中斷”,由操作系統(tǒng)把當(dāng)前需要的段裝入內(nèi)存。
因此,在段表中應(yīng)增設(shè)段是否在內(nèi)存的標(biāo)志以及各段在磁盤上的位置,已在內(nèi)存中的段仍要指出該段在內(nèi)存中的起始地址和占用內(nèi)存區(qū)長度。
作業(yè)執(zhí)行要訪問的段時,由硬件的地址轉(zhuǎn)換機構(gòu)查段表。若該段在內(nèi)存中,則立即把邏輯地址轉(zhuǎn)換成絕對地址;若該段不在內(nèi)存中,則形成“缺段中斷”,由操作系統(tǒng)處理這個中斷。
處理的辦法是,查內(nèi)存分配表,找出一個足夠大的連續(xù)區(qū)以容納該分段,如果找不到足夠大的連續(xù)區(qū)則檢查空閑區(qū)的總和,若空閑區(qū)總和能滿足該段要求,那么進行適當(dāng)移動將分散的空閑區(qū)集中;若空閑區(qū)總和不能滿足該段要求,可把內(nèi)存中的一段或幾段調(diào)出,然后把當(dāng)前要訪問的段裝入內(nèi)存中。段被移動、調(diào)出和裝入后都要對段表中的相應(yīng)表目做修改。新的段被裝入后應(yīng)讓作業(yè)重新執(zhí)行被中斷的指令,這時就能找到要訪問的段,也可以繼續(xù)執(zhí)行下去。
原文作者:夢里藍天
