1. 程式人生 > >作業系統學習筆記——保護模式——分段機制

作業系統學習筆記——保護模式——分段機制

以前學習微機原理的時候,接觸到的是8086/8088處理器,這些處理器都是16位的,地址線為20位,共可定址1MB的記憶體空間,即它們都工作在真實模式下。

        1985年,IBM公司引入AT機時,使用的是INTER80286CPU,具有24根地址線,可定址16MB的地址空間,並且保留了真實模式來向下相容。直到今天的32位/64位的CPU,上電後CPU的初始模式仍然是真實模式。

         真實模式和保護模式的最大區別,就在於記憶體的定址和保護機制。在真實模式下,定址方式為 (段基址):(段內偏移)來確認要找的記憶體空間,這種定址方式比較單純,段基址左移四位,加上段內偏移值,就得到要定址的物理空間。而真實模式下的定址方式限制了定址的空間,同樣不能提供完善的保護機制,隨著計算機的發展,使用者的需求越來越多,大型的程式和多工的出來要求有更大的定址空間,這就要求在作業系統執行的過程中,要處理更多的段,保護模式無法提供這樣的服務,所以,將各個段集中在一個表中,是有利的。保護模式就是用的這種機制完成分段機制的。

        保護模式分段機制的關鍵詞:段描述符、段描述符表、段選擇符。

段描述符

        段描述符包含了對一個段的完整描述,包括段的基址、段的限長和段的屬性。段基址指明瞭段的起始地址,段限長指明瞭段的長度,兩者的結合就定義了一個段的全部空間,段的屬性描述了該段的一些相關資訊,包括型別(資料段、程式碼段、系統段)、許可權等。每一個段描述符為8個位元組,其就是對段的抽象,代表一個段的實體,該資料也可以理解為一個段在作業系統中存在的身份證,每個定義的段都有一個描述符,就相當於每一個人都有一個身份證一樣。

段描述符表

         作業系統中會包括很多的段,包括作業系統的程式碼段、資料段和使用者程式的程式碼段、資料段等,每個段都有一個描述符,但這些描述符不是隨便存在於記憶體中的,作業系統定義了段描述符表,將段描述符進行統一的管理,就是全域性描述符表GDT、區域性描述符表LDT和中斷描述符表IDT。

         段描述符表就是段描述符的一個數組,描述符表沒有固定的長度,但最多隻有8192個8位元組的描述符。隨後會介紹。

全域性描述符表

         全域性描述符表GDT是作業系統維護一個特殊的資料結構,並且有處理器的記憶體管理硬體來引用。在但處理器系統中只有一個GDT,在多處理器系統中,每一個CPU都要有一個GDT。GDT可用於系統中所有的程式和任務。GDT不能算是嚴格意義上的段,而是線性地址空間中的一個數據結構。GDT的段限長和段基址要載入到CPU的GDTR中,一般作業系統設定完GDTR後,不會再改變了,用於對記憶體的定址。

區域性描述符表

         區域性描述符表也可以理解為作業系統中特殊的資料結構,但其和GDT有一定的區別。每個任務可以定義一個區域性描述符表,存放該任務的程式碼段、資料段等,LDT中存放的段描述符指向的是該任務的私有空間,但LDT表作為一個段被定址,要將它的描述符存放在全域性描述符中,這個是必須的!LDT的段限長和段基址要存放在CPU的LDTR中,並且在任務切換的時候,這個LDTR的內容會改變。

段選擇符

        前面介紹了在保護模式下,8位元組的段描述符如何對一個段進行整體的描述,隨後介紹了作業系統通過GDT和LDT如何管理描述符,那麼我們如何定址呢?在程式中如何去找我們要訪問的段呢?在真實模式下,我們通過(段基址):(段內偏移)進行定址,在保護模式下,也是類似的,我們用(段選擇符):(段內偏移)。注意,真實模式下的段基址和保護模式下的段選擇符!!!保護模式下的分段機制確實有些複雜,但在這裡,分段機制的定址上,不要害怕,不要想的太多,讓腦子單純一些,其實也很好理解。只要一點::保護模式下的分段定址最關鍵的,就是比真實模式下的分段定址多了一個查表的步驟,就這麼簡單!!!第一步:段選擇符會和GDTR或LDTR中的資料相結合,找到我們要定址的段的段描述符,段描述符存放著段的基地址,我們找的就是這個基地址。第二步:將基地址和段內偏移地址相加,就將邏輯地址轉換成了線性地址(僅僅當成一個地址,這個地址就是我們要找的,不要多想,否則越想越亂),後面的一步就和真實模式的定址很相近了。下面一個圖來說明分段機制如何定址。

