技术编程,linux系统|为什么 Linux 需要虚拟内存( 三 )
除了能够共享内存之外 , 独立的虚拟内存空间也会简化内存的分配过程 , 当用户程序向操作系统申请堆内存时 , 操作系统可以分配几个连续的虚拟页 , 但是这些虚拟页可以对应到物理内存中不连续的页中 。
内存保护
操作系统中的用户程序不应该修改只读的代码段 , 也不应该读取或者修改内核中的代码和数据结构或者访问私有的以及其他的进程的内存 , 如果无法对用户进程的内存访问进行限制 , 攻击者就可以访问和修改其他进程的内存影响系统的安全 。
如果每一个进程都持有独立的虚拟内存空间 , 那么虚拟内存中页表可以理解成进程和物理页的『连接表』 , 其中可以存储进程和物理页之间的访问关系 , 包括读权限、写权限和执行权限:
文章图片
文章图片
virtual-memory-permission
图 8 - 读权限、写权限和执行权限
内存管理单元可以决定当前进程是否有权限访问目标的物理内存 , 这样我们就最终将权限管理的功能全部收敛到虚拟内存系统中 , 减少了可能出现风险的代码路径 。
总结
虚拟内存的设计方法可以说是软件工程中的常见手段 , 通过结合磁盘和内存各自的优势 ,利用中间层对资源进行更合理地调度充分提高资源的利用率并提供和谐以及统一的抽象 , 而在实际的业务场景中 , 类似的缓存逻辑也比较常见 。
操作系统的虚拟内存是非常复杂的组件 , 没有工程师能够了解其中的全部细节 , 不过了解虚拟内存的整体设计也很有价值 , 我们能够从中找到很多软件设计的方法 。我们重新回到今天的问题 — Linux 操作系统中为什么需要虚拟内存:虚拟内存可以结合磁盘和物理内存的优势为进程提供看起来速度足够快并且容量足够大的存储;虚拟内存可以为进程提供独立的内存空间并引入多层的页表结构将虚拟内存翻译成物理内存 , 进程之间可以共享物理内存减少开销 , 也能简化程序的链接、装载以及内存分配过程;虚拟内存可以控制进程对物理内存的访问 , 隔离不同进程的访问权限 , 提高系统的安全性;
到最后 , 我们还是来看一些比较开放的相关问题 , 有兴趣的读者可以仔细思考一下下面的问题:为什么每层的页表结构只能够负责 8 位虚拟地址的寻址?
推荐阅读
- 电池技术,相机发烧|防爆相机多少钱能买到?
- 行业互联网|深圳第22届高交会闭幕:一大批新技术新成果集中亮相
- 电池技术|动能转换看烟台|有锂电池的地方就有创为
- 行业互联网|2020十大新兴技术揭晓!每一项都可能颠覆我们的生活
- 行业互联网|英国运输技术论坛发布网络安全标准和指南摘要
- 钉科技|“选择性过滤”太难?方太“死磕”8年突破净水技术
- 中国新闻网|告别各自为营,梧桐车联宣布开放系统“技术底座”
- 腾讯|腾讯举办科学脱口秀X-Talk,聚焦人工智能、基因编辑等前沿技术
- |「推仔说新闻」NVIDIA曝光CPU+GPU加速技术 支持两家处理器
- 产业|清华教授魏少军:信息技术产业是全球GDP增长的主要动力
