操作系统内存管理总结

操作系统内存管理总结

关于内存管理这一块的学习进行自己简单的总结,如有错误,请指出交流,一起学习进步…
我抽离出几个概念来总结。

虚拟内存
虚拟内存其实就是一种操作系统的内存管理机制,使得看起来有比真正拥有的内存更大的空间,其一部分映射到物理内存,一部分对应在磁盘上。

虚拟内存允许执行进程不必完全在内存中。虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻进行必要的映射;当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的命令。这样,对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应物理内存上的一块(称为帧,通常页和帧大小相等),还有一些没加载在内存中的对应在硬盘上,如下图所示。

操作系统内存管理总结
访问虚拟内存
访问虚拟内存时,如果访问到的已经映射在物理内存上则直接访问物理内存,如果发现访问的虚拟内存并不在物理内存上,会产生缺页中断,从磁盘中取得缺的页放入内存,如果内存已满,还会根据某种算法将磁盘中的页换出,这里有几种置换算法,置换出来的数据储存在磁盘(Linux的swap区、Windows的C盘)

  • 先进先出算法,可能会置换出常用的页面
  • LRU,难实现
  • OPT,实现不了
  • 时钟,插入时设为1、使用时设为1;置换时发现为1的设为0,发现0的直接置换

分段和分页

  • 分段:
    这是为了满足用户要求而形成的一种储存管理方式。它把用户程序的地址空间分为若干个大小不同的段,每段可定义一组相对完整的信息。在储存器分配时,以段为单位,这些段在内存中可以不相邻接,所以也同样实现了离散分配。
  • 分页:
    系统管理需要,在该方式中,将用户程序地址空间分为若干固定大小的区域,称为“页”或“页面”。典型的页面大小为1KB。相应的,也将内存空间分为若干个物理块或页框(frame),页和块的大小相同。这样可将用户程序的任一页放入任一物理块中,实现了离散分配。

分段分页区别
目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位;分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,它含有一组其意义相对完整的信息;
大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定;
地址空间不同: 段向用户提供二维地址空间;页向用户提供的是一维地址空间;
信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制;
内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。

参考文章:
https://zhuanlan.zhihu.com/p/19965403
https://www.jianshu.com/p/76db050b808c