1. 程式人生 > >作業系統9-離散分配儲存方案

作業系統9-離散分配儲存方案

9 離散分配儲存方案

9.1基本分頁儲存管理方式

9.1.1 分頁儲存管理基本思想

程式地址空間

  • 把使用者程式按系統規定的邏輯頁劃分成大小相等的部分,稱為頁(page)
  • 從0開始編頁號,頁內地址是相對於0編址
  • 使用者程式的劃分是由系統自動完成的,對使用者是透明的
  • 一般一頁的大小為2的整數次冪

邏輯地址

  • 地址的高位部分為頁號
  • 地址的低位部分為頁內地址

記憶體地址空間

  • 按系統規定的邏輯頁大小劃分為大小相等的區域,稱為塊或記憶體塊(物理頁面、頁框)
  • 從0開始編塊號

記憶體分配

  • 物理塊表:整個系統有一個物理塊表,描述實體記憶體空間的分配使用狀況
  • 資料結構:位示圖、空閒塊連結串列
  • 記憶體以塊為單位進行分配,並按應用程式的頁數多少來分配。
  • 邏輯上相鄰的頁,物理上不一定相鄰。
9.1.2 頁地址對映

頁表

  • 若將應用程式的包含頁號和頁內地址的邏輯地址轉換成記憶體地址,必須要有一個數據結構,用來登記頁號和塊號的對應關係和有關資訊。
  • 這樣的資料結構稱為頁表。
  • 系統為每個程序在記憶體建立一個頁表
  • 頁表內容
    • 頁號:登記程式地址空間的頁號
    • 塊號:登記相應的頁所對應的記憶體塊號
    • 其它:登記與儲存資訊保護有關的資訊
      頁表
  • 頁表的首地址和長度存於該程序的PCB中;
  • 佔用處理機的當前程序的頁表首地址和長度需要放在地址對映機構的頁表首址暫存器和頁表長度暫存器。

例:作業1有2頁分別裝入記憶體的5、6號塊
作業2有3頁裝入記憶體的2、4、7號塊
作業3有1 頁裝入記憶體的8號塊
這裡寫圖片描述

頁大小的選擇

太大:浪費;太小:頁表過長。頁的大小是2K ,K: 9~16。

  • 各種系統的頁表大小:

    • IBM AS/400 VAX NS32032:512位元組
    • Intel 80386 Motorola 68030: 4096位元組
    • Windows2000: 4096位元組
    • Windows NT 隨CPU的不同而不同:4~64K

頁地址對映

  • 分頁中的地址對映其實與通常的地址對映的概念是一樣的,即把程式地址轉換成記憶體地址,這個轉換過程是在程式執行過程中完成的,是動態地址對映。
  • 在現代計算機系統中,由系統提供的地址對映硬體來完成地址對映工作。

:設頁長為1K,程式地址字長為16位。
例

在執行指令MOV r1,[2500]時,地址轉換步驟:
1.取出程式地址字2500送虛地址暫存器VR;
2.由MMU硬體分離出頁號P和頁內地址W;

  • 因為頁長為1K,所以頁內地址佔10位(0-9位),頁號佔6位(10-15位);
  • 硬體取出VR暫存器中的高6位即為頁號,低10 位即為頁內地址。

3.計算可得P=000010(2),W=0111000100;
4.根據頁號P=2,硬體自動查該程序的頁表,找到2號頁對應的塊號為7(000111),將塊號送到記憶體地址暫存器MR的高6位中。
5.將VR中的W的值0111000100複製到MR的低10位中,從而形成記憶體地址。
6.系統就以MR中的地址訪問記憶體。
例

計算時要注意:

  • 若給出的地址為16進位制,則將其轉換為二進位制,然後,根據頁長及程式地址字的長度,分別取出程式地址的高几位和低幾位得到頁號及頁內地址。
    如頁長為2K,程式地址字為16位,21A4,則高5位為頁號,低11位為頁內地址,頁號為00100,頁內地址為00110100100
  • 若給出的地址為十進位制,則用公式: 程式地址/頁長,商為頁號,餘數為頁內地址。記憶體地址=塊號*頁長+頁內地址

    如程式地址為8457, 頁長為4KB
    則8457/4096可得:商為2,餘數為265。
    即P=2,W=265

