操做系统内存管理

1. 引言

 

2. 内存管理的环境

 

3. 内存管理的目标

 

4. 虚拟内存

 

5. 单道编程的内存管理

    5.1 静态地址翻译

          在单道编程环境下,整个内存里面只有两个程序:一个是用户程序和操做系统程序。因为只有一个用户程序,而操做系统所占用的内存空间是恒定的,咱们能够将用户程序老是加载到一个内存地址上。即用户永远从同一个地方开始执行。在这种管理方式下,操做系统永远跳转到同一个地方来启动用户程序。这样用户程序里面的地址均可以事先计算出全部的物理地址。这种在运行前就将物理地址计算好的方式叫作静态地址翻译。编程

    5.2 内存管理的目的

        为了弄清楚是否达到的内存管理的目的,须要从下面几个方面考虑:小程序

  • 首先,地址是否独立,即固定地址的内存管理达到地址独立了吗?衡量地址是否独立的判断标准就是看看用户编写程序时是否须要知道该程序将要运行的物理内存的知识,而用户在编写程序时所用的物理内存无须考虑具体的物理内存,即该管理模式下达到了的地址的独立性。那它是如何达到的呢?办法就是将用户程序加载到同一物理地址上。经过静态编译便可完成虚拟地址到物理地址的映射,而这个映射翻译工做能够由编译器或加载器来实现。
  • 其次,物理地址是否获得保护,即要看进程是否访问到了其它用户进程的空间,或都别的用户进程是否会访问该进程的地址(进程地址是否容许多用户进行访问)?其实在单道编程的状况下,确定是不会的。由于,整个系统里面只有一个用户程序。所以,固定地址的内存管理就是由于只运行了一个用户程序而达到地址保护。

    5.3 固定地址内存管理优缺点

  •  优势:固定地址的内存管理单元很是简单,实际上并不须要任何内存管理单元。由于程序发出的地址已是物理地址,在执行过程当中无须进行任何地址翻译,而这种状况的直接结果就是程序运行速度快,由于越过了地址翻译的过程。
  • 缺点:
    • 整个程序要加载内存中去。这样会致使比物理内存大的程序没法运行。
    • 只运行一个程序形成很大的浪费。若是一个程序很小,虽然所用的内存空间小,可是剩下的内存空间也没法使用。
    • 没法在不一样的操做系统下运行,由于不一样的操做系统所占用的内存空间大小也不同,使得用户程序的起始地址可能不同。这样在一个系统环境编译出来的程序极可能没法在另外一个操做系统环境下执行。

6. 多道编程的内存管理

    为了克服单道编程的缺点,所以发明了多道编程。随着多道编程数的增长,cpu和内存的利用效率也随着增长。固然,这种增长有个限度,超过这个限度,则由于多道程序之间的资源竟争反而形成系统效率的下降。spa

    6.1 动态地址翻译

        虽然多道编程能够极大地改善cpu和内存的效率,改善用户的响应时间,可是天下并无免费的午饭,这种效率和响应时间的改善是须要付出代价的。操作系统

        这种代价是什么呢?固然是操做系统的复杂性。由于多道编程的状况下,没法将程序加载到固定内存地址上,也就是说没法使用静态地址翻译。这样咱们就必须在程序加载完毕后才能计算物理地址,也就是程序在运行时进行地址翻译。这种翻译叫作动态地址翻译。翻译

    6.2 动态地址翻译流程

       

        用户发出的虚拟地址MUU(地址翻译器)翻译成物理地址。队列

    6.3 动态地址翻译下的内存管理策略

        多道编程下的内存管理策略有两种:进程

  • 固定分区:将内存分红固定的几个区域,每一个区域的大小固定,以下图所示

        

        最下面的分区为操做系统占用,其它的分区由分户程序使用。这些分区大小能够同样,也能够不同。考虑到程序大小的实际状况,分区的大小一般也各不相同。当须要加载程序时,选择一个当前闲置且容量够大的分区进行加载。内存

        这种模式下,当一个新的程序想要运行时,必须排在一个共同的队列里等待。当有空闲分区时,才能进行加载。因为程序大小和分区大小不必定匹配,有可能造成一个小程序占用一个大分区的状况。若是在前面加载小程序时考虑这一点,能够将小程序加载到小分区,就不会出现这样的状况(或者说至少下降这种状况发生的几率)。这样,咱们就想到也许可能采用多个队列,即给每一个分区一个队列。程序按照大小排在相应的队列里,以下图所示:资源

    

            这样不一样的程序有不一样的对,就像在社会中不一样的社会阶层有着不一样的待遇同样,不一样条件家庭男孩配同等条件家庭的女儿(门当户对)。固然这种方式也有它自身的缺点,就是若是有空闲分区,但等待的程序不在该分区的等待队列上,就将形成有空间不能运行程序的尴尬处境。编译器

 

     

  • 非固定分区
相关文章
相关标签/搜索