1. 程式人生 > >作業系統學習-19.離散分配方式

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

寫在前面

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

在分頁儲存管理方式中,如果不具備頁面對換功能,則稱為基本的分頁儲存管理方式,或稱為純分頁儲存管理方式,它不具有支援實現虛擬儲存器的功能,它要求把每個作業全部裝入記憶體後方能執行。

頁面與頁表

1.頁面
1) 頁面和物理塊
分頁儲存管理是將一個程序的邏輯地址空間分成若干個大小相等的片,稱為頁面或頁,併為各頁加以編號,從 0 開始,如第 0 頁、第 1 頁等。相應地,也把記憶體空間分成與頁面相同大小的若干個儲存塊,稱為(物理)塊或頁框(frame),也同樣為它們加以編號,如 0#塊、1#塊等等。在為程序分配記憶體時,以塊為單位將程序中的若干個頁分別裝入到多個可以不相鄰接的物理塊中。由於程序的最後一頁經常裝不滿一塊而形成了不可利用的碎片,稱之為“頁內碎片”。

2) 頁面大小
在分頁系統中的頁面其大小應適中。頁面若太小,一方面雖然可使記憶體碎片減小,從而減少了記憶體碎片的總空間,有利於提高記憶體利用率,但另一方面也會使每個程序佔用較多的頁面,從而導致程序的頁表過長,佔用大量記憶體;此外,還會降低頁面換進換出的效率。然而,如果選擇的頁面較大,雖然可以減少頁表的長度,提高頁面換進換出的速度,但卻又會使頁內碎片增大。因此,頁面的大小應選擇適中,且頁面大小應是 2 的冪,通常為 512 B~8 KB。

2.地址結構
分頁地址中的地址結構如下:
這裡寫圖片描述

它含有兩部分:前一部分為頁號 P,後一部分為位移量 W(或稱為頁內地址)。圖中的地址長度為 32 位,其中 0~11 位為頁內地址,即每頁的大小為 4 KB;12~31 位為頁號,地址空間最多允許有 1 M 頁。

對於某特定機器,其地址結構是一定的。若給定一個邏輯地址空間中的地址為 A,頁面的大小為 L,則頁號 P 和頁內地址 d 可按下式求得:
這裡寫圖片描述
其中,INT 是整除函式,MOD 是取餘函式。例如,其系統的頁面大小為 1 KB,設 A = 2170 B,則由上式可以求得 P = 2,d = 122。

3.頁表
在分頁系統中,允許將程序的各個頁離散地儲存在記憶體不同的物理塊中,但系統應能保證程序的正確執行,即能在記憶體中找到每個頁面所對應的物理塊。為此,系統又為每個程序建立了一張頁面映像表,簡稱頁表。

在程序地址空間內的所有頁(0~n),依次在頁表中有一頁表項,其中記錄了相應頁在記憶體中對應的物理塊號。在配置了頁表後,程序執行時,通過查詢該表,即可找到每頁在記憶體中的物理塊號。可見,頁表的作用是實現從頁號到物理塊號的地址對映。

常在頁表的表項中設定一存取控制欄位,用於對該儲存塊中的內容加以保護。當存取控制欄位僅有一位時,可用來規定該儲存塊中的內容是允許讀/寫,還是隻讀;若存取控制欄位為二位,則可規定為讀/寫、只讀和只執行等存取方式。如果有一程序試圖去寫一個只允許讀的儲存塊時,將引起作業系統的一次中斷。如果要利用分頁系統去實現虛擬儲存器,則還須增設一資料項。

地址變換機構

為了能將使用者地址空間中的邏輯地址變換為記憶體空間中的實體地址,在系統中必須設定地址變換機構。該機構的基本任務是實現從邏輯地址到實體地址的轉換。地址變換機構的任務實際上只是將邏輯地址中的頁號,轉換為記憶體中的物理塊號。

