Intel 80386
編輯80386 是 Intel 開發的 32 位架構 x86 處理器,品牌名稱為 i386(最初為 iAPX 386)作為 80286 的后繼產品,生產時間為 1985 年至 2007 年 9 月。 386 設計后來在 AMD 許可下制造,處理器作為 Am386 出售; IBM 許可了 i386SX 并從中開發了改進的 IBM 386SLC。 幾家公司開發了自己的兼容處理器,例如 Chips & 技術、Cyrix 或 NexGen。
歷史意義
編輯借助 80386,英特爾從 x86 架構(最初是純 16 位架構)切換到成熟的 32 位架構。 作為 i386 推出,英特爾的 32 位 x86 架構被重新命名為“英特爾架構 32 位”,簡稱 IA-32。 i386 的功能在直到 Core i9的所有后續型號中仍然可用,同時,IA-32 還為其他制造商提供了自己的 x86 處理器的模板。 該處理器系列的寄存器和架構的地址空間為 32 位寬。 AMD 在世紀之交開發的 64 位擴展“x86-64”也是基于 i386 架構和后來的擴展。
80386 繼續用于控制任務和航空航天工業。 原因是它的計算能力完全足以完成這些任務,并且它被認為是經過全面測試的——也就是說,它已經暴露在所有可能的情況下,因此任何現有或未來的軟件都不會出現不可預見的行為。 另一個原因是它的高抗輻射性。
架構
編輯變體
該 CPU 有四種變體,它們在數據總線和應用程序方面有所不同。 作為 i386SX 嵌入式版本的 i386EX 的生產直到 2007 年才結束。
Intel386SX
80386 的一個變體是 80386SX。 它只有16位的外部數據總線和24位的地址總線,但內部保留了32位的80386微架構。 24 位地址總線將 386SX 的可尋址物理內存限制為 16 MiB; 鑒于 1990 年代初期家庭中常見的xxx 4 MiB 內存擴展,這并不是一個嚴重的限制,尤其是因為許多 386SX 主板也不允許 16 MiB 內存擴展。 從程序員的角度來看,除了內存限制外,386SX 與“真正的”80386 幾乎沒有區別,80386 推出后更名為 80386DX,以區別于它的小兄弟。 由于減少了數據總線寬度和較低的可用時鐘頻率,386SX 的執行速度僅比 386DX 低得多。
Intel386SL
Intel386SL 是 i386SX 的便攜式計算機版本。 有了它,引入了系統管理模式(SMM),可以讓CPU進入深度睡眠以節省能源。
快速CAD
RapidCad 是基于 486 技術的 386 系統升級。 RapidCad由RapidCad1和RapidCad2兩個芯片組成,前者取代了80386 CPU,后者取代了80387協處理器。 然而,RapidCad2 絕不包含協處理器的電子元件,而只包含用于生成外部總線信號的邏輯。 實際的協處理器已經集成在 RapidCad1 中。
與帶有 i387 協處理器的 i386 系統相比,RapidCad 帶來了約 30% 的適度性能提升,具體取決于應用程序; 但是,性能達不到配備 80486 處理器的系統。 除了高昂的價格之外,這種情況還導致 RapidCad 沒有被廣泛使用,這就是為什么這兩款芯片如今成為搶手的收藏品。
細分
80386 可以直接尋址多達 4 GiB 的主內存(386SX:16 MiB)。 邏輯地址空間為 2 字節 = 64 TiB,理論上只能完整使用。在保護模式下,處理器使用帶 16 位寬選擇器的分段內存尋址,并且 - 根據操作模式 - 16 或 32-位寬偏移量。
與 80286 一樣,分段單元支持四種特權級別,用于以下任務:
很少有 PC 操作系統利用這四個特權級別。 通常僅使用環 0和環 3。
在安全性方面,保護模式明顯優于現在已經確立的平面尋址模式。 盡管如此,幾乎所有用于應用程序的較新的 PC 操作系統都專門使用“平面內存”模型。 這簡化了編程,并且可以轉移到沒有分段單元的其他處理器架構。
在硬件方面也可以并行使用分段和分頁。 線性地址首先通過分段計算,然后通過分頁轉換為物理地址。 在沒有分頁的情況下,線性地址與物理地址相同。
使用所謂的“平面內存”模型,其中數據、代碼和堆棧段被映射到應用程序的線性 4 GiB 地址空間,應用程序中的內存可通過簡單的 32 位偏移量尋址。 這破壞了分段單元提供的內存保護。 在 AMD 在 64 位 x86 處理器中引入的長模式中,沒有計劃擴展分段,因此 x64 只能使用“平面內存”模型。
分頁單元只允許相對簡單的基于頁面的內存保護。 現在正在嘗試使用 NX-Bit(來自 Athlon 64)或 SMEP 等新硬件擴展來解決與“平面內存”模型相關的安全漏洞。
分頁
一個額外的級別現在用于管理,它使用 4 KiB 內存頁面。 所有頁的基地址都記錄在頁表中。 這些存儲在具有 1024 個條目的頁目錄中。 因此,一個 4 GiB 地址空間被分成 1024 × 1024 個 4 KiB 頁。 因此,32位線性地址可以分解為三部分:
- 12 位 - 內存頁中的偏移量
- 10 位 - 頁表索引
- 10 位 - 頁目錄索引
頁面級別有兩個權限級別:
- 管理員模式 - 用于操作系統和驅動程序
- 用戶模式——用于應用程序
段特權等價物在括號中給出。
注冊
它有八個 32 位寄存器。 盡管這些寄存器中的七個有時在與各種指令相關的情況下有特殊用途,但它們可以自由地用于算術和一般數據交換:
還有其他寄存器用于控制 CPU 的行為:
所有通用寄存器,以及 EIP 和 EFLAGS,都是前身 8086 到 80286 對應的 16 位寄存器的 32 位擴展版本。
處理器錯誤
編輯POPA/POPAD 錯誤
此錯誤發生在所有 386 上。 如果 POPA 或 POPAD 指令后面緊跟著一條從基址寄存器和變址寄存器計算內存地址的指令,則 EAX 寄存器中的值將是未定義的。 如果 EAX 被用作內存訪問的基址或變址寄存器,則處理器掛起。
檢查TSS的邊界
處理器檢查輸入的任務狀態段 (TSS) 大小是否足夠大。 只要 TSS 小于 101 字節,就會拋出異常 10,但實際上應該在小于 103 字節時拋出。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/376332/