分頁儲存管理中的資訊保護
資訊保護從兩個方面實現:

  • 在分離程式地址的頁號和頁內地址時判別訪問地址是否越界
    若產生的頁號滿足下式為合法:
    • 0 ≤頁號<程式地址空間的頁數
    • 判斷由硬體自動做,若不合法,硬體產生越界中斷,由作業系統的越界中斷處理程式進行處理。
  • 判斷訪問是否越權
    • 在頁表中增加用於存取控制和儲存保護的資訊,當要訪問某頁的某個邏輯地址時系統要根據該頁的存取控制和儲存保護資訊檢查訪問是否合法。

快表/聯想儲存器

在前述的頁地址變換過程中有一個嚴重的問題—— 每一次對記憶體的訪問都要訪問頁表,頁表是放在記憶體中的,也就是說每一次訪問記憶體的指令至少要訪問兩次記憶體,執行速度要下降一半。

解決方法:

  • 把頁表放在一組快速儲存器中(Cache),從而加快訪問記憶體的速度。
  • 把這種快速儲存器組成的頁表稱為快表,把存放在記憶體中的頁表稱為慢表。
  • 快表又叫相聯(聯想)儲存器(associative memory)或TLB (Translation lookaside buffers)

一個程式可能會很大,如1M,若頁長為1K,則該程式有1000個頁,則頁表就需要1000個表項,當程式更大時,頁表會更大,那麼應該有一個多大的快速儲存器才能滿足要求呢?
遇到兩個問題:
可能快速儲存器多大都是不夠的,因為程式可能會更大,並且快速儲存器是非常昂貴的。

解決方法:

  • 實際上並不需要一個很大的快速儲存器,有一個能存放16個頁表表目的快速儲存器就夠了。
  • 硬體根據需要將頁表中當前需要的少量表目讀入快表,其它表目仍留在記憶體的頁表中,當需要時讀入新的表目,並淘汰適當的表目。
  • 快表表項:
    頁號;記憶體塊號;保護位;修改位;有效位
    快表
    查詢機制

結合快表的查詢分析:

  • 當排程合理時,可以達到97%的效率。
  • 訪問頁表的速度大致相當於訪問快表的速度,考慮到快表的速度是記憶體速度的數倍或數十倍,那麼相對於真正的訪問記憶體工作來講,訪問快表的時間可以忽略不計。
  • 即具有快表的頁地址變換不會造成程序執行速度的下降。

兩級頁表和多級頁表

  • 頁表需要連續空間儲存的,但是當頁表項很多時,僅採用一級頁表需要大片連續空間。
  • 可將頁表也分頁,並對頁表所佔的空間進行索引形成外層頁表。由此構成二級頁表。
  • 更進一步可形成多級頁表。
    二級頁表

對映

三級頁表結構及其地址對映過程:
這裡寫圖片描述

9.1.3 基本頁式儲存管理方案小結
  • 優點:解決了碎片問題
    便於管理

  • 缺點:不易實現共享
    不便於動態連結

9.2 基本分段儲存管理方式

9.2.1 分段儲存管理基本思想

程式地址空間

  • 按程式自身邏輯關係劃分為若干個段,每個段都有一個段名和段號;
  • 段號從0開始;
  • 每段段內從0開始編址,段內地址連續。

邏輯地址
邏輯地址

記憶體地址空間

  • 記憶體空間被動態的劃分為若干個長度不相同的區域,稱為物理段;
  • 每個物理段由起始地址和長度確定。

記憶體分配

  • 以段為單位分配記憶體,每一個段在記憶體中佔據連續空間;
  • 各段之間可以不連續存放。
  • 空閒塊管理
    空閒塊表(佇列)
  • 記憶體分配演算法(三種)
    首次 最佳 最壞
    與動態分割槽管理相同
9.2.2 段地址對映

1、 地址對映資料結構

  • 每一程序有個段表,它的每一個段在段表中佔用一個表目;
  • 段表一般包括有段的首址、段的長度和存取狀態等資訊。
  • 段表首址指標和段表的長度存放在程序PCB中,當前程序的還需裝入暫存器。
    段

2.段地址對映

由硬體地址變換機構完成。
段

段地址對映過程為

  • 程式地址送入虛地址暫存器VR中;
  • 取出段號S和段內位移W;
  • 根據段表首址指標找到段表,查詢段號為S的表目,得到該段的首地址;
  • 把段首地址與段內位移相加,形成記憶體地址送入MR中,並以此地址訪問記憶體。

