对于一种体系,各种文档很多,一个一个都看过来要花很多的精力,而且效果还不一定好,很容易出现前面看后面忘的状况。我总结出现这个问题的主要原因就是太快进入细节而没有一个整体框架。太多的细节会给人一种很累的感觉,有了整体框架在向下扩展到细节会轻松很多。而且有了整体框架后,很多细节根本都不需要关注,用到的时候查阅手册就可以了。
下面我就讨论一下体系结构的整体框架的各个方面,对于每个方面都提出一些问题,解决了这些问题就基本上掌握了体系结构的整体框架。带这问题去读文档,效率会高很多。
一. 寄存器
用户态可访问的寄存器有哪些?
编译器对这些寄存器的使用是如何约定的?
内核态可访问的寄存器有哪些,作用?
二. 指令集
指令是定长的还是变长的?
指令集分为哪几类?一般来说无非是 move/load and store/computational/jump and branch/其它特殊指令
寻址方式?
三. 异常模型
有哪些异常? 非法地址,非法指令,对齐,保护,缺页,系统调用等
各种异常的触发条件是什么?
异常是怎么处理的?
中断是怎么处理的,是否支持外部中断控制器,是否支持向量中断?
四. 内存管理
地址空间是如何划分的,哪些空间是用户态不可访问的?
如何实现分页?
缺页处理?
五. cache管理
cache硬件一致性?
cache写方式,write back or write through?
cache类型,指令cache,数据cache?
cache的寻址方式,物理地址还是虚拟地址?
cache刷新?
六. 其它
大小端
原子操作实现