文章目录
一. 进程切换
1.1 相关背景知识
1.1.1 虚拟内存
1.1.1.1 虚拟内存是什么
- 虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存技术,即匀出一部分硬盘空间来充当内存使用。
- 当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和硬盘上的临时空间组合。
- 当RAM运行速率缓慢时,它便将数据从RAM移动到称为“分页文件”的空间中。将数据移入分页文件可释放RAM,以便完成工作。 一般而言,计算机的RAM容量越大,程序运行得越快。若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。但是,计算机从RAM读取数据的速率要比从硬盘读取数据的速率快,因而扩增RAM容量(可加内存条)是最佳选择。
1.1.1.2 虚拟内存和进程线程的关系
- 虚拟内存是操作系统为每个进程提供的一种抽象,每个进程都有属于自己的、私有的、地址连续的虚拟内存。即让进程认为自己拥有的内存空间,造成进程认为自己有连续存储空间的假象。但是实际上数据空间的确是存在的,只是进程运行的时候必须load到物理内存上才能运行。
- 最终进程的数据及代码必然要放到物理内存上,那么必须有某种机制能记住虚拟地址空间中的某个数据应该被放到哪个物理内存地址上,这就是所谓的地址空间映射,那么操作系统是如何记住这种映射关系的呢,答案就是页表。
- 如果进程需要执行了,就根据页表,将进程的数据load到相应的物理内存上存储运行。但是如果物理内存没有内存了,那就会发生缺页中断,这里就不详细阐述缺页中断了。
- 这里需要提到的是,一个进程中的所有线程是共享该进程的虚拟空间地址的。
内存映射要通过页表,首先我们思考为什么要进行分页处理?
- 当程序运行时,进程需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运行,由于操作系统中有非常多的程序运行着,内存中不可能够完全放下所有的物理页面,所以引出了虚拟内存的概念。
- 把哪些不常用的程序片断就放入虚拟内存,当需要用到它的时候在load入主存(物理内存