计算机系统概论(H)(安虹) 2020秋 2019秋 2018秋 2017秋 2016秋 2015秋 2014秋 2013秋 2012秋  课程号:01170401
2020秋 2019秋 2018秋 2017秋 2016秋 2015秋 2014秋 2013秋 2012秋  课程号:01170401
7.1(23人评价)
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:一般
选课类别:计划 教学类型:理论实验课
课程类别:本科计划内课程 开课单位:计算机科学与技术系
课程层次:专业基础 学分:4.0
点评 写点评
排序 学期

评分 评分 23条点评

  • 课程难度:简单
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:没有
  • 难度:简单
  • 作业:中等
  • 给分:一般
  • 收获:没有

长文预警。本文还在更新,欢迎大家持续关注。

文章论点:这门课没有在前几课说的那么重要,相反在当前CS培养方案下可有可无。理由如下:内容上,这门课只是中科大CS大二必修课中数字电路和计算机组成原理的精简版,没有覆盖计算机系统结构的全貌,删去后也不会影响任何课程的学习。思想上,没有训练到计算思维。课程主旨中的level of abstraction在实验中没有体现。课程教材作者在UTexas开的课是给EE系(在中科大可以对应为6系)学生上的,并不在UTexas CS系的培养方案中,而CS和EE在系统栈是不同的。

建设性意见:我们也没有能力去改变培养方案。我只能给一些自学CS上的建议吧。入门CS推荐Berkeley的CS61系列。CS61A和CS61B分别介绍了如何将问题进行程序抽象和数据抽象,CS61C介绍了机器提供了什么抽象。注意:课程实验才是精华,请务必要做!不过CS61系列有一个缺点就是实验间不成体系。因此刷了CS61后,强烈推荐Stanford的计算机网络CS144。这门课的实验通过搭建不同的模块实现TCP协议,每个模块给的Specification ,模块间的Abstraction以及一些Implementation的细节说明得非常详细,模块也给了足够的单元测试,可以真正感受到优秀的系统是怎么搭建起来的。至于这门课,目前也已经是CS必修课了,只能在个人层面上建议大一就选课,就当适应国际优秀课程思维的过渡课程。其他网友总结的推荐课程:

https://csdiy.wiki/

https://conanhujinming.github.io/comments-for-awesome-courses/index.html

利益相关:17级计算机系本科生,本门课在没有卷bonus的情况下拿了4.0。目前做计算机系统的研究。今天来给这门课和妮可本科CS培养泼一盆冷水。

 

 

之所以这门课给低分,不是因为老师和助教的教学态度,相反,老师和助教都很用心,尤其是小邓学长,为我们精心设计了实验;也不是因为授课质量的问题,相反,这门课是本科前3个学期唯一能在形式上和世界一流大学接轨的CS课程。原因在于不合理的培养方案和授课内容。在广度上,同样的课时授课内容只有其他高校类似课程的一半,且多局限于数字电路和计算机组成原理,从计算机系培养方案中删去后不影响其他专业课的学习。在深度上,所谓的计算思维,abstraction相关能力也没有得到深刻培养。这是我本科阶段中预期收获和实际收获落差最大的一门课。至少我没见过前几节课一直反复强调这门课有多么重要多么优秀的课程,否则我也不会给低分。

 

我们来看看这门课程的名字《计算机系统概论》,有人就觉得这门课是计算机系统的导论课,为后续学习做铺垫的。可是这门课完全没有起到概论的作用。计算机系统不仅包括体系结构,还包括操作系统、编程语言、计算机网络、数据库系统、分布式系统和计算机安全等。当然,数据库系统、分布式系统更偏应用,很多原理性的思想来自于操作系统、编程语言和计算机网络,计算机安全也需要就具体的系统分析。因此《计算机系统概论》应该要覆盖体系结构、操作系统、编程语言和计算机网络的基本思想。可就实际的授课内容,正如 @nofear@liuly 同学所言,计算机组成原理和数字电路中的内容完全可以覆盖这门课绝大多数内容。除此之外,@topusername@SproutH 同学提到,这门课放在大二秋季学期学习,与数字电路同步,地位比较尴尬,降低了课程意义。我也赞同 @OREO 同学的观点,这门课可以帮助外系的同学了解计算机的最简单的硬件组成,但是给CS科班学生实在不是非常的有用,反而会占用大量时间。在17级及以前的培养方案中,模拟与数字电路、计算机组成原理、微机原理与系统B、计算机体系结构。这些课程完全能让大家学会如何造计算机from scratch。再加上这门课,体系结构学分比重实在过大,对比其他计算机领域课程学分和可怜的编程实践,显然是不平衡的。

 

那好,既然计算机组成原理和数字电路中的内容完全可以覆盖这门课,那么能从这上面能提炼出更深刻的思想和见解,那这门课也是有价值的。很可惜,绪论中在组成原理提过的von Neumann架构等都在组成原理里介绍。当然,这门课也有一个贯穿始终的思想level of abstraction。安虹老师也对那张从物理到应用的level of abstraction那张图说,这门课上完后什么都可以忘,除了这张图。正如李博杰学长 @boj 总结的一样,这门课介绍了从门电路到处理器,硬件给我们提供了怎样的接口和抽象。但是这门课给了我们这样的训练了吗?恐怕是没有。实验都是用汇编语言甚至是机器码写程序,优化指令执行时间和指令条数来进行记分搞军备竞赛。写满屏的jump和r1,r2命名的寄存器来写复杂的应用程序训练abstraction思维?这无非是更折磨人版本的程序设计罢了,很难从中学会减低真正系统的复杂性的方法。

这一点上看,数字电路和组成原理的Verilog实验才是训练abstraction思维的担当。前面一个实验用门电路搭造简单的可以被复用的mux等电路,经过了简单的测试证明在所有情况下都可用。等到要写register file和ALU等复杂模块,发现有些需要的功能和mux类似,我们完全可以放心地调用mux模块搭造。而时序逻辑比较复杂,状态机只写状态转移函数,其他数据千万不要在状态机模块里写,需要从状态推导出的数据调用状态机即可。这样只写简单部件,通过模块之间的组合构成复杂系统,这样的利用abstraction的Verilog代码绝对是最不容易出问题的。而不利用abstraction的Verilog代码出现bug很可能需要调半天(尤其是喜欢复制粘贴代码然后稍作修改的同学,很容易就忘记修改某一个地方)。这训练效果不就上来了吗。反观这门课,为了优化代码,我们不得不放弃一些便于我们思考的特性,如函数调用,甚至染上复制粘贴的坏习惯。大家可以看看CP-Miner这篇论文,有多少bug因为随意的复制粘贴代码而导致的。或许这门课实验的目的是为了体会逆abstraction思维的坏处,比如为什么不要用goto语句,细品图灵奖得主Dijkstra的Go-To Statement Considered Harmful吧。笑。

另外,我听说之后可能会开一门《计算系统概论B》给全校通修,具体授课会和这门课有偏差,暂不做评论。如果说全校通修的《计算机程序设计》能让学生学会如何把重复机械的工作交给计算机自动化,那么《计算系统概论》也应该让非计算机系学生理解如何分解复杂的问题使其简单化。如果《计算系统概论》实验没有达到这个目标,那还是一门平庸的课。如果反而让简单问题变得十分繁琐,那么我相信非计算机系同学看待这门课,就像非实验物理专业同学看待《大学物理实验》一样

 

 

当然,如果这门课的内容是整个计算机系统的基础,那么提前学也是很有价值的。但事实恰恰相反。正因为系统的abstraction,无论是我们在实现OS的文件系统还是编译器的类型系统,都没有必要去考虑取指译码的数据通路。如果简单的编程需要考虑这些,恰恰是系统设计的失败。在考虑系统layer的某个特定问题时,通常只需要考虑上一个layer和下一个layer提供的abstraction即可。这才是真正的level of abstraction。并不是说知道怎么造计算机就能帮助解决计算机科学的所有问题。恕我再引用Dijkstra的话。

