## 7.7 任務尋址空間(Task Address Space)
TSS中的LDT選擇子和PDBR字段給了軟件系統設計者一個可伸縮性的段頁式映射特性。通過為每一個任務一定的段頁映射選擇,任務可以共享地址空間,可以有不同與其它任務的很大的地址空間,或者以兩種極端來共享。
每個任務有不同的地址空間的特性是80386的一個重要的保護特性。如果模塊間沒有共享地址空間的話,在一個任務中的模塊不可以干涉另一個任務中的模塊。80386的這種可伸縮性的內存管理機制允許系統設計者把要想協作的在不同任務中的模塊設計成部分的地址空間共享。
### 7.7.1 任務線性——物理地址空間映射(Task Linear-to-Physical Space Mapping)
一般來說,安排任務的線性——物理地址空間的映射可以分為以下兩類:
1、 一個線性——物理地址空間被所有任務共享。
當分頁沒有啟用時,這是唯一的一種選擇。沒有啟用分頁的話,所有線性地址空間映射到相同的物理地址空是上。
當啟用分頁時,這種線性地址——物理地址的映射方式導致了所有任務使用一個頁目錄。如果操作系統支持頁級虛擬內存的話,這種線性空間可能超過了物理地址空間。
2、 線性——物理地址空間部分重疊映射。
這種實現的話,要為每一個任務使用不同的一張頁目錄。因為PDBR(page directory base register)在每次任務切換時被加載,每個任務可以有不同的頁目錄。
在這樣的技術里,不同任務的線性空間可能被映射到不同的物理地址空間上。如果頁目錄表項指向不同的頁表,頁表項又指向不同的物理頁面的話,任務就不共享任何物理地址空間。
在實際中,所有任務的線性空間中的一部分必須要映射到相同的物理地址空間上去。任務狀態段必須要位于一個公共的空間上,以便在處理器做任務切換,更新和讀取TSS信息的時地址映射都相同。被GDT映射的線性空間也應該被映射到公共的物理地址空間上。否則,GDT的目的未做定義。圖7-6顯示了以共享頁表的形式如何將線性地址空間的兩個任務映射到相同的物理地址空間上。
### 7.7.2 任務邏輯地址空間(Task Logical Address Space)
如果只是通過線性——物理地址空間的映射將不能達到任務間數據的共享。為了共享數據,任務必須還要有一個公共的邏輯——線性地址空間的映射。也就是說,他們必須要有訪問指向共享線性地址空間的描述符的權限。有3種辦法可以建立公共的邏輯地址——物理地址空間的映射:
1、? 通過GDT。所有任務都可以通過GDT訪問描述符。如果這些描述符指向了一個映射到公共物理空間的線性地址空間的話,所有任務都共享了數據和指令。
2、? 通過LDT。如果兩個任務的TSS中的LDT選擇子部分指向了相同的LDT。這些LDT又包含了一些指向相同物理空間的線性空間的描述符。這種共享的方法比在GDT中共享要更有選擇性一點,這種共享可以只局限在幾個任務中。其它一些有著不同LDT的任務不可以訪問這些公共區域。
3、? 通過在LDT中使用別名(aliases)技術。不同的LDT可以包含一些指向相同線性空間的描述符。如果這些線性空間被映射到相同的物理地址空間上去的話,這些描述符就允許任務間共享公共的地址空間。這些描述符被稱作“別名”。這種共享機制比前兩種更好。在LDT中的其它的描述符也以指向不同的線性空間中。

- 第一章 80386介紹
- 1.1 該手冊的組織結構
- 1.2 其他文獻
- 第二章 編程基本模型
- 2.1 存儲器組織和段
- 2.2 數據類型
- 2.3 寄存器
- 2.4 指令格式
- 2.5 操作數選擇
- 2.6 中斷和異常
- 第4章 系統寄存器
- 4.1 系統寄存器 (System Registers)
- 4.2 系統指令 (System Instructions)
- 第五章 內存管理
- 5.1 分段地址轉換(Segment Translation)
- 5.2 分頁地址轉換(Page Translation)
- 5.3 混合分段和分頁地址轉換(Combining Segment and Page Translation)
- 第六章 內存管理
- 6.1 為什么要保護(Why Protection?)
- 6.2 80386保護機制概述(Overview of 80386 Protection Mechnaisms)
- 6.3 段級保護(Segment-Level Protection)
- 6.4 頁級保護(Page-Level Protection)
- 6.5 混合分頁和分段保護(Combining Page and Segment Protection)
- 第7章 多任務(Multitasking)
- 8.1 I/O 尋址(I/O Addressing)
- 7.1 任務狀態段(Task State Segment)
- 7.3 任務寄存器(Task Register)
- 7.4 任務門描述符(Task Gate Descriptor)
- 7.5 任務切換(Task Switching)
- 7.6 任務鏈(Task Linking)
- 7.7 任務尋址空間(Task Address Space)
- 第8章 輸入 輸出
- 8.2 I/O 指令(I/O Instructions)
- 8.3 保護和I/O(Protection and I/O)
- 第9章 異常和中斷(Exceptions and Interrupts)
- 9.1 識別中斷(Identifying Interrupts)
- 9.2 允許和禁止中斷(Enabling and Disabling Interrupts)
- 9.3 同時發生的中斷和異常的優先級(Priority Among Simultaneous Interrupts and Exceptions)
- 9.4 中斷描述符表(Interrupt Descriptor Table)
- 9.5 IDT 描述符(IDT Descriptors)
- 9.6 中斷任務和中斷子程序(Interrupt Tasks and Interrupt Procedures)
- 9.7 出錯碼(Error Code)
- 9.8 異常條件(Exception Conditions)
- 9.9 異常總結(Exception Summary)
- 9.10 出錯碼總結(Error Code Summary)
- 第10章 初始化(Initialization)
- 10.1 復位后處理器狀態(Processor State After Reset)
- 10.2 實模式初始化(Software Initialization for Real-Address Mode)
- 10.3 切換到保護模式(Switching to Protected Mode)
- 10.4 保護模式初始化(Software Initialization for Protected Mode)
- 10.5 初始化示例
- 10.6 TLB測試
- 第十四章 80386實地址模式
- 14.1 物理地址構成
- 14.2 寄存器和指令
- 14.3 中斷和異常處理
- 14.4 進入和離開實地址模式
- 14.6 實地址模式異常
- 14.7 與8086的不同
- 14.8 與80286實地址模式的不同