1.基本的地址變換機構
頁表的功能可以由一組專門的暫存器來實現。一個頁表項用一個暫存器。

由於暫存器具有較高的訪問速度,因而有利於提高地址變換的速度;但由於暫存器成本較高,且大多數現代計算機的頁表又可能很大,使頁表項的總數可達幾千甚至幾十萬個,顯然這些頁表項不可能都用暫存器來實現,因此,頁表大多駐留在記憶體中。

在系統中只設置一個頁表暫存器 PTR(Page-Table Register),在其中存放頁表在記憶體的始址和頁表的長度。平時,程序未
執行時,頁表的始址和頁表長度存放在本程序的 PCB 中。當排程程式排程到某程序時,才將這兩個資料裝入頁表暫存器中。因此,在單處理機環境下,雖然系統中可以執行多個程序,但只需一個頁表暫存器。

當程序要訪問某個邏輯地址中的資料時,分頁地址變換機構會自動地將有效地址(相對地址)分為頁號和頁內地址兩部分,再以頁號為索引去檢索頁表。查詢操作由硬體執行。

在執行檢索之前,先將頁號與頁表長度進行比較,如果頁號大於或等於頁表長度,則表示本次所訪問的地址已超越程序的地址空間。於是,這一錯誤將被系統發現併產生一地址越界中斷。若未出現越界錯誤,則將頁表始址與頁號和頁表項長度的乘積相加,便得到該表項在頁表中的位置,於是可從中得到該頁的物理塊號,將之裝入實體地址暫存器中。與此同時,再將有效地址暫存器中的頁內地址送入實體地址暫存器的塊內地址欄位中。這樣便完成了從邏輯地址到實體地址的變換。

圖1. 分頁系統的地址變換機構
這裡寫圖片描述

2.具有快表的地址變換機構
由於頁表是存放在記憶體中的,這使 CPU 在每存取一個數據時,都要兩次訪問記憶體。第一次是訪問記憶體中的頁表,從中找到指定頁的物理塊號,再將塊號與頁內偏移量 W 拼接,以形成實體地址。第二次訪問記憶體時,才是從第一次所得地址中獲得所需資料(或向此地址中寫入資料)。因此,採用這種方式將使計算機的處理速度降低近 1/2。

為了提高地址變換速度,可在地址變換機構中增設一個具有並行查尋能力的特殊高速緩衝暫存器,又稱為“聯想暫存器”(Associative Memory),或稱為“快表”,在 IBM 系統中又取名為 TLB(Translation Lookaside Buffer),用以存放當前訪問的那些頁表項。

此時的地址:變換過程是:在 CPU 給出有效地址後,由地址變換機構自動地將頁號 P 送入高速緩衝暫存器,並將此頁號與快取記憶體中的所有頁號進行比較,若其中有與此相匹配的頁號,便表示所要訪問的頁表項在快表中。於是,可直接從快表中讀出該頁所對應的物理塊號,並送到實體地址暫存器中。如在塊表中未找到對應的頁表項,則還須再訪問記憶體中的頁表,找到後,把從頁表項中讀出的物理塊號送地址暫存器;同時,再將此頁表項存入快表的一個暫存器單元中,亦即,重新修改快表。但如果聯想暫存器已滿,則 OS 必須找到一個老的且已被認為不再需要的頁表項,將它換出。

圖2. 具有快表的地址變換機構
這裡寫圖片描述

由於成本的關係,快表不可能做得很大,通常只存放 16~512 個頁表項,這對中、小型作業來說,已有可能把全部頁表項放在快表中,但對於大型作業,則只能將其一部分頁表項放入其中。

兩級和多級頁表

現代的大多數計算機系統,都支援非常大的邏輯地址空間(232~264)。在這樣的環境下,頁表就變得非常大,要佔用相當大的記憶體空間。例如,對於一個具有 32 位邏輯地址空間的分頁系統,規定頁面大小為 4 KB 即 212 B,則在每個程序頁表中的頁表項可達 1 兆個之多。又因為每個頁表項佔用一個位元組,故每個程序僅僅其頁表就要佔用 1 MB 的記憶體空間,而且還要求是連續的。

