五、Pentium 微處理器保護模式存儲管理,《微機系統》第一版,趙宏偉

一、分段存儲管理

Pentium支持分段存儲管理、分頁存儲管理和段頁式存儲管理。

1.1 分段存儲管理的基本思想

一個程序由多個模塊組成。

每一個模塊都是一個特定功能的獨立的程序段。

段式管理:把主存按段分配的存儲管理方式。

程序模塊→段→段描述符→段描述符表一段描述符表寄存器

1.2 分段存儲管理工作過程

每一個程序段都會有一個段描述符

在這里插入圖片描述

1.3 虛擬地址和虛擬地址空間

Pentium 微處理機在保護模式下的存儲器管理單元使用48位的存儲器指針。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

高16位為段選擇符,其中INDEX字段是索引字段,即可以從 2 13 2^{13} 213個段描述符的段描述符表中選出一個段描述符

TI為段描述符表選擇字段,來說明是GDT還是LDT(即全局描述符表還是局部描述符表)

RPL則是請求特權級字段。

因此,Pentium 的實際尋址范圍是46位(去掉了特權級字段)

1.4 虛實地址轉換

轉換過程:

段選擇符 -> 段描述符表 -> 段描述符 -> 段基址 -> 偏移量 -> 物理地址

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

1.5 段描述符

段描述符:用于描述段的基本信息。

由8個字節組成。

段描述符保存段的屬性、段的大小、段在存儲器中的位置以及控制和狀態信息。

分類如下:

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

1.5.1 程序段描述符

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

基地址:32位,規定一個段在4GB物理地址空間中的起始位置

段界限:20位,決定了段的長度,該字段的值的單位出“G”位決定。

“G”位稱作粒度位,用來確定段界限所使用的長度單位

  • G = 0時,單位為一個字節

  • G = 1時,單位為4KB

分類S:區分是系統段描述符還是非系統段述符。

  • 當S=0時,是系統段描述符
  • 當S=1時,是非系統段描述符。

段存在位P:該段是否在內存中。

  • 當P=1時,表示該段在內存中。
  • 當P=0時,表示該段不在內存中。

系統可用位AVL:表示系統軟件是否可用本段。

  • 當AVL=1時,表示系統軟件可用本段。
  • 當AVL=0時,表示系統軟件不能用本段。

特權級DPL:定義段的特權級。

  • 2位,有4個特權級:00、01、10、11,稱作0級、1級、2級、3級。0級的特權最高,1級次之,3級的特權最低。
  • 用這個字段定義的特權級去控制對這個段的訪問。

?

D位/B位:32/16大小選擇。D/B=1,選32位;D/B=0,選16位。

  • 在代碼段描述符中,指示操作數長度和有效地址長度,D位。
  • 在堆棧段描述符中,指示ESP或SP,B位。
  • 在數據段描述符中,指示操作數長度。B位

類型TYPE:在不同的段描述符中有不同的格式。

數據段或堆棧段描述符中的類型TYPE字段

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

E可執行位:當E=0時,是數據段或堆棧段。

ED擴展方向位:當ED=0時,向上擴展(地址增加方向),通常用于數據段。

當ED=1時,向下擴展(地址減小方向),通常用于堆棧段。

W可寫位:當W=0時,不允許寫入。當w=1時,允許寫入

A訪問位:當A=0時,該段尚未被訪問。當A=1時,該段已被訪問

代碼段描述符中的類型TYPE字段

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

E可執行位:當E=1時,是代碼段。

C一致性位:一致性檢查就是采用特權級進行控制。C-0,表示非一致性代碼段,此時忽視段描述符的特權值。C=1,表示一致性代碼段,需要進行特權級檢查。

R可讀位:當R=0時,不允許讀。當R=1時,允許讀。

A訪問位:當A=0時,該段尚未被訪問;當A=1時,該段已被訪問

1.5.2 系統段描述符

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

1.6 門描述符

一種關卡,用來控制從一段程序到另一段程序或從一個任務到另一個任務的轉移。

