操作系统----内存管理

来源:互联网 发布:飞行仪表显示软件开发 编辑:程序博客网 时间:2024/06/11 00:09

    我打算基于一个简单的计算机系统模型,来学习理解一些操作系统的基础概念。

    简单的计算机系统模型:CPU执行指令,而存储器系统为CPU存放指令和数据。在简单模型中,存储器系统是一个线性的字节数组,而CPU能够在一个常数时间内访问每个存储器位置。


    我打算从没有内存管理开始说起,一步步构建起目前的操作系统的内存管理方式出来。



    一:无内存管理。

    缺少内存抽象,并不一定会导致电脑爆炸,系统奔溃.....一些嵌入式系统和智能卡系统当中,缺少内存抽象的情况,还是很常见的,像我初中时的MP3啊,现在高级一点的洗衣机微波炉啊。这样的设备都已经完全被软件控制,它们的软件是刻写在ROM(read-only memory只读)上的。这样,软件都采用访问绝对内存地址的寻址方式,也能正常工作。原因是所有运行的程序都是可以事先确定的。洗衣机不会放歌,也不会突然让你选择加热模式....

    早起的计算机当中,程序都是找物理内存的,也就是说,程序在运行时访问的地址,都是物理地址。


    这样的嵌入式系统,和“远古”时期的计算机,之所以能够在缺少内存抽象的情况下,还能如人所愿正常运行。我们可以看出,是因为,所需功能简单。

    那么问题来了,现在的计算机,都要求能够“同时”“伪并发or真物理多并发”的运行多道程序,这样CPU的利用率才高,在只能直接访问物理内存地址的情况下,显然存在一些问题。  

            1;内存使用效率低;

            2;地址空间不隔离;

            3;程序运行的地址不确定;


    举个例子,先人想在没有内存抽象的情况下,强行装逼,运行多个程序。也不是不可能,操作系统只需要将当前内存中所有内容保持到硬盘文件中,然后把下一个程序读入到内存中再运行即可。只要在某一个时间内只有一个程序在内存中,自然就不会有冲突。

    IBM 360 的早期模型,尝试采用了特殊硬件



页面置换算法

    当发生  缺页中断  时,程序就暂时无法运行下去,需要将下一步所要执行的程序,换到内存中去。当此时  所有页框都已满,就需要叫目前在 页框 中的内容拿出来,将现在导致 缺页中断 的东西拿到 空出来的 页框 里去。

    当然,如果要换出的页面在内存(页框)驻留期间被修改过,那么把它给记录下来。如果没有被修改过,那就不用记录了,直接覆盖就OK了。

    当发生 缺页中断 时,虽然可以随便选一个 页面 来置换。但为了提高系统效率,我们总是希望,所置换的页面,是最不常用的。试想,如果将一个 频繁使用的页面给置换了,过不了多久,又要置换回来,岂不是造成了效率的浪费??

    另外值得一提的是,页面置换,可以视作一类问题的通解来看待。如Web服务器。服务器可以把一定数量的经常访问的Web页面存放在存储器的高速缓存中。如果存储器已满,并且服务器要求访问一个不在高速缓存中的页面时,就必须要置换高速缓存的某个Web页面,那么问题来了,置换哪一个呢?


    下面开始介绍页面置换算法:

    按这样的逻辑介绍:最容易想到的FIFO(First-In First-Out先进先出)算法,到最理想化最完美的 最优页面置换算法,在解释最优页面置换算法为什么难以实现之后,介绍它的近似算法--LRU(Least Recently Used 最近最少使用)页面置换算法。LRU页面置换算法是 最优置换算法的近似,但它的实现仍然不咋好,就继续近似,有了 Clock算法。

   小结一下,有如下页面置换算法:

                                             1.FIFO先入先出页面置换算法

                                             2.最优页面置换算法

                                             3.LRU 最近最少使用算法(最优的近似)

                                             4.Clock算法(LRU的近似)



0 0
原创粉丝点击