1. 程式人生 > >分段和分頁記憶體管理

分段和分頁記憶體管理

1.基本思想:

分頁系統能有效地提高記憶體的利用率,而分段系統能反映程式的邏輯結構,便於段的共享與保護,將分頁與分段兩種儲存方式結合起來,就形成了段頁式儲存管理方式。

在段頁式儲存管理系統中,作業的地址空間首先被分成若干個邏輯分段,每段都有自己的段號,然後再將每段分成若干個大小相等的頁。對於主存空間也分成大小相等的頁,主存的分配以頁為單位。

段頁式系統中,作業的地址結構包含三部分的內容:段號,頁號,頁內位移量

程式設計師按照分段系統的地址結構將地址分為段號與段內位移量,地址變換機構將段內位移量分解為頁號和頁內位移量

為實現段頁式儲存管理,系統應為每個程序設定一個段表,包括每段的段號,該段的頁表始址和頁表長度。每個段有自己的頁表,記錄段中的每一頁的頁號和存放在主存中的物理塊號。

2.地址變換的過程:

(1)程式執行時,從PCB中取出段表始址和段表長度,裝入段表暫存器。

(2)由地址變換機構將邏輯地址自動分成段號、頁號和頁內地址。

(3)將段號與段表長度進行比較,若段號大於或等於段表長度,則表示本次訪問的地址已超越程序的地址空間,產生越界中斷。

(4)將段表始址與段號和段表項長度的乘積相加,便得到該段表項在段表中的位置。

(5)取出段描述子得到該段的頁表始址和頁表長度。

(6)將頁號與頁表長度進行比較,若頁號大於或等於頁表長度,則表示本次訪問的地址已超越程序的地址空間,產生越界中斷。

(7)將頁表始址與頁號和頁表項長度的乘積相加,便得到該頁表項在頁表中的位置。

(8)取出頁描述子得到該頁的物理塊號。

(9)對該頁的存取控制進行檢查。

(10)將物理塊號送入實體地址暫存器中,再將有效地址暫存器中的頁內地址直接送入實體地址暫存器的塊內地址欄位中,拼接得到實際的實體地址。


相關推薦

分段記憶體管理

1.基本思想: 分頁系統能有效地提高記憶體的利用率,而分段系統能反映程式的邏輯結構,便於段的共享與保護,將分頁與分段兩種儲存方式結合起來,就形成了段頁式儲存管理方式。 在段頁式儲存管理系統中,作業的地址空間首先被分成若干個邏輯分段,每段都有自己的段號,然後再將每段分成若干個大小相等的頁。對於主存空間

Linux中的記憶體管理分段

前一段時間看了《深入理解Linux核心》對其中的記憶體管理部分花了不少時間,但是還是有很多問題不是很清楚,最近又花了一些時間複習了一下,在這裡記錄下自己的理解和對Linux中記憶體管理的一些看法和認識。 我比較喜歡搞清楚一個技術本身的發展歷程,簡而言之就是這個技術是怎麼發

Linux的記憶體定址——淺談分段機制

本文會以80x86架構,linux2.6為例,簡單介紹記憶體的分段和分頁機制。1. 三種記憶體地址關於記憶體地址,首先要了解它有三種,分別是邏輯地址、線性地址和實體地址。把邏輯地址轉換為線性地址是由一個叫做分段單元的硬體電路完成的。同樣地,還有一個叫做分頁單元的硬體電路負責把

作業系統核心原理-5.記憶體管理(中):記憶體管理

  在上一篇介紹的幾種多道程式設計的記憶體管理模式中,以交換記憶體管理最為靈活和先進。但是這種策略也存在很多重大問題,而其中最重要的兩個問題就是空間浪費和程式大小受限。那麼有什麼辦法可以解決交換記憶體存在的這些問題呢?答案是分頁,它是我們解決交換缺陷的“不二法門”。 一、分頁記憶體管理 1.1 解決問題之

作業系統_分段

一.分頁儲存管理 1.基本思想     使用者程式的地址空間被劃分成若干固定大小的區域,稱為“頁”,相應地,記憶體空間分成若干個物理塊,頁和塊的大小相等。可將使用者程式的任一頁放在記憶體的任一塊中,實現了離散分配。 2.分頁儲存管理的地址機構 15         12         11        

操作系統筆記(十)內存管理分段

分段式內存管理 筆記 關系 代碼 保護 系統 長度 段頁式內存管理 bit 基本內存管理: 進程占用空間必須連續,導致外部碎片以及附加的compaction 整個進程的swap in 和 swap out十分耗時。 解決:分頁 ->內存空間不必連續,無外部碎片,

記憶體管理機制