3、儲存保護

  • 防止越界訪問
    • 段號
    • 段內地址
  • 防止越權訪問

4、快表

  • 同頁地址變換一樣,在段地址變換過程中,也有兩次訪問記憶體的問題。為了加快訪問記憶體的速度也可採用快速儲存器組成快表。

完整流程

5、分段與分頁技術的比較

分段與分頁主要有以下差別:

  • 頁大小是系統固定的,段大小通常不固定。
  • 分頁是出於系統管理的需要,分段是出於使用者應用的需要。
    • 一條指令或一個運算元可能會跨越兩個頁的分界處,而不會跨越兩個段的分界處。
  • 邏輯地址表示
    • 分頁是一維的,各個模組在連結時必須組織成同一個地址空間;
    • 分段是二維的,各個模組在連結時可以每個段組織成一個地址空間。
  • 通常段比頁大,因而段表比頁表短,可以縮短查詢時間,提高訪問速度。
  • 段的共享比頁的共享更容易
9.2.3 段式儲存管理方案小結

優點:

  • 便於動態申請記憶體
  • 管理和使用統一化
  • 便於共享
  • 便於動態連結

缺點:產生碎片

9.3 段頁式儲存管理方式

結合頁式段式優點,克服二者的缺點

9.3.1 段頁式儲存管理基本思想
  • 程式地址空間
    按段式劃分(對使用者來講,按段的邏輯關係進行劃分;對系統講,按頁劃分每一段)
    程式地址
  • 邏輯地址
    邏輯地址

  • 記憶體地址空間
    按頁式儲存管理方案

  • 記憶體分配
    以塊為單位進行分配。
9.3.2 地址對映
  • 段表:記錄了每一段的頁表始址和頁表長度

  • 頁表:記錄了該段中每個邏輯頁號與記憶體塊號的對應關係
    (每一段有一個,一個程式可能有多個頁表)
    段頁

相關推薦

作業系統9-離散分配儲存方案

9 離散分配儲存方案 9.1基本分頁儲存管理方式 9.1.1 分頁儲存管理基本思想 程式地址空間 把使用者程式按系統規定的邏輯頁劃分成大小相等的部分,稱為頁(page) 從0開始編頁號,頁內地址是相對於0編址 使用者程式的劃分是由系統自動完成

作業系統第四章學習筆記 (2)儲存器管理 連續分配儲存管理方式

連續分配方式:為一個使用者程式分配一個連續的記憶體空間 :單一連續分配                 記憶體分為系統區和使用者區兩部分:        

作業系統之記憶體離散分配

儲存管理的離散分配方式 基本分頁儲存管理方式   1)頁面的概念 記憶體劃分成多個小單元,每個單元K大小,稱(物理)塊。作業也按K單位大小劃分成片,稱為頁面。① 物理劃分塊的大小 = 邏輯劃分的頁的大小②頁面大小要適中。 太大,(最後一頁)內碎片增大,類似連續分配的問題。 太小的話,頁

作業系統 第四章 記憶體離散分配 分段--筆記*2

頁表筆記補充 每個程序一張頁表 一張OS反置頁表+沒程序一張外部頁表 **反置頁表:**站在物理角度,記錄佔用他的已調入記憶體的程序標識和頁號。系統中只需要一張表即可(例如:一個64MB記憶體,若頁面大小4KB[64M/4K=2^16 ,16個物理塊],反置頁

作業系統學習-19.離散分配方式

寫在前面 連續分配方式會形成許多“碎片”,雖然可通過“緊湊”方法將許多碎片拼接成可用的大塊空間,但須為之付出很大開銷。如果允許將一個程序直接分散地裝入到許多不相鄰接的分割槽中,則無須再進行“緊湊”。基於這一思想而產生了離散分配方式。如果離散分配的基本單位是頁,

作業系統第四章記憶體離散分配 分頁、分段

記憶體離散分配 分頁、分段 比較連續分配方式 作業邏輯地址空間有M大,就需要向記憶體申請一個M大的連續區域。 分頁的目的是更細粒度的處理空間,減少粗放管理的浪費或開銷問題。 1)頁面的概念 記憶體劃分成多個小單元,每個單元K大小,稱(物理)塊。作業也按K單位大小

