虚拟内存和页表

1,什么是虚拟内存?

虚拟内存本质上并不是一块占据相应物理内存空间的内存,而是一个人为规定的抽象概念。对于虚拟内存而言, 其中只标注了一个区域的起始地址和结束地址。本质上讲,一个进程在运行的时候,其所拥有的资源一定是保存在物理内存空间中的,但是当这个进程需要读取数据或资源时,却不是直接从物理内存中读取的,而是通过虚拟地址空间,借助页表,按照一定的映射规则,帮助进程按照虚拟地址空间中的地址找到物理内存中的地址。

2,为什么要有虚拟内存和页表?

(1)加强不同进程间的独立性:当一个父进程创建出一个子进程的时候,在刚刚创建完毕时,父子进程的虚拟内存和内部变量在物理内存中存储的位置也是相同的。此时如果进程直接和物理地址空间产生联系,那当子进程想要对其数据做出一定改动时,那子进程做出的修改就会影响到父进程。但当有了虚拟内存和页表之后,当子进程对数据做出修改时,被修改的这个变量就可以通过页表映射到物理内存中的其它位置,不会影响原先的那个变量,亦即不会影响父进程。

 

(2)保障物理内存和操作系统的安全:虚拟内存和页表处在进程和物理内存的中间位置,充当二者之间的屏障。进程对物理内存、操作系统所进行的任何操作、请求都要经过虚拟内存和页表,而虚拟内存和页表在执行任务的同时,也会对于进程请求的合法性进行判断。(好比人们去银行取钱,客户可以提出取钱的要求,但只有银行工作人员才可以执行取钱的操作)

(3)实现标准化:对于任何一个进程而言,其所拥有的虚拟内存和页表的结构都是相同的,这就让用户和操作系统都可以以同样的方式去看待和处理每一个进程。

(4)便于内存的管理和调度:由于每一个进程所拥有的虚拟内存结构都是相同的,所以,每一个进程都认为自己拥有全部的内存空间。这里的情况有点类似储户和银行,一个储户理论上拥有自己账户上全部的钱,但是一般用户不会把自己全部的钱同时取出来。而对于银行而言,就可以对用户的钱统一管理,灵活调配,不需要全部的资源就可以满足每一个用户的要求。进程和虚拟内存之间的关系也与之类似,进程认为自己有4G的内存,但不会全部使用,操作系统可以在进程提出要求的时候,才向进程提供资源。这样,虚拟内存的存在实现了进程调度和内存管理之间的解耦,二者之间通过页表来耦合。

3,虚拟内存空间分为哪些部分?

虚拟内存空间一共有4G,分为两大部分,1G的内核空间和3G的用户空间。用户空间面向进程用户态的操作,内核空间面向进程内核态的操作。其中,3G用户空间和物理内存中有一个用户级页表,1G内核空间和物理内存之间有一个内核级页表。对于不同的进程而言,3G用户空间中的内容不同的进程是不同的,但是在1G内核空间中,由于均面向的操作系统,所以每一个进程1G内核空间中的内容都是相同的。

4,虚拟地址如何转化为物理地址?

通过页表的映射。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值