⑴ 操作系統中文件系統經常使用的分配方式
一、程序載入
在早期的計算機中,要運行一個程序,會把這些程序全都裝入內存,程序都是直接運行在內存上的,也就是說程序中訪問的內存地址都是實際的物理內存地址。當計算機同時運行多個程序時,必須保證這些程序用到的內存總量要小於計算機實際物理內存的大小。
這樣會造成的問題有:
(1):進程地址空間不隔離。由於程序都是直接訪問物理內存,所以惡意程序可以隨意修改別的進程的內存數據,以達到破壞的目的。有些非惡意的,但是有bug的程序也可能不小心修改了其它程序的內存數據,就會導致其它程序的運行出現異常。
(2):內存使用效率低。有大量的數據在裝入裝出,導致效率十分低下。
(3):程序運行的地址不確定。因為是隨機分配的,所以程序運行的地址是不確定的。
二、虛擬內存
為了解決上述問題,人們想到了一種變通的方法,就是增加一個中間層,利用一種間接的地址訪問方法訪問物理內存。按照這種方法,程序中訪問的內存地址不再是實際的物理內存地址,而是一個虛擬地址,然後由操作系統將這個虛擬地址映射到適當的物理內存地址上。這樣,只要操作系統處理好虛擬地址到物理內存地址的映射,就可以保證不同的程序最終訪問的內存地址位於不同的區域,彼此沒有重疊,就可以達到內存地址空間隔離的效果。人們之所以要創建一個虛擬地址空間,目的是為了解決進程地址空間隔離的問題。但程序要想執行,必須運行在真實的內存上,所以,必須在虛擬地址與物理地址間建立一種映射關系。這樣,通過映射機制,當程序訪問虛擬地址空間上的某個地址值時,就相當於訪問了物理地址空間中的另一個值。人們想到了一種分段(Sagmentation)的方法,它的思想是在虛擬地址空間和物理地址空間之間做一一映射。
這種分段的映射方法雖然解決了上述中的問題一和問題三,但並沒能解決問題二,即內存的使用效率問題。在分段的映射方法中,每次換入換出內存的都是整個程序,這樣會造成大量的磁碟訪問操作,導致效率低下。所以這種映射方法還是稍顯粗糙,粒度比較大。實際上,程序的運行有局部性特點,在某個時間段內,程序只是訪問程序的一小部分數據,也就是說,程序的大部分數據在一個時間段內都不會被用到。基於這種情況,人們想到了粒度更小的內存分割和映射方法,這種方法就是分頁(Paging)。
(三):分頁
分頁的基本方法是,將地址空間分成許多的頁。每頁的大小由CPU決定,然後由操作系統選擇頁的大小。目前Inter系列的CPU支持4KB或4MB的頁大小,而PC上目前都選擇使用4KB。按這種選擇,4GB虛擬地址空間共可以分成1048576個頁,512M的物理內存可以分為131072個頁。顯然虛擬空間的頁數要比物理空間的頁數多得多。分頁方法的核心思想就是當可執行文件執行到第x頁時,就為第x頁分配一個內存頁y,然後再將這個內存頁添加到進程虛擬地址空間的映射表中,這個映射表就相當於一個y=f(x)函數。應用程序通過這個映射表就可以訪問到x頁關聯的y頁了。
一 頁式管理
1 頁式管理的基本原理將各進程的虛擬空間劃分成若干個長度相等的頁(page),頁式管理把內存空間按頁的大小劃分成片或者頁面(page frame),然後把頁式虛擬地址與內存地址建立一一對應頁表,並用相應的硬體地址變換機構,來解決離散地址變換問題。頁式管理採用請求調頁或預調頁技術實現了內外存存儲器的統一管理。 它分為
1 靜態頁式管理。靜態分頁管理的第一步是為要求內存的作業或進程分配足夠的頁面。系統通過存儲頁面表、請求表以及頁表來完成內存的分配工作。靜態頁式管理解決了分區管理時的碎片問題。但是,由於靜態頁式管理要求進程或作業在執行前全部裝入內存,如果可用頁面數小於用戶要求時,該作業或進程只好等待。而且作業和進程的大小仍受內存可用頁面數的限制。
2 動態頁式管理。動態頁式管理是在靜態頁式管理的基礎上發展起來的。它分為請求頁式管理和預調入頁式管理。
優點: 沒有外碎片,每個內碎片不超過頁大小。一個程序不必連續存放。便於改變程序佔用空間的大小(主要指隨著程序運行而動態生成的數據增多,要求地址空間相應增長,通常由系統調用完成而不是操作系統自動完成)。
缺點:程序全部裝入內存。
要求有相應的硬體支持。例如地址變換機構,缺頁中斷的產生和選擇淘汰頁面等都要求有相應的硬體支持。這增加了機器成本。增加了系統開銷,例如缺頁中斷處理機,請求調頁的演算法如選擇不當,有可能產生抖動現象。 雖然消除了碎片,但每個作業或進程的最後一頁內總有一部分空間得不到利用果頁面較大,則這一部分的損失仍然較大。
二 段式管理的基本思想
把程序按內容或過程(函數)關系分成段,每段有自己的名字。一個用戶作業或進程所包含的段對應一個二維線形虛擬空間,也就是一個二維虛擬存儲器。段式管理程序以段為單位分配內存,然後通過地址影射機構把段式虛擬地址轉換為實際內存物理地址。
程序通過分段(segmentation)劃分為多個模塊,如代碼段、數據段、共享段。其優點是: 可以分別編寫和編譯。 可以針對不同類型的段採取不同的保護。 可以按段為單位來進行共享,包括通過動態鏈接進行代碼共享。
三 段頁式管理的實現原理
1 虛地址的構成
一個進程中所包含的具有獨立邏輯功能的程序或數據仍被劃分為段,並有各自的段號s。這反映相繼承了段式管理的特徵。其次,對於段s中的程序或數據,則按照一定的大小將其劃分為不同的頁。和頁式系統一樣,最後不足一頁的部分仍佔一頁。這反映了段頁式管理中的頁式特徵。從而,段頁式管理時的進程的虛擬地址空間中的虛擬地址由三部分組成:即段號s,頁號P和頁內相對地址d。虛擬空間的最小單位是頁而不是段,從而內存可用區也就被劃分成為著干個大小相等的頁面,且每段所擁有的程序和數據在內存中可以分開存放。分段的大小也不再受內存可用區的限制。
2 段表和頁表
為了實現段頁式管理,系統必須為每個作業或進程建立一張段表以管理內存分配與釋放、缺段處理、存儲保護相地址變換等。另外,由於一個段又被劃分成了若干頁,每個段又必須建立一張頁表以把段中的虛頁變換成內存中的實際頁面。顯然,與頁式管理時相同,頁表中也要有相應的實現缺頁中斷處理和頁面保護等功能的表項。另外,由於在段頁式管理中,頁表不再是屬於進程而是屬於某個段,因此,段表中應有專項指出該段所對應頁表的頁表始址和頁表長度。
3 動態地址變換過程
在一般使用段頁式存儲管理方式的計算機系統中,都在內存中辟出一塊固定的區域存放進程的段表和頁表。因此,在段頁式管理系統中,要對內存中指令或數據進行一次存取的話,至少需要訪問三次以上的內存:
第一次是由段表地址寄存器得段表始址後訪問段表,由此取出對應段的頁表在內存中的地址。
第二次則是訪問頁表得到所要訪問的物理地址。
第三次才能訪問真正需要訪問的物理單元。
顯然,這將使CPU的執行指令速度大大降低。為了提高地址轉換速度,設置快速聯想寄存器就顯得比段式管理或頁式管理時更加需要。在快速聯想寄存器中,存放當前最常用的段號s、頁號p和對應的內存頁面與其它控制用欄目。當要訪問內存空間某一單元時,可在通過段表、頁表進行內存地址查找的同時,根據快速聯想寄存器查找其段號和頁號。如果所要訪問的段或頁在快速聯想寄存器中,則系統不再訪問內存中的段表、頁表而直接把快速聯想寄存器中的值與頁內相對地址d拼接起來得到內存地址。
總之,因為段頁式管理是段式管理的頁式管理方案結合而成的,所以具有它們二者的優點。但反過來說,由於管理軟體的增加,復雜性和開銷也就隨之增加了。另外,需要的硬體以及佔用的內存也有所增加。更重要的是,如果不採用聯想寄存器的方式提高CPU的訪內速度,將會使得執行速度大大下降
⑵ 段頁式存儲管理方式的地址變換過程
在段頁式系統中,為了便於實現地址變換,須配置一個段表寄存器,其中存放段表始址和段表長TL。進行地址變換時,首先利用段號S,將它與段表長TL進行比較。若S<TL,表示未越界,於是利用段表始址和段號來求出該段所對應的段表項在段表中的位置,從中得到該段的頁表始址,並利用邏輯地址中的段內頁號P來獲得對應頁的頁表項位置,從中讀出該頁所在的物理塊號b,再利用塊號b和頁內地址來構成物理地址。右圖示出了段頁式系統中的地址變換機構。
在段頁式系統中,為了獲得一條指令或數據,須三次訪問內存。第一次訪問是訪問內存中的段表,從中取得頁表始址;第二次訪問是訪問內存中的頁表,從中取出該頁所在的物理塊號,並將該塊號與頁內地址一起形成指令或數據的物理地址;第三次訪問才是真正從第二次訪問所得的地址中,取出指令或數據。
顯然,這使訪問內存的次數增加了近兩倍。為了提高執行速度,在地址變換機構中增設一個高速緩沖寄存器。每次訪問它時,都須同時利用段號和頁號去檢索高速緩存,若找到匹配的表項,便可從中得到相應頁的物理塊號,用來與頁內地址一起形成物理地址;若未找到匹配表項,則仍須再三次訪問內存。
⑶ 段頁式虛擬存儲器中由虛擬地址向實際地址轉換的過程需要查幾次表,這些表示如
摘要 段式虛擬存儲器:段式虛擬存儲器的基本思想是:按照程序的邏輯結構劃分段,!主存以段為單位進行分配。由於段是按照程序的自然邊界劃分的,因此每個段的長度各不相同,並且程序員通常還會把不同類型的數據劃分到不同的段中。
⑷ 在具有塊表的段頁式存儲管理方式中,如何實現地址變換
實現方案如下:
首先設置一段表寄存器,在其中存放段表始址和段長SL,進行地址變換時,利用段號S與段長SL進行比較,若S<SL,表示未越界,於是利用段表始址和段號來求出該段所對應的段表項在段表中的位置,從中得出該段的頁表始址;
並利用邏輯地址中的段內頁號P來獲得對應頁的頁表項位置,從中讀出該頁所在的物理塊號b,再利用塊號b和頁內地址來構成物理地址。
在具有快表的段頁式存儲管理方式中,段表和頁表被放在快表內,每次訪問它時,利用段號和頁號去訪問快表,若找到匹配項,便可以從中得到相應的物理塊號,用來和業內地址一起生成物理地址;
若找不到匹配項,則需3次訪問內存,得到物理塊號,並將其抄入快表。快表已滿時,則通過適當的演算法,換出最近最久沒有被訪問的項。
⑸ 什麼是地址映像表(在段頁式存儲管理中)
in the lunch
⑹ 在具有塊表的段頁式存儲管理方式中,如何實現地址變換
本系統中使用段表寄存器存放段表基址和段長CPU提供的邏輯地址中的段號S首先和段長TL比較,若未越界則根據S和段表基址找到相應段表項中紀錄的該段所在頁表基址,接著使用段內頁號P獲得對應頁面的頁表項位置,從中找到幀號b,最後拼接上頁內地址W得到數據的物理地址
⑺ 頁式存儲管理和段式存儲管理在地址映射方面的異同
分頁是用來從虛擬內存到物理內存映射的,每頁是最小的內存管理單元。
分段這個是用來區別代碼,數據之類的,舉例來講代碼段、數據段,比如因為代碼和數據可以用不同的緩存策略,還有多進程可以共享代碼段,但是數據不同,所以分開來管理。
⑻ 分段存儲管理需提供二維地址
一. 分頁存儲管理
1.基本思想
用戶程序的地址空間被劃分成若干固定大小的區域,稱為「頁」,相應地,內存空間分成若干個物理塊,頁和塊的大小相等。可將用戶程序的任一頁放在內存的任一塊中,實現了離散分配。
2. 分頁存儲管理的地址機構
15 12 11 0
頁號P 頁內位移量W
頁號4位,每個作業最多2的4次方=16頁,表示頁號從0000~1111(24-1),頁內位移量的位數表示頁的大小,若頁內位移量12位,則2的12次方=4k,頁的大小為4k,頁內地址從000000000000~111111111111
若給定一個邏輯地址為A,頁面大小為L,則
頁號P=INT[A/L],頁內地址W=A MOD L
3. 頁表
分頁系統中,允許將進程的每一頁離散地存儲在內存的任一物理塊中,為了能在內存中找到每個頁面對應的物理塊,系統為每個進程建立一張頁面映射表,簡稱頁表。頁表的作用是實現從頁號到物理塊號的地址映射。
頁表:
頁號 物理塊號 存取控制
0 2
1 15(F)
2 14(E)
3 1
4. 地址變換
(1) 程序執行時,從PCB中取出頁表始址和頁表長度(4),裝入頁表寄存器PTR。
(2) 由分頁地址變換機構將邏輯地址自動分成頁號和頁內地址。
例:11406D=0010|110010001110B=2C8EH
頁號為2,位移量為C8EH=3214D
或11406 DIV 4096=2
11406 MOD 4096=3214
(3) 將頁號與頁表長度進行比較(2<4),若頁號大於或等於頁表長度,則表示本次訪問的地址已超越進程的地址空間,產生越界中斷。
(4) 將頁表始址與頁號和頁表項長度的乘積相加,便得到該頁表項在頁表中的位置。
(5) 取出頁描述子得到該頁的物理塊號。 2 14(E)
(6) 對該頁的存取控制進行檢查。
(7) 將物理塊號送入物理地址寄存器中,再將有效地址寄存器中的頁內地址直接送入物理地址寄存器的塊內地址欄位中,拼接得到實際的物理地址。
例:0010|110010001101B
1110|110010001101B=EC8EH=60558D
或 14*4096+3214=60558D
5. 具有快表的地址變換機構
分頁系統中,CPU每次要存取一個數據,都要兩次訪問內存(訪問頁表、訪問實際物理地址)。為提高地址變換速度,增設一個具有並行查詢能力的特殊高速緩沖存儲器,稱為「聯想存儲器」或「快表」,存放當前訪問的頁表項。
二.分段存儲管理
1.基本思想
將用戶程序地址空間分成若干個大小不等的段,每段可以定義一組相對完整的邏輯信息。存儲分配時,以段為單位,段與段在內存中可以不相鄰接,也實現了離散分配。
2. 分段存儲方式的引入
方便編程
分段共享
分段保護
動態鏈接
動態增長
3. 分段地址結構
作業的地址空間被劃分為若干個段,每個段定義了一組邏輯信息。常式序段、數據段等。每個段都從0開始編址,並採用一段連續的地址空間。
段的長度由相應的邏輯信息組的長度決定,因而各段長度不等。整個作業的地址空間是二維的。
15 12 11 0
段號 段內位移量
段號4位,每個作業最多24=16段,表示段號從0000~1111(24-1);段內位移量12位,212=4k,表示每段的段內地址最大為4K(各段長度不同),從000000000000~111111111111
4. 段表
段號 段長 起始地址 存取控制
0 1K 4096
1 4K 17500
2 2K 8192
5. 地址變換
(1). 程序執行時,從PCB中取出段表始址和段表長度(3),裝入段表寄存器。
(2). 由分段地址變換機構將邏輯地址自動分成段號和段內地址。
例:7310D=0001|110010001110B=1C8EH
段號為1,位移量為C8EH=3214D
(3). 將段號與段表長度進行比較(1<3),若段號大於或等於段表長度,則表示本次訪問的地址已超越進程的地址空間,產生越界中斷。
(4). 將段表始址與段號和段表項長度的乘積相加,便得到該段表項在段表中的位置。
(5). 取出段描述子得到該段的起始物理地址。1 4K 17500
(6). 檢查段內位移量是否超出該段的段長(3214<4K),若超過,產生越界中斷。
(7). 對該段的存取控制進行檢查。
(8). 將該段基址和段內地址相加,得到實際的物理地址。
例:0001|110010001101B
起始地址17500D+段內地址3214D=20714D
三.分頁與分段的主要區別
分頁和分段有許多相似之處,比如兩者都不要求作業連續存放.但在概念上兩者完全不同,主要表現在以下幾個方面:
(1)頁是信息的物理單位,分頁是為了實現非連續分配,以便解決內存碎片問題,或者說分頁是由於系統管理的需要.段是信息的邏輯單位,它含有一組意義相對完整的信息,分段的目的是為了更好地實現共享,滿足用戶的需要.
(2)頁的大小固定,由系統確定,將邏輯地址劃分為頁號和頁內地址是由機器硬體實現的.而段的長度卻不固定,決定於用戶所編寫的程序,通常由編譯程序在對源程序進行編譯時根據信息的性質來劃分.
(3)分頁的作業地址空間是一維的.分段的地址空間是二維的.
四.段頁式存儲管理
1.基本思想:
分頁系統能有效地提高內存的利用率,而分段系統能反映程序的邏輯結構,便於段的共享與保護,將分頁與分段兩種存儲方式結合起來,就形成了段頁式存儲管理方式。
在段頁式存儲管理系統中,作業的地址空間首先被分成若干個邏輯分段,每段都有自己的段號,然後再將每段分成若干個大小相等的頁。對於主存空間也分成大小相等的頁,主存的分配以頁為單位。
段頁式系統中,作業的地址結構包含三部分的內容:段號 頁號 頁內位移量
程序員按照分段系統的地址結構將地址分為段號與段內位移量,地址變換機構將段內位移量分解為頁號和頁內位移量。
為實現段頁式存儲管理,系統應為每個進程設置一個段表,包括每段的段號,該段的頁表始址和頁表長度。每個段有自己的頁表,記錄段中的每一頁的頁號和存放在主存中的物理塊號。
2.地址變換的過程:
(1)程序執行時,從PCB中取出段表始址和段表長度,裝入段表寄存器。
(2)由地址變換機構將邏輯地址自動分成段號、頁號和頁內地址。
(3)將段號與段表長度進行比較,若段號大於或等於段表長度,則表示本次訪問的地址已超越進程的地址空間,產生越界中斷。
(4)將段表始址與段號和段表項長度的乘積相加,便得到該段表項在段表中的位置。
(5)取出段描述子得到該段的頁表始址和頁表長度。
(6)將頁號與頁表長度進行比較,若頁號大於或等於頁表長度,則表示本次訪問的地址已超越進程的地址空間,產生越界中斷。
(7)將頁表始址與頁號和頁表項長度的乘積相加,便得到該頁表項在頁表中的位置。
(8)取出頁描述子得到該頁的物理塊號。
(9)對該頁的存取控制進行檢查。
(10)將物理塊號送入物理地址寄存器中,再將有效地址寄存器中的頁內地址直接送入物理地址寄存器的塊內地址欄位中,拼接得到實際的物理地址。
⑼ 幫幫我 頁式存儲和段式存儲的定義和為什麼要這些功能
頁式存儲分配
頁式存儲分配是基於這樣一種概念,把到來的作業分成相等大小的頁。一些操作系統選擇頁的大小,是根據存儲塊的大小和作業所存儲的磁碟的一些區域的大小來分配的,一般它們是相等的。
磁碟上的一些區域叫做扇區(或者有時候叫塊),主存中的這些區域叫做頁面。當頁面、扇區和主存中的頁面都一樣大小的時候,上述策略可以很有效的工作。頁面的精確大小(每個頁面所存儲的位元組數)通常由磁碟扇區的大小來決定。所以,一個扇區將保存一頁作業指令,和內存的一個頁面相匹配。
在執行一個程序之前,內存管理器需要的准備工作:
1. 確定程序的頁數
2. 在主存中留出足夠的空閑頁面
3. 將程序的所有頁面載入主存里。(靜態的分頁,頁面無需連續)
當程序准備好載入,其頁面是一個邏輯序列——第一頁保存了程序的第一部分指令,最後一頁是最後的一部分指令。為此我們可以假設程序的指令是一行一行的代碼,也可以想像成是一些位元組。
載入的過程和我們在第二章所學習到的策略是不同的,這是因為頁面不用保存在相鄰的存儲塊。實際上,每一頁可以保存在主存頁面的任何有效的位置(Madnick& Donovan,1974)。
不連續存儲方法的首要優點是主存可以更有效的使用,因為一個空閑頁面可以被任何作業的任何頁使用。另外,用於重新定位的壓縮策略可以被消除了,因為頁面之間沒有外部碎片了。(在很多頁中也沒有內部碎片)
然而,新的方法會帶來新的問題。因為一個作業的頁可以保存在主存的任何位置,內存管理需要一個機制來保存它們的情況——這意味著必須增加操作系統軟體的大小和復雜度,也就是增加了開支。
段式存儲分配
分段的概念是建立在最通常被程序員結構化他們的程序所用的模塊的基礎上的——邏輯上的一組代碼。用段式存儲分配方法,每一個作業被分為很多個不同尺寸的段,每一個模塊都包含很多相關的功能。一個子分支程序就是這樣一個邏輯組的例子。這是和分頁策略的本質上的不同,分頁策略把作業分成了很多頁,都是一樣的尺寸,都包含了程序模塊的一些部分。
第二個重要的不同是主存不需要再分成頁面了,因為每個段的大小都不一樣——有的大,有的小。所以,和第二章中討論的動態分區一樣,內存也是動態模式下分配的。
當一個程序被編譯後,段就根據程序的結構模塊所建立起來。每一個段都編了號並且生成了一個段映射表(SMT);它包含了段序號,它的長度,訪問許可權,狀態和(如果在內存中)內存中的位置。圖3-11和圖3-12給出了同一個作業,作業1,有一個主程序和兩個分支程序組成,還有它的段映射表和實際的主存分配。
就像請求頁式一樣,引用,分段里也使用頁修改和狀態位,但是圖3-11和圖3-12沒有給出。
內存管理器需要跟蹤段在內存中的情況。這是通過將動態分區和請求頁式存儲管理都有的3個表格的合並來實現的:
1. 作業表,列出了處理的每一個作業(整個系統一個表)
2. 段映射表列出了每個段的具體情況(每個作業一個表)
3. 內存映射表監視了主存的分配情況(整個系統一個表)
就像請求頁式,每個段中的指令順序排列,但是在內存中段不用連續存儲。我們只要知道每個段保存在哪裡了。每一個段里的內容是連續的。
http://teach.ycit.cn:8070/kj/jsj/jsjczxt/main/study/xx/kcxx-3-4.htm
http://teach.ycit.cn:8070/kj/jsj/jsjczxt/main/study/xx/kcxx-3-1.htm
上面有更為詳細的解釋和圖例
⑽ 操作系統頁式存儲管理的問題
存儲管理的基本原理內存管理方法 內存管理主要包括內存分配和回收、地址變換、內存擴充、內存共享和保護等功能。 下面主要介紹連續分配存儲管理、覆蓋與交換技術以及頁式與段式存儲管理等基本概念和原理。 1. 連續分配存儲管理方式 連續分配是操作系統頁式存儲管理的問題