轉載自:http://blog.csdn.net/andrew_yau/article/details/7719806

          段選擇符是16位的,前位0和位1為請求許可權,位2為TABLE INDEX,當TI為0時,該選擇符索引GDT,當TI為1,該選擇符索引LDT。索引號共13位,故一個GDT可以可以存放2^13個描述符表,即8192個。同樣LDT也可以存放8192個描述符表。整個虛擬空間被分成了2^14個段,一半由GDT來對映,作為全域性虛擬地址空間(由作業系統和使用者任務共享),一半由LDT對映,作為區域性虛擬地址空間(使用者任務私有自己的空間)。

         這個圖完整的描述了保護模式分段定址。程式中,我們給出的邏輯地址包括16bit的索引號,和32bit的偏移地址。第一步:GDTR(全域性描述表暫存器)存放的是GDT的基地址,索引號和GDT相結合(由分段機制的硬體完成),找到我們要訪問的段描述符,從段描述符中取出段基址。第二步:這一步就和真實模式很類似了,將段描述符中的段基址取出,找到相應段的首地址,偏移量負責段內定址,即(段基址):(段內偏移)。

相關推薦

作業系統學習筆記——保護模式——分段機制

以前學習微機原理的時候,接觸到的是8086/8088處理器,這些處理器都是16位的,地址線為20位,共可定址1MB的記憶體空間,即它們都工作在真實模式下。         1985年,IBM公司引入AT機時,使用的是INTER80286CPU,具有24根地址線,可定址16M

作業系統學習筆記(15)--保護模式

程式一般執行在保護模式下。 關閉軟碟機馬達(使用軟碟機啟動) 要啟動A20匯流排 設定GDT 設定IDT 開啟包含模式 跳轉到指定程式碼處,進入保護模式。 詳細資料需要檢視Intel的CPU設計文件等。  ; Switch to protected mode! mov 

Java學習筆記——設計模式之五.工廠方法

strong scanner multipl 石頭 simple 決定 定義 opera 下使用 水邊一只青蛙在笑       ——石頭和水 工廠方法模式(Factory Method),定義了一個用於創建對象的接口,讓實現類決定實例化哪一個類。工廠方法使一個類的實

Android:日常學習筆記(9)———探究廣播機制

ora rri enabled cas 管理 encoding protect 其他 acc Android:日常學習筆記(9)———探究廣播機制 引入廣播機制 Andorid廣播機制   廣播是任何應用均可接收的消息。系統將針對系統事件(例如:系統啟動或設備開始充電時)傳

Oracle學習筆記—歸檔模式

enable 11.2 bit dmi copyright 災難 筆記 關閉數據庫 tle 什麽是歸檔模式 Oracle數據庫有聯機重做日誌,這個日誌是記錄對數據庫所做的修改,比如插入,刪除,更新數據等,對這些操作都會記錄在聯機重做日誌裏。一般數據庫至少要有2個聯機重做日誌

Java學習筆記——設計模式之六.原型模式(淺克隆和深克隆)

