1. 程式人生 > >x86架構下的系統段描述符格式

x86架構下的系統段描述符格式

        如果還記得前面的GDT全域性描述符表的話,那麼一定不會忘記段描述符中有個s欄位,若為0,則表示這個描述符是系統段,若為1,則是普通的段描述符;普通的段為ds,es,ss,cs等等,系統的段則有GDT,呼叫門,TSS,LDT等等。現在來看看幾個系統段描述符格式;

        ---------------------------------------------------------------------------------呼叫門-------------------------------------------------------------------------------

        首先來看下呼叫門描述符格式(GDT在前面已經分析過了):

       

        依舊是上面為高32位,下面是低32位。因為呼叫門是用來給低特權級程式呼叫高特權級例程的橋樑,所以呼叫門描述符格式中只要提供該例程所在的段描述符,以及在該段內的偏移位置就可以了。

        所以低32位中16~31是高特權級例程所在的程式碼段選擇子,也提供了32位的段內偏移量。

        P位依然是段存在位標識;

        DPL是表示呼叫門的特權級,和目標例程的特權級不一樣。這裡有個有趣的問題:呼叫者的特權級要高於呼叫門的特權級同時還必須低於目標例程的特權級。CPL數值 <= 呼叫門描述符的DPL;RPL數值 <= 呼叫門描述符的DPL; CPL數值 >= 目標例程的DPL;

        TYPE是表示門型別,1100表示呼叫門,其實有呼叫門,陷阱門,中斷門等門型別;

        引數個數:呼叫門呼叫時,會對堆疊進行切換。所以要定義要轉移的引數個數,比如特權級2程式呼叫特權級0程式,當在特權級2程式中壓入某個引數,呼叫到了特權級0程式中是彈出的就是那個引數。雖然在特權級2程式中壓入的是特權級2的堆疊,而特權級0的程式中是特權級0的堆疊,但彈出的資料是一樣的,因為系統會自動切換相應特權級的堆疊,也會把堆疊中的資料複製到相應特權級堆疊中;

        ------------------------------------------------------------------------LDT描述符格式--------------------------------------------------------------------------------------

        前面一直說全域性描述符表GDT,一直強調是全域性,說明有其相對應的區域性描述符,那就是LDT描述符0;LDT描述符格式看下圖:

        

        段基地址和段界限和GDT中的一樣,G依舊是粒度位;D 和 L位對LDT來說沒意義,恆為0;S位為0,表示是系統段;TYPE為0010,表示是LDT段;其他欄位都和GDT中的一樣了。同樣的系統中有個暫存器用來表示LDT的位置,那就是LDTR,同樣有lldt載入LDT表到LDTR中,sldt把LDTR中內容載入到指定地方;唯一不一樣的是GDT表是整個系統唯一的一張,而LDT是每個任務有一張;(但LDTR是全域性唯一的)一般把LDT載入到GDT表中;

        ----------------------------------------------------------------------TSS描述符格式----------------------------------------------------------------------------------------

        TSS

相關推薦

x86架構系統描述格式

        如果還記得前面的GDT全域性描述符表的話,那麼一定不會忘記段描述符中有個s欄位,若為0,則表示這個描述符是系統段,若為1,則是普通的段描述符;普通的段為ds,es,ss,cs等等,系統的段則有GDT,呼叫門,TSS,LDT等等。現在來看看幾個系統段描述符格式

操作系統學習(五) 、代碼和數據描述

數據段 轉移 異常類 格式 需要 狀態 管理 更新 不能 一、代碼段和數據段描述符格式 段描述符通用格式如下所示: 代碼段和數據段描述符中各個位的含義如下所示: 二、代碼段和數據段描述符類型 當段描述符中S標誌位(描述符類型)被置位,則該描述符用於代碼段或數據段。

X86架構Linux啟動過程分析

重要 ack csdn 檢查 point article span 註意 eap 1、X86架構下的從開機到Start_kernel啟動的整體過程 這個過程簡要概述為: 開機——>BIOS——>GRUB/LILO——>Linux Kernel

JNI字描述