一、問題提出: 我們經常會使用malloc()以及free()函式進行堆區記憶體申請與釋放。那麼你是否會這樣做: int * p = malloc(0);/*malloc分配了0個位元組嗎,如果是那麼p指向誰呢,是NULL嗎*/ free(p);/*假如malloc分配了0個位元組,p指向了NU

作業系統管理記憶體的機制,分段

轉:http://blog.163.com/[email protected]/blog/static/1955478420113249937688/ 一 早期的記憶體分配機制         在早期的計算機中,要執行一個程式,會把這些程式全都裝入記憶體,程

linux下的虛擬記憶體分段機制

前言:由於計算機的記憶體是有限的,比0到2的32次方就是對應4G,這時候作業系統就引入了虛擬記憶體這一個概念, 1,首先可以從程式的編譯下手,對於java或者c++而言,程式在編譯的時候需要記憶體,但是此時程式並沒有在真的物理機上執行著,所以就引入虛擬記憶體這

記憶體管理分段

記憶體管理 為什麼要有記憶體管理   多道程式作業系統中,程序的併發執行依賴於CPU排程。CPU能訪問的儲存器只有記憶體和(處理器中的)暫存器(機器指令可以用記憶體地址作為引數)。   暫存器價格昂貴且儲存空間小,因此程序執行的指令以及指令使用的資料主

Linux記憶體管理之一 分段

現代作業系統的記憶體管理機制有兩種:段式管理和頁式管理。段式記憶體管理,就是將記憶體分成段,每個段的起始地址就是段基地址。地址對映的時候,由邏輯地址加上段基地址而得到實體地址。純粹的段式記憶體管理的缺點很明顯,就是靈活性和效率比較差。首先是段的長度是可變的,這給記憶體的換入

分段式儲存管理方式

1.分頁管理   分頁儲存管理是將一個程序的邏輯地址空間分成若干個大小相等的片,稱為頁面或頁,併為各頁加以編號,從0開始,如第0頁、第1頁等。相應地,也把記憶體空間分成與頁面相同大小的若干個儲存塊,稱為(物理)塊或頁框(frame),也同樣為它們加以編號,如0

Linux記憶體管理解析(一) : 分段機制

背景 : 在此文章裡會從分頁分段機制去解析Linux記憶體管理系統如何工作的,由於Linux記憶體管理過於複雜而本人能力有限。會盡量將自己總結歸納的部分寫清晰。 從真實模式到保護模式的定址方式的不同 :    16位CPU的定址方式 : 在 8086 CPU 中,提供了兩類暫存器來進行定址,分別為段

基本儲存管理方式中關於邏輯地址實體地址的轉換

分析頁式儲存管理的地址結構是一維的,即邏輯地址(或實體地址)只用一個數值即可表示。若給定邏輯地址A,頁面的大小為L,則頁號p和頁內地址d可按照下式求得:   p=int [A/L]d=A mod L   其中,int是取整函式(取數值的整數部分),mod是取餘函式

Linux記憶體地址的分段機制(上)

在深入學習Linux核心原始碼之前,需要先對Linux執行的硬體基礎有個大概的認識,主要包括CPU中的暫存器和磁碟。 1.i386暫存器和系統指令 在Linux系統中使用的主要包括i386暫存器中的16位標誌暫存器,4個記憶體管理暫存器和4個控制暫存器及

分段與段式儲存管理

一.  分頁儲存管理 1.基本思想 使用者程式的地址空間被劃分成若干固定大小的區域,稱為“頁”,相應地,記憶體空間分成若干個物理塊,頁和塊的大小相等。可將使用者程式的任一頁放在記憶體的任一塊中,實現了離散分配。 1)      等分記憶體 頁式儲存管理將記憶體空間

記憶體非分記憶體

程序上下文,就是表示程序資訊的一系列東西,包括各種變數、暫存器以及程序的執行的環境。這樣,當程序被切換後,下次再切換回來繼續執行,能夠知道原來的狀態。 中斷上下文,就是中斷髮生時,原來的程序執行被打斷,那麼就要把原來的那些變數儲存下來,以便中斷完成後再恢復。 Windows NT和Windows 98都

一個關於A標簽的怪問題!

boot 題解 input page mvc def data tel 問題解決 用bootstrap做了用戶電話號碼查詢的前端頁面。 並且用了MVCPager分頁。 Bootstrap前端頁如下: 一開始使用了用A標簽,分頁成功後,我進入第二頁,點擊這個A標簽,頁面會自動

Django中的模板

con lock turn if條件 ndb temp name ... simple 模板     在Templates中添加母版:        - 母版...html     母版(master.html)中可變化的地方加入: {%block content%}

使用bootstrap table時不能顯示篩選列顯示的行數

pts -i str 顯示 data bootstra 同事 bootstrap src 使用bootstrap table時不能顯示篩選列和分頁每頁顯示的行數 後來在同事的幫助下,才發現沒有引用bootstrap的js文件 <script src="/Scr