| 选课类别:基础 | 教学类型:理论实验课 |
| 课程类别:研究生课程 | 开课单位:计算机科学与技术系 |
| 课程层次:硕士 | 学分:3.5 |
这门课从程序员和架构师的角度来看计算机系统:如何执行程序,如何存储信息,以及如何通讯。这门课会教学生成为更高效的程序员,关注性能、可移植性、鲁棒性等方面。这门课也是很多高级计算机课程的基础,比如说高级体系结构、计算机网络等。课程的内容包括:
周学海老师的《计算机系统》课程基础教材为CSAPP(Computer Systems: A Programmer's Perspective),内容丰富,被评价为是一本“好书”。教材授课使用PPT,有部分同学反映与CSAPP第三版不完全一致,可能偏向于第二版。不过整体上,老师的讲课被认为是“有水平”的,并强调理解体系结构、系统等计算机领域的关键知识。
课程作业和实验较多,包括五个实验(如BombLab、DataLab等)和数次作业,均可以在网上找到解决方案,因此完成不难。实验检查较为细致,并通过腾讯会议完成。有部分同学指出,实验和作业是课堂内容的重要补充,平时完成这些部分基本上的满分。
考试较为专业,但内容与作业联系不大。题目常涉及信号、进程、I/O、虚存、重定位等较为深入的内容,特别是信号的部分被认为超纲。考试题型灵活,包括代码分析、BUG查找、算法优化等,涉及到实践中的应用。复习时需重点关注书本和PPT上的细节内容,有同学在复习信号量等复杂内容时感到挑战。
课程的给分机制非常慷慨,平时分占比高达60%,通常给满。据反映,无论考试如何,平时分高的同学总评成绩较好。尽管考试难度较大,但总体给分较高,许多同学在考试未确定完成的情况下仍获得高分甚至90+。
整体上,周学海老师的《计算机系统》课程被视为经典且建议选修的基础课程,特别适合对计算机系统有兴趣者。课程丰富且具有挑战性,但在时间投入适中的前提下,能够通过良好的平时表现获得满意的成绩。无论从内容深度还是给分友好度上,这门课都值得一试。
首先,我觉得 CSAPP 这本书还是挺好的。
别的不说了,下面提供 22 年秋季的期末题目题型回忆。(强烈希望老师能提供大致题型,这样复习时感觉好一些)
题目的序号可能有一点弄混了。
分析加速比。题目大概描述:一个程序有 80% 可以通过并行加速,设有 N
个处理器,问并行忽略通信开销时的加速比,和通信开销为原来运行时间的 0.005
倍时的加速比。
用移位运算写出整数乘 10 和除以 10 的函数。要求尽可能精确。(输入的范围可能有点偏差)
unsigned int mul_10(unsigned int x); // x in [0, 4294967295)
unsigned int div_10(unsigned short x); // x in [0, 65535)CSAPP 中文第三版 3.68 原题。
分析汇编,找出两个整数常数 A,B 的值。需要考虑 long 和 int 的对齐要求。
链接部分的题目,重定位 PC 相对引用。如 CSAPP 中文第三版练习题 7.5,7.5
和考试题数据相同。题目要求回答的内容和书中讲解"重定位 PC
相对引用"的部分一样,有 refaddr 和 *refptr 以及 16 进制表示。
浮点数加法的延迟 L = 3,运算单元数 C = 1。
在浮点数加法满足结合律的情况下,写一个求数组中浮点数的和的函数,要求性能尽可能好。
用 signal 机制和 alarm 函数,写一个 mysleep(unsigned int) 函数,
要求可以在多并发(记不清了,这里可能有误)的情况下避免竞争(race condition)
1. 假设 malloc 使用的是隐式空闲链表,16 字节对齐
2. 块大小向上取到 16 的倍数
问下面的调用中,块大小和 header 的内容,
1. malloc(1)
2. malloc(34)
1. 分析最普通的矩阵乘法的 total cache miss(总 cache 缺失)
2. 用分块的方法改进矩阵乘法,写出代码并分析总 cache 缺失
1. 有 fork 的程序,画进程图
2. 改数据的 IO 一章课件的 Fun with File Descriptors (2)
3. 改数据的 IO 一章课件的 Fun with File Descriptors (3)
成绩还没出,但听说往年都会猛捞,所以应该还行,下面说说自己对于这门课的感受
上课:今年上课特意花了两章用来讲体系结构的相关东西,包括流水线、SIMD相关的内容,据老师说是往年考试出这种题大伙都不会,所以今年就用上课的时间来讲一下(代价就是第10章I/O来不及讲了,但是考试要考,只能自学了);PPT如果是自己课后看会有点抽象,很多页都是只有几张图,如果时间富裕或者说对系统这方面感兴趣的话,可以去详细读读CSAPP的书,书确实是好书,只可惜我没时间看
签到:今年老师第一节课说可能会有签到,但实际上一次都没签过(至少我没看见签到过),估计是没加分的机会了
作业:作业基本不变,还是课后的那些题和CSAPP的那5个实验,作业占10%,实验占50%,这些东西网上全能找到,或者问师兄师姐要一份也可以,能看到只要你平时作业全交了,就已经有60了,所以想挂科还是挺难的
考试:考试一如既往地硬核,下面给点我记得的题目内容:
1、(1)一个AI应用在CPU上跑要100ms,其中前向传播80ms,现在前向传播可以被放到智能处理器上去跑,智能处理器上加速比为10,问整体加速比;(2)如果从CPU迁移到前向传播上要20ms开销,问现在加速比是多少
——经典加速比题目,估计每年都会来这么一道,属于是必须掌握的内容
2、用移位、加减和赋值实现x*10和x/10
——也是往年题,乘10大伙都会,除10建议直接问ai要个精确解然后背一下,自己写是肯定写不出来的
3、流水线,一共6个部件,延时分别是70、40、40、50、60、10(单位ps),最后还有个寄存器延时20ps,让你插入20ps延迟的流水线寄存器实现并行:(1)设计吞吐量最大的四阶段流水线,给出吞吐量和延迟;(2)设计吞吐量最大的流水线,给出吞吐量和延迟
4、关于文件读写的一道题,内容和pksq有一个回忆版的题目基本一样,就是fd1、fd2、fd3那个,这个小题是5分,后面还有10分是给三个程序,让你分析可能存在的内存隐患
1)while(*p && *p ≠ val) p += sizeof(int)
return p
2) p = malloc(strlen(s))
strcpy(p,s)
3) int* foo() {
int val
return &val }
5、callq重定位的一道题,就是作业7.5类似的题
——这题感觉也是每年必考啊
6、信号相关的题,完全不会,直接跳了
7、在shell里执行一个可执行文件,分析文件加载机制、虚拟空间布局、进程切换和用户态-内核态交互
8、有100个SIMD,每个SIMD有4个lane,GPU执行的代码中50%为浮点数运算,20%为load/store,其中浮点数运算的发射率为80%,GPU时钟频率为2GHz,问(1)浮点数运算的吞吐量;(2)SIMD改为60个,每个8个lane,发射率提到90%,问相比(1)的加速比是多少
9、简述内存对齐对TLB、Cache和Memory的影响,并从编程者视角说明如何安全编程
复习的话建议重点复习流水线、Cache、链接、信号和虚存那几章,前面的内容基本都不考,每年除了那些经典老题其余的能做出来多少就纯看命了
使用的csapp,作业/实验不少但是网上都有,实验是腾讯会议检查会比较细致,也可以选择交实验报告
需要注意/吐槽的是这个考试,说是考的比较基础,确实比较基础,就是......和作业居然几乎没有联系,如果只复习作业的现在可能跪了...
考试中,课程前半部分(汇编、优化等)大概只有20分,有个流水线的题目(一脸懵,全考本科基础瞎写),然后就是一大堆 I/O 题,进程,父子进程、信号、存储、虚存、回收策略,这些都是作业里没有的,但是书上/课件上有的。不过考试占比不大,40%。
听说有大佬半个小时就做完了卷子,如果读过csapp这本书的话,卷子还是很简单的
这门课花的时间不算多,作为基础课还是比较建议的选的
先插个眼。复习时间太紧张了,战略性放弃后半部分,结果考试前半部分没怎么考,泪流满面了。
两次签到,第一次因为要开会没去,据说是去一次总评 +5。
最后一节课划了重点,卷子也确实符合最后一节课的重点。
只能忐忑等待能不能被捞了,哭晕
?啊,不是哥们,为什么我期末确定做对的就一题,结果比高级计算机网络分还高?
信号那两题几乎不会,分离空闲链表完全忘了,这竟然能上90吗?
好奶(
首先,csapp是一本好书,值得阅读。
考试很难,反正我是不太会,但是平时是给50分,基本上实验和作业都是满分,csapp的实验作业答案都能从网上找到,平时分是满分,考试就不会给挂,最后总评也不会难看。
考试怎么说呢,全都是非常专业的东西,必须得是搞这方面的,或者对体系结构,系统这些玩意有很深刻了解的人,才能做出来,一知半解或者知道一个大概的是不太能做出来。如果你不是搞这方面的,那你得刚刚看过书,还热乎呢,才能做得出来。
摸鱼怪路过, 本来打算借这门课好好读读CSAPP, 但还是划了一个学期.
平常作业+5个lab占50%, 正常完成应该都是满分. 考试题出得还是相当容易的(即使是从我这个没怎么听过课的角度来看).
偷袭 2 次签到直接给 1 分
考试没考 bits 和 汇编
复习还是以后面的章节为主
出分总结 如果按比例给分的话 期末试卷可能改的挺严 给分感觉还不错 给个及格分
老师上课讲的内容似乎和CSAPP第三版不完全一样,不知道是不是和第二版一样而没修改。
考试内容除了信号那一章其他都比较基础,信号那一章的考试内容感觉比上课介绍的内容难很多,书后练习也没有相关的内容,似乎需要进一步了解相关的信号量编程才能熟练的解决。
我以一个非科班学生视角评价一下这门课吧:很难,内容很多,但是给分很好,老师讲课很有水平。
之前从没学过计算机系统相关课程,抱着学习的心态选课进来。上课讲的东西都很陌生,都要从头学,不过老师讲的很好,PPT做的也不错,课本真的很棒。学起来很吃力,但确实学到了不少东西(虽然以后大概率用不上),也算是对计算机系统有了一定认识。
会有几次作业和实验,网上都有答案,写不出来就不要折磨自己了。平时分占比60%,基本都会给满。考试反正是没几个会的,尽可能在写了,空了一道半,大部分题目都是会但不完全会,最后总评87,跟轻松90+的大佬们没法比,但是我是很满意啦。所以如果没基础的也不要怕选这门课,虽然没办法轻松90+,但我想拿个75+是很简单的,毕竟老师说过一般不会给75-。大概就这样,推荐。
作业实验工作量合理,应该不点名(没去过不清楚)
考试会考ppt上比较细的东西
试卷上只有两道题是确定做对的,还有少许完全不会写的和一堆瞎蒙的,出分一看总评上了90,选择佛海,选择成功。
1.7号考完来贴个回忆版:
这次考试和2022秋的回忆版相比难了不少,没有Cache相关的和看汇编码填空的,而且不少题目都是文字题,包括看C语言代码找BUG或者用C语言代码实现功能等,计算题非常少,复习方向完全错误了QAQ
给分很好,这门课应该是没有点名,一共五次实验以及四次作业,都是祖传的,选这门课的性价比很高,如果后续有意向走开发岗,CSAPP这本书对提升对计算机的理解也很有帮助。
87分,没啥好说的,对于一个追求均分75的人来说很满意,下学期两门基础课过了就行了
实验和作业都有大量的参考答案,而且助教平时分给的很足,基本上大家平时分都满了
期末考试里涉及到书上的和PPT里的原题比较多,有时间看书,书上的夹杂在知识中的习题可以捎带做做,今年重定向就考出来一道一模一样的
挺经典的一门课,对于跨考的同学应当是蛮有收获的,但是同时对于他们来讲这门课应该蛮难的
作为一名跨专业非科班计算机考生,这门课基础知识压力还是太大了。
不建议和我一样408基础全靠突击的人选,亲眼目睹做系统方向的师姐在考场大约1小时就全部完成交卷。
希望老师猛猛捞了。
成绩还没出,讲下其他的一些情况。
另外,复习的时候感觉 CSAPP 是真的好书,但是老师的 PPT 抄得是真不行。建议复习多看课本课后习题。
没想到总评能有84,遂上调一分。
省流:给分超好,给分超好,给分超好。
课堂:用ppt讲CSAPP,说实话很无聊,不如自己看书。由于本人本科学过CSAPP,因此基本上不去听课。今年应该没有签到/小测过。
作业:作业是CSAPP课后习题,每年题目都不变,答案也很容易找到。
实验:五个CSAPP配套实验,data(比特数),bomb(逆向分析),attack(缓冲区攻击),perf(代码性能优化),malloc(简易动态内存管理),总体来说难度较低,但还是需要花费一定时间,建议提前写。但需要注意bomb,根据学号,每个人拿到的题目不一样,网上没有直接答案,需要多留一些时间。
考试:闭卷,题目较难,考点刁钻细致,尤其今年信号量出了两道大题,而很多人没复习这块内容。
给分:给分很好。首先,公布的比例中,实验+作业占比就有60%了。考试成绩应该也全都捞了,本人考试确定做对的题只有2道,但最后总评90+。
总结:选就完了。