Linux系统中为什么不使用物理地址而是使用虚拟地址

本文介绍了物理地址与虚拟地址的概念,解释了直接使用物理地址存在的问题,并详细阐述了虚拟地址如何通过分段映射和分页映射来提高内存使用的安全性、确定性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、物理地址

    物理地址实际上就是硬件设备上实际的存储设备

2、虚拟地址

    虚拟地址是Linux内核虚拟出来的地址,经由MMU内存管理单元映射到实际的物理地址。MMU是实际的管理内存的硬件。

3、直接使用物理地址

    如果直接使用物理地址的话:

    (1)安全风险

            每个进程都可以访问0-4G的任意的内存空间,这也就意味着任意一个进程都能够去读写系统相关内存区域,如果是一个

    木马病毒,那么他就能随意的修改内存空间,让设备直接瘫痪

    (2)地址不确定

            众所周知,编译完成后的程序是存放在硬盘上的,当运行的时候,需要将程序搬到内存当中去运行,如果直接使用物理地址的话,我们无法确定内存现在使用到哪里了,也就是说拷贝的实际内存地址每一次运行都是不确定的,比如:第一次执行a.out时候,内存当中一个进程都没有运行,所以搬移到内存地址是0x00000000,但是第二次的时候,内存已经有10个进程在运行了,那执行a.out的时候,内存地址就不一定了

     (3)效率低下

            如果直接使用物理内存的话,一个进程就是作为一个整体(内存块)操作的,如果出现物理内存不够用的时候,我们一般的办法是将不常用的进程拷贝到磁盘的交换分区中,好腾出内存,但是如果是物理地址的话,就需要将整个进程一起拷走,这样,在内存和磁盘之间拷贝时间太长,效率较低。

4、虚拟地址实现

    虚拟地址实际上就相当于在物理地址和进程间引入一个第三者,一般实现方法有两种:分段映射和分页映射。

                                                                        分段映射(来源网络)

    分段映射能够解决安全隐患、地址不确定问题,但是对于效率问题仍然没有很好的解决。因此引出了新的方法:分页方式。分页的方式实际上就是讲内存以4KB为单位分页(一页4KB),然后在Linux内核中提供页项目表、页表,一个大小占多个页的进程,在运行的时候,并不是所有的也都在运行,这时候将运行的页拷贝到内存,这样就缓解了效率的问题。

                        

5、进程虚拟4G内存空间

    对于硬件来说只有4G的实际物理地址,每个程序在编译的时候,都在链接阶段,将elf程序虚拟地址设置在0x8048000开始,解决程序运行地址不固定的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值