理解层次存储系统:从访存异常到虚拟地址转换

需积分: 0 14 下载量 61 浏览量 更新于2024-07-11 收藏 6.51MB PPT 举报
"该资源是关于计算机系统基础的第六章内容,主要讲解了层次结构存储系统,包括存储器概述、主存与CPU的连接、磁盘存储器、高速缓冲存储器(Cache)、虚拟存储器以及IA-32/Linux中的地址转换。其中,通过实例分析了访问违例的问题,提到了当参数len为0时导致的访存异常,并讨论了Linux下的“Segment fault”错误。此外,还介绍了CPU执行指令过程中访存的原因、局部性原理以及访存操作涉及的硬件和操作系统之间的协调关系。" 在计算机系统中,系统思维是分析问题的重要方法,特别是在处理存储和执行指令时。本章首先概述了存储器的角色,强调了主存与CPU之间的紧密联系,它们之间通过总线进行数据传输。当CPU执行指令时,需要从主存中读取指令,这就是所谓的“取指”过程。如果指令涉及数据操作,还会进行“取数”和“存数”操作。 提到的问题是关于函数`sum`,当输入数组长度`len`为0时,会导致访问违例。这是因为`for`循环试图访问数组的越界位置(即`a[len-1]`),当`len`为0时,这个位置是`a[-1]`,在内存中是非法地址。访问这种地址会触发硬件级别的保护机制,引发访存异常,如Windows下的0xC0000005错误或Linux下的“Segment fault”。 存储层次结构包括了高速缓冲存储器(Cache)和虚拟存储器,Cache用于缓存最近频繁使用的数据,提高程序执行速度,因为它比主存更快但容量更小。程序访问的局部性原则指出,程序倾向于在短时间内重复访问同一块内存区域,Cache正是利用这一特性来优化性能。虚拟存储器则是为了克服主存容量有限的问题,通过将硬盘上的部分数据作为扩展内存来使用,形成一个比实际物理内存更大的逻辑地址空间。 地址转换是虚拟存储器的关键部分,IA-32/Linux系统中,逻辑地址经过页表转换成线性地址,再由线性地址转换成物理地址,确保程序可以独立于物理内存布局运行。在处理访问违例时,操作系统会介入处理,如更新页表或产生错误信号。 这个章节深入探讨了计算机系统中存储层次结构的原理和实际应用,通过实例帮助理解访存异常的原因,并揭示了CPU、存储器和操作系统之间如何协同工作以保证程序的正常执行。