课程介绍

CSCI 0300 是布朗大学开设的一门有关计算机系统的课程,课程教材是 CSAPP

课程官方给出的课程定位是:

Do you want to understand the magic that makes our computers work? CSCI 0300 is your chance to master that magic.

授课教授是 Malte Schwarzkopf ,他之前在 MIT 教了 6.824 Spring 2018 。

课程资源

课程主页 http://cs.brown.edu/courses/csci0300/

除了视频之外的所有课程资源均可在课程主页上找到

课程 Github 地址 https://github.com/csci0300

可在这里找到课程作业的初始代码以及课程中的实例代码。

Nice 呀,咱的 QQ 频道和 Discord 的 CSAPP 分区都可以用起来

这个和CMU15-213的CSAPP课程相比怎么样呢?

    Great!希望我们有更多的同学跟进。

    3 个月 后

    parkma 问了一位朋友,本地测试都是全的,前面难度还好,后面两个project难度直接嗖的🤣

    4 个月 后

    最近学习完了这门课程,在这里提供一些介绍及建议

    所属院校

    Brown University

    课程页面

    https://cs.brown.edu/courses/csci0300/2022

    介绍

    正如首页所说,这门课将会从硬件层到网络层,讲述计算机系统背后的“魔法”

    This is a great class for students who are interested in learning what systems programming is, how systems work, and why these systems are so critical to modern technology.

    通过这门课的学习,我们可以:

    • 了解真实的计算机工作原理:理解程序运行的过程
    • 利用现代的编程工具进行学习(C/C++)
    • 通过课程设计的每个项目,实现操作系统的核心,实现一个分布式系统...
    • ...

    整个课程分为四个Block:

    1. Computer Systems Basics
    2. Fundamentals of Operating Systems
    3. Concurrency and parallel programming
    4. Distributed systems

    选用的参考教材及介绍如下

    • The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie (also known as "K&R"; Prentice Hall PTR, ISBN 0-13-110362-8) is the classic textbook for programming in C.
    • Computer Systems: A Programmer's Perspective, Third Edition (also known as "CS: APP3e") by Randal E. Bryant and David R. O'Hallaron (Pearson, 2015, ISBN 978-0134092669). This is a long, comprehensive textbook, and provides a background reference for the lecture material. If you would like to read about the same concepts explained in different words, or read beyond what we talk about in lectures, this will be a good starting point.

    配套资源

    • 全网没有公开的视频资源,但是每节课所配套的note都含括了知识要点(有没有视频都不会影响这门课的学习)
    • 几乎所有的Lab和Project都拥有本地测试。Lab0会指引配置统一的学习环境(支持Arm架构)
    • 每个Lab所设置的内容也十分有趣,Makefile的配置;学会使用检测内存泄漏的工具,使用gdb;学习x86-64汇编;了解多线程的编程;认识并使用一些简化网络服务和分布式系统的编程工具(如Protobuf,gRPC)...
    • 当然,最有趣的还是设置的6个project,熟悉C语言编程,制作一个内存管理工具,实现缓存的I/O,深入虚拟内存及进程的学习,加深对多线程编程的理解,实现一个分布式系统。
    • 当然,有趣归有趣,其难度也是较大的,这是门比较“冷门”的课程,且配置lab及project时会自动完成Github Classroom的配置,全网几乎没有公开答案。有时候一个Lab的学习可以用上一天,更别说Project了,在完成Project的时候需要正确的判断,否则会陷入题目的陷阱,认认真真学习这些内容对自己的代码能力绝对能有提升。
    • 在首页点击Resource还可以浏览对应Topic下的习题及解析,灵活考察了所学的内容,可以作为复习的材料

    建议

    • 希望你有一定的体系结构基础(阅读过或准备阅读CSAPP,或者学习过CS61C...)
    • 你需要有勇气与时间来学习这门课程,因为你可能会因为第一个Project就被劝退
    • 灵活运用一些库函数,多多查阅相关文档,这门课的学习可以说,很自由,允许使用STL库
    • 如果真的没有想法,可以在这里交流,Q群:923303787
    1 年 后

    接受安利并完整地吃下了!

    资源

    一共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)

      © 2018-2025 0xFFFF