為什么要引入分段存儲管理方式?
分段存儲管理方式的引入是為了滿足用戶的要求。
- 方便編程:通常一個作業是由多個程序段和數據段組成的,一般情況下,用戶希望按邏輯關系對作業分段,並能根據名字來訪問程序段和數據段。
- 信息共享:
- 共享是以信息的邏輯單位為基礎的。頁是存儲信息的物理單位,段卻是信息的邏輯單位。
- 頁式管理中地址空間是一維的,主程序,子程序都順序排列,共享公用子程序比較困難,一個共享過程可能需要幾十個頁面。
- 信息保護:
- 頁式管理中,一個頁面中可能裝有 2 個不同的子程序段的指令代碼,不能通過頁面共享實現共享一個邏輯上完整的子程序或數據塊。
- 段式管理中,可以以信息的邏輯單位進行保護。
- 動態增長:實際應用中,某些段(數據段)會不斷增長,前面的存儲管理方法均難以實現。
- 動態鏈接:動態鏈接在程序運行時才把主程序和要用到的目標程序(程序段)鏈接起來。
分段
- 作業地址空間被划分為若干段,每個段定義了一組邏輯 信息,如主程序MAIN、子程序段X、數據段D及棧段S, 各段均有自己的名字(段號)
- 每個段都從0開始編址,並采用一段連續的地址空間,且 段的長度取決於相應的邏輯信息組的長度,因而各段長 度可不等
- 整個作業的地址空間是二維的,(也就是說一個作業的所有段號合在一起是不連續的),其邏輯地址有段號 (名) 和段內地址所組成
為什么分段中整個作業的地址空間是二維的?
在分頁中,整個作業的地址空間是一維的,也就是說一個作業的所有段合在一起是連續的。如下圖所示(觀察邏輯地址):
而分段由於它各段長度可不等,一個作業的所有段合在一起不可能像分頁一樣是連續的,所以分段整個作業的地址空間是二維的。
利用段表實現地址映射示意圖
分段系統地址變換機構
注:由於各段長度不等,也就是說各段長度無法確定,所以還要判斷段長是否越界。
信息共享
可重入代碼(純代碼)
一種允許多個迚程同時訪問的代碼
為使各個迚程所執行的代碼完全相同,絕對不允 許可重入代碼在執行中有任何改變,所以它是一 種不允許任何進程對其進行修改的代碼
但事實上,大多數代碼在執行時都有可能發生改 變,例如其中用於控制程序執行次數的變量及指 針、信號量及數組等。為此,在每個進程中都必 須配備局部數據區,並把在執行中可能改變的部 分都拷貝到該數據區。這樣,在程序執行時,只 去對屬於特定進程私有的數據區中的內容進行修 改,而不去改變共享的代碼,這時的可共享代碼 即成為可重入代碼
北
例:多個用戶對文本編輯程序的共享
某多用戶系統,可同時接納40個用戶,假設 均在執行Editor進行文本編輯。若該文本編輯 程序含有160KB的代碼區和40KB的數據區,如果不共享,則總共需有8000KB的內存空間來支持40個用 戶。
如果該文本編輯程序代碼是可重入的,則 無論分頁系統還是分段系統該程序代碼都能被 共享,即內存中只需保留一份文本編輯程序的 副本,因而所需內存空間僅為 40×40+160=1760KB
分頁系統的共享
分段系統的共享
上述兩張圖可知,在分段系統中,實現共享容易得多,只需在每個進程的段表中為文本編輯程序設置一個段表項。
分頁與分段的主要區別
- 頁是信息的物理單位,分頁僅僅是由於系統管理的需要,對用戶透明的。段是信息的邏輯單位,分段的目的是為了能更好的滿足用戶的需要。
- 頁的大小固定且由系統確定,把邏輯地址划分為頁號和頁內地址兩部分。段的長度卻不固定,決定於用戶所編寫的程序。
- 分頁的作業地址空間是一維的,分段的作業地址空間是二維的。
- 頁和段都有存儲保護機制。但存取權限不同:段有讀、寫和執行三種權限;而頁只有讀和寫兩種權限。
段頁式內存管理方式
分頁/段內存管理有機結合,既具有分段系統便於實現、分段可共享、易於保護、可動態鏈接等一系列優點;又能像 分頁系統那樣很好地解決內存的外部碎片問 題以及為各個分段離散地分配內存等問題 。
基本原理
- 段頁式存儲管理是分段和分頁原理的結合,即先將用戶程序分成若干個段(段式) ,並為每一個段賦一個段名,再把每個段分成若干個頁(頁式) 。
- 其地址結構由段號、段內頁號、及頁內位移三部分所組成。
- 系統中設段表和頁表,均存放於內存中。讀一字節的指令或數據須訪問內存三次。為提高執行速度可增設高速緩沖寄存器(快表)。
- 每個進程一張段表,每個段一張頁表,段表可以有多級段表,頁表也可以有多級頁表。
- 段表含段號、頁表始址和頁表大小。頁表含頁號和物理塊號。