門描述符:用于控制轉入目標代碼段的入口點。

門描述符包括調用門、任務門、中斷門和陷阱門

調用門用于改變特權級別。

任務門用于任務切換。

中斷門和陷阱門用于確定中斷服務程序

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

段選擇符:16位,指出段描述符位置,索引值。

任務門送TR,其他門則送CS。

類型TYPE:確定門的分類:調用門、任務門、中斷門和陷阱門。

類型TYPE字段的規則與系統段描述符中的類型TYPE字段的格式完全相同。

P字段:表示描述符內容是否有效。

當P=0時,表示描述符內容無效。

當P=1時,表示描述符內容有效。

1.7 全局描述符表及寄存器

全局描述符表GDT:保存系統使用、各任務共享的段描述符,只有一個

全局描述符表寄存器GDTR:指定了GDT的起始地址

48位=32位基地址+16位界限

GDT保存的描述符類型:除中斷門、陷阱門外的各類描述符。

GDT尋址可歸納為

1.段選擇符 * 8 + GDTR基址 = 段描述符地址

2.段描述符內容(包括基址) → 相應段cache

3.cache中段基址 + 虛地址偏移量 = 物理地址

由GDTR確定GDT存儲位置和界限

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

1.8 局部描述符表及寄存器

  • 局部描述符表LDT:保存某任務使用的段描述符,每個任務一個。
  • LDTR:指出LDT的基址
    • 16位選擇符 + (32位基址 + 20位界限 + 12位屬性)
  • LDTR的段選擇符確定LDT描述符在GDT中的位置
  • 如果LDTR中裝入了段選擇符,處理器自動地將相應的LDT描述符從全局描述符表GDT中讀出來,并裝入LDTR中的cache部分,其中包括LDT基址,從而為當前任務創建一個LDT

1.9 中斷描述符表及寄存器

  • 中斷描述符表IDT:保存門描述符,整個系統一個,包括中斷門、陷阱門、任務門(通常沒有調用門)
  • 門提供了一種將程序控制轉移到中斷服務程序入口的手段。每個門8個字節,包含服務程序的屬性和起始地址。
  • 中斷描述符表寄存器IDTR
    • 48位 = 32位基地址 + 16位界限
    • IDT按字節計算大小,IDT最大可達64KB(但是Pentium微處理機只能夠支持256個中斷和異常,最多占用2KB)。
  • 中斷描述符表IDT中存放的描述符類型均是門描述符。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

1.10 任務狀態段及寄存器

  • 任務狀態段TSS:保存現有任務的機器狀態(指處理器的工作環境,比如各個寄存器的狀態)及其任務間的關聯信息。
  • 沒有數據和代碼,每個任務一個。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • (1)返回鏈BACK LINK:是一個段選擇符,把前一個任務的TSS描述符的段選擇符(即原來TR中的16位可見部分)轉入新任務TSS中,供任務返回時使用。

    • 比如我們平時從QQ切換到vscode,又從vscode切換回QQ,其實就是BACK LINK保存了QQ的段選擇符
  • (2)由返回指令IRET將其裝入TR寄存器,從而回到前一個TSS

  • 寄存器保存區域,用于保存通用寄存器、段寄存器、指令指針和標志寄存器。

  • 每當任務切換時,處理器當前所有寄存器的內容都被保存在TSS的這些單元中,然后又將新任務TSS所對應的單元內容裝入所有的寄存器。

1.11 段選擇符及寄存器

在實模式下,段寄存器的16位值是基地址。

在保護模式下,每一個段寄存器由兩部分組成

可見部分 不可見部分(高速緩存)
16位 64位

段選擇符

選擇符分為3個字段:

