Windows虛擬地址空間分配問題

一般情況下,32位的機器上,地址空間從0x000000~0xFFFFFFFF,總大小爲4GB。一般而言,虛擬地址空間分爲兩個區,即爲用戶空間和系統空間。虛擬地址低空間,即從0x00000000~0X7FFFFFFF的2GB爲用戶空間,而高地址0x80000000~0xFFFFFFFF被分配給了系統內核。高地址空間2GB內存是提供系統內核使用的。在這高地址空間中安排了操作系統的系統代碼和數據,用戶一般無法訪問到這個地址空間。用戶地址空間使用的是低地址2GB內存,其中包含了用戶應用程序、調用的動態鏈接庫、用戶棧、用戶可使用的空閒內存空間等。從整體上看,Windows虛擬地址空間分配如下表:

虛擬內存地址範圍 功能描述
0x00000000~0x0000FFFF 這段內存是空指針區,同時肯定是不能訪問的
0x00010000~0x7FFFFFFF 這段提供給進程使用,包括所有的數據,靜態或動態加載的exe和dll模塊,以及內存映射文件
0x7FFF0000~0x7FFFFFFF 此64KB的區域是禁止訪問的,因爲緊挨着它就是內核地址,如果中間密友這個阻攔的話,你可以用一個很長的數據信息進行覆蓋操作,從而破壞內核的完整性和正確性—-這是不允許的
0x80000000~0xFFFFFFFF 內核區域,用於線程調度、內存管理、文件系統支持、網絡支持、所有設備驅動的代碼全部在這個分區加載。駐留在這個分區中的一切均可被所有進程共享

用戶態低2GB空間分配表

虛擬內存地址範圍 功能
0x0~0xFFFF 拒絕訪問區域,用於幫助程序員避免引用錯誤的指針,試圖訪問這個區域地址的操作將會導致訪問越權
0x10000~0x7EFDEFFF 專用進程地址空間
0x7EFDF000~0x7FFDFFFF 進程環境快(PEB)
0x7FFE0000~0x7FFE0FFF 共享的用戶數據頁,這個只讀方式的頁面被映射到系統空間中包含系統時間、時鐘計數和版本號信息的一個頁面。這個頁面的存在使數據在用戶態下可以直接讀取而不必請求核心態的轉換。
0x7FFE1000~0x7FFEFFFF 拒絕訪問區域(共享用戶數據頁面以後剩餘的64KB)
0x7FFF0000~0x7FFFFFFF 拒絕訪問區域,用於防止線程跨越用戶/系統空間邊界傳送緩存區,在變量MmUserProbeAddress中包含此頁的起始地址。

核心態高2GB空間分配表

虛擬內存地址範圍 功能說明
0x80000000~0xC0000000 內核執行體,HAL和硬件驅動程序
0xC0000000~0xC0800000 進程頁表和超空間
0xC0800000~0xCFFBE000 系統高速緩存、分頁緩衝池、非分頁緩衝池
0xFFBE0000~0xFFC00000 崩潰轉儲驅動程序區域
0xFFC00000~0xFFFFFFFF 保留給HAL使用

alphaOS
alphaOS is Lightweight, portable and flexible operating system

Description of alphaOS

alphaOS is a simple and minimalistic Linux distribution for the x86-64 architecture, built using Linux Live Kit set of scripts developed by Tomáš Matějíček, the developer of the popular Slax Linux distribution. But, unlike Slax, alphaOS is based on Arch Linux and uses pacman as the default package manager. This operating system features highly configurable and lightweight Openbox window manager. Modular by design, alphaOS makes it easy to add desired functionality.


Intel x86架構的cpu指令一共有0~4四個特權級,0級最高,3級最低,硬件上在執行每條指令時都會對指令所具有的特權級做相應的檢查。硬件已經提供了一套特權級使用的相關機制,軟件自然要好好利用,這屬於操作系統要做的事情,對於UNIX/LINUX來說,只使用了0級特權級別和3級特權級。也就是說在UNIX/LINUX系統中,一條工作在0級特權級的指令具有了CPU能提供的最高權力,而一條工作在3級特權的指令具有CPU提供的最低或者說最基本權力。

在Windows操作系統下面,操作系統運行於0級,而應用程序運行於3級。這是因爲Alpha計算機只能夠支持兩個優先級的指令,windows爲了能夠便於將編寫的應用程序移植到Alpha計算機上面運行。故,Windows操作系統不使用1級和2級這兩個優先級。


這裏寫圖片描述


用戶態到和核心態的轉換是由什麼完成的?


計算機通過硬件中斷機制完成由用戶態到核心態的轉換。


REFERENCE
1. Linux 內核態與用戶態
2. linux用戶態和內核態理解
3. 內核態(Kernel Mode)與用戶態(User Mode)
4. 用戶態到和核心態的轉換是由什麼完成的?
5. Linux內核態和用戶態的區別
6. Ring3/Ring0的四種通信方式
7. Windows進程間各種通信方式淺談
8. Windows XP 進程分類(必要,需要,不要)windows xp 必要進程
9. alphaOS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章