ava 標示 編碼 border size 引用類型 face string short “([Ljava/lang/String;)V” 它是一種對函數返回值和參數的編碼。這種編碼叫做JNI字段描述符(JavaNative Interface FieldDescript

程序0的LDT0程式碼描述分析

LDT0的值為 ···· { \ {0,0}, \ /* ldt */ {0x9f,0xc0fa00}, \ {0x9f,0xc0f200}, \ }, ··· 其中第二項{0x9f,0xc0fa00}為程式碼段的描述符。

保護模式-描述屬性

段暫存器位96位但是可見位數只有16位,剩下80位怎麼填充?80位裡每一位代表什麼意思? 上面為段描述符的結構 P(15): P=1 段描述符有效 P=0 段描述符無效 G(23): 我們先看看段描述符的結構 Struct Seg

【OS學習筆記】十四 保護模式二:描述

上一篇文章初步進入保護模式的學習。首先學習了全域性描述符表GDT。點選連結檢視上一篇文章:全域性描述符表 本篇文章繼續學習,GDT中存放的條目:描述符,確切的說是段描述符。學習段描述符的作用以及段描述符的格式。 1、段描述符的格式 真實模式和保護模式,在記憶體訪問上是由區別的

轉發: 選擇描述暫存器

段暫存器(segement register) 段選擇符(segement selector) 段描述符(segement descriptor) 學習總結 1 段暫存器 段暫存器包括CS,SS,DS,ES,FS,GS。結構如下圖: 段暫存器包括可見部分和不可見部分。可

選擇描述描述

段描述符(8位元組)存放於 GDT/LDT 段選擇符(16位) + 偏移量(32位) = 邏輯地址 段暫存器僅僅存放段選擇符,段暫存器中的段選擇符指定非程式設計段暫存器中的段描述符。 關於描述符,描述符表,段選擇符的區別。 1、描述符      描述符是一個八位元組

80386簡介--描述描述

Intel 80386 微處理器的基本結構 Intel 80386 微處理器功能結構如圖,它是三部分組成:中央處理部件CPU、儲存管理部件MMU、匯流排介面部件BIU。 1.中央處理部件CPU:它由指令部件和執行部件組成。 (1)指令部件包括指令預取和指令譯碼兩部分,

Linux的檔案描述與檔案指標及其區別

檔案描述符 在Linux系統中一切皆檔案。如果要對某個裝置進行操作,就不得不開啟此裝置檔案,只要你開啟檔案就會獲得該檔案的檔案描述符fd(file discriptor),這個檔案描述符就是一個整數。每個程序在PCB(Process Control Block

linux系統檔案描述file descriptor與inode的相關知識

每個程序在Linux核心中都有一個task_struct結構體來維護程序相關的 資訊,稱為程序描述符(Process Descriptor),而在作業系統理論中稱為程序控制塊 (PCB,Process Control Block)。task_struct中有一個指標(

J2EE架構系統設計模式

1.1 J2EE應用模型 J2EE提供了一個企業級的計算模型和執行環境用於開發和部署多層分散式結構的應用模型。該模型具有重用元件的能力、基於擴充套件標記語言(XML)的資料交換、統一的安全模式和靈活的事務控制。它通過提供企業計算環境所必需的各種服務,使得部署在J2EE平臺上

選擇,描述,80x86的頁表定址機制

段選擇符指示著段的描述符,在段描述符中包含有定義段所用的全部資訊,包括: (1)索引欄位:是由13位組成.利用索引欄位可以從擁有8192個段描述符的段描述符表中選出任何一個段描述符來。處理機用8(8是段描述符的欄位數)乘以索引值再加上描述符的基地址(來自全域性描述符暫存器,或

小白學分散式程式開發2-分散式架構系統間互動的5種通訊模式

分散式架構下系統間互動的5種通訊模式 1、request/response模式(同步模式)        客戶端發起請求一直阻塞到服務端返回請求為止。普通的HTTP請求都屬於同步模式。

淺談 Linux 的檔案描述 fd fp

檔案描述符: 是個很小的正整數,它是一個索引值,指向核心為每一個程序所維護的該程序開啟檔案的記錄表。 當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是一個低階的正整數。最前面的三個檔案描述符(0,1

深入理解分布式系統中的緩存架構()

cache color 分布式緩存 51cto red http 不可 傳統 process 承接上一篇《理解分布式系統中的緩存架構(上)》,介紹了大型分布式系統中緩存的相關理論,常見的緩存組件以及應用場景,本文主要介紹緩存架構設計常見問題以及解決方案,業界案例。 1 分層

微服務架構的監控系統設計(一)——指標數據的采集展示

ans 定義數據 采集函數 健康 eset 中間件 松耦合 實例 叠代優化 前言微服務是一種架構風格,一個大型復雜軟件應用通常由多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是松耦合的。每個微服務僅關註於完成一件任務並很好地完成該任務。微服務之前很多單體應用

Linux高階程式設計基礎——檔案系統程式設計之檔案描述

檔案系統程式設計之檔案描述符——實驗題 /*編寫程式碼,完成以下功能: 1.建立新檔案,該檔案具有使用者讀寫許可權。 2.採用dup/dup2/fcntl複製一個新的檔案描述符,通過新檔案描述符向檔案寫入“class_name”字串; 3.通過原有的檔案描述符讀取檔案中的內容,並且列印顯示;*/

Linux:基礎IO(cIO庫函式詳細介紹)(IO系統呼叫介面詳細介紹)(兩者關係:檔案描述和檔案指標)

目錄 c系統中的庫函式: fopen:開啟檔案 fclose:關閉檔案 fwrite:向檔案寫入一個數據塊 fread:讀寫 fprintf:格式化輸出到一個流/檔案中 fseek:移動/跳轉 到當前 讀取/寫入位置 fgets:獲取字串 fput:把字串寫入到指