INDEX TI RPL
索引字段 描述符表選擇字段 請求特權級字段
13位 1位 2位

  • 索引值乘以8就是相對于GDT或LDT首址的偏移量,這個偏移量再加上描述符表的基地址(來自全局描述符表寄存器GDTR,或者局部描述符表寄存器就是段描述符在LDTR)描述符表中的地址。

  • 當TI=0時,選擇的是全局描述符表GDT。

  • 當TI=1時,選擇的是局部描述符表LDT。

  • 有4個特權級,00、01、10、11,稱作0級、1級、2級、3級

  • 0級的特權最高,1級次之,3級的特權最低。

段選擇符裝入段寄存器的操作

裝入段寄存器的指令有2類

**直接的裝段寄存器指令:**例如MOV DS,AX等。

**隱含的裝段寄存器指令:**例如CALL FAR SUB1,JMP FAR AA6等。

二、保護模式下的訪問操作與保護機制

2.1 保護機制的分類

1.任務間存儲空間的保護

任務間的保護是通過每一個任務所專用的LDT描述符實現的。根據LDT描述符,每個任務都有它特定的虛擬空間,因而避免各任務之間的干擾,起到隔離、保護的作用。

2.段屬性和界限的保護

當段寄存器進行加載時,需要進行段存在性檢查以及段限檢查

在段描述符中給出了20位的段界限值,每當產生一個邏輯地址時,都要比較偏移量和段限值。一旦偏移地址大于段限值,CPU就終止執行命令,并發出越限異常。由此限制每個程序段只在自己的程序、數據段內運行,不相互干擾。

最后,還要對該段的讀寫權限進行檢查

3.特權級與特權級保護

特權級與特權保護是為了支持多用戶多任務操作系統,使系統程序和用戶的任務程序之間、各任務程序之間五不干擾而采取的保護措施。

3種形式的特權管理:

(1)當前特權級CPL

  • CPL是當前正在執行的代碼段所具有的訪問特權級
  • 每一項任務都是在其代碼段描述符所確定的特權級中運行。當前特權級就是任務執行時所處的特權級。例如,一個正在運行的任務的CPL,就是其描述符中訪問權限字節的DPL。當前特權級的值一般就是代碼段描述符中的DPL。

(2)描述符特權級DPL

DPL是段被訪問的特權級,保存在該段的段描述符的特權級DPL位。

(3)請求特權級RPL

RPL是新裝入段寄存器的段選擇符的特權級,存放在段選擇符的最低兩位

特權管理規定:特權級為P的段中存儲的數據,只能由特權級高于或等于P的段中運行的程序使用;特權級為P的代碼段/過程,只能由在低于或等于P的特權級下執行的任務調用。

為記憶方便,特權級規則可以不嚴格地歸納為

  • 高特權級可以訪問低(等于)特權級的數據;
  • 低特權級可以調用高(等于)特權級的程序。

2.2 數據段訪問

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2.3 分頁存儲管理

分頁是虛擬存儲器多任務操作系統另一種存儲器管理方法。**段的長度是可變的,而頁的長度是固定的,**比如每頁4KB。

分頁:將程序分成若干個大小相同的頁,各頁與程序的邏輯結構沒有直接的關系。

Pentium微處理器采用二級頁表方法對頁面進行管理,第1級頁表稱作頁目錄,頁目錄中的頁目錄項指明第2級頁表中各頁表的基址。

頁目錄基地址寄存器CR3保存頁目錄的基地址,該基地址起始于任意4KB的邊界。

頁目錄:由頁目錄項組成,頁目錄項包含下一級頁表的基址和有關頁表的信息。Pentium微處理器中,頁目錄最多包含1024個頁目錄項,每個頁目錄項為4個字節,所以,頁目錄白身占用一個4KB的頁面(存儲頁)

頁表:由頁表項組成,頁表項包含頁面(存儲頁)的基和有關頁面的信息。Pentium微處理器中,頁表最多包含1024個頁表項,每個頁表項為4個字節,所以,頁表自身也占用一個4KB的頁面(存儲頁)。

2.4 段頁式存儲管理尋址過程

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

地址寄存器CR3**:保存頁目錄的基地址,該基地址起始于任意4KB的邊界。

