內存管理 -----分段分頁

分段

分段:程序的分段地址空間,分段尋址方案 兩個問題

分段 :是更好分離和共享

左邊是有序的邏輯地址,右邊是無序的物理地址,然后需要有一種映射的關系(段關聯機制)

各個程序的分配相應的地址

邏輯地址是內存上的,物理地址是硬盤上的

段 機制的硬件實現方案 :

程序是由若干個邏輯分段組成的,如可由代碼分段、數據分段、棧段、堆段組成。不同的段是有不同的屬性的,所以就用分段(Segmentation)的形式把這些段分離出來。

分段機制下,虛擬地址和物理地址是如何映射的?

分段機制下的虛擬地址由兩部分組成,段選擇因子段內偏移量

段選擇因子和段內偏移量:

  • 段選擇子就保存在段寄存器里面。段選擇子里面最重要的是段號,用作段表的索引。段表里面保存的是這個段的基地址、段的界限和特權等級等。

  • 虛擬地址中的段內偏移量應該位于 0 和段界限之間,如果段內偏移量是合法的,就將段基地址加上段內偏移量得到物理內存地址。

在上面,知道了虛擬地址是通過段表與物理地址進行映射的,分段機制會把程序的虛擬地址分成 4 個段,每個段在段表中有一個項,在這一項找到段的基地址,再加上偏移量,于是就能找到物理內存中的地址,如下圖:

如果要訪問段 3 中偏移量 500 的虛擬地址,我們可以計算出物理地址為,段 3 基地址 7000 + 偏移量 500 = 7500。

分頁:

在分段機制中,尺寸是可變的,分頁中尺寸是不可變的;

物理(頁)幀的地址尋址方式:

(3,6),3表示的是幀號,幀的偏移量是6;

計算地址就是:2的9(幀的大小空間)次方乘以3(幀號),加上6(幀的偏移量)

邏輯頁的地址尋址方式:

、有個tlb 存了頁號和幀號的對應關系

具體步驟:

總結一下,對于一個內存地址轉換,其實就是這樣三個步驟:

  • 把虛擬內存地址,切分成頁號和偏移量;

  • 根據頁號,從頁表里面,查詢對應的物理頁號;

  • 直接拿物理頁號,加上前面的偏移量,就得到了物理內存地址。

段頁式內存管理

內存分段和內存分頁并不是對立的,它們是可以組合起來在同一個系統中使用的,那么組合起來后,通常稱為段頁式內存管理

段頁式內存管理實現的方式:

  • 先將程序劃分為多個有邏輯意義的段,也就是前面提到的分段機制;
  • 接著再把每個段劃分為多個頁,也就是對分段劃分出來的連續空間,再劃分固定大小的頁;

這樣,地址結構就由段號、段內頁號和頁內位移三部分組成。

用于段頁式地址變換的數據結構是每一個程序一張段表,每個段又建立一張頁表,段表中的地址是頁表的起始地址,而頁表中的地址則為某頁的物理頁號,如圖所示:

段頁式地址變換中要得到物理地址須經過三次內存訪問:

  • 第一次訪問段表,得到頁表起始地址;
  • 第二次訪問頁表,得到物理頁號;
  • 第三次將物理頁號與頁內位移組合,得到物理地址。

可用軟、硬件相結合的方法實現段頁式地址變換,這樣雖然增加了硬件成本和系統開銷,但提高了內存的利用率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717229.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717229.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717229.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Gin入門指南:從零開始快速掌握Go Web框架Gin

官網:https://gin-gonic.com/ GitHub:https://github.com/gin-gonic 了解 Gin Gin 是一個使用 Go 語言開發的 Web 框架,它非常輕量級且具有高性能。Gin 提供了快速構建 Web 應用程序所需的基本功能和豐富的中間件支持。 以下是 Gin 框架的一些特點和功能: 快速而高效:…

【簡說八股】面試官:你知道什么是IOC么?

回答 Spring的IOC(Inversion of Control,控制反轉)是Spring框架的核心特性之一。它通過將對象的創建和依賴關系的管理交給Spring容器來實現,降低了組件之間的耦合性,使得代碼更加靈活、可維護。 在傳統的開發模式中&…

Sora模型風口,普通人如何抓住-最新AI系統ChatGPT網站源碼,AI繪畫系統

一、前言說明 PandaAi創作系統是基于ChatGPT進行開發的Ai智能問答系統和Midjourney繪畫系統,支持OpenAI-GPT全模型國內AI全模型。本期針對源碼系統整體測試下來非常完美,那么如何搭建部署AI創作ChatGPT?小編這里寫一個詳細圖文教程吧。已支持…

邊緣計算與任務卸載基礎知識

目錄 邊緣計算簡介任務卸載簡介參考文獻 邊緣計算簡介 邊緣計算是指利用靠近數據生成的網絡邊緣側的設備(如移動設備、基站、邊緣服務器、邊緣云等)的計算能力和存儲能力,使得數據和任務能夠就近得到處理和執行。 一個典型的邊緣計算系統為…

前端按鈕動畫

效果示例 代碼示例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevic…

OSCP靶場--Resourced

