前言
在Linux中,新創建的進程都擁有獨立的虛擬地址空間。為深入多進程多線程的理解,了解虛擬地址空間分區十分有必要。
一、概念
- 虛擬地址空間分為4G空間,其中1G為內核區,3G為用戶區。
- 虛擬地址空間的地址從0開始,且該地址是虛擬的。但是通過CPU中的內存管理單元MMU(Memory Management Unit),可以將進程的虛擬地址空間中映射到磁盤上。
二、為什么不直接加載物理內存?
- 每個進程的地址相互不隔離,存在安全風險。若有些進程越界修改了其它進程的數據,那么就會導致某些功能實現錯誤。
- 效率低下。若物理內存不夠大,那么一般就會將不常用的進程拷貝到磁盤的交換分區中,而對于數據量較大的進程,這種拷貝時間長、效率低。
- 進程中的數據地址不確定。由于物理內存是動態變化的,我們無法確定內存現在的地址情況。
三、分區
虛擬地址空間的分區如下圖(借鑒愛編程的大丙)所示: