JILK - CPU - (4) - CPU的執行環境

CPU爲指令的執行提供了一個基本的環境,而一條普通指令得以執行所需的基本環境無非就是:內存+寄存器而已。

CPU的基本執行環境:

1)地址空間(Address space)。非64位模式下,可最大支持4GB的線性地址空間,和最多可達64GB的物理地址空間。64位模式下,可最大支持2^64B的線性地址空間,和最多可達2^40B的物理地址空間。

2)基本的寄存器集合(Basic program execution registers)。非64位模式下,包括8個通用寄存器,6個段寄存器,EFLAGS寄存器,EIP寄存器;64位模式下,通用寄存器的數量增加到16個,而其有64位寬,EIP擴展爲64位的RIP,EFLAGS擴展到64位的RFlAGS,雖然最高的32位爲保留位。這些寄存器已經滿足普通的指令的運行所需。

3)x87浮點寄存器(x87 FPU registers)。包括8個x87 FPU數據寄存器,一個x87 FPU控制寄存器,一個狀態寄存器,一個x87 FPU指令寄存器,一個x87 FPU 操作數指針寄存器,一個x87 FPU標籤寄存器,一個x87 FPU操作碼寄存器。這些寄存器已經滿足各種浮點運算指令的所需,包括單精度運行、雙精度運算、word大小的整數運算、doubleword大小的整數運算、quadword大小的整數運算、BCD形式的整數運算。

4)MMX寄存器(MMX registers)。包括8個MMX寄存器(64位寬),用於支持SIMD操作,如同時作用於8個byte大小的整數的SIMD操作,或同時作用於4個word大小的整數,或同時作用於2個doubleword大小的整數的SIMD操作。

5)XMM寄存器(XMM registers)。非64位模式下,包括8個XMM數據寄存器(128位寬),一個MXCSR寄存器;64爲模式下,XMM數據寄存器增加到16個(還是128位寬)。這些寄存器可以滿足SIMD的操作的需要。如128位寬的數據寄存器可以存放若干個單精度的浮點數,或若干個雙精度的浮點數,或16個byte大小的整數,或8個word大小的整數,或4個doubleword大小的整數,或2個quadword大小的整數。

6)堆棧(Stack)。CPU在執行應用程序的函數調用時無可避免地牽涉到函數調用堆棧的概念,而CPU對這個的實現是通過在內存保存堆棧,從而保存函數調用的每一層的所用的環境和資源。值得注意的是,在64位模式下,堆棧的大小並不是由SS(Stack Segment)的描述符(descriptor)裏的某一位來控制的,因爲64位模式下已經不再關心CS、DS、ES、SS的描述符的值了,統一將其按0處理。

IA-32 Basic Execution Environment for Non-64-bit Modes

64-Bit Mode Execution Environment

上圖來自《Intel 64 and IA-32 Architectures Software Developers Manual Volume 1》。

CPU除了提供基本的運行環境外,還提供了更爲系統級的資源以供指令使用。這些資源包括:

1)I/O端口(I/O ports)。CPU支持往指定的輸入/輸出端口傳送或讀取數據。這些I/O端口實際上構成了一個I/O地址空間。

2)控制寄存器(Control registers)。包括5個控制寄存器(CR0~CR4),用於控制CPU處於哪種操作模式下以及存放當前正在執行的任務(current executing task)的一些特徵。在64位模式下,這5個寄存器擴展到了64位寬,並增加了一個新的控制寄存器CR8或稱之爲TPR(Task priority register)。我們知道,每個中斷向量都會映射到一箇中斷優先級值,如中斷向量範圍10H~20H裏的中斷向量都映射到1級的中斷優先級。TPR裏存放的就是一箇中斷向量,該中斷向量所映射到的中斷優先級值即爲當前正在執行的任務的優先級。當操作系統往TPR裏設置了一箇中斷向量值後,CPU將不會響應比該中斷向量的優先級低的中斷。

3)用於內存管理的寄存器(Memory management registers)。包括GDTR(Global descriptor table register)、IDTR(Interrupt descriptor table register)、任務寄存器(task register)、LDTR(Local descriptor table register)。這些寄存器用來輔助實現保護模式下的內存管理(包括段式和頁式管理)。在非64位模式下,GDTR爲48位寬,其低16位用於表示全局描述符表的大小,高32位表示全局描述符表的線性地址。在64位模式下,GDTR、IDTR均擴展到了80位寬,增加的32位與原有的高32位一起用來表示描述符表的64位線性地址。LDTR和TR也進行了擴展,以便可表示一個64位的基地址。

4)用於表徵機器特徵的寄存器(Machine specific registers,MSRs)。這些寄存器用於控制和報告CPU的性能狀況。

5)用於機器檢測的寄存器(Machine check registers)。這些寄存器隸屬於MSRs,它們用來檢測和報告機器的硬件錯誤。

6)用於性能監視的計數器(Performance monitoring counters)。這些計數器統計CPU性能相關的事件。

7)調試寄存器(Debug registers)。顧名思義,用於幫助調試的。



發佈了34 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章