來自Intel 80386程序員參考手冊1986:
Figure 5-1. Address Translation Overview
15 0 31 0
LOGICAL ╔═══════════════╗ ╔══════════════════════════════╗
ADDRESS ║ SELECTOR ║ ║ OFFSET ║
╚═══════════╤═══╝ ╚═══╤══════════════════════════╝
v v
╔══════════════════════════════╗
║ SEGMENT TRANSLATION ║
╚══════════════╤═══════════════╝
╔══╧═╗ PAGING ENABLED
║PG ?╟────────────────────┐
╚══╤═╝ │
31 PAGING v DISABLED 0 │
LINEAR ╔═══════════╦═══════════╦═══════════╗ │
ADDRESS ║ DIR ║ PAGE ║ OFFSET ║ │
╚═══════════╩═════╤═════╩═══════════╝ │
v │
╔══════════════════════════════╗ │
║ PAGE TRANSLATION ║ │
╚══════════════╤═══════════════╝ │
│<─────────────────────┘
31 v 0
PHYSICAL ╔══════════════════════════════╗
ADDRESS ║ ║
╚══════════════════════════════╝
Figure 5-2. Segment Translation
15 0 31 0
LOGICAL ╔════════════════╗ ╔═════════════════════════════════════╗
ADDRESS ║ SELECTOR ║ ║ OFFSET ║
╚═══╤═════════╤══╝ ╚═══════════════════╤═════════════════╝
┌──────┘ v │
│ DESCRIPTOR TABLE │
│ ╔════════════╗ │
│ ║ ║ │
│ ║ ║ │
│ ║ ║ │
│ ║ ║ │
│ ╠════════════╣ │
│ ║ SEGMENT ║ BASE ╔═══╗ │
└─>║ DESCRIPTOR ╟──────────────>║ + ║<──────┘
╠════════════╣ ADDRESS ╚═╤═╝
║ ║ │
╚════════════╝ │
v
LINEAR ╔════════════╦═══════════╦══════════════╗
ADDRESS ║ DIR ║ PAGE ║ OFFSET ║
╚════════════╩═══════════╩══════════════╝
在Windows中,在大多數進程中DS = ES = SS,並且CS和DS的值在所有進程間共享。進程可能會改變它們的段寄存器,但它很少需要,所以大多數時候你會看到相同的一組CS和DS/ES/SS值。內核使用它自己的CS和DS。
如果你'知道如何使用段,寄存器和類似東西',那麼你不能'完全'鏈接'在一起',又不能'理解什麼數據棧額外的段是關於'?你有什麼問題?是不是每個進程都有不同的DS/SS/ES?「? –
我有很多困惑,因爲在真實模式下,您只需使用段+偏移量尋址模式來尋址內存,一旦進入受保護的內存,並隨分頁發生變化。用戶區中的每個進程是否有不同的DS/SS/ES?它在內核模式中改變還是相同? –