进程虚拟地址空间

进程虚拟地址空间

为什么操作系统不直接让进程访问一个物理地址,而是访问一个虚拟地址

  • 程序在编译时,会自动地给指令和数据进行地址编号,但是如果地址不连续,就会程序运行不起来,编译器的地址管理比较麻烦(无法动态的获知物理空间的使用情况,也就无法为数据进行编号)
  • 进程直接访问物理地址,如果此时有一个野指针,那么在进行操作野指针的时候可能会改变其他空间的数据,造成不安全的事件发生(无法进行内存访问控制)
  • 程序运行空间通常需要一块连续的空间,空间利用率低,通过虚拟地址空间映射到物理内存上进行数据存储,可以实现数据在物理空间上离散式存储,提高内存的利用率,并且每个进程都有一份属于自己的连续空间使用

如何通过虚拟地址空间找到物理地址

操作系统中内存的管理方式:

  • 分段式

在这里插入图片描述
采用分段式管理内存,将虚拟地址的组成分为段号+段内偏移量,通过查询段表找到对应的段号对应的物理内存地址,然后加上虚拟地址对应的段内偏移量找到实际的内存物理空间地址
分段式的优点:对编译器的地址管理比较友好,但是没有解决数据连续存储率低的问题

  • 分页式
    在这里插入图片描述
    因为通常物理块比较小,并且不要求同一个进程的多个数据必须在同一个块内,因此分页式实现了数据在物理内存中的离散式存储,提高了内存利用率
    并且页表会在进行访问的时候进行内存访问控制

  • 段页式
    在这里插入图片描述
    在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值