Windows 32 匯編筆記(一):基礎知識

一、80x86 處理器的工作模式

1.1 實模式

實模式概述

實模式(Real Mode)是80x86處理器最早支持的工作模式,也是最基礎的工作模式。實模式主要用于早期的MS-DOS操作系統和其他簡單的操作環境。在實模式下,處理器能夠直接訪問1MB的物理內存空間。這個模式與8086處理器的工作方式完全兼容,因此得名“實模式”。

實模式的特點

  1. 地址空間限制

    • 在實模式下,處理器只能訪問1MB的內存空間(從0x00000到0xFFFFF)。
    • 內存空間的限制源于20位地址總線。
  2. 段地址和偏移地址

    • 實模式使用段:偏移(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
  3. 無內存保護

    • 實模式沒有內存保護機制,程序可以任意訪問整個1MB的內存空間,包括操作系統區域和其他程序的區域。
    • 這使得程序之間可能會互相干擾,容易導致系統崩潰。
  4. 直接硬件訪問

    • 實模式允許直接訪問硬件設備和I/O端口。
    • 在實模式下,程序可以直接使用I/O指令(如IN和OUT)與硬件設備進行交互。
  5. 中斷和處理器初始化

    • 實模式支持硬件中斷和軟件中斷,使用中斷向量表(Interrupt Vector Table, IVT)來管理。
    • 中斷向量表存儲在內存的最低1KB區域(從0x00000到0x003FF)。
    • 處理器加電或復位后,會自動進入實模式,并從地址0xFFFF0開始執行代碼。
  6. 可執行代碼的限制

    • 實模式下可執行代碼段的大小受到限制,通常一個代碼段最大為64KB(0x0000到0xFFFF)。

實模式的內存布局

在實模式下,內存布局通常包括以下幾個部分:

  1. BIOS區

    • 高端內存(從0xF0000到0xFFFFF)通常用于存放BIOS代碼和數據。
    • 加電或復位時,處理器從0xFFFF0處開始執行BIOS代碼。
  2. 中斷向量表

    • 內存的最低1KB區域(從0x00000到0x003FF)存放中斷向量表。
    • 每個中斷向量占用4個字節(2字節段地址和2字節偏移地址)。
  3. 操作系統和應用程序

    • 剩余的內存區域用于存放操作系統代碼、應用程序代碼和數據。

1.2 保護模式?

概述

保護模式(Protected Mode)是80x86處理器引入的一種高級工作模式,與實模式相比,它提供了更強大的內存管理和保護功能。保護模式最早在80286處理器上引入,并在80386及以后的處理器上得到了進一步擴展和增強。

保護模式的特點

  1. 擴展的內存地址空間

    • 保護模式支持24位或32位地址總線,能夠訪問4GB的物理內存空間(在80386及以后)。
    • 采用段選擇符和段描述符來進行內存管理,允許更復雜的內存布局和管理。
  2. 內存保護

    • 通過段描述符和頁表,保護模式可以實現內存保護,防止程序非法訪問其他程序或操作系統的內存。
    • 支持不同特權級別的代碼和數據段(0到3級),用于實現用戶模式和內核模式的隔離。
  3. 分頁機制

    • 支持分頁機制,通過頁表將虛擬地址映射到物理地址,進一步增強內存管理能力。
    • 頁的大小通常為4KB,也支持大頁(如4MB)。
  4. 硬件支持的多任務

    • 提供硬件支持的多任務切換,包括任務狀態段(Task State Segment, TSS)和任務寄存器(Task Register)。
    • 支持任務門(Task Gate)用于任務間的切換和保護。
  5. 增強的中斷和異常處理

    • 保護模式下使用中斷描述符表(Interrupt Descriptor Table, IDT)管理中斷和異常處理。
    • IDT支持門描述符(Gate Descriptor),包括中斷門、陷阱門和任務門。
  6. 虛擬內存

    • 支持虛擬內存,通過分頁機制實現虛擬地址空間,使程序可以使用比實際物理內存更大的地址空間。

保護模式的內存管理

  1. 段選擇符和段描述符

    • 每個段選擇符指向一個段描述符,段描述符包含段基址、段限長和段屬性(如權限和類型)。
    • 段選擇符和段描述符由全局描述符表(Global Descriptor Table, GDT)和局部描述符表(Local Descriptor Table, LDT)管理。
  2. 分頁機制

    • 分頁機制將虛擬地址分為頁目錄(Page Directory)、頁表(Page Table)和頁框(Page Frame)。
    • 通過頁目錄和頁表,將虛擬地址映射到物理地址,實現內存保護和管理。

保護模式的應用

保護模式廣泛應用于現代操作系統,如Windows、Linux、Unix等,它們利用保護模式的特性實現了多任務、多用戶和內存保護等高級功能。通過保護模式,操作系統可以有效地管理硬件資源,提供穩定、安全的運行環境。

保護模式是現代操作系統和應用程序的基礎,充分利用了80x86處理器的高級特性,提高了系統的穩定性和安全性。

1.3 虛擬 8086 模式

虛擬 8086 模式概述

虛擬 8086 模式(Virtual 8086 Mode)是80x86處理器在保護模式下提供的一種特殊模式,允許處理器運行像在實模式下執行的8086程序。該模式主要用于向后兼容,使舊版的DOS程序可以在現代操作系統(如Windows和Linux)上運行,而不需要離開保護模式。

虛擬 8086 模式的特點

  1. 實模式兼容性

    • 虛擬 8086 模式允許處理器模擬實模式下的運行環境,支持8086指令集和地址空間。
    • 處理器可以在保護模式下執行8086程序,同時仍然保留保護模式的特性和優勢。
  2. 分頁和保護機制

    • 虛擬 8086 模式下,處理器依然可以使用保護模式的分頁機制,實現虛擬內存和內存保護。
    • 通過頁表,可以將虛擬 8086 模式下的地址空間映射到物理內存,提供內存隔離和保護。
  3. 中斷和異常處理

    • 虛擬 8086 模式支持中斷和異常處理,可以通過保護模式的中斷描述符表(IDT)來管理。
    • 中斷和異常可以由虛擬 8086 監視器(通常是操作系統內核)處理,確保系統的穩定性和安全性。
  4. 硬件虛擬化支持

    • 一些現代處理器提供了硬件支持的虛擬化技術,可以更高效地實現虛擬 8086 模式。
    • 例如,Intel的VT-x和AMD的AMD-V技術,可以提供硬件加速的虛擬化支持,提升性能。

虛擬 8086 模式的內存管理

  1. 段:偏移尋址

    • 虛擬 8086 模式下,內存尋址方式與實模式相同,采用段:偏移(segment)方式。
    • 段地址和偏移地址共同組成20位的物理地址,最多可以訪問1MB的內存空間。
  2. 分頁機制

    • 虛擬 8086 模式支持分頁機制,可以將20位的實模式地址映射到保護模式下的虛擬地址空間。
    • 通過頁表,可以實現內存保護和隔離,防止虛擬 8086 模式下的程序非法訪問其他內存區域。

虛擬 8086 模式的應用

  1. 運行舊版DOS程序

    • 虛擬 8086 模式主要用于運行舊版的DOS程序和應用,提供向后兼容性。
    • 在現代操作系統中,通過虛擬 8086 模式,可以運行一些必須在實模式下執行的老程序。
  2. 虛擬機和仿真器

    • 一些虛擬機和仿真器利用虛擬 8086 模式來實現對老操作系統和軟件的支持。
    • 例如,DOSBox等仿真器通過虛擬 8086 模式模擬DOS環境,使用戶可以運行經典的DOS游戲和應用。

虛擬 8086 模式的限制

  1. 內存地址空間

    • 虛擬 8086 模式下,程序只能訪問1MB的內存地址空間,受到實模式的限制。
  2. 性能開銷

    • 虛擬 8086 模式的實現需要保護模式的支持,可能帶來一定的性能開銷。
    • 中斷和異常處理需要虛擬 8086 監視器(操作系統內核)的介入,增加了處理復雜性。
  3. 硬件限制

    • 并非所有硬件都完全支持虛擬 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內存空間的布局大致如下:

  1. 中斷向量表(IVT):0x00000 - 0x003FF

    • 占據1KB(256個向量,每個向量4字節)。
    • 存放中斷服務程序的入口地址和相關信息。
  2. BIOS數據區(BDA):0x00400 - 0x004FF

    • 大約256字節。
    • 存放系統和硬件設備的參數,如硬盤、串口、并口等的信息。
  3. 傳統內存(常規內存):0x00500 - 0x9FFFF

    • 640KB,主要用于DOS操作系統、DOS應用程序和常駐內存程序(TSR)。
    • 可用作程序代碼、數據、堆棧等。
  4. 顯示緩沖區:0xA0000 - 0xBFFFF

    • 顯示適配器使用的內存區域。
    • 0xA0000 - 0xAFFFF:64KB,通常用于EGA/VGA顯卡的圖形模式。
    • 0xB0000 - 0xB7FFF:32KB,通常用于單色顯示適配器(MDA)。
    • 0xB8000 - 0xBFFFF:32KB,通常用于彩色文本顯示(CGA、EGA、VGA文本模式)。
  5. 擴展BIOS數據區(EBDA):0xC0000 - 0xC7FFF

    • 大約32KB,存放一些擴展BIOS數據和適配器BIOS代碼。
  6. BIOS擴展區:0xC8000 - 0xEFFFF

    • 主要用于擴展卡(如網絡適配器、SCSI控制器等)的BIOS和驅動程序。
  7. 系統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。

分頁機制的地址轉換如下:

  1. 線性地址被分成三個部分:目錄、表和頁內偏移。
  2. 目錄部分索引頁目錄,找到相應的PDE。
  3. 表部分索引頁表,找到相應的PTE。
  4. 頁內偏移加到頁幀基地址,得到物理地址。
物理地址 = 頁幀基址 + 頁內偏移

分頁機制示意圖:?

+----------------+----------------+----------------+
| 頁目錄(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. 中斷和異常的分類

中斷和異常可以分為以下幾類:

  1. 硬件中斷(Hardware Interrupts):由外部設備發出,如鍵盤、鼠標、硬盤等。
  2. 軟件中斷(Software Interrupts):由軟件通過 INT 指令觸發。
  3. 異常(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處理器執行以下步驟:

  1. 保存上下文:保存當前的CS(代碼段寄存器)、EIP(指令指針寄存器)和EFLAGS(標志寄存器)到堆棧。
  2. 查找IDT:根據中斷或異常號,從IDT中找到相應的描述符。
  3. 檢查權限:檢查當前特權級(CPL)和目標特權級(DPL),確保合法的權限轉換。
  4. 跳轉到處理程序:加載新的CS和EIP,跳轉到中斷或異常處理程序。
  5. 處理中斷或異常:執行處理程序代碼。
  6. 恢復上下文:通過 IRET 指令恢復CS、EIP和EFLAGS,返回中斷或異常發生前的狀態。

5. 異常類型

80386處理器支持多種異常,每種異常有不同的錯誤碼和處理方式:

  1. 故障(Faults):可恢復的異常,發生后處理程序返回時,重新執行引發異常的指令。
  2. 陷阱(Traps):調試或跟蹤用的異常,發生后處理程序返回時,繼續執行下一條指令。
  3. 終止(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)查找段描述符,進行以下檢查:

  1. 基地址和界限檢查:確保訪問地址在段的范圍內。
  2. 權限檢查:確保訪問權限符合描述符中的類型和特權級。

2. 分頁保護

分頁機制進一步細化了內存管理,每個頁面都有自己的訪問權限。分頁保護機制通過頁目錄和頁表實現。

頁目錄和頁表

  • 頁目錄(Page Directory):包含頁目錄項(PDE),指向頁表。
  • 頁表(Page Table):包含頁表項(PTE),指向實際的物理內存頁。

每個頁表項包含以下信息:

  • 頁面基地址:物理內存頁的起始地址。
  • 存在位(P):頁面是否在內存中。
  • 讀/寫位(R/W):頁面是否可寫。
  • 用戶/超級用戶位(U/S):頁面的訪問權限。

分頁保護的實現

當訪問內存時,處理器進行以下檢查:

  1. 頁面存在檢查:檢查頁面是否在內存中,如果不在,則觸發頁面錯誤(Page Fault)。
  2. 讀/寫檢查:檢查頁面是否可寫,如果嘗試寫不可寫的頁面,則觸發保護錯誤(Protection Fault)。
  3. 用戶/超級用戶檢查:檢查訪問權限,確保用戶模式代碼不能訪問內核模式頁面。

3. 特權級別

80386處理器支持4個特權級別(Privilege Levels),從0到3,級別越低特權越高。

  • 特權級0(Ring 0):最高特權級,通常用于操作系統內核。
  • 特權級1(Ring 1)特權級2(Ring 2):中間特權級,較少使用。
  • 特權級3(Ring 3):最低特權級,通常用于用戶模式應用程序。

特權級別的實現

特權級別通過以下機制實現:

  1. 代碼段特權級別(CPL):當前正在執行的代碼的特權級別。
  2. 數據段特權級別(DPL):數據段的特權級別,決定哪些CPL可以訪問該段。
  3. 請求特權級別(RPL):段選擇子的特權級別,表示請求訪問的權限。

當執行訪問操作時,處理器檢查CPL、DPL和RPL,確保符合特權級別規則。如果不符合,則觸發一般保護錯誤(General Protection Fault)。

4. 系統段和門描述符

80386處理器支持系統段和門描述符,用于實現任務切換和中斷處理。

系統段

  • 任務狀態段(TSS):包含任務的上下文信息,用于任務切換。
  • 局部描述符表(LDT):包含任務專用的段描述符。

門描述符

  • 中斷門(Interrupt Gate):用于中斷處理,跳轉到中斷處理程序。
  • 陷阱門(Trap Gate):用于異常處理,不屏蔽中斷。
  • 任務門(Task Gate):用于任務切換,通過TSS切換任務。

5. 任務切換

80386處理器支持硬件任務切換,通過任務狀態段(TSS)實現。任務切換可以由中斷、異常或任務門觸發。

任務狀態段(TSS)

TSS包含任務的寄存器狀態、段寄存器、堆棧指針和任務鏈接。任務切換時,處理器保存當前任務的狀態到TSS,并加載新任務的狀態。

任務切換的過程

  1. 保存當前任務狀態:保存當前任務的寄存器和段寄存器到TSS。
  2. 加載新任務狀態:從新任務的TSS加載寄存器和段寄存器。
  3. 更新任務寄存器(TR):指向新任務的TSS。

6. 中斷和異常處理

中斷和異常處理是80386處理器保護機制的重要部分。中斷和異常通過中斷描述符表(IDT)管理,處理時進行權限檢查和上下文切換。

中斷和異常的處理過程

  1. 保存上下文:保存當前CS、EIP和EFLAGS到堆棧。
  2. 查找IDT:根據中斷或異常號,從IDT找到相應的描述符。
  3. 權限檢查:檢查CPL和DPL,確保合法權限轉換。
  4. 跳轉到處理程序:加載新的CS和EIP,執行處理程序。
  5. 恢復上下文:通過 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隨機化進程的內存地址空間,增加攻擊者利用漏洞的難度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43830.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43830.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43830.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 神器:wxauto 庫——解鎖微信自動化的無限可能

&#x1f4dd;個人主頁&#x1f339;&#xff1a;誓則盟約 ?收錄專欄?&#xff1a;機器學習 &#x1f921;往期回顧&#x1f921;&#xff1a;“探索機器學習的多面世界&#xff1a;從理論到應用與未來展望” &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f…

mysql高并發設計

mysql高并發設計 一、部署方案 https://blog.csdn.net/weixin_37519752/article/details/138728036 方案1&#xff1a;雙主 1、優點 寫入擴展性&#xff1a;兩個節點都可以處理寫入操作&#xff0c;提高了寫入操作的擴展性。 高可用性&#xff1a;在任一節點故障時&#xff…

數據結構復習計劃之復雜度分析(時間、空間)

第二節&#xff1a;算法 時間復雜度和空間復雜度 算法(Algorithm)&#xff1a;是對特定問題求解方法(步驟)的一種描述&#xff0c;是指令的有限序列&#xff0c;其中每一條指令表示一個或多個操作。 算法可以有三種表示形式&#xff1a; 偽代碼 自然語言 流程圖 算法的五…

貓不吃東西還嘔吐是什么原因?可以預防貓咪嘔吐的主食凍干推薦

貓咪突然食欲不振&#xff0c;還出現了嘔吐的癥狀&#xff0c;這究竟是為什么呢&#xff1f;結合我多年養貓的經驗&#xff0c;讓我們一起分析一下可能的原因。 一、 貓不吃東西還嘔吐是什么原因 &#xff08;1&#xff09;首先、排除貓瘟 如果你的貓咪一直家養&#xff0c;…

【Android】基于 LocationManager 原生實現定位打卡

目錄 前言一、實現效果二、定位原理三、具體實現1. 獲取權限2. 頁面繪制3. 獲取經緯度4. 方法調用5. 坐標轉換6. 距離計算7. 完整代碼 前言 最近公司有個新需求&#xff0c;想要用定位進行考勤打卡&#xff0c;在距離打卡地一定范圍內才可以進行打卡。本文將借鑒 RxTool 的 Rx…

php快速入門

前言 php是一門腳本語言&#xff0c;可以訪問服務器&#xff0c;對數據庫增刪查改&#xff08;后臺/后端語言&#xff09; 后臺語言&#xff1a;php&#xff0c;java&#xff0c;c&#xff0c;c&#xff0c;python等等 注意&#xff1a;php是操作服務器&#xff0c;不能直接在…

QUdpSocket 的bind函數詳解

QUdpSocket 是 Qt 框架中用于處理 UDP 網絡通信的類。bind 函數是此類中的一個重要方法&#xff0c;它用于將 QUdpSocket 對象綁定到一個特定的端口上&#xff0c;以便在該端口上接收 UDP 數據包。 函數原型 在 Qt 中&#xff0c;bind 函數的原型通常如下所示&#xff1a; b…

微軟開源項目GraphRAG——基于知識圖譜的RAG簡介

前言 在大型語言模型&#xff08;LLM&#xff09;的前沿研究中&#xff0c;一個核心挑戰與機遇并存的領域是擴展它們的能力&#xff0c;以解決超出其訓練數據范疇的問題。這不僅要求模型在面對全新數據時仍能保持卓越表現&#xff0c;還意味著開辟了全新的數據分析可能性&…

JVM 堆內存分配過程

設置堆內存大小和 OOM Java 堆用于存儲 Java 對象實例&#xff0c;那么堆的大小在 JVM 啟動的時候就確定了&#xff0c;我們可以通過 -Xmx 和 -Xms 來設定 -Xms 用來表示堆的起始內存&#xff0c;等價于 -XX:InitialHeapSize-Xmx 用來表示堆的最大內存&#xff0c;等價于 -XX…

Hadoop-15-Hive 元數據管理與存儲 Metadata 內嵌模式 本地模式 遠程模式 集群規劃配置 啟動服務 3節點云服務器實測

章節內容 上一節我們完成了&#xff1a; Hive中數據導出&#xff1a;HDFSHQL操作上傳內容至Hive、增刪改查等操作 背景介紹 這里是三臺公網云服務器&#xff0c;每臺 2C4G&#xff0c;搭建一個Hadoop的學習環境&#xff0c;供我學習。 之前已經在 VM 虛擬機上搭建過一次&am…

簡單的基追蹤一維信號降噪方法(MATLAB 2018)

基追蹤法是基于冗余過完備字典下的一種信號稀疏表示方法。該方法具有可提高信號的稀疏性、實現閾值降噪和提高時頻分辨率等優點。基追蹤法采用表示系數的范數作為信號來度量稀疏性&#xff0c;通過最小化l型范數將信號稀疏表示問題定義為一類有約束的極值問題&#xff0c;進而轉…

c++ primer plus 第15章友,異常和其他 15.3.11 有關異常的注意事項

c primer plus 第15章友&#xff0c;異常和其他 15.3.11 有關異常的注意事項 15.3.11 有關異常的注意事項 文章目錄 c primer plus 第15章友&#xff0c;異常和其他 15.3.11 有關異常的注意事項15.3.11 有關異常的注意事項 15.3.11 有關異常的注意事項 從前面關于如何使用異常…

vue實現表單輸入框數字類型校驗功能

vue實現表單輸入框數字類型校驗功能 1. 樣式代碼 <el-form-item label"訂單總價"><el-input size"small" v-model"form.totalPrice" placeholder"請輸入訂單總價 正整數或者2位數小數" input"check(form.totalPric…

SpringSecurity中文文檔(Servlet Authorize HttpServletRequests)

Authorize HttpServletRequests SpringSecurity 允許您在請求級別對授權進行建模。例如&#xff0c;對于 Spring Security&#xff0c;可以說/admin 下的所有頁面都需要一個權限&#xff0c;而其他所有頁面只需要身份驗證。 默認情況下&#xff0c;SpringSecurity 要求對每個…

Umi.js 項目中使用 Web Worker

1.配置 Umi.js 在 Umi.js 中&#xff0c;需要通過配置來擴展 Webpack 的功能。在項目根目錄下修改 config/config.ts 文件&#xff1a; export default defineConfig({chainWebpack(config) {config.module.rule(worker).test(/\.worker\.ts$/).use(worker-loader).loader(wo…

C語言之指針的奧秘(二)

一、數組名的理解 int arr[10]{1,2,3,4,5,6,7,8,9,10}; int *p&arr[0]; 這里使用 &arr[0] 的?式拿到了數組第?個元素的地址&#xff0c;但是其實數組名本來就是地址&#xff0c;而且是數組首元素的地址。如下&#xff1a; 我們發現數組名和數組?元素的地址打印出…

重要文件放u盤還是硬盤?硬盤和u盤哪個適合長期存儲

在數字時代&#xff0c;我們每天都會處理大量的文件。其中&#xff0c;不乏一些對我們而言至關重要的文件&#xff0c;如家庭照片、工作文檔、財務記錄等。面對這些重要文件的存儲問題&#xff0c;我們通常會面臨&#xff1a;“重要文件放U盤還是硬盤”、“硬盤和U盤哪個適合長…

Vue2打包部署后動態修改后端接口地址的解決方法

文章目錄 前言一、背景二、解決方法1.在public文件夾下創建config文件夾&#xff0c;并創建config.js文件2.編寫config.js內容3.在index.html中加載config.js4.在封裝axios工具類的js中修改配置 總結 前言 本篇文章將介紹使用Vue2開發前后端分離項目時&#xff0c;前端打包部署…

系統架構師考點--系統安全

大家好。今天我來總結一下系統安全相關的考點&#xff0c;這類考點每年都會考到&#xff0c;一般是在上午場客觀題&#xff0c;占2-4分。 一、信息安全基礎知識 信息安全包括5個基本要素&#xff1a;機密性、完整性、可用性、可控性與可審查性 (1)機密性&#xff1a;確保信息…

Navicat導入sql文件

文章目錄 Navicat導入SQL文件&#xff0c;使用默認導入&#xff0c;不做任何修改報錯嘗試一修改運行時的選擇 嘗試二修改my.ini的配置文件 Navicat導入SQL文件&#xff0c;使用默認導入&#xff0c;不做任何修改報錯 嘗試一 修改運行時的選擇 取消勾選 ‘每個運行中運行多重查…