頁目錄:由頁目錄項組成,頁目錄項包含下一級頁表的基址和有關頁表的信息。Pentium微處理器中,頁目錄最多包含1024個頁目錄項,每個頁目錄項為4個字節,所以,頁目錄白身占用一個4KB的頁面(存儲頁)

頁表:由頁表項組成,頁表項包含頁面(存儲頁)的基和有關頁面的信息。Pentium微處理器中,頁表最多包含1024個頁表項,每個頁表項為4個字節,所以,頁表自身也占用一個4KB的頁面(存儲頁)。

2.4 段頁式存儲管理尋址過程

[外鏈圖片轉存中…(img-kSzrAPLh-1719744231622)]

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

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

相關文章

【設計】在Java后端開發時使用JSONObject完全替代JAVABean(DTO,VO)是否可行?

其實這樣做你是得不償失,不過也要看什么項目,如果你的項目只在只需要實現功能,不在乎健壯性,可持續性那就完全可以。因為我現在公司老項目所有用的POJO的地方都是用JSONObject。代碼可讀性幾乎為0。你用了可能喪失以下功能&#x…

【微服務】后臺管理項目多數據源管理方案實戰

目錄 前言 1、使用Spring提供的AbstractRoutingDataSource 2、使用MyBatis注冊多個SqlSessionFactory 3、使用dynamic-datasource框架 前言 Java后臺使用MyBatis-plus 快速訪問多個數 據源,這里分享三種常用的多數據源管理方案 1、使用Spring提供的AbstractRout…

【C++深度探索】繼承機制詳解(一)

hello hello~ ,這里是大耳朵土土垚~💖💖 ,歡迎大家點贊🥳🥳關注💥💥收藏🌹🌹🌹 💥個人主頁:大耳朵土土垚的博客 &#x1…

代碼托管服務:GitHub、GitLab、Gitee

目錄 引言GitHub:全球最大的代碼托管平臺概述功能特點適用場景 GitLab:一體化的開發平臺概述功能特點適用場景 Gitee(碼云):中國本土化的代碼托管服務概述功能特點適用場景 功能對比結論 引言 在現代軟件開發中&#…

numpy - array(3)

arr1 np.array([[(1000, 1001, 1002, 1003), (1010, 1011, 1012, 1013), (1020, 1021, 1022, 1023)],[(1100, 1101, 1102, 1103), (1110, 1111, 1112, 1113), (1120, 1121, 1122, 1123)]], dtypeint) (1) 根據坐標訪問元素或內容,更改訪問的內容,array也會更改。“…

C++操作系列(一):MinGW環境安裝與配置(無報錯版)

本文選擇MinGW作為安裝對象。 1. 下載MinGW 進入官網:MinGW - Minimalist GNU for Windows download | SourceForge.net 點擊File: 劃到最下面:  Windows 64位系統下載seh結尾的安裝包: 2. 安裝MinGW 解壓MinGW&am…

力扣第218題“天際線問題”

在本篇文章中,我們將詳細解讀力扣第218題“天際線問題”。通過學習本篇文章,讀者將掌握如何使用掃描線算法和堆來解決這一問題,并了解相關的復雜度分析和模擬面試問答。每種方法都將配以詳細的解釋,以便于理解。 問題描述 力扣第…

【CSS】深入理解CSS 的steps()函數

在CSS動畫中,steps()函數是一個時間函數,它主要用于animation-timing-function屬性,以定義動畫的步進方式。當你想要動畫的某個屬性(如background-position或transform: translateX())在特定的步驟之間變化時&#xff…

探索 ES6:現代 JavaScript 的新特性

隨著 JavaScript 的不斷演進,ECMAScript 2015(簡稱 ES6)作為 JavaScript 的一次重大更新,帶來了許多新特性和語法改進,極大地提升了開發體驗和代碼質量。本文將詳細介紹 ES6 的主要新特性,并展示如何在實際…

NLTK:原理與使用詳解

