一、80x86 處理器的工作模式
1.1 實模式
實模式概述
實模式(Real Mode)是80x86處理器最早支持的工作模式,也是最基礎的工作模式。實模式主要用于早期的MS-DOS操作系統和其他簡單的操作環境。在實模式下,處理器能夠直接訪問1MB的物理內存空間。這個模式與8086處理器的工作方式完全兼容,因此得名“實模式”。
實模式的特點
-
地址空間限制
- 在實模式下,處理器只能訪問1MB的內存空間(從0x00000到0xFFFFF)。
- 內存空間的限制源于20位地址總線。
-
段地址和偏移地址
- 實模式使用段:偏移(segment)方式進行內存尋址。
- 段地址乘以16(即左移4位)再加上偏移地址,形成20位的物理地址。
- 例如,段地址為0x1234,偏移地址為0x5678,則物理地址為: 物理地址=(0x1234×16)+0x5678=0x12340+0x5678=0x179B8\text{物理地址} = (0x1234 \times 16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8物理地址=(0x1234×16)+0x5678=0x12340+0x5678=0x179B8
-
無內存保護
- 實模式沒有內存保護機制,程序可以任意訪問整個1MB的內存空間,包括操作系統區域和其他程序的區域。
- 這使得程序之間可能會互相干擾,容易導致系統崩潰。
-
直接硬件訪問
- 實模式允許直接訪問硬件設備和I/O端口。
- 在實模式下,程序可以直接使用I/O指令(如IN和OUT)與硬件設備進行交互。
-
中斷和處理器初始化
- 實模式支持硬件中斷和軟件中斷,使用中斷向量表(Interrupt Vector Table, IVT)來管理。
- 中斷向量表存儲在內存的最低1KB區域(從0x00000到0x003FF)。
- 處理器加電或復位后,會自動進入實模式,并從地址0xFFFF0開始執行代碼。
-
可執行代碼的限制
- 實模式下可執行代碼段的大小受到限制,通常一個代碼段最大為64KB(0x0000到0xFFFF)。
實模式的內存布局
在實模式下,內存布局通常包括以下幾個部分:
-
BIOS區
- 高端內存(從0xF0000到0xFFFFF)通常用于存放BIOS代碼和數據。
- 加電或復位時,處理器從0xFFFF0處開始執行BIOS代碼。
-
中斷向量表
- 內存的最低1KB區域(從0x00000到0x003FF)存放中斷向量表。
- 每個中斷向量占用4個字節(2字節段地址和2字節偏移地址)。
-
操作系統和應用程序
- 剩余的內存區域用于存放操作系統代碼、應用程序代碼和數據。
1.2 保護模式?
概述
保護模式(Protected Mode)是80x86處理器引入的一種高級工作模式,與實模式相比,它提供了更強大的內存管理和保護功能。保護模式最早在80286處理器上引入,并在80386及以后的處理器上得到了進一步擴展和增強。
保護模式的特點
-
擴展的內存地址空間
- 保護模式支持24位或32位地址總線,能夠訪問4GB的物理內存空間(在80386及以后)。
- 采用段選擇符和段描述符來進行內存管理,允許更復雜的內存布局和管理。
-
內存保護
- 通過段描述符和頁表,保護模式可以實現內存保護,防止程序非法訪問其他程序或操作系統的內存。
- 支持不同特權級別的代碼和數據段(0到3級),用于實現用戶模式和內核模式的隔離。
-
分頁機制
- 支持分頁機制,通過頁表將虛擬地址映射到物理地址,進一步增強內存管理能力。
- 頁的大小通常為4KB,也支持大頁(如4MB)。
-
硬件支持的多任務
- 提供硬件支持的多任務切換,包括任務狀態段(Task State Segment, TSS)和任務寄存器(Task Register)。
- 支持任務門(Task Gate)用于任務間的切換和保護。
-
增強的中斷和異常處理
- 保護模式下使用中斷描述符表(Interrupt Descriptor Table, IDT)管理中斷和異常處理。
- IDT支持門描述符(Gate Descriptor),包括中斷門、陷阱門和任務門。
-
虛擬內存
- 支持虛擬內存,通過分頁機制實現虛擬地址空間,使程序可以使用比實際物理內存更大的地址空間。
保護模式的內存管理
-
段選擇符和段描述符
- 每個段選擇符指向一個段描述符,段描述符包含段基址、段限長和段屬性(如權限和類型)。
- 段選擇符和段描述符由全局描述符表(Global Descriptor Table, GDT)和局部描述符表(Local Descriptor Table, LDT)管理。
-
分頁機制
- 分頁機制將虛擬地址分為頁目錄(Page Directory)、頁表(Page Table)和頁框(Page Frame)。
- 通過頁目錄和頁表,將虛擬地址映射到物理地址,實現內存保護和管理。
保護模式的應用
保護模式廣泛應用于現代操作系統,如Windows、Linux、Unix等,它們利用保護模式的特性實現了多任務、多用戶和內存保護等高級功能。通過保護模式,操作系統可以有效地管理硬件資源,提供穩定、安全的運行環境。
保護模式是現代操作系統和應用程序的基礎,充分利用了80x86處理器的高級特性,提高了系統的穩定性和安全性。
1.3 虛擬 8086 模式
虛擬 8086 模式概述
虛擬 8086 模式(Virtual 8086 Mode)是80x86處理器在保護模式下提供的一種特殊模式,允許處理器運行像在實模式下執行的8086程序。該模式主要用于向后兼容,使舊版的DOS程序可以在現代操作系統(如Windows和Linux)上運行,而不需要離開保護模式。
虛擬 8086 模式的特點
-
實模式兼容性
- 虛擬 8086 模式允許處理器模擬實模式下的運行環境,支持8086指令集和地址空間。
- 處理器可以在保護模式下執行8086程序,同時仍然保留保護模式的特性和優勢。
-
分頁和保護機制
- 虛擬 8086 模式下,處理器依然可以使用保護模式的分頁機制,實現虛擬內存和內存保護。
- 通過頁表,可以將虛擬 8086 模式下的地址空間映射到物理內存,提供內存隔離和保護。
-
中斷和異常處理
- 虛擬 8086 模式支持中斷和異常處理,可以通過保護模式的中斷描述符表(IDT)來管理。
- 中斷和異常可以由虛擬 8086 監視器(通常是操作系統內核)處理,確保系統的穩定性和安全性。
-
硬件虛擬化支持
- 一些現代處理器提供了硬件支持的虛擬化技術,可以更高效地實現虛擬 8086 模式。
- 例如,Intel的VT-x和AMD的AMD-V技術,可以提供硬件加速的虛擬化支持,提升性能。
虛擬 8086 模式的內存管理
-
段:偏移尋址
- 虛擬 8086 模式下,內存尋址方式與實模式相同,采用段:偏移(segment)方式。
- 段地址和偏移地址共同組成20位的物理地址,最多可以訪問1MB的內存空間。
-
分頁機制
- 虛擬 8086 模式支持分頁機制,可以將20位的實模式地址映射到保護模式下的虛擬地址空間。
- 通過頁表,可以實現內存保護和隔離,防止虛擬 8086 模式下的程序非法訪問其他內存區域。
虛擬 8086 模式的應用
-
運行舊版DOS程序
- 虛擬 8086 模式主要用于運行舊版的DOS程序和應用,提供向后兼容性。
- 在現代操作系統中,通過虛擬 8086 模式,可以運行一些必須在實模式下執行的老程序。
-
虛擬機和仿真器
- 一些虛擬機和仿真器利用虛擬 8086 模式來實現對老操作系統和軟件的支持。
- 例如,DOSBox等仿真器通過虛擬 8086 模式模擬DOS環境,使用戶可以運行經典的DOS游戲和應用。
虛擬 8086 模式的限制
-
內存地址空間
- 虛擬 8086 模式下,程序只能訪問1MB的內存地址空間,受到實模式的限制。
-
性能開銷
- 虛擬 8086 模式的實現需要保護模式的支持,可能帶來一定的性能開銷。
- 中斷和異常處理需要虛擬 8086 監視器(操作系統內核)的介入,增加了處理復雜性。
-
硬件限制
- 并非所有硬件都完全支持虛擬 8086 模式,某些硬件特性可能在虛擬 8086 模式下不可用。
總結
虛擬 8086 模式是80x86處理器在保護模式下提供的一種特殊模式,主要用于向后兼容舊版的DOS程序。通過虛擬 8086 模式,處理器能夠在保護模式下模擬實模式運行環境,同時保留保護模式的特性和優勢。這種模式在運行舊版軟件、虛擬機和仿真器中有著廣泛應用。
二、Windows 的內存管理
2.1?DOS 操作系統的內存安排
DOS(Disk Operating System)操作系統的內存管理主要基于8086/8088處理器的實模式內存模型。實模式下的內存地址空間為1MB,從0x00000到0xFFFFF。這1MB的地址空間被劃分為幾個主要區域,每個區域有特定的用途。以下是DOS操作系統內存安排的詳細介紹。
實模式內存模型
實模式(Real Mode)下,內存地址是通過段地址和偏移地址組合成20位物理地址來進行訪問的。段地址左移4位,加上偏移地址,形成實際的物理地址。
內存布局
實模式下1MB內存空間的布局大致如下:
-
中斷向量表(IVT):0x00000 - 0x003FF
- 占據1KB(256個向量,每個向量4字節)。
- 存放中斷服務程序的入口地址和相關信息。
-
BIOS數據區(BDA):0x00400 - 0x004FF
- 大約256字節。
- 存放系統和硬件設備的參數,如硬盤、串口、并口等的信息。
-
傳統內存(常規內存):0x00500 - 0x9FFFF
- 640KB,主要用于DOS操作系統、DOS應用程序和常駐內存程序(TSR)。
- 可用作程序代碼、數據、堆棧等。
-
顯示緩沖區:0xA0000 - 0xBFFFF
- 顯示適配器使用的內存區域。
- 0xA0000 - 0xAFFFF:64KB,通常用于EGA/VGA顯卡的圖形模式。
- 0xB0000 - 0xB7FFF:32KB,通常用于單色顯示適配器(MDA)。
- 0xB8000 - 0xBFFFF:32KB,通常用于彩色文本顯示(CGA、EGA、VGA文本模式)。
-
擴展BIOS數據區(EBDA):0xC0000 - 0xC7FFF
- 大約32KB,存放一些擴展BIOS數據和適配器BIOS代碼。
-
BIOS擴展區:0xC8000 - 0xEFFFF
- 主要用于擴展卡(如網絡適配器、SCSI控制器等)的BIOS和驅動程序。
-
系統BIOS:0xF0000 - 0xFFFFF
- 64KB,存放系統BIOS代碼。
- 提供基本的系統初始化、中斷服務程序、硬件控制等功能。
2.2?80386 的內存尋址機制
Intel 80386處理器引入了更先進的內存尋址機制,與其前輩相比,提供了更強大的內存管理和保護功能。80386支持兩種主要的內存尋址模式:實模式和保護模式。在保護模式下,還引入了分頁機制,從而進一步增強了內存管理能力。以下是詳細介紹:
1. 實模式
在實模式下,80386處理器與8086/8088的內存尋址方式相同,使用20位地址總線,能夠訪問1MB的內存空間。地址通過段地址和偏移地址計算得到:
- 段地址:左移4位。
- 偏移地址:加到段地址的左移結果上,得到20位物理地址。
物理地址 = (段地址 << 4) + 偏移地址
2. 保護模式
保護模式是80386處理器的主要工作模式,提供了增強的內存保護和管理功能。保護模式下的內存尋址涉及兩層機制:分段機制和分頁機制。
2.1 分段機制
保護模式下,80386處理器使用段選擇符(Segment Selector)和段描述符(Segment Descriptor)來管理段。段描述符存儲在全局描述符表(GDT)或局部描述符表(LDT)中。
-
段選擇符:16位,包含三個字段:
- 索引:13位,指定段描述符在GDT或LDT中的位置。
- TI(Table Indicator):1位,指示使用GDT(0)還是LDT(1)。
- RPL(Requested Privilege Level):2位,指定請求的特權級。
-
段描述符:8字節,包含以下字段:
- 基地址(Base Address):32位,段的起始地址。
- 段界限(Limit):20位,段的大小。
- 訪問權限和屬性:12位,描述段的類型、特權級等。
分段機制下的線性地址計算如下:
線性地址 = 段基址 + 偏移地址
2.2 分頁機制
分頁機制是80386處理器在保護模式下提供的另一種內存管理方式,通過將線性地址轉換為物理地址,實現內存的虛擬化和保護。分頁機制涉及頁目錄、頁表和頁幀。
- 頁目錄:包含頁目錄項(PDE),每個PDE指向一個頁表。
- 頁表:包含頁表項(PTE),每個PTE指向一個頁幀。
- 頁幀:實際的物理內存塊,通常為4KB。
分頁機制的地址轉換如下:
- 線性地址被分成三個部分:目錄、表和頁內偏移。
- 目錄部分索引頁目錄,找到相應的PDE。
- 表部分索引頁表,找到相應的PTE。
- 頁內偏移加到頁幀基地址,得到物理地址。
物理地址 = 頁幀基址 + 頁內偏移
分頁機制示意圖:?
+----------------+----------------+----------------+
| 頁目錄(10位) | 頁表(10位) | 頁內偏移(12位)|
+----------------+----------------+----------------+
3. 80386的內存管理單元(MMU)
80386的MMU(Memory Management Unit)負責分段和分頁的地址轉換,并實現內存保護。
-
CR0寄存器:控制寄存器,用于啟用/禁用保護模式和分頁。
- PE位(Protection Enable):啟用保護模式。
- PG位(Paging Enable):啟用分頁。
-
CR3寄存器:存儲頁目錄的基地址。
-
CR2寄存器:存儲最后一次頁故障的線性地址。
4. 保護機制
保護模式下,80386處理器提供多種保護機制,確保內存和系統的安全:
- 特權級別(Privilege Levels):從0到3,共四級,0級最高。控制代碼和數據的訪問權限。
- 段保護:通過段描述符中的屬性字段,實現段界限檢查和訪問控制。
- 頁保護:通過PTE中的屬性字段,實現頁的讀寫執行權限控制。
2.3?Windows 的內存安排
1. 虛擬內存
Windows操作系統使用虛擬內存管理,將物理內存(RAM)和硬盤上的虛擬內存文件(頁面文件)結合起來,為每個進程提供獨立的虛擬地址空間。每個進程通常有4GB的虛擬地址空間(32位系統),其中2GB給用戶模式程序使用,2GB給內核模式使用。64位系統的虛擬地址空間更大。
2. 虛擬地址空間布局
虛擬地址空間被分成用戶模式和內核模式區域:
用戶模式地址空間
- 0x00000000 - 0x7FFFFFFF: 用戶模式地址空間,供應用程序使用。
- 堆(Heap): 動態內存分配區,應用程序在運行時分配和釋放內存。
- 棧(Stack): 每個線程有自己的棧,用于函數調用和局部變量。
- 共享內存: 不同進程之間共享的數據段。
內核模式地址空間
- 0x80000000 - 0xFFFFFFFF: 內核模式地址空間,供操作系統內核和驅動程序使用。
- 內核代碼和數據: 操作系統內核的代碼和全局數據。
- 系統緩存: 用于文件系統緩存,提高文件訪問性能。
- 設備驅動程序: 驅動程序代碼和數據。
3. 內存分頁
Windows使用分頁機制管理內存,將虛擬地址轉換為物理地址。分頁的基本單位是頁面,通常為4KB。
頁表結構
- 頁目錄(Page Directory): 包含頁目錄項(PDE),指向頁表。
- 頁表(Page Table): 包含頁表項(PTE),指向實際的物理內存頁。
4. 內存管理單元(MMU)
處理器的內存管理單元(MMU)負責將虛擬地址轉換為物理地址,執行頁面替換和內存保護。Windows操作系統通過MMU實現以下功能:
- 地址轉換: 將虛擬地址映射到物理地址。
- 內存保護: 控制頁面的訪問權限(讀、寫、執行)。
- 頁面替換: 將不常用的頁面交換到硬盤的頁面文件中,以釋放物理內存。
5. 內存保護
Windows操作系統通過以下機制保護內存:
- 特權級別: 確保用戶模式程序不能直接訪問內核模式內存。
- 頁面權限: 控制每個頁面的訪問類型(讀、寫、執行)。
- 訪問控制: 操作系統內核設置訪問權限,防止未授權的內存訪問。
6. 內存分配
Windows使用多種策略和數據結構進行內存分配:
- 分頁分配器: 管理虛擬內存的分頁分配和釋放。
- 堆管理器: 為應用程序提供高效的內存分配和回收。
- 內核內存分配器: 管理內核模式內存,包括池分配器和非分頁池。
7. 內存管理API
Windows提供了一組內存管理API,供應用程序和系統使用:
- VirtualAlloc/VirtualFree: 分配和釋放虛擬內存。
- HeapAlloc/HeapFree: 在堆上分配和釋放內存。
- GlobalAlloc/GlobalFree: 分配和釋放全局內存塊。
- LocalAlloc/LocalFree: 分配和釋放本地內存塊。
8. 頁面文件
Windows使用頁面文件(Pagefile.sys)作為虛擬內存的一部分,當物理內存不足時,將不常用的頁面交換到頁面文件中。頁面文件的位置和大小可以由用戶配置。
三、Windows 的特權保護
3.1?80386 的中斷和異常
1. 中斷和異常的分類
中斷和異常可以分為以下幾類:
- 硬件中斷(Hardware Interrupts):由外部設備發出,如鍵盤、鼠標、硬盤等。
- 軟件中斷(Software Interrupts):由軟件通過
INT
指令觸發。 - 異常(Exceptions):由處理器檢測到的錯誤或特殊條件引發,如除零錯誤、缺頁錯誤等。
2. 中斷向量表(Interrupt Vector Table, IVT)
80386處理器使用中斷向量表來管理中斷和異常。IVT是一個包含256個條目的表,每個條目占用4字節,存儲中斷或異常處理程序的地址。IVT的基地址存儲在IDTR(中斷描述符表寄存器)中。
3. 中斷描述符表(Interrupt Descriptor Table, IDT)
在保護模式下,80386處理器使用中斷描述符表(IDT)來存儲中斷和異常的處理程序。IDT包含中斷門、陷阱門和任務門描述符,每個描述符占8字節。
- 中斷門(Interrupt Gate):用于硬件和軟件中斷,自動清除IF(中斷標志)。
- 陷阱門(Trap Gate):用于異常處理,不清除IF。
- 任務門(Task Gate):用于切換任務。
IDT的基地址和界限存儲在IDTR中。
4. 中斷處理流程
當中斷或異常發生時,80386處理器執行以下步驟:
- 保存上下文:保存當前的CS(代碼段寄存器)、EIP(指令指針寄存器)和EFLAGS(標志寄存器)到堆棧。
- 查找IDT:根據中斷或異常號,從IDT中找到相應的描述符。
- 檢查權限:檢查當前特權級(CPL)和目標特權級(DPL),確保合法的權限轉換。
- 跳轉到處理程序:加載新的CS和EIP,跳轉到中斷或異常處理程序。
- 處理中斷或異常:執行處理程序代碼。
- 恢復上下文:通過
IRET
指令恢復CS、EIP和EFLAGS,返回中斷或異常發生前的狀態。
5. 異常類型
80386處理器支持多種異常,每種異常有不同的錯誤碼和處理方式:
- 故障(Faults):可恢復的異常,發生后處理程序返回時,重新執行引發異常的指令。
- 陷阱(Traps):調試或跟蹤用的異常,發生后處理程序返回時,繼續執行下一條指令。
- 終止(Aborts):嚴重錯誤,通常無法恢復。
常見的異常包括:
- 除零錯誤(Divide Error):除數為零時引發。
- 單步中斷(Single Step):用于調試,執行單步時引發。
- 斷點(Breakpoint):調試斷點時引發。
- 溢出(Overflow):使用
INTO
指令檢測到溢出時引發。 - 邊界檢查(BOUND Range Exceeded):數組訪問越界時引發。
- 無效操作碼(Invalid Opcode):執行非法指令時引發。
- 設備不可用(Device Not Available):協處理器不可用時引發。
- 雙重錯誤(Double Fault):處理異常時再次發生異常引發。
- 協處理器段超限(Coprocessor Segment Overrun):協處理器操作引發。
- 無效TSS(Invalid TSS):任務狀態段非法時引發。
- 段不存在(Segment Not Present):訪問不存在的段時引發。
- 堆棧段錯誤(Stack Fault):堆棧操作錯誤時引發。
- 常規保護錯誤(General Protection Fault):違反保護規則時引發。
- 頁面錯誤(Page Fault):分頁操作異常時引發。
6. 中斷和異常處理程序
中斷和異常處理程序是特殊的例程,用于處理特定的中斷或異常。它們通常由操作系統提供,負責恢復系統狀態、記錄錯誤信息、執行必要的恢復操作或中斷響應。
7. 中斷優先級和屏蔽
80386處理器支持中斷優先級和屏蔽機制,通過PIC(可編程中斷控制器)管理硬件中斷的優先級和屏蔽。高級中斷可以中斷低級中斷的處理,確保關鍵事件能夠及時響應。
3.2?80386 的保護機制
1. 分段保護
80386處理器使用分段機制來管理內存。每個段有一個描述符,包含段的基地址、界限和訪問權限。分段保護確保進程只能訪問自己被授權的內存區域。
段描述符
段描述符存儲在全局描述符表(GDT)和局部描述符表(LDT)中。每個描述符包含以下信息:
- 基地址(Base Address):段的起始地址。
- 界限(Limit):段的大小,表示段的結束地址。
- 類型(Type)和特權級(DPL):段的類型(代碼段、數據段、系統段)和訪問權限。
- 段存在位(P):段是否在內存中。
分段保護的實現
當訪問內存時,處理器根據段選擇子(Segment Selector)查找段描述符,進行以下檢查:
- 基地址和界限檢查:確保訪問地址在段的范圍內。
- 權限檢查:確保訪問權限符合描述符中的類型和特權級。
2. 分頁保護
分頁機制進一步細化了內存管理,每個頁面都有自己的訪問權限。分頁保護機制通過頁目錄和頁表實現。
頁目錄和頁表
- 頁目錄(Page Directory):包含頁目錄項(PDE),指向頁表。
- 頁表(Page Table):包含頁表項(PTE),指向實際的物理內存頁。
每個頁表項包含以下信息:
- 頁面基地址:物理內存頁的起始地址。
- 存在位(P):頁面是否在內存中。
- 讀/寫位(R/W):頁面是否可寫。
- 用戶/超級用戶位(U/S):頁面的訪問權限。
分頁保護的實現
當訪問內存時,處理器進行以下檢查:
- 頁面存在檢查:檢查頁面是否在內存中,如果不在,則觸發頁面錯誤(Page Fault)。
- 讀/寫檢查:檢查頁面是否可寫,如果嘗試寫不可寫的頁面,則觸發保護錯誤(Protection Fault)。
- 用戶/超級用戶檢查:檢查訪問權限,確保用戶模式代碼不能訪問內核模式頁面。
3. 特權級別
80386處理器支持4個特權級別(Privilege Levels),從0到3,級別越低特權越高。
- 特權級0(Ring 0):最高特權級,通常用于操作系統內核。
- 特權級1(Ring 1)和特權級2(Ring 2):中間特權級,較少使用。
- 特權級3(Ring 3):最低特權級,通常用于用戶模式應用程序。
特權級別的實現
特權級別通過以下機制實現:
- 代碼段特權級別(CPL):當前正在執行的代碼的特權級別。
- 數據段特權級別(DPL):數據段的特權級別,決定哪些CPL可以訪問該段。
- 請求特權級別(RPL):段選擇子的特權級別,表示請求訪問的權限。
當執行訪問操作時,處理器檢查CPL、DPL和RPL,確保符合特權級別規則。如果不符合,則觸發一般保護錯誤(General Protection Fault)。
4. 系統段和門描述符
80386處理器支持系統段和門描述符,用于實現任務切換和中斷處理。
系統段
- 任務狀態段(TSS):包含任務的上下文信息,用于任務切換。
- 局部描述符表(LDT):包含任務專用的段描述符。
門描述符
- 中斷門(Interrupt Gate):用于中斷處理,跳轉到中斷處理程序。
- 陷阱門(Trap Gate):用于異常處理,不屏蔽中斷。
- 任務門(Task Gate):用于任務切換,通過TSS切換任務。
5. 任務切換
80386處理器支持硬件任務切換,通過任務狀態段(TSS)實現。任務切換可以由中斷、異常或任務門觸發。
任務狀態段(TSS)
TSS包含任務的寄存器狀態、段寄存器、堆棧指針和任務鏈接。任務切換時,處理器保存當前任務的狀態到TSS,并加載新任務的狀態。
任務切換的過程
- 保存當前任務狀態:保存當前任務的寄存器和段寄存器到TSS。
- 加載新任務狀態:從新任務的TSS加載寄存器和段寄存器。
- 更新任務寄存器(TR):指向新任務的TSS。
6. 中斷和異常處理
中斷和異常處理是80386處理器保護機制的重要部分。中斷和異常通過中斷描述符表(IDT)管理,處理時進行權限檢查和上下文切換。
中斷和異常的處理過程
- 保存上下文:保存當前CS、EIP和EFLAGS到堆棧。
- 查找IDT:根據中斷或異常號,從IDT找到相應的描述符。
- 權限檢查:檢查CPL和DPL,確保合法權限轉換。
- 跳轉到處理程序:加載新的CS和EIP,執行處理程序。
- 恢復上下文:通過
IRET
恢復CS、EIP和EFLAGS,返回中斷或異常發生前的狀態。
3.3?Windows 的保護機制
1. 用戶模式和內核模式
Windows操作系統將處理器的執行模式分為用戶模式(User Mode)和內核模式(Kernel Mode):
- 用戶模式:運行應用程序,具有受限訪問權限,不能直接訪問硬件或內核數據結構。
- 內核模式:運行操作系統核心組件和設備驅動程序,具有完全訪問權限,可以執行特權指令。
用戶模式和內核模式的切換
用戶模式和內核模式之間的切換通常通過系統調用(System Call)實現。應用程序通過調用系統API請求內核服務,由操作系統將請求切換到內核模式處理。
2. 內存保護
虛擬內存
Windows使用虛擬內存機制,為每個進程提供獨立的地址空間。這一機制使得進程無法直接訪問彼此的內存,從而提高了系統的安全性和穩定性。
- 頁面表:每個進程有一個獨立的頁表,將虛擬地址映射到物理地址。
- 頁面交換:當物理內存不足時,操作系統將不常用的頁面交換到硬盤上的頁面文件。
內存段
Windows使用內存段來劃分不同類型的數據和代碼,每個段有不同的訪問權限和保護機制。例如,代碼段是只讀的,而數據段是可讀寫的。
3. 訪問控制
Windows操作系統使用訪問控制列表(Access Control List, ACL)來管理用戶和進程對資源的訪問權限。
安全標識符(SID)
每個用戶、組和計算機都有一個唯一的安全標識符(SID),用于標識其身份。
訪問控制列表(ACL)
每個對象(如文件、目錄、注冊表項等)都有一個訪問控制列表,包含一組訪問控制項(ACE),定義了不同用戶和組對該對象的訪問權限。
4. 特權管理
Windows通過特權管理控制進程和用戶可以執行的操作。某些特權僅授予特定用戶組(如管理員),例如安裝驅動程序、訪問系統日志等。
安全策略
Windows提供了一系列安全策略,可以配置用戶帳戶控制(UAC)、密碼策略、審計策略等,增強系統的安全性。
5. 中斷和異常處理
Windows操作系統使用中斷和異常處理機制來管理硬件中斷、軟件中斷和處理器異常。
中斷處理
中斷處理程序(Interrupt Service Routine, ISR)負責處理硬件中斷,確保外部設備能夠及時響應。
異常處理
異常處理程序處理處理器異常,如除零錯誤、缺頁錯誤等,確保系統能夠在異常發生時采取適當的恢復措施。
6. 多任務處理
Windows通過多任務處理機制,允許多個進程和線程同時運行。操作系統使用調度程序管理進程和線程的執行,確保系統資源被公平分配。
線程調度
Windows使用優先級調度算法,根據線程的優先級和狀態(如就緒、等待、運行等)分配CPU時間片。
進程隔離
每個進程有獨立的虛擬地址空間和資源,防止一個進程影響另一個進程的運行,提高系統穩定性。
7. 安全特性
Windows提供了一系列安全特性,如數據執行保護(DEP)、地址空間布局隨機化(ASLR)等,增強系統的防護能力。
數據執行保護(DEP)
DEP防止代碼在數據段執行,通過硬件和軟件的結合,標記某些內存區域為不可執行。
地址空間布局隨機化(ASLR)
ASLR隨機化進程的內存地址空間,增加攻擊者利用漏洞的難度。