異數OS 織夢師-水桶(三)-- RAM共享儲存方案

. 異數OS 織夢師-水桶(三)– RAM共享儲存方案 本文來自異數OS社群 github: https://github.com/yds086/HereticOS 異數OS社群QQ群: 652455784 異數OS-織夢師(訊息中介軟體 RPC技術)群: 4

串的堆分配儲存表示

示意圖: 形態: 插入: 刪除: 實現: /

第4章 儲存器管理 連續分配儲存管理方式

一,連續分配儲存管理方式 1,連續分配方式 為一個使用者程式分配一個連續的記憶體空間 (1)單一連續分配 記憶體分為系統區和使用者區兩部分: 系統區:僅提供給OS使用,通常放在記憶體低址部分 使用者區:除系統區以外的全部記憶體空間,提供給使用者使用。 最簡單的一種儲存管

第四章 記憶體離散分配 分頁、分段

連續分配方式:一個程序連續的裝進記憶體一個大小合適的區。  “碎片”  “緊湊”  增大開銷 如果允許一個程序直接分散裝入多個不相鄰分割槽中,則無需“緊湊” 產生儲存管理的離散分配方式。

Android資料儲存方案

android內建資料庫——SQLLite 概述SQLite SQLite是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入  式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能

9-格式化檔案儲存-XPath

XPath 在XML檔案中查詢資訊的一套規則/語言,根據XML的元素或者屬性進行遍歷 http://www.w3school.com.cn/xpath/index.asp XPath 開發工具 開源的XPath表示式編輯工具:XMLQuire Chrome外掛:XPath Hel

記憶體離散分配、分頁、分段

連續分配方式:一個程序連續的裝進記憶體一個大小合適的區。“碎片”  “緊湊”  增大開銷如果允許一個程序直接分散裝入多個不相鄰分割槽中,則無需“緊湊”產生儲存管理的離散分配方式。 基本分頁儲存管理 比較連續分配方式作業邏輯地址空間有M大,就需要向記憶體申請一個M大的連續區域。分頁的目的是更細粒度的處理

軟考-作業系統(程序、儲存

程序 程序的基本概念、狀態轉換:略 掛起狀態:記憶體當中的程序對映到外存的一個過程 超時:超過使用者可用的時間   程序死鎖 避免死鎖演算法:銀行家演算法:避免死鎖的演算法。仿銀行貸款業務,需稽核,驗是否有還款能力   前趨圖:程序執行的先後順序。

HBase實戰 | 從MySQL到HBase:資料儲存方案轉型的演進

一.叢集化方案 1.MySQL應用的演化  MySQL與HBase說到最核心的點,是一種資料儲存方案。方案本身沒有對錯、沒有好壞,只有合適與否。相信多數公司都與MySQL有著不解之緣,部分學校的課程甚至直接以SQL語言作為資料庫講解。我想借自身經歷,先來談談MySQL應用的演化。

google低儲存方案設計(略微修改)

一.概述   當手機剩餘儲存過低時系統可能會無儲存可用,從而導致系統崩潰或無法開機問題。為了解決這類問題我們制定了一套低儲存方案,引導使用者清理垃圾騰出儲存空間,和預留空間給系統應用使用,降低儲存導致的系統崩潰或無法開機的問題。該方案主要從應用,Framework,檔案系統層三層來深入展開。應用

Redis 百億級 Key 儲存方案

1 需求背景 該應用場景為DMP快取儲存需求,DMP需要管理非常多的第三方id資料,其中包括各媒體cookie與自身cookie(以下統稱supperid)的mapping關係,還包括了supperid的人口標籤、移動端id(主要是idfa和imei)的人口標籤,以及一

資料儲存方案--檔案儲存

mainActivity package com.example.filepersistencetest; import android.content.Context; import android.net.Uri; import android.support.v7.

樹形結構資料儲存方案的選擇和java list轉tree

樹形結構資料儲存方案 Adjacency List:每一條記錄存parent_idPath Enumerations:每一條記錄存整個tree path經過的node列舉Nested Sets:每一條記錄存 nleft 和 nrightClosure Table:維護一個表,所有的tree path作為

資料儲存方案

一,資料儲存介紹 1.作業系統獲得儲存空間的方式一般分為: ① 外接活動硬碟 (DAS) ② 網路儲存伺服器 (NAS)