内存管理

虚拟内存、内核空间和用户空间

Linux简化了分段机制,使得虚拟地址与线性地址总是一致。在32位平台上,线性地址的大小位4GB,也即是虚拟空间的大小。
Linux内核将这4GB的空间分为两部分。
内核空间: 最高的1GB(0xC0000000–0xFFFFFFFF),供内核使用。
用户空间(地址空间): 较低的3GB(0x00000000–0xBFFFFFFF),供进程使用。
从具体进程的角度来看,每个进程可以拥有4GB的虚拟地址空间,因为每个进程可以通过系统调用进入内核,共享内核空间。
用户空间不是被进程共享的,而是被进程隔离的,每个进程有各自的私有用户空间。

在任一时刻,在一个CPU上只有一个进程在运行。所以对于CPU来讲,在这一时刻,整个系统只存在一个4GB的虚拟地址空间,这个虚拟地址空间是面向此进程的。当进程发生切换的时候,虚拟地址空间也随着切换。每个进程只有在被运行的时候,其虚拟地址空间才被CPU所知。对于CPU,虚拟地址空间的变化,随着进程切换而变化。

一个程序编译链接后形成的地址空间是虚拟地址空间,最终运行在物理内存中。而虚拟地址需要转化为物理地址,可以通过一个映射关系将虚拟地址空间映射到物理内存空间。这个映射关系由硬件体系结构规定的数据结构建立。这就是段和页表的角色。Linux主要通过页表来进行映射。

页表的建立可以让每个进程根据自己的需要把虚拟地址空间映射到物理地址空间。有了进程的页表,CPU就可以实现其虚拟地址到物理地址的转化,进程切换时,页表也相应的替换了。这样每个进程都有自己的虚拟地址空间而不会互相影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值