Stanford CS140e: An Experimental Course on Operating Systems课程推荐

Stanford CS140e: An Experimental Course on Operating Systems课程推荐

今天推荐一门斯坦福的新课 CS140e: An Experimental Course on Operating Systems.

关键词: Stanford,裸机编程,Rust,操作系统


0.2 课程链接

Stanford CS140e - Operating Systems


0.3 课程&作业内容 (摘自课程官网)

Disks, File systems, I/O, Threads & Processes, Scheduling, Virtual Memory, Protection & Security, Interrupts, Concurrency & Synchronization.

  • Assignment 0: Raspberry Pi Setup
  • Assignment 1: Shell and Bootloader
  • Assignment 2: SD Driver and FAT File System
  • Assignment 3: Spawn
  • Assignment 4: Multitasking and Multicore


0.4 知识储备

一般来说点亮传统CS System这条技能树都是这个顺序: 编程语言 ->数据结构->组成原理->操作系统,这门操作系统实验课之前自然就是组成原理,也就是以下三门课

stanford cs107/ berkeley cs61c/ cmu 15-213 and equivalent

大部分的操作系统课实验是在一个宿主操作系统上的写或者改一个玩具操作系统(Weenix之类的mini unix),而这门课的e(实验)主要强调的是通过在裸机环境编程(bare metal programming)真正实现一个操作系统。和140e相比,前者就好像在戴套学...

0.5 为什么要学CS140e?

for MOOCer/名校CS网课爱好者: 难得的神课开放资源啊!MOOC一般太简单,四大名校里的大部分神课都是被藏着掖着,往往校外闲散人员(你我这样的)是拿不到stencil code初始源代码的,而初始源代码又往往非常有助于学习,例如自带测试用例,API规范,以及作业的一些小提示防止掉坑。当你看完课程介绍满心欢喜准备撸起袖子加油干的时候,一般看到的都是这个

今年140e第一次开,除了课堂视频所有资源都放出来供大家学估计也是征求外界的反馈,兴许明年这个课想点开作业也是上面这个了。

for 转CS/北美找CS工作er:这是一门系统方向的硬课,真的很难,最好需要有我上面提到的先修课基础,不然应该是很难跟下来的。如果是为了拿工作offer还是刷leetcode性价比,如果只想明白线程和进程之间的区别直接去看Crack the Coding Interview这类书就好,但如果真的想搞懂OS是怎么转起来的,请跟我一起来这里入坑!


for已经毕业工作了的:LZ本人现在也属于这一类,日常C/C++为主。工作中很多项目的优化其实不在于算法复杂度,而是跟系统打交道,缓存, I/O,内存映射等等等等。正所谓大道至简,其实无论是c++还是rust这类静态强类型需要编译的语言,背后主要都在处理内存,堆栈,指针,指令这些最基本的东西。学会Rust虽然不会在工作中直接用到,但是这门新语言带来的思想(尤其是lifetime生命周期)还能带来一个新的思考方式,体会Rust设计者如何把程序中runtime可能的segfault在compile time让编译器发现。



0.6 注意事项

希望知乎er达成一个共识,千万千万别把写好的作业上传github,做一个遵守honor code的人。只有这样学校才愿意把更多的好资源放到网上让大家一起学形成一个良性循环。


0.7 物资准备: 买买买!

如果在美国的可以参考我的amazon这个购物清单。 除此之外还需要MICRO-SD卡和MICRO-SD to USB转换器(或者SD卡托+电脑自带SD卡槽也行)

楼主本人买的这个,非常坑爹不好用,不要图便宜


总结:

笔者趁着下班和周末时间赶完了截止现在的所有作业(Assignment 0 & Assignment 1 Phase 1),以下是我的作业攻略(有部分剧透):


Assignment 0:

前两阶段手把手教你搭建一个小电路,读入预先编译好的二进制文件让灯闪起来。阶段三是用C写出能编译成前面闪灯这样的一段程序,最后阶段四是用Rust实现。后两个阶段由于初始代码给的都非常直接,并且只需要在固定的寄存器映射地址做读写操作,可以做到三五行代码完成灯闪任务。更为一般地,可以抽象成以下这两个函数, 实现读写任意FSEL,CLR,SEL类寄存器。

void gpio_pin_func_set (GPIO pin, FuncSelectOp op);
void gpio_pin_output (GPIO pin, OutputOp op)

考察内容:

阅读文档的能力

web.stanford.edu/class/

简单电路拼接

逻辑运算(Bitwise operation)

Rust语法现学现卖

最终效果

https://www.zhihu.com/video/938388840231280640


Assignment 1:

Phase 1 Ferris wheel

通过改25个Rust小程序巩固Rust语法和生命周期的知识,如果没学过Rust,强烈建议先概览一遍The Rust Programming Language ,然后边改程序边google/stackoverflow,学一门新语言(尤其Rust这种让你带上手铐脚镣跳舞的)考验一个人的耐心和学习能力。


我会有空继续更新,祝大家刷课愉快!


1.21更新

补充一下如何获得作业。很多同学表示找不到作业,点开就是校内才能注册。请看

在assignment0里面如下框位置打开命令行从github下载初始代码就可以开始做了!

编辑于 2018-01-22