顯然這是不現實的,我們可以採用下述兩個方法來解決這一問題:
(1) 採用離散分配方式來解決難以找到一塊連續的大記憶體空間的問題;
(2) 只將當前需要的部分頁表項調入記憶體,其餘的頁表項仍駐留在磁碟上,需要時再調入。

1.兩級頁表(Two-Level Page Table)
對於要求連續的記憶體空間來存放頁表的問題,可利用將頁表進行分頁,並離散地將各個頁面分別存放在不同的物理塊中的辦法來加以解決,同樣也要為離散分配的頁表再建立一張頁表,稱為外層頁表(Outer Page Table),在每個頁表項中記錄了頁表頁面的物理塊號。

以前面的 32 位邏輯地址空間為例來說明。當頁面大小為 4 KB 時(12 位),若採用一級頁表結構,應具有 20 位的頁號,即頁表項應有 1 兆個;在採用兩級頁表結構時,再對頁表進行分頁,使每頁中包含 210 (即 1024)個頁表項,最多允許有 210個頁表分頁;或者說,外層頁表中的外層頁內地址 P2為 10 位,外層頁號 P1也為 10 位。此時的邏輯地址結構可描述如下:
這裡寫圖片描述

在頁表的每個表項中存放的是程序的某頁在記憶體中的物理塊號,如第0#頁存放在 1#物理塊中;1#頁存放在 4#物理塊中。在外層頁表的每個頁表項中,所存放的是某頁表分頁的首址,如第 0#頁表是存放在第 1011#物理塊中。具體圖示如下:
這裡寫圖片描述
在地址變換機構中同樣需要增設一個外層頁表暫存器,用於存放外層頁表的始址,並利用邏輯地址中的外層頁號,作為外層頁表的索引,從中找到指定頁表分頁的始址,再利用 P2 作為指定頁表分頁的索引,找到指定的頁表項,其中即含有該頁在記憶體的物理塊號,用該塊號和頁內地址 d 即可構成訪問的記憶體實體地址。

具有兩級頁表的地址變換機構如下圖所示
這裡寫圖片描述

2.多級頁表
對於 32 位的機器,採用兩級頁表結構是合適的,但對於 64 位的機器,必須採用多級頁表。簡單的分析如下:

如果頁面大小仍採用 4 KB 即 2 ^ 12 B,那麼還剩下 52 位,假定仍按物理塊的大小(2 ^ 12 位)來劃分頁表,則將餘下的 42 位用於外層頁號。此時在外層頁表中可能有 4096 G 個頁表項,要佔用 16 384 GB 的連續記憶體空間。

相關推薦

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

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

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

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

學習筆記--幾種離散方式

常見 然而 stl namespace img 完成 uno find 之前 前言 在OI學習過程中,我們常常會發現一些題目(尤其數據結構題)中,一些數據的範圍很大,但是涉及的數值的個數卻很少,同時我們想用一個數組的下標與這些數據建立一一對應關系,這時我們就需要離散化 大致

作業系統 第四章 2 儲存器管理 連續分配方式

