产生背景:
进程的地址空间大于物理地址空间,即在较小的内存空间运行较大的进程。
内存"扩充"技术:
1.内存紧缩技术(可变分区)
2.覆盖技术:
根据程序的逻辑来选择,一些段永远不会同时出现在内存中,假设有段A和段B,他俩永远不会同时加载到内存上运行,
那么A和B就可共享某一段物理内存,进行交替的使用物理内存。
这就需要程序员显式的声明覆盖结构,比较老的技术了,适用于早期的某些操作系统。
3.交换技术:
虚拟内存的初步设计,当内存空间紧张时,系统将一些进程暂时移动到外存,把外存中某些进程换进内存,占据前者所占用的区域
进程在内存和磁盘之间的动态调度,当然需要配合调度器去完成。
swapper需要去解决的问题:
- 进程的哪些内容要交换到磁盘:
运行时创建或者修改的内容,栈和堆 - 在磁盘的什么位置存放被换出去的进程:
一个专门的磁盘区域,叫做交换分区 - 交换时机:
进程很少使用需要换出;内存空间不够,可能存在内存使用不足的危险。 - 如何选择被交换出的进程:
考虑进程属性,如正在进行IO的进程不可以被调换 - 如何处理进程空间增长:
会预留一部分的空间