|
Windows CE 的 Memory Management, 在 6.0 時有了很大的改變, 但說到 Slot, 那麼 LZ 應該是在說 5.0 (含) 以前的架構
1. 0x00000000 ~ 0x7FFFFFFF, lower 2GB, 是 user space, 0x80000000 ~ 0xFFFFFFFF, upper 2GB 是 kernel space, user mode 的 instance 是不能直接存取 kernel space 的位址.
2. 分為 32 “槽”(slots) (1~32), 故同時只能執行 32 個 process, 每個 slot 佔 32MB. slot0 (0x00000000 ~ 0x02000000) 是一個特殊的 slot, 它是透過 MMU 的機制, 將目前正在執行的 Slot 的位址也映射到 slot0, 也就是 Scheduler 排程到正在執行的 Thread 所在的 process 所佔的 slot, 如此一來, 所有的 process 都會有一個錯覺, 認為它自己都是在 Slot0 執行.
3. 所有的 process 都可以存取 slot0 的空間 (0x00000000 ~ 0x02000000), 但若是存取到別的 slot 時, 若是沒有 permission, 則會產生 access violation, 不然就是要透過 MapPtrToProcess 將另一個 slot 的位址對映到目前的 slot, 或是 SetProcPermissions 來取得另一個 slot 的 permission.
這東西要說清楚, 大概要 1-2 小時, 可寫一個 Chapter 了.
Paul, Chao @ Techware |
|