操作系統學習筆記(7)——存儲管理




1、計算機存儲體系

  • 金字塔體系:寄存器>高速緩存>主存儲器>磁盤緩存>固定磁盤>可移動存儲介質
  • 主存儲器(內存):
    • 內存空間是由存儲單元組成的一維連續的地址空間
    • 存放代碼及數據等信息

    



2、存儲管理目標及任務

  • 目標:
    • 充分利用內存空間,為進程的並發執行提供存儲支持

    • 方便用戶使用,自動裝入程序、數據,用戶不必考慮硬件細節 

  • 功能任務
    • 實現內存空間的管理、分配與回收
    • 實現邏輯地址到物理地址的自動轉換
    • 實現多個進程間的信息共享與通信
    • 實現多個進程隔離和信息保護
    • 實現內存和輔存空間的協同使用
  • 地址重定位
    • 靜態地址重定位和動態地址重定位
    • 靜態地址重定位是在虛擬空間程序執行之前,由裝配程序完成的地址映射工作。對於虛擬空間內的指令和數據來說,靜態地址重定位只完成了一個首地址不同的連續地址變換。它要求所有待執行的程序必須在程序執行之前完成它們之間的鏈接,否則將無法得到正確的內存地址和內存空間。優點是不需要硬件支持,但是缺點是必須占有連續的內存空間,這就難以做到數據和程序的共享。
    • 動態地址重定位是程序在執行過程中,在CPU訪問內存之前,將要訪問的程序或數據地址轉換為內存地址。動態地址重定位需要硬件的支持。地址重定位機構需要一個或多個基地址寄存器BR和一個或多個程序虛擬地址寄存器VR,指令或數據的內存地址MA與虛擬地址的計算關系如下:MA=(BR)+(VR),這里的(BR),(VR)分別表示寄存器中的內容。優點有:內存可以不連續分配、提供實現虛存的基礎、有利於程序共享。


 

3、連續存儲區管理方案

 

 



 

 4、分區存儲的管理方案

  • 存儲分區
    • 系統把內存用戶區划分為若干分區
    • 分區大小可以相等,也可以不等
    • 一個進程占據一個分區
    • 分類:固定分區存儲、可變分區存儲
  • 固定分區

 

    • 預先將內存分割成若干個連續區域
    • 每個連續區的大小可以相同,也可以不同,但是,一旦划分好分區之后,主存中分區的個數就固定了,且每個分區的大小也固定不變
    • 如果有足夠大空閑區,則分配給創建的進程
    • 每個分區用來裝入一個作業,由於主存中有多個分區,就可同時在每個分區中裝入一個作業。所以,這種存儲管理方式是適用於多道程序系統的

    • 顯然為了管理主存空間的使用,必須設置一張“主存分配表”(分區說明表),用來說明各分區的分配情況。

 

    • 當作業隊列中有作業要裝入主存時,存儲管理可采用“順序分配算法”進行主存空間的分配。順序查看主存分配表,找到一個標志為“0”的並且長度大於或等於欲裝入作業的地址空間長度的分區就可以了
    • 這種固定分區模式的地址轉換一般采用靜態重定位技術 ,如果內存需要擴充則采用覆蓋技術 

 

    • 優點:實現簡單,無外部碎片
    • 缺點:a.當用戶程序太大時,可能所有的分區都不能滿足需求,此時不得不采用覆蓋技術解決,但這又會降低性能。b.會產生內部碎片,碎片大,存在小分區占用大作業的情況,內存利用率低。
  • 可變分區/變長分區/動態分區
    • 與固定分區的區別就是:動態的划分分區
    • 這種分配方式不會預先划分內存分區,而是在進程裝入內存時,根據進程的大小動態地建立分區,並使分區的大小正好適合進程的需要,因此系統分區的大小和數目是可變的。 
    • 可變分區模式下,剛開始,OS就緒,但任何用戶程序未進入內存前整個用戶內存區是一大空間。已占用區和空閑分區並不是絕對的
    • 需要創建空閑區表和已分配區表來進行管理
    • 程序進入內存時的例行工作就是分配空閑區和裝入程序,並修改相應的空閑表和已分配區表
    • 一旦一個內存分區被分配給一個進程,該進程可以被裝入該塊中執行,裝入時需重定位。
    • 可變分區的實現過程同樣的系統要相應的數據結構表來記錄內存的使用情況

    • 可變分區的分配方式就是當有作業要裝入內存時,在空閑區表中找一找“ 未分配 ”的欄目,從中找出一個能容納作業的空閑區。若空閑區大於作業的長度時則被分成兩部分,一部分分配給作業;另一部分仍作為空閑區登記在表中。若找到的空閑區等於作業長度時,分配后該欄目狀態改為“空”狀。顯然這種動態的按需分配模式有效地解決了固定分區方式中由於分區內部剩余內存空置所形成的內部碎片的問題。當一個新作業裝入內存時,我們也看到是需要按照一定的算法,從空閑分區表(或空閑分區鏈)中選出一個分區分配給該作業的
    • 分區算法
      • 最先(首次)適應分配算法:每次都從低地址開始查找,找到第一個能滿足大小的空閑分區。這種算法優點是實現簡單,缺點是可能將低地址處大的空閑區分割成許多小的空閑區,形成許多不連續的“碎片”。碎片長度可能不能滿足作業要求,降低了內存利用率。
      • 最佳適應算法:空閑分區按容量遞增次序鏈接。每次分配內存時順序查找空閑分區表,找到大小能夠滿足要求的第一個空閑分區。這種算法貌似最佳,盡可能地選擇了最適合的分區空間,但也因此產生大量的不能被使用的很小的空閑區。因此這種方法會產生很多的外部碎片。所以該算法分配效果不一定是最佳的。
      • 最壞適應算法:為了解決最佳適應算法的問題——即留下太多難以利用的小碎片,我們轉換思路考慮可以在每次分配時,優先使用最大的連續空閑區,這樣分配后的空閑區就不會太小,更方便使用。顯然這種算法分割后產生的空閑區一般仍可以供以后分配使用。但工作一段時間后,也不能滿足大作業對空閑區的請求。

 

    • 動態分區的地址轉換模式
      • 顯然,采用可變分區方式時,一般采用動態重定位方式裝入作業。
      • 它的內存擴充方面,雖然消除了固定分區造成的“內碎片”,但是不可避免的在內存空間造成“外碎片”。我們一般采用移動(緊縮)技術進行內存擴充,定時的或在內存緊張時,將內存中所有作業移到內存的一端,使其相鄰。
      • 那么我們也看到經過緊縮后的進程在內存中的位置發生了變化,若不對程序和數據的地址進行修改,在進程就無法運行。要使其運行,必須進行“動態重定位”
    • (問題一)內存回收:空間合並,修改管理表格
    • (問題二)內存碎片:反復分配回收后,產生很多不連續的小空閑塊
    • 問題解決方法:

 



 

5、 存儲覆蓋與交換技術

  • 引入原因
    • 多道環境下擴充內存,解決在較小的存儲空間中運行較大、較多進程時的矛盾
    • 進程的程序和數據主要放在外存,需要執行的部分放在內存,內外存之間進行信息交換
  • 覆蓋技術
    • 進程若干程序段、數據段等共享同一存儲空間
    • 要求模塊之間有明確調用結構,並向系統指明

 

  • 交換技術
    • 多個進程分時共享內存儲空間
    • 進程在內、外存之間動態調度
    • 需要在輔存設置一個盤交換區 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM