32位,內核進程的虛擬地址空間怎么划分的?


Linux操作系統采用虛擬內存管理技術,使得每個進程都有各自互不干涉的進程地址空間。32位linux下,該空間是塊大小為4G的線性虛擬空間,1G的內核地址空間,3G的用戶地址空間。
3G的用戶地址空間訪問最大3G的物理內存地址,1G的內核地址空間可訪問全部的物理內存地址。
那么內核進程的虛擬地址空間怎么划分的?這個進程應該沒有用戶地址空間吧?是4G都給內核地址空間了嗎?

14 个解决方案

#1


內核應該是線程而不是進程吧?

#2


make menuconfig中配置的。

#3


樓主的問題應該是在與虛擬空間和物理空間的具體區別。
1.虛擬空間:
   可以說虛擬空間是用來欺騙高性能MCU的,往往通過mmu來將虛擬空間轉化內存空間的。往往跑的了linux的都需要mmu。
2.物理空間:
  簡單來說就是控制MCU電路的。比方說你的處理器是32位,尋址空間是0~0xffffffff.你的內存的尋址空間是0x30000000~0x40000000(這里的內存是物理內存地址).其余的尋址空間是用來控制電路的,比方說各種寄存器。
  所以樓主的疑問應該是,用戶空間和內核空間都是在內存之內的,和內存頁表有關。

#4


又不是一下全分配,用的着的時候才分配。
沒有用戶地址空間,切換進程得耗費多少空間。


程序裝載運行時,通過連接器將程序的地址和內存空間分配好,存放到目標文件數據段中,虛擬空間管理器將地址內存信息保存到一張表中,mmu通過這張表找到真實的內存空間

#5


引用 4 樓 yuelengdihai 的回復:
又不是一下全分配,用的着的時候才分配。
沒有用戶地址空間,切換進程得耗費多少空間。


程序裝載運行時,通過連接器將程序的地址和內存空間分配好,存放到目標文件數據段中,虛擬空間管理器將地址內存信息保存到一張表中,mmu通過這張表找到真實的內存空間

您的第二句話是什么意思。我的理解是:一個用戶程序運行時,比如說需要系統調用,於是切換到內核態,由OS訪問該進程1G的的內核地址空間(實際上也是真實物理內存的地址)返回結果,然后切換回用戶態,然后用戶進程繼續訪問自己的3G用戶地址空間(實際上也是真實內存的一段區域)。不知道對嗎?
然后我的問題是:OS內核進程地址空間是不是沒有划分什么用戶態,內核態的地址空間。比如說:電源管理進程。(不知道有沒有這個進程,隨便說的),還有,比如說OS的桌面進程算是什么進程(用戶態進程嗎)。

#6


你的理解是對的

關於你的問題:
1,Linux中每個進程有兩個棧,分別用於用戶態和內核態的進程執行,一般都在用戶態下運行,當需要系統調用、異常、中斷時才會進入內核態。
2,進程執行時在物理內存中的實際地址,則由內核為其建立內存映射時臨時分配,具體地址取決於當時所分配的物理內存頁面,可能是連續的,也可能是不連續的空間
3,一般進程都是用戶態進程,桌面進程也屬於用戶態。只有在進程運行的時候才區分形態

#7


都是高手啊,學習了!!!!!!!!!!!

#8


引用 6 樓 yuelengdihai 的回復:
你的理解是對的

關於你的問題:
1,Linux中每個進程有兩個棧,分別用於用戶態和內核態的進程執行,一般都在用戶態下運行,當需要系統調用、異常、中斷時才會進入內核態。
2,進程執行時在物理內存中的實際地址,則由內核為其建立內存映射時臨時分配,具體地址取決於當時所分配的物理內存頁面,可能是連續的,也可能是不連續的空間
3,一般進程都是用戶態進程,桌面進程也屬於用戶態。只有在進程運行的時候才區分形態
謝謝你,呃還有最后一個問題:linux內核都是線程,沒有進程嗎?

#9


有線程怎么可能沒有進程呢,每個進程至少有一個線程
不過linux下線程和windows下有些不一樣  ,你自己查查吧

#10


32位操作系統,3G-4G為內核空間,0-3G為用戶態空間,內核只有線程,公用3-4G的虛擬地址空間,每個進程都有自己的0-3G空間,通過MMU的頁表控制,每個進程都有自己的頁表,所以對進程來說,自己獨有0-3G空間。

#11


引用 10 樓 dthxman 的回復:
32位操作系統,3G-4G為內核空間,0-3G為用戶態空間,內核只有線程,公用3-4G的虛擬地址空間,每個進程都有自己的0-3G空間,通過MMU的頁表控制,每個進程都有自己的頁表,所以對進程來說,自己獨有0-3G空間。
進程陷入內核運行在進程的3-4G虛擬空間是不是實際上是運行的內核線程,也就是線程共用的3-4G地址空間?分不清進程的3-4G空間和內核線程3-4G虛擬空間實際映射的物理地址是否一樣?謝謝解答哈。

#12


樓主可以看看這篇文章
http://www.cnblogs.com/clover-toeic/p/3754433.html

#13


每天努力學習,爭取早日正面回答問題

#14


引用 12 樓 r_Jimy 的回復:
樓主可以看看這篇文章
http://www.cnblogs.com/clover-toeic/p/3754433.html
謝謝,那個是主要講虛擬內存划分的。當OS在運行的時候比如沒有用戶進程,此時OS在干什么。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com