Computer science is no more about computers than astronomy is about telescopes, biology is about microscopes or chemistry is about beakers and test tubes. Science is not about tools. It is about how we use them, and what we find out when we do.

 

 

这门课中还提到了计算思维,引用了图灵奖得主Patterson的发言:在异构时代的程序员必须对于算法和硬件模型融会贯通。计算思维其实是由Jeannette M. Wing在2006年提出的。其中最显眼的一句话是:

Thinking like a computer scientist means more than being able to program a computer. It requires thinking at multiple levels of abstraction.

我认为Patterson实际的意思是要理解硬件提供的abstraction。举一个简单的例子,通常分析算法复杂度时,我们可以认为访问一次数据消耗的时间是一样的。但如果数据在硬盘中,我们必须以块的粒度访问数据,而且磁盘访问通常是系统的瓶颈。因此我们有了external memory algorithms,用访问磁盘块的I/O次数来衡量算法复杂度。著名的B+Tree和LSM-Tree就是典型的例子。同样,针对cache,我们也有cache-oblivious algorithms。非易失内存Persistent Memory出现后,我们的系统需要对性能做modeling (如论文 An Empirical Guide to the Behavior and Use of Scalable Persistent Memory),重新设计存储数据结构来利用它的性能 (如论文 ListDB: Union of Write-Ahead Logs and Persistent SkipLists for Incremental Checkpointing on Persistent Memory )。这些都不需要我们理解硬件的原理,只需要我们了解硬件的abstraction就能指导我们。这就是计算思维的魅力所在。

那么好,现在的培养方案达到Patterson所想的让学生掌握软硬件协同原理了吗?我想并没有。学的硬件课多并不代表能达到掌握这个原理,如果在同一水平层次上学习,仍然是无法达到进阶水平的。就大二学的硬件课《模拟与数字电路》《模拟与数字电路实验》《ics》《计算机组成原理》上来看,这些课的观点依旧停留在如何用构造电路执行程序这个层次。大二计算机系学生一直不断在这一层次上重复训练,给学生实际的编写程序的洞察相比投入的时间而言实在有点少。事实上,这种训练也达不到Patterson所说的懂硬件的层次。因为这些电路只是模型,了解ALU的工作原理并没有告诉你如何在软件层面上加速程序执行,也没有告诉你如何在硬件层面提供虚拟化和安全性。事实上,学习《计算机体系结构》才是软硬件协同的开始。比如利用Memory-Level Parallelism提出新的字典树数据结构Cuckoo Trie以及利用SIMD加速数据库。这些工作都不需要考虑硬件的底层原理。只要掌握一定的基础概念,任何人都可以进行进阶的学习。

这对于所有知识的学习都是一样的,很可惜这种事情一直在不断重演。最典型的例子是中科大不少学生对《吉米多维奇》和《电磁学千题解》类似的追捧。在大学学习中按部就班地跟着培养大纲走是有毒的,很多情况下只有进阶学习才能发现哪些基础是最重要的。在教学上典型的例子是《线性代数》,训练计算各种奇怪矩阵行列式的小技巧反而会让人忽视理解线性空间这个重要概念,导致后续学习机器学习和量子力学等课程时吃力。除此之外,低效的重复训练所带来的反而是厌恶,比如《微机原理与系统B》这门硬件课改为选修后,22年的课已经因选课人数过少而停开了。

我们再来重新审视一下实验。有一次实验要求优化汇编代码行数,有一次实验要求优化执行指令数。在汇编语言上优化应用代码确实是一个很hacker的行为。但这是正统的计算机系统学习方法吗?我觉得并不是。图灵奖得主Alan Kay 在 Normal Consider Harmful 提到一个他非常重要的观点“A point of view worth more than 80 IQ points”。他举了三个例子,达芬奇有很高的IQ,在他的时代构想了很多发明,但缺少足够的知识,达芬奇却不能够实现自己的发明。福特出生在合适的年代,那个年代积累了足够知识,得以大规模制造出汽车改变了人们的交通方式。而牛顿的微积分方法给我们一个outlook,只需用几个简单的定律就能描述物理世界,好像多了一个大脑,使得我们能更快地去掌握知识。这让现在的普通人就可以造出牛顿时代之前的最聪明的人都不可想象的事。Alan Kay也继续提到(36:35)

I believe one of the biggest problems with computing is, in a sense, we have too many smart people. It attracts cleverness and you can do clever hacks but the clever hacks don’t scale well.

 

我不否认中科大里聪明人很多,这点实验的复杂度不在话下。但是现实系统的复杂度已经到了聪明人也承受不了的程度。分布式一致性协议Raft的作者提及Paxos时指出

We struggled with Paxos ourselves; we were not able to understand the complete protocol until after reading several simplified explanations and designing our own alternative protocol, a process that took almost a year.

 

也就是说,一个Stanford的博士生理解一个现有问题的解决方案都要花一年。请问我们能指望世界上有多少聪明人帮助我们解决这么多复杂的问题呢?那么我们的CS有outlook使得我们可以方便的进行开发吗?有的,那就是通过specification和abstraction。specification是为了帮助程序更容易理解而做的约定,我们在实现时只需保证程序在约定的状态下执行。abstraction可以帮助我们找到最通用的,specification最简单的系统行为,我们先实现这些通用的系统行为,在此基础上就可以构建出更容易理解的系统。有兴趣的同学可以看看2020年图灵奖得主Alfred Aho和Jeffrey Ullman的Turing Lecture:Abstractions, their algorithms, and their compilers

 

举一个简单的例子。在学习数据结构中,我们发现很多系统都要求取出当前集合最小元素的操作。比如,构建Huffman树需要找到当前频率最小的两个node,再加入一个新node,node数量最多为511。使用Dijkstra算法计算最短路径时,需要取出当前权最小的node,再更新其邻居,node数量最多为|V|。我们可以根据这个特性构建一个指定初始容量的优先队列。提供update(node, weight)和poll()两种操作。函数update的specification是改变元素node的权值weight。函数poll的specification是删除优先队列表示的集合中权值最小的元素,并返回给应用程序。这样一来,我们就构建了一个通用问题的abstraction。它的好处有三点。首先,只要有类似的问题满足指定的specification,就可以使用实现这个specification的系统,降低了我们的工作量。第二,提供abstraction构造出简单的specification非常容易进行测试,检验它的正确性。第三,具体的实现和specification是解耦的,也就是说我们可以有多个系统满足这个specification,在其中挑选任一系统,对使用这个系统的程序都没有影响。比如,优先队列的实现可以用时间复杂度为O(n)的方法遍历查找权值最小的元素,也可以使用复杂度为O(logn)的最小堆。如果我们在实现Dijkstra算法时发现O(n)复杂度的实现对于规模很大的图比较慢时,可以直接替换成O(logn)的实现,不需要改变最短路径的程序。

 

诚然,体系结构系统中一些问题确实对上层有影响。比如引入乱序执行,会使得我们在多处理器编程中需要考虑memory ordering,会引发meltdown安全漏洞。可惜这个课不仅没有解释这些进阶的问题,连C语言一些fallacies and pitfalls也没能很好地解释。这是上完其他高校的计算机系统入门课都能理解的问题,如https://nju-projectn.github.io/ics-pa-gitbook/ics2021/why.html。我会在下一段说明。

 

当然,正如 @Dune 同学所言,其他国内外知名高校CS专业都有名为ics的课程。那就让我们看看其他高校都在学什么。大多数高校都采用CMU的CSAPP作为参考教材,而这门课的内容只涵盖了CSAPP中PART I: Program Structure and Execution中2~4章的简单内容和其他的零散的一部分内容。而据我所知,大多数高校如上海交大等都能把CSAPP的12章内容讲8章以上。其他没有以CSAPP为主线的ics课程也各有特色。而我们的课程内容只能覆盖伯克利入门课CS61C近30讲中的不到10讲。再来看看国内高校南京大学的ics。不仅广度更广,还真正阐明了抽象思维,通过reading the f**king source code的方式,让学生获得了处理大型项目的能力,这才是系统编程真正需要的能力。授课内容少导致比较明显的体现就是上课节奏太慢,如 @什么昵称 同学所说,一个指令能讲半个小时。

 

