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

覆盖技术

为什么提出覆盖技术?
倘若我有一个进程要运行,它需要10k的内存分配,但是现在拥有的资源是内存大小只有6k,那我们该怎么办?覆盖技术就可以解决这样一个问题。即在较小的可用内存中运行较大的程序。
看图:
操作系统覆盖技术和交换技术_第1张图片
覆盖技术又是怎么实现的呢?
依据整个程序的逻辑结构,把不相关,不会相互调用的模块划分一组来进行内存的共享。
操作系统覆盖技术和交换技术_第2张图片 操作系统覆盖技术和交换技术_第3张图片

#代码如图所示,左边图片为代码逻辑结构例如可以看出a,b之间没有相互调用关系,其他的关系自己可以看懂,左边是代码实际的分布。
我们可以进行分组。(main)/3k,(a,b)/2k,(c,d)/2k这是一种分法 (后面的/3k,2k,代表分组获得的内存大小,以最大的一个为实际分配大小)这样一分在一个组内的函数就可以共用一片代码块。因为他们之间没有相互调用关系。
如图:
操作系统覆盖技术和交换技术_第4张图片
除了以上分组还可以有以下分组(main)/3k,(a,d)/2k,(b,c)/2k,两种分组哪种能提高内存的利用率,这是我们开发人员要考虑的事情。

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

交换技术

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

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

交换技术又是如何实现的?
前面已经说了,是把符合一定条件的程序踢到外存去也就是进程挂起,这里的一定条件是由操作系统来筛选,通俗的就是没有运行但是仍然在内存中的进程。让后把需要运行的程序加载到内存中来。


你可能感兴趣的:(操作系统,操作系统,内存管理)