深入理解CS-LAB
计算机原理基础知识对于做开发的打工人,怎么强调其重要性应该都不过分。相比看书来讲,理解计算机原理的最好方式莫过于实践,实现一个虚拟机模拟计算机工作过程。显然这对于上班开发党来说,从头到尾实现并不现实。笔者经过一段时间的实践,完成南京大学CS实验大部分内容,相对于看书收获颇多,对于CS原理的理解较以前更加深刻。当然实验内容都比较基础,适合想尝试写下CS代码的同学。
实验主要由PA0~6七个部分组成,层层递进实现。
- PA0-环境搭建
- PA1-实现简易图灵机,完成计算、内存读写功能
- PA2-简易外设IOE,时钟、显示、键盘等
- PA3-系统调用、ELF加载、文件系统
- PA4-简易操作系统
- PA5-性能优化
其中PA1和PA2大部分工作是在模拟实现x86指令集,需要对寄存器、汇编等基本知识有所了解,IOE的实现则是模拟外设寄存器,通过CPU读写外设寄存器进行设备交互。
PA1和PA2中的程序都是直接在"机器"中运行的PA3和PA4是操作系统相关的内容,而PA3和PA4则通过操作系统运行程序,涉及到系统调用、ELF读取、指令字节序加载等内容。PA5则是整个实验系统的优化。
PS:截止目前笔者仅实现了PA1~3
中的内容,其中PA1~2
是内容最多的一块,这块实现好了,后面的PA3~5
则得心应手很多。当然由于时间原因,可能有少数指令实现并不完全正确,但绝大多数程序可以正常运行。
实验具体操作、内容参考传送门,这里面讲得很详细,如何一步步搭环境,实现哪些内容、怎样进行等,本文不会赘述,仅从个人觉得比较难理解或者实验中没充分说明的一些内容进行补充。
x86指令集
实验环境是32位,提供了三种指令集架构(ISA)选择:一个是x86为代表的复杂指令集,另外两个mips、riscv是精简指令集。笔者的实现是基于x86,对精简指令集感兴趣的同学可以参考实验中给出的链接。
个人觉得实验书中提供的x86指令集参考文档并不友好,不便于查阅,个人觉得可以参考Intel