相信一些初步学习计算机或者说复习备考408的同学在看到存储系统这一部分内容时会产生这样那样的疑问。1.什么是内存外存2.内存外存CPU到底是怎么联系在一起的3.CPU只能读写内存那么我放在硬盘上的外存游戏是怎么在CPU上运行的呢然后大家如果学过计组计操就会知道虚拟地址空间那么什么是虚拟地址空间虚拟地址空间是谁创建的它又是用来干什么的呢在接下来这篇文章里我们以运行一个游戏为例带大家搞懂上述内容在讲解这个过程之前大家一定要搞明白最基础的内存与外存的区别内存是CPU可以直接进行读写的存储元件造价比较高。通常不会太大8G16G。现在有64G的了。而外存则是像固态硬盘啊机械硬盘啊这一类的大家如果给自己的计算机加装过硬盘装的就是固态硬盘闪存类的。外存通常容量很大1TB2TB都很常见。CPU不能直接读写外存需要将外存的数据调入到内存中去运行就会用到虚拟地址空间这就是我们接下来要讲的内容了。OK首先开始构建场景我现在使用的是天选52 * 8的16G的运行内存然后1TB的硬盘。我在硬盘里下载完成了120G的游戏NBA2K26然后我在Steam里面点击开始游戏操作系统会创建游戏进程过程不细讲可能会在下个视频详细讲进程的创建此时OS会开辟一块完整独立的虚拟地址空间然后硬盘中游戏的代码段数据段贴图资源区等区域都会映射到这片虚拟地址空间最后操作系统为这个进程创建进程专属的独立页表。简单说一下页表页表存着虚页号对应的物理页号也就是虚拟地址的虚页号找到数据在主存中的位置也就是物理页号。OK我们总结一下目前的状态只是创建了虚拟地址创建了页表。120G的游戏还是在硬盘中游戏数据并没有开始被调入内存页表中页表项的有效位是0。OK现在我们进入到游戏当中进入生涯模式MP出现在自建球馆当中。这个过程中会发生什么呢CPU已经想要去运行硬盘中的一些程序代码一些贴图资源。CPU拿到数据所映射虚拟空间地址会把该地址送到mmu先不用管是什么上然后分离出虚页号与页内地址。OK现在根据当前进程的CR3寄存器也不用管它是啥找到该进程的页表。通过虚页号去查找页表因为此时硬盘中的数据还没有被调入内存中所以页表中并没有该虚页号的所对应的物理页号页表项为0此时发生缺页中断CPU自陷为内核态交给操作系统去处理中断。操作系统根据虚页号去硬盘找到数据对应的位置然后对硬盘发起IO把这一段数据调入到物理内存中一个空闲页框中去然后更新页表填入虚页号对应的物理页号。中断处理结束CPU重新执行刚才那条指令此时CPU可以根据页表中虚页号对应的物理页号去主存找到数据然后运行。其实到这整个过程就差不多了但我想肯定会有同学会问如果内存满了但是CPU依然想要访问新的硬盘中的资源程序那么应该怎么办这里我简单的给大家讲一下内存满了之后再次发生缺页中断但此时没有空闲页框那么就会使用LRU替换算法把最长时间没有访问的页面给替换出来然后更新页表。OK到这里就结束了博主我写这篇文章可谓是呕心沥血只是为了大家可以更好的理解然后卑微的求一个点赞加关注。