栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux三 —— Linux虚拟内存

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux三 —— Linux虚拟内存

文章目录
  • Linux虚拟内存
    • 1. 如何处理虚拟地址和物理地址的关系
    • 2. 分页虚拟地址和物理地址是如何映射的
    • 3. 简单的分页缺陷
    • 4. 段页式内存管理

Linux虚拟内存

对于32位处理器,虚拟内存空间为4G,每个进程都认为自己拥有4G的空间,实际上,在虚拟内存对应的物理空间上,可能只对应的一点点的物理内存。

进程得到的这4G虚拟内存是一个连续的地址空间(进程也是这么认为的),而实际上,它通常是被分隔成多个物理内存碎片,还有一部分存储在外部磁盘存储器上,在需要时进行数据交换。

由于存在两个内存地址,因此一个应用程序从编写到执行,需要进行两次映射。第一次是 映射到虚拟内存空间,第二次是 映射到物理内存空间。在计算机系统中,第二次映射的工作是由硬件和软件共同完成的。承担这个任务的 硬件部分叫做存储管理单元MMU,软件部分就是操作系统的内存管理模块。

1. 如何处理虚拟地址和物理地址的关系

内存分页

分页就是把整个虚拟和物理内存切成一段段固定大小的空间,连续且尺寸固定的内存空间叫做页,Linux下每一页大小为4KB。虚拟内存和物理内存之间通过页表来映射。

当进程访问的虚拟地址在页表中查不到时,系统会产生一个缺页异常,进入系统内核空间分配物理内存、更新进程页表,最后再返回用户空间,恢复进程的运行。

  • 采用了分页,那么释放的内存都是以页为单位释放的,也就不会产生无法给进程使用的小内存,解决了内存碎片的问题。
  • 内存空间不足时,操作系统将正在运行的进程中,最近没使用的内存页面释放(暂时写入硬盘)需要的时候再加载进来。一次性只有少数的页,解决了交换效率低的问题。
  • 分页使得我们在加载程序时,不用一次性加载到物理内存,可以只有在程序运行时,需要用到对应虚拟内存页里的指令和数据时,再加载到物理内存中。
2. 分页虚拟地址和物理地址是如何映射的

虚拟地址分为:页号 和 页内偏移

页号作为页表的索引,页表包含物理页每页所在物理内存的基地址,这个基地址与页内偏移的组合就形成了物理内存地址。

3. 简单的分页缺陷

空间上的缺陷:32位,单进程一个页4KB,虚拟内存4G,就有 2 20 2^{20} 220个页,一个页表项4个字节,结果是4GB空间映射需要 4 × 2 20 = 4 M B 4 times 2^{20}=4MB 4×220=4MB存储页表。多进程100,需要400MB。

以页表一定要覆盖全部虚拟地址空间,不分级的页表就需要有100多万个页表项来映射,二级分页则只需要1024个页表项(此时一级页表覆盖到了全部虚拟地址空间,二级页表在需要时创建)。

4. 段页式内存管理

地址由段号、段内页号和页内位移三部分组成。

  1. 第一次访问段表,得到页表起始地址;
  2. 第二次访问页表,得到物理页号;
  3. 第三次将物理页号与页内位移组合,得到物理地址

可用软硬件相结合的方法实现段页式地址变换,这样虽然增加了硬件成本和系统开销,但提高了内存的利用率。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/939849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号