[Linux]程序地址空间,虚拟地址,内存管理方式

程序地址空间

虚拟地址空间

地址:通常所说的地址都是内存的地址,即内存单元的编号。
在进程中,程序访问的这些地址(变量地址等等)实际上是假地址将其称之为虚拟地址
我们所说的程序地址实际上叫做进程的虚拟地址空间(程序不占用内存,进程占用内存)

虚拟地址空间实际上是系统给进程所描述的一个假的地址空间,是一个mm_struct结构体

系统会为每个进程都描述一个虚拟地址
进程访问的都是虚拟地址,先将虚拟地址转换为物理地址然后再访问

页表映射

在这里插入图片描述

观察上图:现在有个16M大小的内存和三个占用内存大小分别为4M,8M,5M的程序,由于进程需要使用连续内存空间来运行所以,上面这个进程是无法运行的,但是通过页表映射以后就可以正常运行。

页表映射:给每个进程虚拟一个地址空间,让进程访问完整连续的地址,但是这些虚拟地址使用的时候是通过页表映射一块物理内存地址。页表映射实现了数据在物理内存上的离散式存储,让进程以为自己是在连续完整的内存中运行的,提高了内存的利用率。

内存管理方式

分段式内存管理:将地址空间分为多段(堆、栈、数据段、代码段…),便于编译器进行地址管理
分段式虚拟地址组成:段号+段内地址偏移量;在系统中有一个段表(段号、物理内存段起始地址)

分页式内存管理:将地址空间分为多个小块(页),提高内存利用率
分页式虚拟地址组成:页号+页内偏移(32位地址下,高20位是页号,低12位是页内偏移);在系统中有一个页表(页号,物理内存快起始地址,访问控制权限,缺页中断位…)

段页式内存管理: 将虚拟地址空间进行分段,在每段内进行分页式管理,集合了分段式和分页式的优点

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值