您的位置:首页 > 其它

操作系统覆盖技术和交换技术

2016-05-22 19:56 155 查看

覆盖技术

为什么提出覆盖技术?
倘若我有一个进程要运行,它需要10k的内存分配,但是现在拥有的资源是内存大小只有6k,那我们该怎么办?覆盖技术就可以解决这样一个问题。即在较小的可用内存中运行较大的程序。
看图:



覆盖技术又是怎么实现的呢?
依据整个程序的逻辑结构,把不相关,不会相互调用的模块划分一组来进行内存的共享。





#代码如图所示,左边图片为代码逻辑结构例如可以看出a,b之间没有相互调用关系,其他的关系自己可以看懂,左边是代码实际的分布。

我们可以进行分组。(main)/3k,(a,b)/2k,(c,d)/2k这是一种分法(后面的/3k,2k,代表分组获得的内存大小,以最大的一个为实际分配大小)这样一分在一个组内的函数就可以共用一片代码块。因为他们之间没有相互调用关系。
如图:



除了以上分组还可以有以下分组(main)/3k,(a,d)/2k,(b,c)/2k,两种分组哪种能提高内存的利用率,这是我们开发人员要考虑的事情。

那覆盖技术又存在着那些问题:
因为覆盖技术中的分配是由程序员自己分配,自己考虑进程间的逻辑结构,哪些是无关的,哪些是有关的,把无关的分在一组,把有关的分开,还要考虑不同分组的优差别,这无疑会增加编程的难度。

交换技术

那为什么又提出交换技术?看图:
假若内存里的A程序不止一个>=1,而且这里的程序A是处于暂停状态的进程,可以把它提出内存暂时保存到外存取,把内存空间让b来使用。



交换技术就是在上面这种情况下提出。

交换技术又是如何实现的?
前面已经说了,是把符合一定条件的程序踢到外存去也就是进程挂起,这里的一定条件是由操作系统来筛选,通俗的就是没有运行但是仍然在内存中的进程。让后把需要运行的程序加载到内存中来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息