COA 2019 课程说明
“让我们改变一下对构建程序的态度:不要把我们的主要工作想象为教计算机怎么做,相反,让我们集中精力向人们解释我们想让机器做什么。”
– Donald Knuth 现代计算机鼻祖,《计算机程序设计艺术》作者
大家好,首先欢迎大家开始计算机组成原理的学习,这将是一段奇幻而又充实的经历。理解计算机的工作原理和机制,硬件之间的协调配合,设计上的权衡让步,窥见机箱内的各个部件如何默默地为你工作。
一切总是从好奇心开始。当打开一个app的时候,从点击鼠标的那一刻开始,计算机就在马不停蹄地进行计算和处理,鼠标、显示屏、cpu、内存…这些部件是如何协调工作,最后显示出界面展示给我们的?
尽管这节课不能给你所有的回答,但是通过学习,你的思考会更进一步;也许你最后并不会成为系统方向的程序员,但是了解基本的计算机组成原理也是作为一个程序员的基本素养。
我们希望大家能将上课学到的理论知识用更加practical的方式去进行理解。因此今年在书面作业之外,我们引入了代码作业,建立在去年ALU代码的基础上,并做了相应的调整。由于是引入代码作业的第一年尝试,所以难免会有诸多考虑不当之处,欢迎大家提出建议。我们参考了其他类似课程的代码作业,结合自身的课程知识点,主要用JAVA作为编程语言来编写框架代码。通过实践,大家能对各部分的知识有更深入地了解,并对整个系统如何协调地工作也能有所体会。
学习计组,理论性的东西可能会枯燥。自己上手操作模拟实现能够让自己留下更加深刻的印象,本质上还是去摸清楚计算机几个主要方面 CPU , 内存和外设IO的工作原理。 对于几个难以理解的地方 , 学习的时候可以自己写码模拟一下是最好不过了。建议学有余力就去看看更真实环境下的计算机运行方式,对于简化之后的计组作业代码也就会更加得心应手。
PS:计算机科学与技术系开设的计算机系统基础大作业是采用c语言编写一个虚拟机,大家也可以选做他们的大作业来体会一下更加真实地模拟计算机工作过程。我们的代码作业也参考了他们的设计和实现。