catch 新的 att over 引用變量 col logs implement pri That there‘s some good in this world, Mr. Frodo. And it‘s worth fighting for. 原型模式(prot

Java學習筆記——設計模式之七.模板方法模式

tro mage emp java學習 java學習筆記 trac 子類 技術 primitive 模板方法模式(TemplateMethod),定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

學習筆記:設計模式之抽象工廠(C#)

sta 實體 mys actor div ted rac int c# 1.創建抽象工廠類 public abstract class AbstractFactory { public abstract Connect CreatConne

設計模式學習筆記-原型模式

都是 tde 淺復制 posit osi 訪問 oid urn public 1. 概述   通過復制一個已經存在的實例來創建一個新的實例。被復制的實例被稱為原型,這個原型是可定制的。 2. 模式中的角色   2.1 抽象原型類(Abstract Prototype)

產品經理學習筆記——商業模式畫布

什麽是 其余 結構 付費 pro 服務 行程 學習筆記 RoCE 商業模式畫布:1、用戶細分 以用戶為中心 我們正在為誰創造價值? 誰是我們最重要的客戶?2、價值主張 我們該向客戶傳遞什麽樣的價值? 我們正在幫助我們的客戶解決哪一類難題? 我們正在滿足

學習筆記: 設計模式之行為性設計模式

tle 不同的 需求 border 學習 ID 方法 BE 動作 行為型模式(Behavioral Pattern)是對在不同的對象之間劃分責任和算法的抽象化。行為型模式不僅僅關註類和對象的結構,而且重點關註它們之間的相互作用。1. 模板模式 意圖:定義一個操作中的算法

[Scala]學習筆記四——模式匹配 match

一、最基本的模式匹配 例子: //格式為: //變數 match{ // case value1=>程式碼 // case value2=>程式碼 // …… // case _=>程式碼 //} def judgeGrade(grade:St

作業系統學習筆記2_處理器管理

一、中央處理器 一個程式裝載入記憶體後有四個部分: 程式碼 資料 堆(heap):malloc分配的空間就是從這裡來的 棧(stack):系統使用的空間,儲存函式的返回地址。                 &n

作業系統學習筆記1_概論

一、認識作業系統 作業系統(OS)是管理系統資源、控制程式執行,改善人機介面,提供各種服務,合理組織計算機工作流程和為使用者有效使用計算機提供良好執行環境的一種系統軟體 ,它和硬體之間是軟-硬介面。 主要功能有:處理器管理、儲存管理、裝置管理 、檔案管理、網路與通訊管理和使用者介面功能。

JavaScript學習筆記——繼承模式、物件列舉—day six

目錄 繼承發展 1、傳統形式(原型鏈) 2、借用建構函式(call/apply) 3、共享原型(son.prototype=father.prototype) 4、聖盃模式 鏈式呼叫實現 屬性表示方法 物件列舉 for in 1.hasOwnPrototype

大話設計模式學習筆記-策略模式

策略模式 它定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化不會影響到使用演算法的客戶。 優點 策略模式是一種定義了一系列演算法的方法,從個概念上看,所有這些演算法完成的都是相同的工作。只是實現不同。他可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦

大話設計模式學習筆記-裝飾模式

裝飾模式 動態地給一個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。 裝飾模式結構演示 元件類:Component Component是定義一個物件介面,可以給這些物件動態地新增職責。 abstract class Component{ public abst

深入理解計算機作業系統學習筆記、一

前言 《深入理解計算機作業系統》這本書是作業系統領域內非常經典的書,只要在網上搜索作業系統的書籍,必然會有人推薦這一本書,這本書也被各路大牛所推薦。雖然之前在圖書館借過這本書,但是匆匆看了一遍,只是記住了皮毛,最近下決心買了本紙質版的書,準備重讀經典,順便寫下讀書的收穫與思考。 這本

Ubuntu作業系統學習筆記2(vi文字編輯器、程序的基本狀態及其轉換)

文字編輯器是對純文字檔案進行編輯、檢視、修改等操作的應用程式。vi編輯器具有文字編輯的所有功能,並且執行速度快,具有強大的編輯功能,廣泛的適用性和靈活性。 一、vi文字編輯器 1、vi編輯器的啟動與退出 (1)啟動 格式:vi  [檔名] 檔名有以下情況: 未指定檔

Ubuntu作業系統學習筆記1(基本概念、常用指令)

一、Ubuntu 1、什麼是Ubuntu Ubuntu是一個以桌面應用為主的Linux作業系統。 2、Ubuntu特點 (1)操作簡單,方便使用,安裝人性化。 (2)系統安全方面:Ubuntu預設以普通使用者許可權登入,執行所有與系統相關的任務均需要sudo指令 (3)軟體更