选课类别:计划内与自由选修 | 教学类型:理论实验课 |
课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
课程层次:专业基础 | 学分:4.0 |
本课程作为计算机科学技术专业的入门课程,采取自底向上的教学模式,跨系统地介绍计算机系统的核心概念和设计思想。从介绍计算机系统的底层基础知识开始,逐步上升到操作系统和高级语言程序的接口层,将软件和硬件联系起来,阐述从问题描述到算出结果的七个层次的转换过程:从问题到算法的转换、从算法到高级语言程序的转换、从高级语言程序到(用指令集结构描述的)机器语言程序的转换、从指令集结构到微结构的转换、从微结构到逻辑电路的转换、从逻辑电路到晶体管器件的转换。主要讲授内容包括:从MOS晶体管开始,依次介绍逻辑门、锁存器、各种逻辑结构的设计;然后围绕一个简单的计算机设计LC-3,依次介绍冯?诺伊曼计算机系统模型、指令系统设计、汇编语言程序设计和微结构设计,为初学者建立起对计算机系统的完整认识。在此基础上,介绍汇编语言程序设计、物理设备的输入和输出机制、操作系统的陷入机制和子程序调用和返回机制、以及栈和数据转换的原理和机制。
安虹老师的《计算机系统概论(H)》课旨在从底层构建一台小计算机(LC-3),涉及从门电路到汇编语言的多层次内容。课程前期与数字电路有一些重叠,但也提供了更广泛的计算机系统概念,虽然课程名为概论,却未能全面涵盖计算机系统各模块。课程强调level of abstraction,但实验中未能充分体现这一思想,尤其是汇编语言练习更显繁复。
安虹老师授课细致且从容,时常重复内容以确保学生理解。然而,一些同学反映课程节奏较慢,信息密度低。上课采用英文教材和课件,增强了学生的英语阅读能力。课程还包含多次讨论课,但组织较为松散,收获有限。
课程包括多次作业和实验,作业虽不计分但必须提交,实验部分尤其受到重视,占总评比重较大。实验涉及编写LC-3汇编程序,后期大实验(汇编器和模拟器)工作量大且位于考试周附近,耗时较多。实验报告的详细程度对分数有显著影响,报告要求英文撰写。
期中和期末考试为开卷,题量大且全英文,涵盖抽象思维考察。给分强调实验表现,期末考试结束后有调分,优秀率较高达50%以上。然而,部分年份曾出现临时调整给分策略的情况,引发部分学生不满。
课程的在线资源丰富,包含作业、实验及教材链接,但助教表现不一,回应速度和反馈较为缓慢。一些年级的助教在出题方面过于复杂,增加考试难度。
这门课受益于其对计算机系统的系统性介绍,但在课程安排和给分标准上有调整空间。大部分同学认为课程适合理解底层系统设计,是为后续学习打下基础的好课;然而对于非计科专业选修学生,可能体验不佳,需慎重考虑课程难度和时间投入。
这门课有很多缺点,但是想到高达76的优秀率,这些都是小问题了。
一个一直以来都在探讨的问题是:学习ICS的不可替代性、必要性在哪里?这门课或者说这本书的初衷应该是作为程序员的第一门导论课,但时间上它并不是第一门,内容上前半段大量的是程设或者数电之类的课涉及到的内容,后半段却一头扎进了LC-3的深坑里做无用功。很明显,LC-3是简陋低效甚至不存在于现实世界的,没有任何实用意义。我大概能理解书的作者是以此为例初步总览指令集、数电设计、操作系统、汇编等内容,但课程却误入歧途,舍本逐末。
上面很多评论都在讨论这个问题,而在我们2023级这个问题尤为严重,是因为助教的出题风格更是在歧途上走了太远太远。比如,期中卷有LC-3机器码程序推断,通过加长程序长度、减少提供的信息、构建复杂的跳转结构甚至不惜用16进制写机器码来无谓地增加难度。再比如,期末卷有算周期数的问题,本来这是一件很简单的事,书上有很明确的状态图,但出题时却又要跟程序推断揉到一起,用周期数来反推指令。似乎我们应当成为一名LC-3大师而非初步了解计算机系统的计科学生。不过,助教很负责,除了出题风格之外我能给满分。
吐槽了这么多,我也该给一点学习建议,毕竟H课没得换,总得学。
首先是最后的两个大实验,LC-3汇编器和模拟器,助教提供的模板是C++版本,而且是高度“C++化”,即大量使用了类等功能,一眼就看出不是C。对于没有基础的人,虽说临时抱佛脚也来得及(比如我),但还是建议有时间自学一点C++。不仅如此,还要在Linux虚拟机上面跑,以及简单地用到Makefile。其实这些都不难,但是有所准备更好。
另外,实验的时间和分数的安排值得注意一下。上面提到的期末周附近实验扎堆,这一点很烦。两个大实验ddl大概率推到寒假,实测下来学期内至少把汇编器初步完成是合适的。评论区能找到不止一个学长的开源代码,不过大实验的真正难点其实在于每年新增的附加要求。还有一个问题没人提到过,就是大实验的分数占比其实和小实验是一样的,而且大实验给分很宽松。换句话说,爆肝一个星期半个月的“精美”汇编器对绩点的贡献可能还不如一次小实验的报告的完成度。
还有一个忠告值得反复强调:用第三版的英文原版!不要贪那个中译,第二版和第三版差别真的很大!甚至涉及到LC-3系统区的exception处理。另一个原因是考试作业课件都是英文,不要到考场上还不知道某个常见名词中文啥意思。
说了这么多,还是真心希望这门课能发挥真正的作用,同学们能学到东西。也许可以少讲点LC-3,可以讲点课本后半部分C的内核。也许可以用CSAPP替换ICS(?)
占坑,出分后细评。
先说结论:这门课是我目前为止上过最史的课,本学期的助教也奇差无比,堪称极品。
我单方面宣布ics是妮可最擅长恶心人的课,考试的唯一目标就是为了恶心人
期中的16进制机器码就不说了,为什么期中期末都要出看到第4小问才能确定第1小问答案的题?题面也写的巨勾史?数你马的周期?
考试的内容全是附录里边边角角的地方,上课提都不提
实验占一半分,然后实验给分的标准是实验报告写多少???这么简单(shabi)的实验有必要写个几页实验报告???最恶心的是助教从来没说按写多少给分,而且直到所有实验做完才会出实验的分,这不就是纯为了恶心人?
不过给分是真捞啊,我按公式算出来80,给捞到85了,泪目
作业:作业量不是很大,总共6次,一次作业算1分,基本上是写了就有分。
实验:总体来说实验难度不如数据结构,逻辑上都比较简单,就是很麻烦,高级语言一行代码的事得写很多行。不过非常sb的是考试周安排两个实验。虽然ddl延迟到假期了,但是说的太晚了,导致我在考试周花费了宝贵的复习时间来写实验。并且汇编器的要求增加了好多,模拟器的文档又太简略,两个实验的体验都不算好,尤其是像我这样没接触过C++的人还得先花时间学C++。
顺便一提我做实验基本上都是先画流程图,再用C语言照着流程写一遍检验正确性,同时也为lab6的用高级语音实现前面的实验做准备,最后再照着流程图用汇编语言写。感觉这样还挺高效的,基本上一个晚上可以写完一个实验。
考试:考试,期末还好。期中纯粹就是为了难为人,老师后来也说期中出难点是为了让同学们重视这门课,不要以为随便学学就能学好了。
老师:老师讲课并不算特别好,前面两周一直在说这门课多重要,上的像一门思政课一样。后面节奏快了起来,讲的很多,但是和考试内容似乎是正交的(bushi
助教:两个助教水平都很高,但是感觉有点不够用心,可能是科研任务比较重吧。赵助教习题课讲的很好,但是回消息好慢,另一位吴助教回消息很及时。顺便一提过年的时候赵助教还在群里发红包了,好感度猛增。
给分:给分感觉还行,优秀率76%,我期中66.5+期末88+有一个实验被扣了30分(这个实验的代码我提交成代码框架了,所幸实验报告里包含了大部分代码,助教哥哥也比较仁慈给了70分),最后总评95,这个给分很不错了。
至于推不推荐这门课,好像没什么意义,因为英才班的同学没有其他的选择,也没法退课。
大二下结束来更新一下,感觉这门课对于后面的学习还是有一定作用的,LC-3也是最简单的汇编语言了,可以起到打基础的作用,以后的课老师都默认学生会汇编语言了。
吐槽的几个方面:1、考试周附近布置实验,导致占用大量复习时间。lab5、lab6、模拟器、汇编器均在考试周附近布置,导致复习时也要抽出时间写ics实验。而且汇编器和模拟器又是两个代码量非常大的大模拟,如果完全由自己完成的话至少要两三天的时间。而个人感觉这两个实验和ics内容本身几乎没有什么关联,只是单纯的堆代码量。
2、实验文档模糊不清。全是英文这一点先暂且不题,尤其是模拟器的实验文档,给的信息少之又少。最终的要求只占了短短六行,没有实验样例,没有具体的步骤,但是检查的时候又突然要求能够输出一段内存空间的值。给的实验框架没有注释,而且是c++版本,还要自学cmake。
3、习题课有签到,强制参加。不知道是否会影响总评的调分。
安老师的讲课水平中规中矩,和自己看书区别不大。也可以说是这本书写的太好了,结合作业自学就能掌握得差不多。
除夕更新一下,出分了,按照助教的说法总评是半期*0.15+期末*0.25+实验/8*0.5+作业/6*0.1,最后只高不低,实际出分确实要高一些,优秀率是76%。如果实验报告写的多的话总评应该不会太差。学弟学妹们选这门课还是要卷一下实验的。
2024-1-29
刚刚交完LabS的报告,我的冬季学期宣告结束辣!(雾
占个坑先,有空再更
本人成绩虽不顶尖,期中期末在班上也算偏前,但仍被实验(尤其是汇编器和模拟器两个实验)烦到了。问题列出如下:
安虹老师讲课中规中矩,前几周基本都在吹水,后面还算是正常讲课了,可以接受。
给分还行,优秀率76%
这应该是要填的最后一个坑了。跟不少前人的评价类似,其实我也觉得这门课开课的目的挺迷惑的,感觉几门计算机专业的必修课就能完全把这个课代替掉了,ics这个课就有种什么都讲了但是什么都只讲了一点点的感觉。
说回到课程本身,比较好的一点就是考试占比只有40%,然后另外60%中一大半是实验,还有作业什么的,其中作业是二等级制,就是只要按时认真完成就是满分,所以主要看的是实验的分数。实验总共有8次,分为1次机器语言、4次汇编、1次C++语言,另外还有一个模拟器和一个汇编器的实验是必做。关于C++语言,不少同学说不会,其实就是在C语言的基础上加了一些东西,我之后准备写一个以C语言为基础的C++入门教程。模拟器和汇编器会给C++代码,中间只有一部分需要自己填,当然你自己用别的语言从头开始写一个也不是不行,depends on you。
作业和实验文档都是用全英文写的,考试卷也是全英文,不过不难懂,基本上用高中的英语基础再加上几个专业词就可以全看懂了。考试是开卷,有些人会带一本厚厚的词典过去,不过这完全没必要,我带去考试的就一本第三版的英文教材。实验报告是中英文皆可(不过我一般都用英文写,懒得换输入法了)。
老师讲的怎么样这个不好说,感觉不如自己看书来学,反正我上课也没怎么听过,基本上是在做各种其他作业,hackergame那一周甚至ics课上还打了几百分。学期中会有几次习题课,但是会点名,不去的话会影响总成绩,所以一定要去(话说为什么会有正课不点名习题课点名的课啊)。
最后讲一下考试,虽然占总评的比例不大,但是题目也不简单。试卷中会出现以下要素:
总体的题目风格还是抽象为主,题目细节很多,一定要细心,基本上作业认真做考试不会有太大问题。
最后还可以选做一个107机的汇编器模拟器的实验,剧透一下,107机的结构比LC-3简单不少(毕竟是上世纪五六十年代的东西),所以如果想卷绩点可以尝试,在期末考试后给老师发邮件,老师会给一些相关资料。
本学期所有实验代码已开源:Ace-tyl/icsh-code: 2023秋季学期计算机系统概论(H)课程实验代码 (github.com)
仅供参考,严禁抄袭!