文章目錄 NLTK簡介NLTK的核心功能1. 文本處理2. 詞匯處理3. 語法分析4. 語義分析5. 情感分析 NLTK的使用1. 安裝NLTK2. 導入NLTK庫3. 下載NLTK數據集4. 文本處理示例5. 情感分析示例 總結 NLTK簡介 NLTK是一個開源的Python庫,用于處理和分析人類語言數據。它提供了…

扛鼎中國AI搜索,天工憑什么?

人類的創作不會沒有瓶頸,但AI的熱度可不會消停。 大模型之戰依舊精彩,OpenAI選擇在Google前一天舉行發布會,兩家AI企業之間的拉扯賺足了熱度。 反觀國內,百模大戰激發了大家對于科技變革的熱切期盼,而如今行業已逐漸…

【操作系統期末速成】 EP01 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言🚀🚀🚀二、正文:??????1.1 考點一:操作系統的概率及特征 三、總結:🍓🍓🍓 一、前言🚀🚀🚀 ?? 回報不在行動…

文章浮現之單細胞VDJ的柱狀圖

應各位老師的需求復現一篇文章的中的某個圖 具體復現圖5的整個思路圖,這里沒有原始數據,所以我使用虛擬生產的metadata進行畫圖 不廢話直接上代碼,先上python的代碼的結果圖 import matplotlib.pyplot as plt import numpy as np# 數據&#…

架構師篇-8、運用事件風暴進行業務領域建

如何成為優秀架構師? 需要有一定的技術積累,但是核心是懂業務。 具備一定的方法,并且有很強的業務理解能力。 技術架構師:形成技術方案,做的更多的是底層的平臺,提供工具。 業務架構師:解決方…

兩數之和你會,三數之和你也會嗎?o_O

前言 多少人夢想開始的地方,兩數之和。 但是今天要聊的不是入門第一題,也沒有面試官會考這一題吧…不會真有吧? 咳咳不管有沒有,今天的豬腳是它的兄弟,三數之和,作為雙指針經典題目之一,也是常…

Vue3中Element Plus組件庫el-eialog彈框中的input無法獲取表單焦點的解決辦法

以下是vue.js官網給出的示例 <script setup> import { ref, onMounted } from vue// 聲明一個 ref 來存放該元素的引用 // 必須和模板里的 ref 同名 const input ref(null)onMounted(() > {input.value.focus() }) </script><template><input ref&qu…

如何在Vue3項目中使用Pinia進行狀態管理

**第一步&#xff1a;安裝Pinia依賴** 要在Vue3項目中使用Pinia進行狀態管理&#xff0c;首先需要安裝Pinia依賴。可以使用以下npm命令進行安裝&#xff1a; bash npm install pinia 或者如果你使用的是yarn&#xff0c;可以使用以下命令&#xff1a; bash yarn add pinia *…

Tomcat的安裝和虛擬主機和context配置

一、 安裝Tomcat 注意&#xff1a;安裝 tomcat 前必須先部署JDK 1. 安裝JDK 方法1&#xff1a;Oracle JDK 的二進制文件安裝 [rootnode5 ~]# mkdir /data [rootnode5 ~]# cd /data/ [rootnode5 data]# rz[rootnode5 data]# ls jdk-8u291-linux-x64.tar.gz [rootnode5 data]…

C++:std::function的libc++實現

std::function是個有點神奇的模板&#xff0c;無論是普通函數、函數對象、lambda表達式還是std::bind的返回值&#xff08;以上統稱為可調用對象&#xff08;Callable&#xff09;&#xff09;&#xff0c;無論可調用對象的實際類型是什么&#xff0c;無論是有狀態的還是無狀態…

【C++】string基本用法(常用接口介紹)

文章目錄 一、string介紹二、string類對象的創建&#xff08;常見構造&#xff09;三、string類對象的容量操作1.size()和length()2.capacity()3.empty()4.clear()5.reserve()6.resize() 四、string類對象的遍歷與訪問1.operator[ ]2.正向迭代器begin()和end()3.反向迭代器rbeg…