可能有些同学还有疑问,大名鼎鼎的Yale Patt教授在UTexas 就是这样上课的。这个评论是说他上课不好吗?并不是。细心的朋友可能从网站上发现Dijkstra和Patt都在UTexas任职。Patt开的课是 EE 306 - Introduction to Computing Systems,不在UTexas CS系学生的培养方案中,而是给学电子工程的同学开设的,告诉那些学电路的同学怎么搭建通用的计算机,并在其上运行程序。这门课对于EE系还是相当优秀的课程。

UTexas CS系培养方案:https://catalog.utexas.edu/general-information/coursesatoz/c-s/

UTexas EE系培养方案:https://catalog.utexas.edu/general-information/coursesatoz/e-e/

但是,电子工程和计算机科学要做的事情是不同的。举一个简单的例子,LC3指令集默认程序从0x3000开始执行,现实中的很多指令集都是这样处理的,EE系用电路把计算机搭到这个地步就足够了。但是对于CS,故事才刚刚开始。既然是通用计算机,那就应该可以执行不同的程序。那么从一个程序切换到另一个程序执行时,我们是否需要把物理内存中0x3000开始的程序全部清除掉换成新的程序?不需要,我们可以用虚拟内存,假设每个程序指令都从虚拟地址的0x3000开始,但不同程序的虚拟地址可以映射到不同的物理地址上。这是这门课没有覆盖的,但确实是计算机系统的核心内容之一。所以,这门课只能覆盖第一个图中从电路到ISA的层次,没有达到“需要一门贯通课程,帮助学生从底层物理到高层应用,整体上理解计算机系统”的目的

这里对Patt教授和安虹教授没有贬义的意思。这门课在2011年出现在国内确实让人眼前一亮,哪怕是EE系的课也确实值得国内CS系同学学习,这比国内一堆只在堆砌概念的课程不知道高到哪去了。十年前,科研上,计算机系统界顶级会议NSDI、PLDI、OSDI等鲜有中国大陆学者的身影。教学上,蒋炎岩博士在2009年在南京大学上操作系统课时还在写8086汇编,大学四年里没有人教profiler,trace。在这种背景下,能写出合格的系统就不错了,更别提跟上国际潮流。但是十年过去了,国内计算机系统学界进步有目共睹。我认为这门课已经不能算合格的CS系计算机系统入门课了。这里的批判不应该仅限于这门课,而是整个培养方案。我们应该思考为什么有很多同学觉得这门课能收获很大。

 

对于大多数同学而言,这门课是第一个可以称得上和国际接轨的课程,而且也没有偷跑学组成原理,所以很多同学收获很多。我看有些学弟学妹还提到这门课接触了linux,git,make,收获比较大。但这实际上是大一就应该学会的编程的正确方式,即使不是一开始就接触,大一第二学期的程序设计进阶课也该接触了,没接触的原因是前面课程设计偷懒。所以,我给这门课打低分的原因不是因为这门课差到极致了,而是因为这门课有很多的进步空间。如果我当年ics上课内容直接搬到当前中科大CS课程体系中,学弟学妹们还觉得这门课收获在科大CS培养方案算比较高的,妮可本科CS培养就真的不仅落后于国际一流名校,还彻底落后于其他华五高校了

