1. 程式人生 > >作業系統 第四章 儲存管理

作業系統 第四章 儲存管理

本章考核知識點:1、重定位 2、固定分割槽儲存管理 3、可變分割槽儲存管理 4、頁式儲存管理 5、段式儲存管理 6、虛擬儲存器


自學要求 :明確儲存管理的職能是對主儲存器中的使用者區域進行管理;理解在不同的管理方式下如何實現儲存保護、地址轉換、以及主存空間的分配和回收;比較各種管理方式的特點;掌握虛擬儲存器的實現原理和方法。


重點是:各種管理方式的特點;可變分割槽方式的主存分配演算法以及移動技術;分頁式虛擬儲存管理的實現以及頁面排程演算法;分段式虛擬儲存管理的實現。


  作業系統的儲存管理如同一個大地主,管著一個大莊園,當有農戶需要租用田地時,地主就給分配一塊地讓他種(使用者區分配)。等到地裡長出了果實(結果出來後,地主還得來收回這塊地(去配)。 
      為了管好這片田地,地主還要管好莊園的門,凡是要進去種地的,都得由地主根據他的需要讓他到位置確定實際的田地上去幹活。(把邏輯地址轉換成實體地址) 
      莊園裡還有一些大家共同可以使用的地方,比如地主的花園,工具房等,大家可以進去,也可以使用,但是不許改變任何現有的東東,還有,每個農戶只能在自己的地裡刨食吃,如果有人膽敢到別人地裡或地主的花園裡摘花偷食,可要當心他們養的狼狗跳出來哦。(共享和保護) 
      當然,再大的地也是不夠多的,地主為了多賺些錢,當所有的地都租出去的時候,他想辦法把有些種田人暫時不種的那塊地裡的東東連地皮一起挖出來放到倉庫裡先堆著。把地騰出來租給別人種(這一招可夠絕的,不過地主說啦,這就是“虛擬儲存”。) 
      你說這個地主是好是壞??
概述:本章討論的是主儲存器空間的管理。主儲存空間分成系統區和使用者區兩部分。儲存管理的功能包括:主存空間的分配和去配、實現地址轉換、主存空間的區享和保護和主存空間擴充。


一、重定位( 領會 )


1、區分邏輯地址與絕對地址。



絕對地址 :主儲存器以位元組為編址單位,容量為n的主儲存器中,每個單元有唯一的編號,從0到n-1,這個唯一的編號就是主儲存器的 實體地址 。

比如我們現在用的128MB記憶體條中就有128×1024×1024=134217728 位元組,所以它的記憶體絕對地址就是從0到134217727。 
注意啦,莊園的大地主就是這麼給自己的地做上標記的。

邏輯地址 :在多道程式設計的系統中,作業系統為了方便使用者,就允許每個使用者都認為自己的作業的程式和資料存放在地址是0開始的連續空間中。這樣使用者程式中使用的地址就是 邏輯地址 。

種田人不管地主莊園有多少塊地,標了什麼號,只要記住自己需要多少地,給自己種的地打上標記就是了。地主想,只要你們能幹活,不需要知道了我的底細了吧(家財不可外揚哦)。

2 、重定位(地址轉換的方式)


為了保證作業的正確執行,必須根據分配給作業的主存區域對作業中指令和資料的存放進行重定位,這種 把邏輯地址轉換成絕對地址 的工作稱為“ 重定位 ”或“地址轉換”。重定位的方式有“ 靜態重定位 ”和“ 動態重定位 ”兩種。


  莊園主道:靜態重定位比較簡單,想當初張三來這兒, 說要租一百塊地,青菜種在第1塊地,蘿蔔種2塊地裡,土豆得重在第3塊地裡...然後得在第28塊地裡養鴨,完了要把28塊地裡的鴨糞拉到第49塊地的魚塘裡餵魚.... 我就說,行啦行啦,你進去,莊園的左邊101到200號那100塊地就分給你吧,以後你要找哪塊地養鴨養魚的,就得按我給你編的號來找。每個地址都已經加上100了,不會找錯吧。別說我沒講清楚哦。 


      至於動態重定位,莊主笑道:這個我也能做到,這麼實現的:李四來租地時,我也不問他,直接把他帶到空閒的一片地方。派人記著這那片地的第一個地址。比如說是100號吧。李四這個笨小子幹著幹著會叫起來說:“老闆,現在我要到32號地裡抓魚!”旁邊人一聽,馬上告訴他“哎呀,你現在已經分了地啦,起始地塊是100號,那你就得到132號地去才對!”就這樣,李四每一次要找地方時,都叫別人給他重新算一下。這樣他才不會找錯位置。這樣也有一個好處,就是如果有人出價更好,我可以讓他搬到別處去幹活,反正都是叫別人給他重新算位置,所以他就不用記住搬地方後的實體地址啦。
(1)靜態重定位


在裝入一個作業時,把作業中的指令地址和資料地址全部轉換成絕對地址。這種轉換工作是在 作業開始前集中完成 的,在作業執行過程中無需再進行地址轉換。所以稱為“靜態重定位”。


(2)動態重定位


在裝入一個作業時,不進行地址轉換,而是直接把作業裝到分配的主區域中。在作業執行過程中,每當執行一條指令時都由硬體的地址轉換機構轉換成絕對地址。這種方式的地址轉換是在 作業執行時動態完成 的,所以稱為動態重定位。


動態重定位由軟體(作業系統)和硬體(地址轉換機構)相互配合來實現。動態重定位的系統支援“程式浮動”,而靜態重定位則不能。


二、固定分割槽儲存管理( 領會 )


分割槽儲存管理是把儲存器中的使用者區作為一個連續區或分成若干連續區進行管理。早先使用一個分割槽的儲存管理,後發展成多分割槽的儲存管理。多個分割槽的管理可採用固定分割槽方式和可變分割槽方式。


1、固定分割槽儲存管理的原理



固定分割槽 的意思就是指主存空間劃分成若干連續區後,這些分割槽的 大小和個數 就 固定 不變。


固定分割槽管理利用一張“ 主存分配表 ”說明各分割槽的情況。裝入和結束作業均通過這個分割槽表來記錄分割槽使用的變化情況。


2、如何實現儲存保護


固定分割槽管理 可採用 靜態重定位 的方式裝入作業。裝入程式把作業中的邏輯地址轉換為絕對地址。並檢查絕對地址是否在指定(裝入)的分割槽內,如果是,就裝入這個作業。否則就不能裝入。如果裝入主存分割槽的作業佔用處理器時(注意,是執行時),程序排程程式(不是裝入程式了)必須把作業所在分割槽的上下限地址存入“下限暫存器”和“上限暫存器”中,這樣可以在指令執行中判斷其所用到的絕對地址是否越界,達到儲存保護的目的。


3、怎樣 提高主存空間的利用率 這裡有幾種辦法:


(1)分割槽按大小順序排列,這樣可以使作業總是先使用滿足要求的最小分割槽。
(2)根據經常出現的作業大小和頻率劃分分割槽。
(3)按作業的對主存空間的需求量排成多個佇列,規定佇列與分割槽的對應關係。也就是說多大的作業只能放在多大的分割槽裡,就算有更大的分割槽空著,也不許他進入。
三、可變分割槽的管理( 領會 )


可變就是指分割槽的 大小和位置不是固定 的,而是根據作業要求的主存量來分配分割槽的大小。


1、主存的分配和去配(回收)


在系統初始化時,主存除了作業系統所佔部分外,整個使用者區是一個大的空閒區,可以按作業需要的空間大小順序分配空閒區直到不夠時為止。


當作業結束時,它的佔用分割槽被收回。這個空閒區又可以根據新作業的大小重新用於分配,所以主存中的已佔分割槽和空閒區的數目和大小都是在變化的。可以用兩張表“已分配區表”和“空閒區表”來記錄和管理。


2、常用的分配演算法


最先適應分配演算法 :簡單地說,就是在分割槽表中順序查詢,找到夠大的空閒區就分配。但是這樣的分配演算法可能形成許多不連續的空閒區,造成許多“碎片”,使主存空間利用率降低。


最優適應分配演算法 :這種演算法總是挑選一個能滿足作業要求的最小空閒區。但是這種演算法可能形成一些極小的空閒區,以致無法使用,這也會影響主存利用率。


最壞適應分配演算法 :這種演算法和上面的正好相反,它總是挑一個最大的空閒區分給作業使用,使剩下的空間不至於太小。


3、地址轉換與儲存保護


採用 可變分割槽方式管理 時,一般均採用 動態重定位 方式裝入作業。也就是每讀一條指令,都要變換一次地址。變換要靠硬體支援,主要是 兩個暫存器 : 基址 暫存器和 限長 暫存器,限長暫存器存放作業所佔分割槽的長度,基址暫存器則存放作業所佔分割槽的起始地址,這兩個值確定了一個分割槽的位置和大小。


轉換時根據邏輯地址與限長值比較,如果不有超過這個值,表示訪問地址合法,再加上基址暫存器中的值就得到了絕對地址了,否則形成“地址越界”中斷。達到儲存保護的目的。


對於共享程式,則硬體提供兩組限長暫存器和基址暫存器。訪問時對訪問區享區和作業區的地址分別進行轉換。


4、移動技術的應用


移動技術 要“移動”的東東就是主存空間中的作業。把某個作業移到另一處主存空間去(在磁碟整理中我們應用的也是類似的移動技術),這樣的最大好處就是可以合併一些空閒區。


但是移動技術的應用也要注意以下問題。


移動會增加系統開銷。所以要儘量減少移動。
移動是有條件的,如果作業在執行過程中正等待與外圍裝置傳輸資訊,就不能移動。因此在移動時首先要判定該作業是否與外設交換資訊。
四、頁式儲存管理( 領會 )


1、如何分頁和分塊


頁式儲存管理中有兩個名詞:“ 頁 ”和“ 塊 ”,其中的“塊”是針對硬體來說的,就是把儲存器分成若干相等大小的區,每個區就稱為一個塊。對應的,在程式中,邏輯地址進行“分頁”,其大小和每個塊相一致。


事實上,頁面的大小是由塊的大小自然決定的。對於程式來說,其邏輯地址還是和原來一樣採用連續的地址。只是 按照塊的位數取其前面數位做為頁號 。


分配空間時,根據作業長度可以確定它的頁面數,根據這個頁面數在主存中分配相應的塊數,只要是空閒塊就可以放入,即使不是相鄰的。並把分配情況記在“頁表”中,根據頁表可以找到相對應的頁號與塊號,就得出絕對地址了。


2、採用頁式管理,使主存空間充分利用,頁不必為了得到連續空間而進行移動。 可以提高系統效率。


3、頁表的構造與作用


每個被裝入主存的作業都有一張 頁表 ,指出該作業邏輯地址中的頁號與所佔用的主存塊號之間的對應關係。頁表的長度由作頁擁有的頁面數決定,行號對應為頁號,行中記錄的是主存中的塊號。


頁表是硬體進行地址轉換的依據,每執行一條指令時按邏輯地址中的頁號查詢頁表並轉換成絕對地址。


在多道程式設計系統中,進入主存的每個作業都有一張頁表,由一個硬體“頁表控制暫存器”來記錄每個作業的頁表所在位置和長度以便作業轉換時同時轉換頁表。


4、快表的構造與作用


快表 就是頁表的一部分克隆,每行中有頁號及其對應的塊號,整個快表存放在一個小容量的快取記憶體中,訪問時快表和記憶體同時進行查詢,因為快錶速度很快,而常用的頁都登記在快表中,因此可以大大加快執行速度。


5、採用頁式管理的地址轉換過程


(為什麼不直接用塊分配表來記錄而要用位示圖呢,因為主存塊很多,這樣可以節省空間,提高效率。位示圖就是用一個位(0或1)來表示一個塊的使用狀態,一個字32位,可以表示32塊。按順序排列,只需一小段記憶體就可以記錄主存中大量的塊狀態)
6、利用位示圖實現頁式儲存空間的分配和回收


頁式儲存管理把主存空間分成大小固定的許多塊,在裝業作業時,如何知道主存中哪些塊已使用,哪些還未用,可以用位示圖來表示。 


   塊號=字號×字長+位號 
   字號=[i/字長](即塊號i除以字長取整) 
   位號=i mod 字長(即塊號i除以字長取餘)。


五、段式儲存管理( 領會 )


1、段式儲存中段的劃分


段式管理 是根據人們對 程式 中需要 分段編制 的要求出發而提供的。它提供給使用者程式設計時使用的邏輯地址由“段號”和“段內地址”兩部分組成,其形式和頁式管理相同。但是實際上是不同的:


頁式儲存管理提供連續邏輯地址由系統自動分頁,段式儲存管理中的作業分段是由使用者決定的,每段獨立程式設計,因此段間的邏輯地址是不連續的。


2、段式儲存空間的分配


這種分配方法和可變分割槽管理方式的分配方法相同,所不同的是:


可變分割槽管理方式中是為每個作業分一個區,而段式管理是為一個作業中的每個段分一個連續的空間。(段式管理更細)。


3、段表的構造與作用


段表 由 段號 、 本段限長 和 起始地址 三部分組成,由於每一行記錄的行號可以對應程式的段號,因此段號實際上被省略,不佔儲存空間。


與其他管理方式一樣,段表記錄的資訊用於地址轉換和儲存保護。段表的表目起到了基址/限長暫存器的作用。


4、段式儲存管理的地址轉換


這個轉換過程如同可變分割槽方式的地址轉換,但是由段表的表目替代了基址/限長暫存器。


絕對地址=根據段號找到段表中的起始地址+段內地址 (如果段內地址超過限長則產生“地址越界”程式性中斷事件達到儲存保護)


多道程式設計系統中,每個進入主存的作業都建立了段表,因此還有一個硬體“段表控制暫存器”來記錄每個作業的段表在主存中的位置和長度。


六、虛擬儲存器( 領會 )


1、什麼是虛擬儲存器


虛擬儲存器 是為“擴大”主存容量而採用的一種設計技巧,它利用作業在只裝入部分資訊時就可以執行的特性和程式執行中表現出來的區域性性特性,藉助於大容量的輔助儲存器實現小主存空間容納大邏輯地址空間的作業。


虛擬儲存器的容量 由計算機的 地址結構(匯流排位數) 決定。


2、虛擬儲存器的實現原理


它的工作原理如下:首先把作業資訊保留在磁碟上,當作業請求裝入時,只將其中一部分先裝入主存,作業執行中若要訪問的資訊不在主存中,則再設法將這些資訊裝入主存。


3、分頁式虛擬儲存器的實現


頁式虛擬儲存管理 是在 頁式儲存管理 的基礎上實現的。首先把作業資訊作為副本存放在磁碟上,作業執行時,把作業資訊的部分頁面裝入主儲存器,作業執行時若所訪問的頁面已經在主存中,則進行地址轉換,得到絕對地址,否則產生“缺頁中斷”由作業系統把當前所需的頁面裝入主存。


4、常用的頁面排程演算法:FIFO、LRU、LFU


當主頁中無空閒塊時,為了裝入一個頁面,就必須按某種演算法將主存中某個頁調出,調入所需裝入的頁面。這就是頁面排程。常用的演算法有:先進先出排程演算法( FIFO )、最近最少使用排程演算法( LRU )和最近最不常用排程演算法( LFU )。


特別要注意掌握的就是 LRU的演算法 ,如何進行排程。


5、缺頁中斷率


如果作頁執行中訪問頁面的總次數為A,其中有F次訪問的頁面尚未裝入主存,則有F次缺頁中斷,f=F/A,這裡的f就稱為缺頁中斷率。影響缺頁中斷的因素有:


分配給作業的主存塊數----塊數n↑ f↓
頁面的大小----頁面大小↑ f↓
程式編制方法----區域性化程度↑ f↓
頁面排程演算法
6、段式虛擬儲存器的實現


段式虛擬儲存管理 以 段式儲存管理 為基礎,在磁碟上保留作業的各個分段資訊,作業執行時把需要執行的一段或幾段裝入主存。在實際使用中,也要進行查表和地址轉換以及“缺段中斷” 和排程(包括調出、裝入、移動等)工作。