本章考核知識點:1、重定位 2、固定分區(qū)存儲管理 3、可變分區(qū)存儲管理 4、頁式存儲管理 5、段式存儲管理 6、虛擬存儲器
自學要求 :明確存儲管理的職能是對主存儲器中的用戶區(qū)域進行管理;理解在不同的管理方式下如何實現(xiàn)存儲保護、地址轉換、以及主存空間的分配和回收;比較各種管理方式的特點;掌握虛擬存儲器的實現(xiàn)原理和方法。
重點是:各種管理方式的特點;可變分區(qū)方式的主存分配算法以及移動技術;分頁式虛擬存儲管理的實現(xiàn)以及頁面調度算法;分段式虛擬存儲管理的實現(xiàn)。
操作系統(tǒng)的存儲管理如同一個大地主,管著一個大莊園,當有農戶需要租用田地時,地主就給分配一塊地讓他種(用戶區(qū)分配)。等到地里長出了果實(結果出來后,地主還得來收回這塊地(去配)。
為了管好這片田地,地主還要管好莊園的門,凡是要進去種地的,都得由地主根據(jù)他的需要讓他到位置確定實際的田地上去干活。(把邏輯地址轉換成物理地址)
莊園里還有一些大家共同可以使用的地方,比如地主的花園,工具房等,大家可以進去,也可以使用,但是不許改變任何現(xiàn)有的東東,還有,每個農戶只能在自己的地里刨食吃,如果有人膽敢到別人地里或地主的花園里摘花偷食,可要當心他們養(yǎng)的狼狗跳出來哦。(共享和保護)
當然,再大的地也是不夠多的,地主為了多賺些錢,當所有的地都租出去的時候,他想辦法把有些種田人暫時不種的那塊地里的東東連地皮一起挖出來放到倉庫里先堆著。把地騰出來租給別人種(這一招可夠絕的,不過地主說啦,這就是“虛擬存儲”。)
你說這個地主是好是壞??
概述:本章討論的是主存儲器空間的管理。主存儲空間分成系統(tǒng)區(qū)和用戶區(qū)兩部分。存儲管理的功能包括:主存空間的分配和去配、實現(xiàn)地址轉換、主存空間的區(qū)享和保護和主存空間擴充。
一、重定位( 領會 )
1、區(qū)分邏輯地址與絕對地址。
絕對地址 :主存儲器以字節(jié)為編址單位,容量為n的主存儲器中,每個單元有唯一的編號,從0到n-1,這個唯一的編號就是主存儲器的 物理地址 .
比如我們現(xiàn)在用的128MB內存條中就有128×1024×1024=134217728 字節(jié),所以它的內存絕對地址就是從0到134217727.
注意啦,莊園的大地主就是這么給自己的地做上標記的。
邏輯地址 :在多道程序設計的系統(tǒng)中,操作系統(tǒng)為了方便用戶,就允許每個用戶都認為自己的作業(yè)的程序和數(shù)據(jù)存放在地址是0開始的連續(xù)空間中。這樣用戶程序中使用的地址就是 邏輯地址 .
種田人不管地主莊園有多少塊地,標了什么號,只要記住自己需要多少地,給自己種的地打上標記就是了。地主想,只要你們能干活,不需要知道了我的底細了吧(家財不可外揚哦)。
2 、重定位(地址轉換的方式)
為了保證作業(yè)的正確執(zhí)行,必須根據(jù)分配給作業(yè)的主存區(qū)域對作業(yè)中指令和數(shù)據(jù)的存放進行重定位,這種 把邏輯地址轉換成絕對地址 的工作稱為“ 重定位 ”或“地址轉換”。重定位的方式有“ 靜態(tài)重定位 ”和“ 動態(tài)重定位 ”兩種。
莊園主道:靜態(tài)重定位比較簡單,想當初張三來這兒, 說要租一百塊地,青菜種在第1塊地,蘿卜種2塊地里,土豆得重在第3塊地里……然后得在第28塊地里養(yǎng)鴨,完了要把28塊地里的鴨糞拉到第49塊地的魚塘里喂魚…… 我就說,行啦行啦,你進去,莊園的左邊101到200號那100塊地就分給你吧,以后你要找哪塊地養(yǎng)鴨養(yǎng)魚的,就得按我給你編的號來找。每個地址都已經(jīng)加上100了,不會找錯吧。別說我沒講清楚哦。
至于動態(tài)重定位,莊主笑道:這個我也能做到,這么實現(xiàn)的:李四來租地時,我也不問他,直接把他帶到空閑的一片地方。派人記著這那片地的第一個地址。比如說是100號吧。李四這個笨小子干著干著會叫起來說:“老板,現(xiàn)在我要到32號地里抓魚!”旁邊人一聽,馬上告訴他“哎呀,你現(xiàn)在已經(jīng)分了地啦,起始地塊是100號,那你就得到132號地去才對!”就這樣,李四每一次要找地方時,都叫別人給他重新算一下。這樣他才不會找錯位置。這樣也有一個好處,就是如果有人出價更好,我可以讓他搬到別處去干活,反正都是叫別人給他重新算位置,所以他就不用記住搬地方后的物理地址啦。
(1)靜態(tài)重定位
在裝入一個作業(yè)時,把作業(yè)中的指令地址和數(shù)據(jù)地址全部轉換成絕對地址。這種轉換工作是在 作業(yè)開始前集中完成 的,在作業(yè)執(zhí)行過程中無需再進行地址轉換。所以稱為“靜態(tài)重定位”。
(2)動態(tài)重定位
在裝入一個作業(yè)時,不進行地址轉換,而是直接把作業(yè)裝到分配的主區(qū)域中。在作業(yè)執(zhí)行過程中,每當執(zhí)行一條指令時都由硬件的地址轉換機構轉換成絕對地址。這種方式的地址轉換是在 作業(yè)執(zhí)行時動態(tài)完成 的,所以稱為動態(tài)重定位。
動態(tài)重定位由軟件(操作系統(tǒng))和硬件(地址轉換機構)相互配合來實現(xiàn)。動態(tài)重定位的系統(tǒng)支持“程序浮動”,而靜態(tài)重定位則不能。
二、固定分區(qū)存儲管理( 領會 )
分區(qū)存儲管理是把存儲器中的用戶區(qū)作為一個連續(xù)區(qū)或分成若干連續(xù)區(qū)進行管理。早先使用一個分區(qū)的存儲管理,后發(fā)展成多分區(qū)的存儲管理。多個分區(qū)的管理可采用固定分區(qū)方式和可變分區(qū)方式。
1、固定分區(qū)存儲管理的原理
固定分區(qū) 的意思就是指主存空間劃分成若干連續(xù)區(qū)后,這些分區(qū)的 大小和個數(shù) 就 固定 不變。
固定分區(qū)管理利用一張“ 主存分配表 ”說明各分區(qū)的情況。裝入和結束作業(yè)均通過這個分區(qū)表來記錄分區(qū)使用的變化情況。
2、如何實現(xiàn)存儲保護
固定分區(qū)管理 可采用 靜態(tài)重定位 的方式裝入作業(yè)。裝入程序把作業(yè)中的邏輯地址轉換為絕對地址。并檢查絕對地址是否在指定(裝入)的分區(qū)內,如果是,就裝入這個作業(yè)。否則就不能裝入。如果裝入主存分區(qū)的作業(yè)占用處理器時(注意,是運行時),進程調度程序(不是裝入程序了)必須把作業(yè)所在分區(qū)的上下限地址存入“下限寄存器”和“上限寄存器”中,這樣可以在指令執(zhí)行中判斷其所用到的絕對地址是否越界,達到存儲保護的目的。
3、怎樣 提高主存空間的利用率 這里有幾種辦法:
(1)分區(qū)按大小順序排列,這樣可以使作業(yè)總是先使用滿足要求的最小分區(qū)。
(2)根據(jù)經(jīng)常出現(xiàn)的作業(yè)大小和頻率劃分分區(qū)。
(3)按作業(yè)的對主存空間的需求量排成多個隊列,規(guī)定隊列與分區(qū)的對應關系。也就是說多大的作業(yè)只能放在多大的分區(qū)里,就算有更大的分區(qū)空著,也不許他進入。
三、可變分區(qū)的管理( 領會 )
可變就是指分區(qū)的 大小和位置不是固定 的,而是根據(jù)作業(yè)要求的主存量來分配分區(qū)的大小。
1、主存的分配和去配(回收)
在系統(tǒng)初始化時,主存除了操作系統(tǒng)所占部分外,整個用戶區(qū)是一個大的空閑區(qū),可以按作業(yè)需要的空間大小順序分配空閑區(qū)直到不夠時為止。
當作業(yè)結束時,它的占用分區(qū)被收回。這個空閑區(qū)又可以根據(jù)新作業(yè)的大小重新用于分配,所以主存中的已占分區(qū)和空閑區(qū)的數(shù)目和大小都是在變化的??梢杂脙蓮埍怼耙逊峙鋮^(qū)表”和“空閑區(qū)表”來記錄和管理。
2、常用的分配算法
最先適應分配算法 :簡單地說,就是在分區(qū)表中順序查找,找到夠大的空閑區(qū)就分配。但是這樣的分配算法可能形成許多不連續(xù)的空閑區(qū),造成許多“碎片”,使主存空間利用率降低。
最優(yōu)適應分配算法 :這種算法總是挑選一個能滿足作業(yè)要求的最小空閑區(qū)。但是這種算法可能形成一些極小的空閑區(qū),以致無法使用,這也會影響主存利用率。
最壞適應分配算法 :這種算法和上面的正好相反,它總是挑一個最大的空閑區(qū)分給作業(yè)使用,使剩下的空間不至于太小。
3、地址轉換與存儲保護
采用 可變分區(qū)方式管理 時,一般均采用 動態(tài)重定位 方式裝入作業(yè)。也就是每讀一條指令,都要變換一次地址。變換要靠硬件支持,主要是 兩個寄存器 : 基址 寄存器和 限長 寄存器,限長寄存器存放作業(yè)所占分區(qū)的長度,基址寄存器則存放作業(yè)所占分區(qū)的起始地址,這兩個值確定了一個分區(qū)的位置和大小。
轉換時根據(jù)邏輯地址與限長值比較,如果不有超過這個值,表示訪問地址合法,再加上基址寄存器中的值就得到了絕對地址了,否則形成“地址越界”中斷。達到存儲保護的目的。
對于共享程序,則硬件提供兩組限長寄存器和基址寄存器。訪問時對訪問區(qū)享區(qū)和作業(yè)區(qū)的地址分別進行轉換。
4、移動技術的應用
移動技術 要“移動”的東東就是主存空間中的作業(yè)。把某個作業(yè)移到另一處主存空間去(在磁盤整理中我們應用的也是類似的移動技術),這樣的最大好處就是可以合并一些空閑區(qū)。
但是移動技術的應用也要注意以下問題。
移動會增加系統(tǒng)開銷。所以要盡量減少移動。
移動是有條件的,如果作業(yè)在執(zhí)行過程中正等待與外圍設備傳輸信息,就不能移動。因此在移動時首先要判定該作業(yè)是否與外設交換信息。
四、頁式存儲管理( 領會 )
1、如何分頁和分塊
頁式存儲管理中有兩個名詞:“ 頁 ”和“ 塊 ”,其中的“塊”是針對硬件來說的,就是把存儲器分成若干相等大小的區(qū),每個區(qū)就稱為一個塊。對應的,在程序中,邏輯地址進行“分頁”,其大小和每個塊相一致。
事實上,頁面的大小是由塊的大小自然決定的。對于程序來說,其邏輯地址還是和原來一樣采用連續(xù)的地址。只是 按照塊的位數(shù)取其前面數(shù)位做為頁號 .
分配空間時,根據(jù)作業(yè)長度可以確定它的頁面數(shù),根據(jù)這個頁面數(shù)在主存中分配相應的塊數(shù),只要是空閑塊就可以放入,即使不是相鄰的。并把分配情況記在“頁表”中,根據(jù)頁表可以找到相對應的頁號與塊號,就得出絕對地址了。
2、采用頁式管理,使主存空間充分利用,頁不必為了得到連續(xù)空間而進行移動。 可以提高系統(tǒng)效率。
3、頁表的構造與作用
每個被裝入主存的作業(yè)都有一張 頁表 ,指出該作業(yè)邏輯地址中的頁號與所占用的主存塊號之間的對應關系。頁表的長度由作頁擁有的頁面數(shù)決定,行號對應為頁號,行中記錄的是主存中的塊號。
頁表是硬件進行地址轉換的依據(jù),每執(zhí)行一條指令時按邏輯地址中的頁號查找頁表并轉換成絕對地址。
在多道程序設計系統(tǒng)中,進入主存的每個作業(yè)都有一張頁表,由一個硬件“頁表控制寄存器”來記錄每個作業(yè)的頁表所在位置和長度以便作業(yè)轉換時同時轉換頁表。
4、快表的構造與作用
快表 就是頁表的一部分克隆,每行中有頁號及其對應的塊號,整個快表存放在一個小容量的高速緩存中,訪問時快表和內存同時進行查找,因為快表速度很快,而常用的頁都登記在快表中,因此可以大大加快執(zhí)行速度。
5、采用頁式管理的地址轉換過程
(為什么不直接用塊分配表來記錄而要用位示圖呢,因為主存塊很多,這樣可以節(jié)省空間,提高效率。位示圖就是用一個位(0或1)來表示一個塊的使用狀態(tài),一個字32位,可以表示32塊。按順序排列,只需一小段內存就可以記錄主存中大量的塊狀態(tài))
6、利用位示圖實現(xiàn)頁式存儲空間的分配和回收
頁式存儲管理把主存空間分成大小固定的許多塊,在裝業(yè)作業(yè)時,如何知道主存中哪些塊已使用,哪些還未用,可以用位示圖來表示。
塊號=字號×字長+位號
字號=[i/字長](即塊號i除以字長取整)
位號=i mod 字長(即塊號i除以字長取余)。
五、段式存儲管理( 領會 )
1、段式存儲中段的劃分
段式管理 是根據(jù)人們對 程序 中需要 分段編制 的要求出發(fā)而提供的。它提供給用戶編程時使用的邏輯地址由“段號”和“段內地址”兩部分組成,其形式和頁式管理相同。但是實際上是不同的:
頁式存儲管理提供連續(xù)邏輯地址由系統(tǒng)自動分頁,段式存儲管理中的作業(yè)分段是由用戶決定的,每段獨立編程,因此段間的邏輯地址是不連續(xù)的。
2、段式存儲空間的分配
這種分配方法和可變分區(qū)管理方式的分配方法相同,所不同的是:
可變分區(qū)管理方式中是為每個作業(yè)分一個區(qū),而段式管理是為一個作業(yè)中的每個段分一個連續(xù)的空間。(段式管理更細)。
3、段表的構造與作用
段表 由 段號 、 本段限長 和 起始地址 三部分組成,由于每一行記錄的行號可以對應程序的段號,因此段號實際上被省略,不占存儲空間。
與其他管理方式一樣,段表記錄的信息用于地址轉換和存儲保護。段表的表目起到了基址/限長寄存器的作用。
4、段式存儲管理的地址轉換
這個轉換過程如同可變分區(qū)方式的地址轉換,但是由段表的表目替代了基址/限長寄存器。
絕對地址=根據(jù)段號找到段表中的起始地址+段內地址 (如果段內地址超過限長則產生“地址越界”程序性中斷事件達到存儲保護)
多道程序設計系統(tǒng)中,每個進入主存的作業(yè)都建立了段表,因此還有一個硬件“段表控制寄存器”來記錄每個作業(yè)的段表在主存中的位置和長度。
六、虛擬存儲器( 領會 )
1、什么是虛擬存儲器
虛擬存儲器 是為“擴大”主存容量而采用的一種設計技巧,它利用作業(yè)在只裝入部分信息時就可以執(zhí)行的特性和程序執(zhí)行中表現(xiàn)出來的局部性特性,借助于大容量的輔助存儲器實現(xiàn)小主存空間容納大邏輯地址空間的作業(yè)。
虛擬存儲器的容量 由計算機的 地址結構(總線位數(shù)) 決定。
2、虛擬存儲器的實現(xiàn)原理
它的工作原理如下:首先把作業(yè)信息保留在磁盤上,當作業(yè)請求裝入時,只將其中一部分先裝入主存,作業(yè)執(zhí)行中若要訪問的信息不在主存中,則再設法將這些信息裝入主存。
3、分頁式虛擬存儲器的實現(xiàn)
頁式虛擬存儲管理 是在 頁式存儲管理 的基礎上實現(xiàn)的。首先把作業(yè)信息作為副本存放在磁盤上,作業(yè)執(zhí)行時,把作業(yè)信息的部分頁面裝入主存儲器,作業(yè)執(zhí)行時若所訪問的頁面已經(jīng)在主存中,則進行地址轉換,得到絕對地址,否則產生“缺頁中斷”由操作系統(tǒng)把當前所需的頁面裝入主存。
4、常用的頁面調度算法:FIFO、LRU、LFU
當主頁中無空閑塊時,為了裝入一個頁面,就必須按某種算法將主存中某個頁調出,調入所需裝入的頁面。這就是頁面調度。常用的算法有:先進先出調度算法( FIFO )、最近最少使用調度算法( LRU )和最近最不常用調度算法( LFU )。
特別要注意掌握的就是 LRU的算法 ,如何進行調度。
5、缺頁中斷率
如果作頁執(zhí)行中訪問頁面的總次數(shù)為A,其中有F次訪問的頁面尚未裝入主存,則有F次缺頁中斷,f=F/A,這里的f就稱為缺頁中斷率。影響缺頁中斷的因素有:
分配給作業(yè)的主存塊數(shù)——塊數(shù)n↑ f↓
頁面的大小——頁面大小↑ f↓
程序編制方法——局部化程度↑ f↓
頁面調度算法
6、段式虛擬存儲器的實現(xiàn)
段式虛擬存儲管理 以 段式存儲管理 為基礎,在磁盤上保留作業(yè)的各個分段信息,作業(yè)執(zhí)行時把需要執(zhí)行的一段或幾段裝入主存。在實際使用中,也要進行查表和地址轉換以及“缺段中斷” 和調度(包括調出、裝入、移動等)工作。