首先,我们要先了解清楚的问题是,为什么会出现内存扩充?这个可以思考一下
好,开始正文:
覆盖技术:
早起的计算机内存很小,比如IBM推出的第一台PC机最大只支持1MB大小的内存。因此经常会出现内存大小不够的情况。
后来人们引入了覆盖技术,用来解决”程序大小超过物理内存总和”的问题
覆盖技术的思想:就是将程序分为多个段(多个模块),
常用的段常驻内存,不常用的段的需要调入内存。
内存中分为一个固定区 和若干个覆盖区
常用的段呢存储在固定区,调入后就不会再调出(除非结束运行)
不常用的段放在覆盖区 需要用到的时候调入内存,用不到的时候调出内存
从下图:
以上面这张图为例,main方法是必须要使用到的,必然会存储在固定去,但是B 和C是两个分支,不可能同时执行,这个时候,就会把这两个程序存储在覆盖区域,
执行谁的时候,就会把那一个调入内存,另一个调出内存。同理,下面的分支同上。
必须由程序员声明覆盖结构,操作系统完成自动覆盖。缺点:对用户不透明,增加了用户变成负担。
覆盖技术只用于早起的操作系统,现在的操作系统已经不在使用。
交换技术:
交换技术的设计思想:内存空间级转哪行的时候,系统将内存中某些进程暂时换出外存,把外村中某些已具备 运行条件的进程换入内存(进行在内存与磁盘间动态调度)
暂时换出外村等待的进程状态为挂起状态(挂起态 suspend)
挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态
看一下进程状态转换图:
每产生新的思想和新的方式的时候,肯定会有新问题的出现,那下面几个问题就是需要去思考的几个问题:
1.应该在外存(磁盘)的什么位置保存被换出的进程?
2.什么时候应该进行交换
3.应该换入换出哪些进程?
1.具有交换功能的操作系统中,通常会把磁盘分为两个区,一个是对换区,一个是文件去两部分。文件区呢主要来存储文件,主要追求存储空间的利用率,因此
对文件区空间的管理采用离散分配方式。
对换区空间只占磁盘空间的一小部分,被换出的进程数据就存放在对换区。由于对换的速度直接影响系统的整体速度,因此对换区空间的管理主要追求的事换入换出的速度,
因此通常对换区采用连续分配方式。总之就是,对换区的I/O速度比文件区的更快。
2.交换通常在许多进程运行且内存吃紧的时候进行的,而系统负荷降低就暂停。
例如:在发现许多进程运行时经常发生缺页,就说明内存吃紧,此时可以换出一些进程;
如果缺页率明显下降,就可以暂停换出、
3.可优先换出阻塞进程,可换出优先级低的进程,为了防止优先级低的进程在被调入内存后很快又被换出,有的系统还会考虑进程在内存的驻留时间…
Pcb会常驻内存,不会被换出外存,因为进程的换入换出等相关位置和状态都会存储在pcb中。