(最后修改于 35 16 复制链接
………CSAPP是计算机学院研究生新版培养方案中的学科基础课,本科相对应的课程好像只有计算机系统详解(通识课)
taokyNJU 的 ICS PA 和 OS 实验 () 确实分量挺足的。很希望看到我们能有类似分量的课程。
taoky回复 @taoky: 好像括号里的链接 http://jyywiki.cn/OS/2021/ 被吞了
布加勒斯特的人偶师回复 @taoky: 李诚老师的编译原理实验相当不错,有时间我会评论一下。
布加勒斯特的人偶师本文还在更新,欢迎大家持续关注(*^_^*)
taoky回复 @布加勒斯特的人偶师: 对。
已退学NJU 优秀的实验不是从天上掉下来的,是相应课程的老师和助教不断更新迭代的结果。余子濠在保研其他学校之后,仍帮助母校修改自己曾经出的实验,最终经过多年努力才达到现在的高度。 反观妮可,很少有老师和助教有时间有能力设计真正有意义的实验:要么彻底摆烂,沿用祖传实验,完全不查重,放任学生狂抄 GitHub;要么好大喜功,不考虑实际情况,搞一堆不明所以的要求,严重超出学生的接受能力,而助教自己也没对实验有什么深入理解,完全无法解答学生问题,迫使学生摆烂。 本人认为,要想真正提高妮可的课程质量,老师和助教绝不能大跃进,要用渐进的改良的手段,慢慢丰富实验文档,提高实验难度。(如果妮可能达到这些清华大佬水平的话,就当我没说:https://harrychen.xyz/2020/06/20/cs-course-reform/)。学生也别太摆烂了(说自己没有架构能力,又不学习设计模式,或是把计算机工程庸俗化成「儿童百科全书」)。
………补充一下:计算机学院2022春的“网络系统实验”课程已经改革,参照斯坦福大学CS144课程进行设计。
布加勒斯特的人偶师回复 @ABCDE: 那还挺不错的,祝课改成功!
taoky话说每次 edit 有 changelog 吗?现在看每次更新之后都要和大脑里的记忆 diff,有点麻烦(
布加勒斯特的人偶师回复 @taoky: 不好意思,没有维护 changelog。内容添加的时间顺序和文章逻辑这两个线性序关系不一样,所以只能做 tradeoff 选择文章逻辑顺序了。如果在文章间添加 timestamp 作为索引有点影响可读性。不知道有没有更好的解决方案。
………这个list里有一些不错的资源,分享:http://jyywiki.cn/Reading_List
………https://csdiy.wiki/
布加勒斯特的人偶师回复 @taoky: changelog: 更新了 point of view 至 "举一个简单的例子。在学习数据结构中" 的几段。
布加勒斯特的人偶师changelog:近期会更新 计算思维 至 point of view 部分。
taoky回复 @已退学: 我八月份去做了 NJU 的 ICS PA 实验,确实比较硬核,我自己本地做感觉分量也差不多需要一个月的时间(不过如果去掉声卡的实现和处理 nix, SDL, wayland 的 bug 之后大概只需要 20 多天就能完成主要内容);我同意「不是从天上掉下来的」这一点:它的实验实际上是好几个不同的项目的组合(NEMU + AM + NanOS + Navy),而这些子项目也可以用在其他的实验上,这一点科大恐怕没有既有时间又有技术能力和组织能力的同学来实现。如果要改进实验的话,在已有的基础上迭代,或者从其他公开的实验上迭代恐怕是最实际的。

立即登录,说说你的看法

printk 2018秋
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:超好
  • 收获大小:很多
  • 难度:中等
  • 作业:中等
  • 给分:超好
  • 收获:很多

关于上课:

安虹老师特别有情怀,对学生也很好www

ICS 这门课主要注重自底向上的构建一个小计算机(LC-3,Little Computer-3),大概逻辑如下:

门电路 => 触发器、记忆元件 => 状态机 => LC-3 CPU => 算数指令实现,控制指令实现 => 写汇编程序 => Calling Convention (=> C to Assembly && so on)

不过都是些比较基本的内容,和数字电路也多有重叠,加上安老师讲课比较慢,所以基本上课都去写别科作业了......我想我看的太快了


关于福利:

课程里面有三次报告:

  1. 李向阳 (忘了说的啥,时间太久了大概我记得有 Turing Completeness 和正规语言什么的...)
  2. 胡伟武 @ 龙芯的发展(& 和安老师叙旧)
  3. 包云岗 @ Tagged RISC-V Architecture (& 和安老师叙旧)
  4. 陈云霁 @ Cambricon NPU (& 和安老师叙旧)

(哇,安老师竟然和这么多人都有渊源...)

另外,每个人都送了一本《永恒的图灵》,夹着李向阳院长的赠语和安老师写的名字,感动.jpg


关于研讨课:

这个课在每周都有一个研讨的 topic,每个人在学期初自由分组,然后被 assign 一个 topic 来分享。

不过其实搞的有点水,感觉台上讲了台下也没什么积极性,大家也只是查个 Wikipedia 综合综合这样子...

和我想的研讨课有点差距.jpg

p.s. 讨论课要点名


关于作业:

都是一些课后习题 & 思考题,写完了过一阵会发布答案(可参见 http://acsa.ustc.edu.cn/ics/homework.html )

今年的给分应该是按时交作业就给分,详见下面 score 的公式。


关于实验:

我其实不知道去年的实验是什么样子的,但是听他们说很水...

今年的实验要求可以在 http://acsa.ustc.edu.cn/ics/lab.html 看到(截至 2019-06-25)

实验本身就是用 LC-3 Assembly 写几个小程序,不过今年的实验对于喜欢计算机的同学来说确实很有意思:

  1. Write a program in LC-3 machine language with a hex editor (like xxd, wxHexEditor, 010Editor etc.), in order to perform a 1-bit arithmetic right shift on the given value.
  2. Write a program in LC-3 assembly language and assemble it into LC-3 object file using an assembler. The program will be used to calculate the greatest common divisor of two positive numbers.
  3. Complete and compile the given C code into LC-3 assembly language manually, and then assemble it into LC-3 object file
  4. Compile the C code in Lab 2 into LC-3 object file using any C compiler and compare the result with yours in Lab2. 

对于实验 1 和 2,分别按指令执行时间和指令条数来进行记分。实验是将源码、 object file 和设计报告发过去,助教来进行统一的测试(比如统一的数据集,类似 OJ)

对于实验 3 和 4,主要在体会不同的 ABI 之间的区别,设计简单的 ABI 以及 Tradeoff。

写 LC-3 CPU/汇编器/编译器 有加分。我写了一个简单的 LC-3 IR => Assembly 的东西,不知道加了几分.jpg

 

其实我个人认为小邓学长(本届助教之一)的实验设计是比较出色的。引入 Scoreboard 机制可以帮大家花费更多时间在优化程序,而不是优化报告上(毕竟程序没难度就只能用报告给分?),而且大家想到的优化方案也确实让我大开眼界owo(我还记得我压 ddl 改汇编 + 跑分 + 提交)

不过,小邓学长的实验比较要求动手能力(比如 example 给的都是 Linux 下的,第四个实验也需要 lcc ,而基本上只能在 Linux 下 make 然后用)。我因为高中就用了两年 Linux (自己瞎折腾),对这些工具和概念还算熟悉;如果之前没有接触过的话,确实需要下一番功夫。但是,这种努力我认为是值得并且必要的——学习计算机,应该有一套熟悉并且趁手的工具链来完成想实现的功能。

 

p.s.1 如果要测试自己程序的性能,建议学习一点 Shell 编程的知识,实现调用 lc3sim (长得跟 gdb 差不多)自动化测试 + 生成随机数据集;再加上 pyplotlib 生成散点图,炒鸡漂亮(自夸中)

p.s.2 其实 lc3sim 的 C 源码很好读,写法非常粗暴(除了用宏处理指令那里)。如果需要进行 Profiling 查找热点代码不妨直接给 lc3sim 打补丁,不过我打了补丁最后也没来的及用

p.s.3 小邓学长把第五个实验咕掉了,不过实现了一个 LC-3 CTF (https://lc3ctf.co/),不过似乎现在也处于咕咕状态(

p.s.4 小邓学长 tql

p.s.5 有人要我写的破轮子可以戳我,我放上来


关于给分:

助教在群里给出的数据如下:

  1. 及格率 99%,优秀率 47%,平均分 82.48,90 分以上 25%
  2. 调分公式 score = ceil(4*sqrt(score)+0.6*score); if (score ∈ {94, 89, 84, 81, 77, 74, 71, 67, 64, 63, 60}) score++; if (score < 60 && !(电话打不通QQ联系不上邮件不回)) score=60;

其中 score = (mid + final * 2) * 0.1 + (avg(lab[4]))*0.3 + 0.24*max(avg(lab[4]), (mid + final * 2)/3) + 0.15 * discuss + (hw == 6 ? 1 : 0) + extra_points_scaled。extra_points_scaled 由平时表现和课外作业给出,对于 99% 的同学∈[0,5],对于 89% 的同学严格为 0 (所以大抵是提交 CPU/汇编器/编译器之类的分数)

这门课拿了 4.3,感谢帮助我的小伙伴、老师和助教们www


夹带私货,不喜勿喷:

我觉得小邓学长作为助教是非常用心的,并且非常「喜欢计算机」,某种程度上有一些 hacker 的风采吧 www

上初中的时候觉得 Richard M. Stallman 非常 cool,所以我其实还是挺喜欢这种 geek 文化的。

我其实不是英才班的同学,选这个课是觉得这门课比较有意思,结果也确实很有意思(笑)

15 10 复制链接
TheLitFire给评论写得这么长的大佬跪
printk回复 @TheLitFire: 给评课写的这么全的大佬跪
菜哭了sdl,wsl
taoky小邓学长是逆向巨佬。(这是真的
printk回复 @taoky: ∠( ᐛ 」∠)_您也是
boj这么有趣的给分公式,助教是哪位大佬
boj能请到李老师,胡老师,包老师和陈老师真是不容易呀。尤其是后三位一般都在北京,是怎么请到合肥来专程讲课的,厉害呀
printk回复 @boj: 是 djh 学长 (https://github.com/emc2314)
printk回复 @boj: 能请到这么多老师,确实感觉很厉害ww
psi-cmd捕捉当助教的邓佬

立即登录,说说你的看法

OREO 2019秋
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:一般
  • 难度:中等
  • 作业:中等
  • 给分:一般
  • 收获:一般

非常赞同前面几位同学的观点:

关于老师:安虹老师是我非常敬重的老师,但是不知道为什么感觉这一学期对待这门课程不像以前所说的那么用心。首先,花了太多时间将开头几章没有太多用处的东西,导致后期的实验太过紧张,只好减少到四次,最后一次实验的DDL还是考完期末考之后的那个周末 ;其次,有两到三次课都因为老师的出差而停上了,老师后来也没有补(虽然这个课没什么补的必要了。。。)

但怎么说,安虹老师毕竟还是我非常,非常敬重的老师之一。

关于助教:确实如同前面几位同学所说,这几个助教全程不知道在干些什么,期中考试的时候很多题目出的有问题,同学向助教反馈了以后助教大言不惭说没问题,快等到考试结束了又突然改条件,让人做得非常不爽。讨论课应该是其中两个助教轮流来听,有一个的助教感觉就十分不耐烦的样子,态度十分恶劣。基本上除了有一个助教长的比较帅以外,没有什么值得称赞的地方。

关于课程:本身课程不难,所以不会有什么学习的压力,甚至我感觉大部分重要的知识都不是老师上课讲到的,而是自己看书看到的,或者是做题时领悟到的。每周都有一次讨论课,安排的也十分不合理,每周都会有三四组同学讲同一个话题,到了第三组往往也就已经乏善可陈。实验确实是一大亮点,每次做完都有一股成就感。尤其是按原先的总评计算方式,大家都非常努力地在做实验。(原先的总评计算方法老师说是:期中*10%+期末*20%+实验*54%+讨论课和课堂表现*15%+签到*1%)。结课前还有汇编器和编译器两次实验有加分,似乎是各五分。但因为本人较菜就没做。

关于给分:期中考完全班哀鸿遍野,但考虑到期中只占10%,大家还是把大部分时间花在上了。期末结束我满心以为按照原先的计算方式不是优秀至少也有3.3,结果教务系统上先登了一次成绩,似乎是出错了,后来更改成绩的时候老师说总评计算方式改为(期中*25%+期末*45%+平时分*30%),其实我期末考的不是非常差(虽然也不是很好了),但好歹也有80+,但就因为期中是50+,所以总评自然不高。

其实老师怎么制定总评计算方式都可以,但是应该提前告诉学生。

而且我总是怀疑,是因为助教没有时间(或许是真的太忙了,或许是懒得看)去认真审视我们的实验代码和报告(毕竟我每次报告都写4000-6000字左右),所以就把平时分降到这么低。然而助教声称是因为我们到课率太低了所以改变总评计算方式(真是可笑之极,老师唯一统计到课率的方式是给大家一起拍张照,显然根据照片逐一排查谁来没来不现实)。

助教最后说优秀率还是有百分之五十以上,如果真的是这样的话,我估计优秀的人大部分都是做了加分实验加分加上去的,少部分可能是期末考得很好,期中也不是很差。

总之,这门课给我的感受就是,那些认真上课,到课,听课的人,反而最后不易拿到好成绩,反而是不怎么听课,但做了加分实验的人能拿到更高的成绩,可能是因为课本上的知识太简单的缘故,但我自己菜没能力用Python写编译器和汇编器怨谁呢?也许这就是H课程本身带有的特性吧。

最后说一句,我依然很敬重安虹老师,但是从这门课讲的内容来看,更多地应该当做一门公选课来帮助外系的同学了解计算机的最简单的硬件组成,开给计科英才班实在不是非常的有用,反而会占用大量时间。

13 7 复制链接
Maxwell赞同你的看法
非著名不做题家小海绵奥总言之成理
Fizz今年这助教是真的见了鬼了
Sato期望与实际差距过大
ccclll好奇,既然这样为什么还觉得安虹老师很好呢
OREO回复 @ccclll:我觉得老师讲课还可以,人还是很和蔼的,或许是科研太忙所以没能好好对待课程,我不想接受也得接受呐。叹气.jpg
ccclll回复 @奥利奥小饼干: 哈哈,可能确实是科研太忙了没把教学放在心上。

立即登录,说说你的看法

TheLitFire 2018秋
  • 课程难度:中等
  • 作业多少:很多
  • 给分好坏:一般
  • 收获大小:很多
  • 难度:中等
  • 作业:很多
  • 给分:一般
  • 收获:很多

英才班必修课。

tip1:计算机院非英才班和外院若非对自己的时间精力水平(还有英语ORZ)有较大自信,选课之前千万慎重,不要想着什么“大家都学了”“这东西挺有用的”之类的就脑子热,四个学分拉了绩点你重修一遍单多变量都赶不回来。(今年实验巨坑,有可能我们今年赶上个神助教)

tip2:如果你最终由于拿了每年的5k8块钱或者最终还是准备涨以下自己的计算机姿势而选了这门课,首先只要你上课认真听讲,你会发现这门课不难。如果你把这门课的地位和学校通修的数学课划在一个层次上,平时的作业和实验对你而言也不会算太多。安老师上课还是不错的,平时还会时不时找一些科大校友什么的回来做个报告。至于课程内容的完整性、对计算机理解的重要性,我觉得不必多谈。

tip3:课程ppt、教材、实验和作业的pdf、考试卷子都是全英文(当然教材有中译版),当然考试和写作业的时候不要求你用英文作答。要求对课程范围内的英文名词要足够熟悉,平时不建议全程看中文教材,起码中英文要对照。(舍友考场上不知道啥是decoder废了十几分钟,另一个把三个两输入与门看成两个三输入与门,一道15分?左右的大题gg)

tip4:实验十分“有趣”(估计是赶上了这届助教是个巨神,去年实验水的要死),一条投机取巧的建议是不要太着急实验刚发布就开始做。比如一道指令算法题,要你的“速度”越快越好,群里的各位巨佬就会开始军备竞赛:今天他们还6w+条指令,第二天就有人优化到2k,然后没过几小时就有人搞到300条,然后180条,150条,110条,90条,85条,74条。。。。。。不得不说的是这种东西十分消耗时间,而且一个实验9分速度部分占25%还不划算,你很多的前期工作还可能因为大佬的一个奇妙优化直接白费力气,互相攀比,互卖关子,一个星期的实验可以搞得大多数人当场自闭。建议别上来就做,找个好说话的大佬把他优化的上一个版本给你讲讲(我最后这个实验优化到93条,上一个150条的版本直接给别人讲出去了,因为对这种军备竞赛实在是很讨厌

tip5:群里的助教也是大佬(还是可能我们这届很倒霉),时不时在实验要求、成绩发布的时候给你搞一大堆你听都没听说过的骚操作,你在群里问他还会说“你去学呀,我都在群公告里说了这是sha256,你不会看字的嘛”之类的。上文提到的这个实验最后成绩发布的时候没有贴学号,你要把你的程序用sha256哈希以下得到哈希代码和它后面那一串乱七八糟的东西比较才能知道哪个是你的成绩(我百度的时候一搜是个加密,搞了半天搞不出来,最后在助教diss另一个人的时候我才知道这个不是加密是哈希)。所以有问题还是找个好说话的大佬来问,顺便给你看不顺眼的助教一个非好评

tip6:作业不占分,但是不交会倒扣。相对于一个4学分的课,不多不少吧。讨论课不必过分紧张,你会发现谁讲的时候台下都不会有人听

tip7:你可以选择上课不听,考前预习。前提是你要划出较大块的时间去通篇一字不差地把教材读了看了,作业题搞了。这个是绝对可以的(起码期中的时候),当然你最好对自己的自学和英语能力有自信再去作这个死。(今年期末略炸,该tip慎重考虑。还是这届孩子倒霉碰见个巨佬助教出书上没有的东西,也不怕被骂死)

tip8:计算机学院课程资料请移步本网站---模拟与数字电路实验(卢建良)---下面的某条评论的github

//考完更新一下

以上语言略有刺目,但是什么大佬都不该摆出一副菜就该死的魔性

6 1 复制链接
taoky所以要用 Google 搜不要用百度啊……Google 第一页搜 SHA256 就没这么多事。另外用程序代码 SHA256 的方式公开挺尊重隐私的啊……毕竟学号知道的人都认识是谁——其实不认识的人也可以知道,方法就不说了(

立即登录,说说你的看法

wsc 2016秋
  • 课程难度:简单
  • 作业多少:中等
  • 给分好坏:超好
  • 收获大小:很多
  • 难度:简单
  • 作业:中等
  • 给分:超好
  • 收获:很多

很有收获的一门课!安虹老师是一位很优雅,有气质的老师。上课从头到尾都表现出一种从容,这是很多老师都无法做到的。

课程前期与“模拟数字电路”中的数字部分有些重叠,但我感觉这门课讲的比模数这门课更加简明扼要,不注重各种细致的概念,更重原理,我觉得这样挺好。(比如,这门课就不会细讲各种选择器、触发器的类型与大同小异的功能,模数在这里就会讲一大堆。。)

课程会让我们每人上台花5-8分钟讲一些与计算机有关的话题,不过觉得很多人都讲的太高深,几分钟内难以听懂。倒不如讲一些很小的,有意思的点。

安老师还会顺便讲一些与超算竞赛有关的事情,听起来挺有意思的,感兴趣的同学不妨一选。

只是有时候感觉某些知识已经讲的很明白了,安老师还是不断的重复,怕我们不懂。

这门课到后期还是花了不少时间的,主要用在调汇编程序。

难度方面,感觉[产生CPU中断信号与栈的实现]的内容稍微繁杂了点,得看书看好久才能全面弄懂(而且还不是写在一块儿,附录里面有更细致的描述)。之前的内容比较好理解。

给分目测不差,我也只是刚得优秀,已经满足了,感觉这门课是认真点就可以得优秀的那种。(我这样说,是因为确实有那种努力了却给分不好的课...)

另外,教材建议买英文版,因为考试题也是全英文。好像有人因为长期看中文教材而导致期末考试看不懂题...

6 0 复制链接
已退学 2019秋
  • 课程难度:中等
  • 作业多少:很多
  • 给分好坏:一般
  • 收获大小:一般
  • 难度:中等
  • 作业:很多
  • 给分:一般
  • 收获:一般

体验较差,不建议选。

上课前半程扯一些没用的内容(老子?太极?),相当一部分与模电重复。

期中考试范围少划了一个单元(一道十几分的大题)。试卷有好几处错误,到考试快结束时助教才更正。

老师:期中才占10%不要紧。结果期末强行更改给分比例???

问助教问题从来不回,不公布作业和实验上交情况以及得分,不公布期中期末考试成绩,最后直接出总评???

总评登上去之后又撤下来改?迷惑。加大考试比例就能让同学都来上课了?考试跟上课有什么关系吗?

5 1 复制链接
Fizz这几个助教是真的魔幻

立即登录,说说你的看法

Fizz 2019秋
  • 课程难度:中等
  • 作业多少:很少
  • 给分好坏:一般
  • 收获大小:没有
  • 难度:中等
  • 作业:很少
  • 给分:一般
  • 收获:没有

临时改变给分标准我是没有想到的。

另外今年这几个助教就像鬼一样,在群里面从不发言,私信也不怎么回,特别是不公示作业和实验情况,让人死的不明不白的。

这门课其实算是有点用,不过实在是浪费时间。性价比不高,非英才班的同学建议别选,如果是想要开阔视野的话不妨选吴俊敏的计算机系统详解(大一下就可以选,不过难度较高,但作为公选课给分好且轻松)。个人认为这门课不好水学分,能学到的东西也不是很多。

如果不是必修为什么要选这门课呢?

 

5 0 复制链接
boj 2017秋
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:很多
  • 难度:中等
  • 作业:中等
  • 给分:一般
  • 收获:很多

《计算机系统概论》这门课程脱胎自 2011 年夏季学期的一门课 https://icourse.club/course/6240/

当时是安虹教授请大名鼎鼎的 Yale Patt 教授在暑期学期来讲的,教材也是他的名著 Introduction to Computing Systems: From Bits and Gates to C and Beyond

这本书(这门课)跟 CSAPP(计算机系统详解)都是计算机系统的入门书(入门课),两本书(两门课)着眼点不同。Yale Patt 的书(这门课)着眼于硬件角度,看计算机系统如何从门电路、处理器一级级搭建起来的,硬件给我们提供了怎样的接口和抽象。CSAPP(计算机系统详解)着眼于软件角度,看如何用算法和编程语言描述一个问题,操作系统给我们提供了怎样的接口和抽象。这两本书都是不可多得的计算机系统全景解析式著作,即使对于资深的计算机系统研究者,翻阅这本书仍能获得一些启示。

推荐科大计算机系学生选修计算机系统概论计算机系统详解这两门课,一个是硬件方面,一个是软件方面,对计算机系统的构成有个全面的了解。

5 0 复制链接
ColinJ 2020秋
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:很多
  • 难度:中等
  • 作业:中等
  • 给分:一般
  • 收获:很多

19大数据 作为必修不得不和计科英才班一起卷

课程主要上什么其他回答应该说的挺清楚了

主要想说一下自己的感受

1.个人感觉课程与考核有脱节,尤其是考试。不能说考试考的上课没教过,难度类比的话大概就是教了C的基本操作然后去写一个算法,能理解算法,能理解语言,但没经过练习(没有布置类似难度的作业 大部分人也没想到)在做题的时候干瞪眼的无力感我觉得不是这门课应该有的

2.课确实是好课,从一开始我狂喷(不是)到后来也能领悟一些妙处,但一定程度上我认为课程进度安排的太不合理,前面扯淡花很长的时间,讲到精华的部分一下子就过去了,特别是后面比较难的部分,感觉上了两三节课就结课了....整个课程留下最深印象的竟然是“数晶体管个数”

3.个人觉得加分机制并不是很合理,首先是幅度有点大(10分),其次对于高手而言,考得好还能卷满加分当然是好事,但对于屑院跟我一样的彩笔来说,本来就考不到多好的分数,上面的人一卷把分数卷的很好看,下面的反而拉不上来,就可能留一堆很难看的绩点,也有人喷为什么不做加分,何不食肉糜了...做的来肯定去做了啊

4.助教很认真很负责,安老师很认真很负责,教材很好,课程很好,可我大数据为什么要上呢...如果真要从底层下手优化算法我为什么不去计科来这大数据呢....希望学弟学妹们可以上更有性价比的课!

更新 期中92+期末60+无加分=总评83 感觉调分还是可以的,感谢安老板,但对课程本身的评价就如上了

4 0 复制链接
taoky 2018秋
  • 课程难度:中等
  • 作业多少:很少
  • 给分好坏:一般
  • 收获大小:很多
  • 难度:中等
  • 作业:很少
  • 给分:一般
  • 收获:很多

计算机系统概论 (H) 是我大学两年来感觉最有意义,收获最大的课程之一。推荐对计算机底层感兴趣的同学选择。

虽然说我这一届的话,小邓学长被骂得比较惨……实话讲那个速度军备竞赛的实验我也没有用太多时间去优化(时间都给数电实验大作业了,然后没有大作业的 F 同学荣获军备竞赛第一),最后速度分也只拿到一个中位数。不过整体的实验其实没有那么可怕,除了军备竞赛实验比较压抑以外,别的感觉都挺不错的……(虽然最后有一个写 ISR 的实验没有出)

最后给分的话其实低于我学期初的预期……其实感觉主要是因为我期末翻车 + 实验速度分不高的原因吧……(如果我没做 assembler 和破解某个 editor 程序的附加任务的话,分数会更低,所以建议有兴趣获得高分的同学做一些与 LC3 有关的题目)

期末之后会选一些分数靠前的同学去超算队面试选拔,如果有兴趣的话可以提前准备一下。我因为太菜,而且有别的比赛要做,所以现场划水,于是愉快地被刷掉了。

实验具体的细节 @printk 有很好的介绍,这里就不重复了。

4 0 复制链接
浮云兔斯基 2016秋
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:超好
  • 收获大小:很多
  • 难度:中等
  • 作业:中等
  • 给分:超好
  • 收获:很多

这门课还是比较有特色的,期中考试占10%,期末占20%,反而是平时实验占了很多分,作业交了不看对错,不交倒扣分,而且课本、实验报告、作业都是英文,写了一个学期,虽然我写的报告还是中国人外国人都看不懂的神秘语言模式,但总归增加了蜜汁自信。 期中和去年的卷子大同小异,期末逗比助教非说比期中还简单结果一考发现是hard模式,不过最后给分应该挺好的,感觉群里大家都很开心。 另,安虹是继陈发来之后又一个让我觉得优雅的老师,有次去食堂听见她一边走路一边打电话讲xxx怎么优化什么的,满足了我对知识女性的全部幻想。

3 0 复制链接
什么昵称 2017秋
  • 课程难度:简单
  • 作业多少:很少
  • 给分好坏:超好
  • 收获大小:很多
  • 难度:简单
  • 作业:很少
  • 给分:超好
  • 收获:很多

课是好课,但是安虹老师把这个课上成了我2020秋最难受的课之一。

首先是上课信息密度太低,一条指令能讲半小时,于是每节课我选择坐在最后一排的角落里写当天晚上要交的实验报告()其次是教室的问题,一百多号人的课,用3A的教室是不是有点太挤了,每次上课都感觉黑压压的一片,考虑到这里面大部分还是计科英才班的同学,每次上课都让人有一种被dl们压迫的感觉;然后是形同虚设的讨论课,几乎没学到什么,还每次占用一个周末的晚上,唯一的好处可能是教会了我如何从容地面对尴尬的社死场合;然后是实验的布置,实验交上去是没有反馈的,直到最后也不知道自己的实验评价是是什么。

不过课上的收获还是挺大的,相当于提前上了组成原理的一部分内容,帮我省了不少事。

老师的给分也很不错。可能是被之前评课社区的评价吓到了,这门课难度没我想象的那么大,甚至不如同学期的模电,光原等课,作为H课实在是有失水准。

最后还有一点,有个助教很帅/可爱,算是这门课为数不多的好处了吧()

2 0 复制链接
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:杀手
  • 收获大小:很多
  • 难度:中等
  • 作业:中等
  • 给分:杀手
  • 收获:很多

有一说一,课是好课,但今年这出尔反尔的给分不太行。

开学之初的承诺:期中10%+期末20%+六次实验共54%+讨论课15%+签到1%,作业交了不算分不写扣分;

学期中的加分项承诺:讨论课上多发言加分;给老师提课程建议和教学反馈加分;制作模拟器和汇编器加分;考试整体成绩不理想会给调分;

结果最后总评:(考试不给调分)期中25%+期末45%+四次实验共20%+作业&讨论10%,加分项只保留模拟器和汇编器。(据助教说大幅调高考试比例是因为班级平时到课率不高引起了老师不满?)

关于课程本身的评价:老师讲得还可以,个人收获挺大的,主要作业题目还挺有趣,实验虽然有的比较复杂而且要写实验报告,但是解决问题之后还是能获得一定成就感。加上讨论课每周末都要去两三个小时持续半个学期,作为一门四学分的课还是挺耗费时间的。

考试尽管是开卷,但题量太大,试卷全英文,就算本人英文水平挺好而且英文教材通读过一遍还是感觉答不完(期中尤甚,期末还好)。

本来想给这门课打至少9分,考虑到老师出分前临时调整了总评比例,这操作我不喜欢,减一分;老师之前统计成绩出现了失误,成绩是二次登载在教务系统上的,再减一分,所以7分。

2 0 复制链接
124万岁 2016秋
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:一般
  • 难度:中等
  • 作业:中等
  • 给分:一般
  • 收获:一般

ics,一门值得一学的课程。给后续课程打基础,同时有着提纲挈领的作用。也有利于同时期的数字电路的学习(虽然有一定的重复),课程本身不难,但事情不少。

建议使用英文版教材,一方面可用于锻炼英语阅读,另一方面亦可以为考试时的英语试题做准备,我想还是有些人在考试时耗费了一些时间用来读懂题意。平时作业不计分,只要交了即可,但还是要认真做一做,熟悉考试套路。实验有不少,前几个还好,最后一个也算是不小的工作量,建议做好心理准备(但没有数电的大实验花的时间多)。

感觉分数给的还可以,但是不是很清楚具体每项是多少分,希望以后可以提供了解平时分的途径,或者至少在提交了实验后给个评价,不至于让人不清楚自己平时成绩到底如何。

讨论课的价值在于拓宽视野,意义不是很大,不过就算不感兴趣的话,还可以一边听一边写大雾不是?

2 1 复制链接
春江花月夜“课程本身不难,但事情不少” +65535

立即登录,说说你的看法

  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:很多
  • 难度:中等
  • 作业:中等
  • 给分:一般
  • 收获:很多

英才班课,讲的是如何从晶体管层面一层一层抽象到汇编语言层面从而构建一台计算机及其指令集架构。一学期下来,能够深刻理解CPU的基本工作原理,收获还是很大的。非英才班和非计算机专业的如果有兴趣也可以选一选,不需要什么预备知识。

教材是Introduction to Computing Systems那本英文书,只讲C语言前面的部分。考试是英文试卷,可以用英文或者中文答题。只要作业题都完全理解了,考试就应该没有什么问题。

期中10%期末20%,平时作业不计分交了就行,其余给分都是实验和讨论课。只有一次点名,据说是占总评1%。

作业和实验都是在电脑上写完之后发到课程邮箱,ddl一般是周六24点。实验是用LC3汇编语言写程序,前几个简单,后几个还是有点麻烦的。

每周日晚上有额外的讨论课,要么讲作业,要么针对之前给定的话题进行小组展示。多发言可以加分。

不太清楚其他人的总评成绩,所以无法准确评价给分好坏。不过英才班课优秀率应该蛮高的。

安虹老师还是很和蔼的,只是有时候会把一段内容重复很多遍。

课程主页在这里:http://acsa.ustc.edu.cn/ics/,所有和课程相关的内容都可以在这里找到。

2 0 复制链接
AidenY 2017秋
  • 课程难度:困难
  • 作业多少:很多
  • 给分好坏:杀手
  • 收获大小:很多
  • 难度:困难
  • 作业:很多
  • 给分:杀手
  • 收获:很多

快毕业了,统一评课。

这门课我是19年上的,总体不推荐。

 

给1分不是因为课真的这么烂,只是来拉低一点分。因为实在到不了八分的水平。

 

第一,这门课每年都能搞出点事情来,搞得三分之一的人很高兴,三分之二的人很不愉快。

第二,老师太右了。常年待在教育系统内,并不知道天下变成了什么样子(与之相反的,某运筹学老师太左了,却也不知道天下变成了什么样子)。ysxt不合,会很微妙。

第三,我当年上课的时候,说好的考试三成,结果却变成了考试七成,一群人考试随便准备的,都在认真搞实验。最后总评策略一换,三分之二的人直接爆炸。

 

言而无信,也没什么好说的了。

 

话说回来,优点也不得不提:

这门课确实达到了它的教学效果。

认真学的人,应该确确实实可以掌握“计算机系统概论”了。

这会让你以后省很多事。

 

总体不推荐。

1 0 复制链接
棉花糖 2019秋
  • 课程难度:简单
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:一般
  • 难度:简单
  • 作业:中等
  • 给分:一般
  • 收获:一般

扣两分。1分给本学期的助教,真的做的不太行。另一分是因为在没有任何提前说明的情况下改变了学期开始给出的计分方式。

老师的ppt和作业实验布置是全英文的,建议非英才班的同学一定要有一定英语基础的情况下再选修,不然会特别吃力。讲的内容是1-3章和数字电路前面那部分差不多,后边5章是指令中断I/O子程序等系统内容。有期中期末考试,且用英文出题。答题可以中英文结合(不知道支不支持法德西葡意等)。期中考前5章,期末考到前半本书(不包含所有C语言的内容)。好好听课的话期中期末考个85分左右问题不大。

期中题型包含基本逻辑运算、简单逻辑电路设计(这里不会特别难,因为这门课还有大数据学院的学生上,他们没学过电路。)、读程序写结果/内存状态/寄存器变化,简单汇编程序(虽然当时说不考汇编,但是还是考了,只不过考的很简单)。

期末题型也差不多,只不过读程序写结果那一部分增加了诸如打断点、跳转、递归等比较难的内容。

所有ppt、作业、实验和实验环境以及操作文档都发布在了http://acsa.ustc.edu.cn/ics/。服务器不是非常稳定,但是并不会影响到正常学习。

然后是这门课会有4个配套实验。(最开始说是6个,感觉是助教偷懒了。)本学期的配套实验是读入数据并排序然后保存、十六进制指令完成右移操作、求最大公约数和手动编译一个含有调用的C语言代码。难度不是特别大,如果编程基础较好的话这些实验都不会太难完成。

接着还有一个讨论课,内容是以组为单位介绍和计算机相关的内容。准备的话基本上就是摘一些wiki上的东西念一遍?感觉本学期这一部分的组织太过差劲了,可以说没有一点点收获。我觉得我宁可多做两个实验也不要上这个讨论课。~~哪怕是Teamwork然后队友还是那种只会吃饭的。~~

最后学期末附近还会征集各位同学用各种办法实现的LC- 3的汇编器、模拟器。只要完成了都可以获得5分的加分。如果是在PC上实现的话要求能完成老师给出的汇编器的几乎所有的功能;如果是在FPGA上实现标准可能会放低一点,如果不能支持特别多条语句问题也不大(考虑到烧板子会特别慢)。

总的来说课程本身内容很多,可以对同学期的一些课程进行内容的补充,课上讲的也不错。但是课外补充的这一些内容有一点欠缺。~~另外LC- 3在FPGA上的实现似乎也可以直接交到数电实验上,而且评分很高。~~所以还是建议如果英语水平和时间允许的情况下可以选修一下这门课。

但是本学期在教学组织上发生了两个很令人不愉快的事情。

第一个是给分问题。开学的时候承诺给分按照10%期中20%期末16%考勤%54实验,然后作业要求提交但是不计分,分享自己编写的LC- 3汇编器、模拟器每一项加5分。期末考试的时候还说了给出课程反馈也会适当加分。但是在寒假的时候突然改成了25%期中45%期末剩下的部分只占30%。实验从得分的角度上来讲几乎每个人都是交了就基本不扣分。这个让很多因为说了实验占比高而努力做实验、提升效率(这个非常耗时间,每一次优化所需要的时间不亚于重新写一遍。)的同学们浪费了相当多的时间和精力。而且最后改标准给出的理由是因为平时考勤到课率太低了,这个理由很难让人信服。

第二个是助教严重不负责。首先是讨论课除了喊一句下一组和问了问题的人下课来报个名两句话以外没有说过话。然后是在学期开始提出实验很重要的情况下,从来没有对实验给过任何反馈。我觉得我不是不可以接受给低分,但起码你得让我死明白吧?咱们教学也不是为了比拼出来你是一等奖我是二等奖,我觉得你是可以告诉我我写的东西、讲的东西哪里有问题吧?这种实验、报告的教学,不就是在犯错误中累计经验并学习么?对比一下这学期的数字电路实验,代码部分是现场给分,你要是verilog有毛病甚至都可以找助教帮你调代码,大作业难度、参考。可以看出这个助教在实验上的负责程度实在是不够看。然后是期中成绩期末成绩也没在群里说过,直到最后因为登错了成绩才公布。是不是如果大家没觉得成绩不对劲他们都不打算改了?我觉得这些都是可以很轻松地完成的事情吧?为什么那么多课程的期中期末(数据结构除外,怨!)助教都可以很方便的发布成绩,这门课的助教就不行?

最后据说优秀率在50%。这个我就不清楚了,没有仔细问。毕竟我本人对待分数还是挺随意的。

总的来说,课绝对是一门好课。如果付出一些努力最后的成绩也一定不会差。本人非英才班选了这门课最后总评也拿到了90分。如果有人问我这门课是否要上我是一定会推荐的。所以我也更希望以后这门课程的助教可以负责一点 。我不求你搞LC-3的OJ,我不求你搞MD5发布成绩等炫技技巧,只求你完成一个助教应当完成的事情好吧。如果说真的忙,就不要来当助教了好吧?

//=====

另外这门课程的考试真的是计算机学院的一股清流。没有弱智的名词解释,没有弱智的模版代码背诵,完全基于计算机运行模式。真的,这就真的值得再给点分了。没有对比就没有伤害。

1 0 复制链接
ElisaAI 2016秋
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:超好
  • 收获大小:很多
  • 难度:中等
  • 作业:中等
  • 给分:超好
  • 收获:很多

我感觉ICS对后继的课程还是很有帮助的,考试占比重不大,主要是每一次的实验(作业只要交了就有分)。

安虹老师的ppt真是清晰又容易理解,至少目前我没有再遇到哪个老师的ppt写得这么好了……

给分挺好的

1 0 复制链接
匿名用户 2017秋
  • 课程难度:简单
  • 作业多少:很少
  • 给分好坏:杀手
  • 收获大小:没有
  • 难度:简单
  • 作业:很少
  • 给分:杀手
  • 收获:没有

为了防止学弟学妹看到这个从而误选安虹,特此前来评课。

请到 https://icourse.club/course/20775/ 了解真正的 ics,ah,hyq

0 0 复制链接
Pppp卡丘 2020秋
  • 课程难度:中等
  • 作业多少:很多
  • 给分好坏:一般
  • 收获大小:一般
  • 难度:中等
  • 作业:很多
  • 给分:一般
  • 收获:一般

课是好课,考试是阴间的考试

以及让大数据跟计科英才班一起卷,屑院实锤

最后不调分,跟开学时说的比例一样,但可能会在实验上捞一捞

越到期末任务量越大,一共6个实验,期中前一个,期中后5个(期中考完一个月就期末),猝死的节奏...

0 0 复制链接
perl 2018秋
  • 课程难度:困难
  • 作业多少:很多
  • 给分好坏:一般
  • 收获大小:一般
  • 难度:困难
  • 作业:很多
  • 给分:一般
  • 收获:一般

给分不错,优秀率50%。但是实验太变态了,难而且竞争很严重,不是大佬慎选。

0 0 复制链接
Fx 2017秋
  • 课程难度:简单
  • 作业多少:中等
  • 给分好坏:超好
  • 收获大小:很多
  • 难度:简单
  • 作业:中等
  • 给分:超好
  • 收获:很多

        这门课从二进制编码开始,一路经过逻辑电路、内存、机器语言、到汇编语言(包括后续基于汇编的输入输出、系统调用、中断程序、栈与工作栈等),讲解了计算机系统的工作原理,内容还是很丰富的。并且课程注重概念和逻辑框架的搭建,没有很艰深的内容。就算到了后期,从作业、上机题到考试也都是有繁度没难度的,完全不用担心学不会,推荐所有同学选。

 

        安老师讲课的风格是一个知识点翻来覆去地讲,非常细致,但个人感觉节奏太慢,不如看书。鉴于所有任务都是用英文布置的,而且毕竟阅读英语文献是必备技能,建议买影印版的英文教材来看(实体书,考试开卷,知行书店有二手书,全新的网上也有卖)。对英语不好的同学来说看书会有一定困难,但请一定坚持啃下来。

 

        作业和实验是这门课的本体,作业题一共6次,一般会给两周时间完成,题型和课后习题类似,不算分所以做的时候不用太纠结对错,按时提交即可。随后助教会把作业答案放到课程主页(http://acsa.ustc.edu.cn/ics/),一定要核对,把错题搞清楚。实验一共5个(往年有6个),同样有两周时间完成,内容为写lc3汇编语言程序实现功能,设计难度不大,但调试汇编语言程序会费点时间。需要写实验报告。

 

        这门课要求两人一组做课程相关的课题展示,在每周末的讨论课上完成。助教会给出几个课题但请同学们不要拘泥于此(今年感觉至少有10个组讲简单复杂指令集的对比……),事实上任何专业相关课题都欢迎。
 

        期中期末两次考试,题型和作业题类似,难度不大但题量爆炸,要加快做题速度。

 

        总评组成:实验原定54%(每个实验9%,但今年砍掉一个实验,不知如何调整了计算方法),展示16%,期中10%,期末20%,作业不计但不按时交会扣分。实际操作时,实验的给分分为两个维度:程序的正确性和实验报告,程序只要大家交之前测试一下基本上都是没问题的,那么主要的拉分项就是实验报告了,经验告诉我们请认真写实验报告;展示的成绩最后助教选择不作区分,基本上都是给满的。这门课不限优秀率,目测大家的成绩还都挺不错的。

 

        最后说一句,安老师是学校超算鸿雁队的领队,每年秋季学期会面向大一大二同学招生,感兴趣的同学请尽早准备。

0 0 复制链接
peining 2015秋
  • 课程难度:中等
  • 作业多少:中等
  • 给分好坏:一般
  • 收获大小:一般
  • 难度:中等
  • 作业:中等
  • 给分:一般
  • 收获:一般

课程难度不大,后面几个实验作业比较花时间一点,听说下一届作业就变多了。

课本推荐用英语的,上课ppt也是英语的,不过总体来说自学一些也可以。

这门课和很多其他课程有重叠,最主要部分是LC3的汇编,这一块也算是比较透彻了。

有讨论课的传统,就是没人准备一个话题去讲,基本上就是各种dalao秀啦。

给分一般吧,虽然期中期末考都不难,不过我大概考得不太好。

0 0 复制链接

安虹

教师主页: 戳这里

其他老师的「计算机系统概论(H)」课

未知 2016秋

安虹老师的其他课

高性能处理器体系结构 8.5 (2) 2019秋 2018秋...
计算机导论 6.0 (1) 2013秋
计算机系统概论 6.7 (3) 2011夏
计算之美与乐趣II 1.3 (3) 2022秋 2021夏
计算之美与乐趣I 1.7 (7) 2022夏 2022春...
计算系统概论A 3.1 (21) 2022秋 2021秋
多核计算 2008秋
虚拟机技术 2006秋
高性能计算 2020秋 2015秋