储存管理(操作系统)
内存是计算中重要资源,每个程序员都梦想着拥有私有的,“取之不尽用之不竭”,并且是永久性的(断电也不会丢失的乃种)内存。
那是不可能滴,既然是有限的,我们如何让他能够满足我们的需求,产生无限的价值呢,那么储存管理就显得尤为重要。
操作系统中管理分层储存器体系的部分称为存储管理器,他的任务是有效的管理内存,即记录那些内存是正在使用的,那些内存是空闲的;在进程中那些需要分配的,那些是需要释放的。
那么接下来,我们将从最简单的管理方案开始讨论学习,并逐步深入。
1.无储存管理
最简单的储存管理,就没有抽象。
简单的说,就是当0001位置存储的是系统程序,但是你执行的程序将其覆盖了,那么系统执行时,将出现崩溃。
1-1示例:
如上图所示,程序A和B加载到C上运行时,当A程序执行一段时间之后,程序执行至16384处,执行程序B,他将跳转到28处执行add,从而导致崩溃
2.一种储存器抽象:地址空间
地址空间时一个进程可用于寻址内存的一套地址集合。 每一个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程。
地址空间:
- 可解决用户程序破环系统
- 可解决多个程序在一个cpu上执行困难
基址寄存器与界限寄存器<用于时间对多程序运行的保护和重定位>
详细介绍一下:
基址寄存器和界限寄存器是给每个进程提供私有的地址空间
基址寄存器:在每个内存地址送到内存之前都加上基址<重定位>
界限寄存器:防止地址越界<保护>
那么这时我们再次思考一下,1-1实例 ,是不是就可以完美的解决了。但是呢,他每次访问都需要进行加法和比较。比较可以很快,但是加法由于进位传递时间问题,在没有使用特殊电路的情况下会很慢。
2.1 交换技术
计算机内存有限,无法将所有的进程保存,那么处理内存超载的通用方法有 交换技术和虚拟内存
交换技术:把一个进程完整的调入内存,进程运行一段时间,然后把他存回磁盘。空闲的进程就储存在磁盘上,当他们不运行时,就不会占用内存。
2-1 示例:
现有A、B、C、D四个程序,依次执行
在交换之中会产生多个空闲区,如果把所有的程序下移很浪费时间。而且程序在运行时,数据和堆栈的大小并不是一成不变的,所有 在进程创建和换入时,需要多为其分配空间 在进程换出时,也无需将空闲区交换出去。
视图如下:
空闲区可供数据和堆栈同时使用,当空闲区被用光,则需要迁移到更大的空间,或者结束进程。
2.2空闲内存管理
在程序运行过程中,动态的分配内存时,就会产生类似于下图的空闲空间
一般而言,有两种方式跟踪内存的使用情况
1.位图
分配单元的大小是一个重要的设计因素,分配单元越小,位图就会越大;分配单元大了或者进程不是分配单元的整数倍,则会产生浪费。
在查找位中指定的长度连续0串是耗时的操作,因为在位图中可能跨越边界,这就是位图的缺点 ,以2位或者2位以上位分配单元,在查找时就有可能发生越界。
2.使用链表的储存管理
结点的含义:
空闲区(H)或者进程(P),起始地址,长度 和指向下一个结点的指针
当一个进程结点P结束时,则会将其改为空闲区(H),并于相邻空闲区合并,删除一个或两个结点。
综上所述:
段链表使用循环双链表可能要比单链表更加方便,这样的结构更易于找上一个结点,并检查时候可以合并。
2.3存储管理器分存的五种算法
1.首次适配算法(First Fit)
简单解释,当一个进程申请5个字节大小的空间时,我们就去找空闲区,如果发现的第一个大于等于5个字节的空闲区,那么我们就分离出5个字节大小给他。
2.下次适配算法 (Next Fit)
下次适配可不是找第二个合适的,他是基于首次适配算法,但是他每次开始搜索时,不是从头开始搜索,而是从上次结束的地方开始。
3.最佳适配算法(Best Fit)
最佳适配算法试图找到最接近实际需要的空闲区。
4.最差适配算法(仿真系统表面他也不是好主意)
最佳适配找最接近,那么他就是找最不接近的,那么就是找最大的。为什么说他不是个好主意呢,因为他会把大的空间全部搞成小的,当你需要大的空间的时候,你找不见了。
综上 :
最佳和最差适配算法要比首次适配和下次适配算法效率低。
意外:最佳适配比首次适配算法和下次适配算法更浪费内存
因为最佳适配算法,会产生大量无用的小的空闲区,这也就是内部碎片。
虽然我们可以对其进行优化,比如将空闲区和进程段链表分离,使用两个不同的链表进行维护;他可以提高算法的速度,但是产生的代价是增加复杂度和内存释放速度。当然我们也可以对空闲区大小进行排序、对数据结构进行优化,空闲区的第一个字存放空闲区大小,第二个字指向下一个空闲区等等,但是优化也伴随着复杂度的增加。
5.快速适配算法(Quick Fit)
快速适配算法,对空闲区进行划分,将其划分成常用大小的空闲区,然后用单独的链表进行维护;虽然他们快速适配常用大小的空闲区,但是程序终止后的合并过程时,非常耗时的。
在很多的内存池中,采用的就是这种思想。