close

硬體的分節功能

    80286開始Intel在微處理器就用來種方式進行位址的轉譯
    1.
真實模式(Real Mode) 2.保護模式(Protected Mode)
   

·       真實模式

·       主要為了讓處理器能與舊型號相容,以及讓作業系統可以起動(Bootstrap)

·       保護模式

·       在這種模式下,處理器支持所有的指令和所有的體系結構特性

·       提供最高的性能和兼容性

 

節區選取器&分節暫存器

       邏輯位址分成兩個部分組成:
            1.
節區識別碼(16位元)-節區選取器(Segment Selector) 2.節區內相對位址的偏移量(32位元)
      
為了讓節區選取器可以被快速取出,所以處理器提供了分節暫存器(Segmentation Register),唯一功能就是保存節區選取器;這些暫存器分別叫 cs , ss , ds , es , fs , gs

      
其中三個暫存器有特定用途:

·       cs 程式節區暫存區(Code Segment Register) 指向含有程式指令的一個節區

·       ss 堆疊節區暫存區(Stack Segment Register) 指向含有當前程式堆疊的一個節區

·       ds 資料節區暫存器(Data Segment Register) 指向含有全域或靜態資料的一個暫存器

       其他三個分節暫存器屬於一般用途,可以參用到任何資料節區。

       cs
暫存器有另一個重要功能:
            
它包含一個2位元的欄位,可用來指定CPU當前的特權等級(Current Privilege Level 簡稱 CPL) 0 代表最高特權等級 3 代表最低的特權等級 Linux 只會用 0 3 這兩個等級 分別叫 核心模式(Kernel Mode)和用戶模式(User Mode)

節區敘述器(Segment Descriptor)

        每一個節區可有一個8位元組的節區敘述器來表示。
       
節區敘述器主要儲存兩種東西:

1.  全域敘述器表格(Global Descriptor Table 簡稱 GDT )

2.  區域敘述器表格(Local Descriptor Table 簡稱 LDT )


      
節區有分好幾種,因此節區敘述器也有好幾種,下面是Linux常用的幾種節區敘述器

 

·       程式節區紀錄器(Code Segment Descriptor)

·       表示此節區敘述器所參用的是程式節區

·       他可能位於GDT 或是 LDT 之內

·       資料節區敘述器(Data Segment Descriptor)

·       表示此節區敘述器所參用的是資料節區

·       他可能位於GDT或是LDT之內

·       堆疊節區的實作就是透過一般的資料節區

·       任務狀態節區敘述器(Task State Segment Descriptor 簡稱TSSD )

·       表示此節區敘述器所參用的是任務狀態節區(TSS)

·       這個節區是用來儲存處理器之暫存器的內容

·       他可能位於GDT之中

·       區域敘述器表格敘述器(Local Descriptor Table Descriptor簡稱LDTD )

·       表示此節區敘述器所參用的是含有LDT的節區,而且只能出現在GDT

 

 分節單元(Segmentation Unit)

          分節單元會進行下來操作

1.  檢視選取器的TI欄位,以判定節區敘述器中儲存的是哪種敘述器表格。這個欄位會指出敘述器位於GDT或自有的LDT(分節單元會從gdtr或是ldtr取得GDT或是LDT的基底線性位址)

2.  從節區選取器的 index 欄位來計算節區敘述器的位址。index欄位的值會被乘以8(節區選取器的大小),而其結果會與gdtr或是ldtr 暫存器的內容相加。

3.  把邏輯位址的偏移量和節區敘述器的BASE欄位相加,藉此獲得線性位址。

arrow
arrow
    全站熱搜

    Aminzai 發表在 痞客邦 留言(0) 人氣()