1)單一連續分配: 記憶體分為系統區和使用者區兩部分 2)固定分割槽分配: 把記憶體分為一些大小相等或不等的分割槽,每個應用程序佔用一個分割槽。作業系統佔用其中一個分割槽。(劃分為幾個分割槽,便只允許幾道作業併發)    建立一記錄相關資訊的分割槽表(或分割槽連結

作業系統離散儲存方式

儲存分配方式 上一篇部落格筆者談到了儲存器的分配方式包括連續儲存和離散儲存。我們再回顧一下那個圖: 上一篇部落格中我們提到聯絡儲存的一些概念,包括:單一連續分配,固定分割槽分配,動態分割槽分配,其中對動態分割槽分配的分配演算法做了介紹。這一次我們繼續來聊一聊離散儲存的幾種方式。之所以出

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

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

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

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

作業系統學習-18. 可重定位分割槽分配與對換

寫在前面 這一篇部落格與前一篇部落格內容連續,這一篇部落格主要討論可重定位分割槽分配與程序對換的相關知識,也是以理解概念為主要任務。多看幾遍,就能搞懂。 動態重定位的引入 在連續分配方式中,必須把一個系統或使用者程式裝入一連續的記憶體空間。如果在系統中

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

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

activiti學習--13:組任務分配方式1直接方式+查詢正在執行的任務辦理人表+查詢歷史任務的辦理人表+拾取任務+將個人任務回退到組任務+向組任務中新增/刪除成員

組任務及三種分配方式: 1:在taskProcess.bpmn中直接寫 candidate-users=“a,b,c,d” 2:在taskProcess.bpmn中寫 candidate-users =“#{userIDs}”,變數的值要是S

值得學習作為訓練思維方式的編程

target 結合 環境 文本 探索 感知 asset lob 調試 從編程語言產生到現在,編程方式有了翻天覆地的改變,在fortran和c等第一代編程語言中,程序員的負擔是把高層次的概念轉化為代碼。在現代編程語言中(以python語言作為示例),使用函數、對象、模塊和庫來

內存分配方式

計算機 malloc bsp 虛擬內存 剩余空間 成員 容易 class 存儲 操作系統復習 內存的深入理解 內存構成 程序代碼區—存放函數體的二進制代碼。 全局區(靜態區)(static):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始

Elasticsearch學習之多種查詢方式

完全 mar commerce 生產 pro 命令行 str 令行 {} 1. query string search   搜索全部商品:GET /ecommerce/product/_search   took:耗費了幾毫秒  timed_out:是否超時,這裏是沒有  

學習19 用css控制文字樣式

text utf har 文字 weight title color eight pan <!doctype html> <html> <head> <meta charset="utf-8"> <title>認

內存的分配方式

動態 二進制 有效 限制 con 編譯 運行期 系統設計 編譯器 一、內存的分配方式 程序占用的內存分為五個區域: 1.靜態區/全局區(static)存放靜態變量、全局變量,內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間始終不變。2.棧區(stack)存

ELK5.4 修改分片數及分片分配方式

修改 分片 副本 一、修改分片數elasticsearch默認分片數為5,副本數為1.如果需要修改分片數有兩種方式1、修改索引settings查看索引狀態:curl -GET "http://localhost:9200/index/__settings"修改索引狀態信息:curl -XPUT ‘

FreeRTOS學習筆記5-靜態方式創建任務函數

api函數 depth 還需要 而不是 ica alloc nbsp 分配 類型 配置完成後的進行任務創建,使用靜態方式創建任務時需要使將宏 configSUPPORT_STATIC_ALLOCATION設置為 1,即使用靜態內存。還需要將函數 vApplicationGe

Hibernate學習10——Hibernate 查詢方式

9.png property ice pub gets reat sed desc ring 本章主要是以查詢Student的例子: Student.java: package com.cy.model; public class Student { priv

java基礎學習——19、String類

開始 play htm align als 語言 clas tab log 之前的Java基礎系列中討論了Java最核心的概念,特別是面向對象的基礎。在Java進階中,我將對Java基礎進行補充,並轉向應用層面。 大部分編程語言都能夠處理字符串(String)。字符串是

Nginx upstream的5種權重分配方式分享

weight 一個 當前 共享 結果 壓力 宕機 clas 機器 Nginx負載均衡的分發方式有4種: 1.輪詢,默認采取此方式,Nginx會按照請求時間的先後順序進行輪詢分發,若某臺Web Server宕機,Nginx自動將其摘掉。 2.