OSCP靶場–Resourced 考點(1.rpc枚舉 2.crackmapexec密碼噴灑&#xff0c;hash噴灑 3.ntds.dit system提取域hash 4.基于資源的約束委派攻擊rbcd) 1.nmap掃描 ## ┌──(root?kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.188.175 --min-rate 2000 Starting Nmap 7.9…

《一篇文章搞懂git(保姆級教學)》

目錄 1.版本管理工具概念 2. 版本管理工具介紹 2.1版本管理發展簡史(維基百科) 2.1.1 SVN(SubVersion) 2.1.2 Git 3. Git 發展簡史 4. Git 的安裝 4.1 git 的下載 ?4.2 安裝 5. Git 工作流程 5.1 Git 初始化 5.2 git 流程 5.2.1 流程圖 5.2.2概念即詳解 6.Git …

IO多路復用:提高網絡應用性能的利器

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》 &#x1f35a; 藍橋云課簽約作者、上架課程《Vue.js 和 E…

模型部署 - onnx的導出和分析 -(2) - onnx 注冊自定義算子 - 學習記錄

onnx 注冊自定義算子 第一步&#xff1a;手寫一個算子&#xff0c;然后注冊一下第二步&#xff1a;將算子放進模型定義第三步&#xff1a;利用 torch.onnx.export() 編寫onnx 導出函數 一般我們自定義算子的時候&#xff0c;有以下流程 編寫算子并注冊將算子放進模型定義利用 …

unity學習(46)——服務器三次注冊限制以及數據庫化角色信息1--數據流程

1.先找到服務器創建角色信息代碼的位置&#xff0c;UserBizImpl.cs中&#xff1a; public PlayerModel create(string accId, string name, int job) {PlayerModel[] playerModelArray this.list(accId);//list是個自建函數&#xff0c;本質通過accId來查詢if (playerModelAr…

ClickHouse數據引擎

ClickHouse 提供了多種索引引擎&#xff0c;每種引擎都有其特定的用途和特性。除了 MergeTree 引擎之外&#xff0c;以下是一些常見的索引引擎及其區別&#xff1a; MergeTree 引擎&#xff1a; 特點&#xff1a;有序、分布式、支持并發寫入和讀取。適用場景&#xff1a;適用于…

【高數】常數項級數概念與性質

下面為個人數學筆記&#xff0c;有需要借鑒即可。 一、常數項級數概念 二、常數項級數性質 三、調和級數 完。

備忘錄模式(Memento Pattern)

定義 備忘錄模式&#xff08;Memento Pattern&#xff09;是一種行為設計模式&#xff0c;它允許在不破壞封裝性的前提下捕獲一個對象的內部狀態&#xff0c;并在以后將對象恢復到該狀態。備忘錄模式通常用于實現撤銷操作&#xff08;Undo&#xff09;或歷史記錄&#xff08;H…

藍橋杯(3.3)

1208. 翻硬幣 import java.util.Scanner;public class Main {public static void turn(char[] a,int i) {if(a[i] *) a[i] o;else a[i] *;}public static void main(String[] args) {Scanner sc new Scanner(System.in);char[] a sc.next().toCharArray();char[] b sc.n…

python如何設置虛擬環境|方法有哪幾種

原文連接&#xff1a; python設置虛擬環境- Python學習導航 為什么需要虛擬環境&#xff1f; 在使用Python語言時&#xff0c;通過pip&#xff08;pip3&#xff09;來安裝第三方包&#xff0c;但是由于pip的特性&#xff0c;系統中只能安裝每個包的一個版本。但是在實際項目開…

c++之旅——第三彈

大家好啊&#xff0c;這里是c之旅第三彈&#xff0c;跟隨我的步伐來開始這一篇的學習吧&#xff01; 如果有知識性錯誤&#xff0c;歡迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 創作不易&#xff0c;希望大家多多支持哦&#xff01; 一.命名空間;…

項目設計:基于Qt和百度AI的車牌識別系統(嵌入式ARM)

基于Qt和百度AI智能云實現的智能車牌識別系統&#xff0c;具體可實現為停車場管理系統、智能計費停車系統…等。 1.系統實現思路及框架 1.1實現思路 要實現一個車牌識別系統&#xff0c;有多種方法&#xff0c;例如用opencv圖像算法實現&#xff0c;或用第三方算法接口&#x…

輸出梯形 C語言

解析&#xff1a;這個輸出圖形的題就是一個找規律加數學計算&#xff0c;我們發現每行比上一行多兩個*&#xff0c;最后一行的*表達式為h&#xff08;h-1&#xff09;*2&#xff0c;即3*h-2&#xff0c;那么每一行就是一個先輸出最后一行&#xff0d;當前行*個數個空格&#xf…

pytorch 圖像數據集管理

目錄 1.數據集的管理說明 2.數據集Dataset類說明 3.圖像分類常用的類 ImageFolder 1.數據集的管理說明 pytorch使用Dataset來管理訓練和測試數據集&#xff0c;前文說過 torchvision.datasets.MNIST 這些 torchvision.datasets里面的數據集都是繼承Dataset而來&#xff0c…

【Qt】QTextEdit/QPlainTextEdit 實現 Tab 鍵多行縮進與反縮進

【Qt】QTextEdit/QPlainTextEdit 實現 Tab 鍵多行縮進與反縮進 文章目錄 I - 主要原理II - 代碼實現2.1 - 自定義類2.2 - 實現 Tab 縮進2.3 - 實現反縮進III - 參考鏈接I - 主要原理 由于 QTextEdit 和 QPlainTextEdit ,都無法實現多行選中縮進與反縮進,選中多行后,按下縮進…