接受安利并完整地吃下了!
资源
一共23节课,内容其实只有两部分:计算机的内存分配和操作系统入门,以及多线程入门。没有视频,但是note讲解细致,光看note是能看明白的。课程内容其实是较少的。每节课的note几十分钟就能看完。
但是lab和project相当地多,且主题广泛,还会介绍常用工具,如makefile和gdb使用。所以我说这是一门不错的系统编程入门-练习课。
lab一共有6个,算是课后小练习和project入门介绍。
project则有五个!
第一个项目是C语言版本的贪吃蛇。
第二个项目是自己手写一个malloc和demalloc。这个project将频繁使用指针,且常常做整数和指针之间的转换。
第三个项目是手写一个cache来加速频繁调用 system read和write的时间。
第四个项目是使用已经写好的vmiter和pageTable来补充简陋操作系统的虚拟内存功能。
第五个项目是简单的多线程demo,写一个简易的kv-store和同步队列。
优点
除了练习资源丰富外,课程内容讲解也极其有趣。
讲内存分配,他会提前给你代码,打印变量的地址给你看。
讲缓冲,他会提C语言的gets这个经典黑点,他是怎么利用缓冲区溢出来修改其他变量的状态,调用到自己的恶意函数或者直接让程序崩溃!而你在那节lab里也会利用缓冲区干点坏坏的事。。。。
讲操作系统,直接给你一个巨原始的操作系统代码,然后你如何编写代码让process跑起来。操作系统会运行两个程序,一个天使程序,一个恶魔程序。恶魔程序不会返回cpu控制权,会访问天使程序,内核的内存,反正坏事做尽!你要一步步完善操作系统,才能让恶魔程序不能得逞。
前提知识
由于课程量较少,有些基础概念是没有详细解释的,比如寄存器,负数的编码等等。关于计算机组成相关的概念,我建议学习Nand 课的第一部分。第一部分课内容很少,两周就能上完。但计算机组成的基本概念都涉及到了。
第二个是数据结构,具体一点是了解链表,map,queue的抽象接口,知道链表的实现方式。知道这些就可以了。
耗时
每个project大概是10小时左右,每个lab则是5-8小时。课程的话可能就虚拟内容的page table那块难理解点,其他内容都过着很快。
耗时差不多是100小时左右。
注意lecture代码仓库在每学期都会重新归零。所以要么跟着最新学期或者趁新学期没开,赶紧把相关资料都下载了(lecture code,lab,project)