回到首页

输入关键词,多个关键词用空格分隔。

← 返回栏目

CSAPP 原始课程笔记

按课堂进度整理的 27 篇计算机系统笔记、7 篇实验笔记和期中复习,与「读薄/读厚 CSAPP」相互补充。

35 篇 · 按学习顺序阅读

专题目录

课堂笔记27 篇

  1. 深入理解计算机系统 第 1 课 总览

    这门课是 CMU 的镇校神课,其课程编号 15213 也正是 CMU 的邮编,故有:不上 15213,等于没来过 CMU。课本 CSAPP 也是非常经典的计算机教材。虽然我之前大概看过一次,不过这次跟着 CSAPP 的作者一起,再学习一次。

  2. 深入理解计算机系统 第 2 课 Bits, Bytes 和 Integers

    这一部分的内容比较多,所以分了两节课来讲,为了保证内容的一致性和连贯性,这里把两讲合为一讲。主要介绍的是基本的计算性质以及计算机如何表示数字和地址,对之后理解指针有很大的帮助。

  3. 深入理解计算机系统 第 3 课 Floating Point

    了解了数据在内存中的基本存储形式,同时也知道了整型的表达方法,这一讲我们来看看另一大类别的数字——浮点数——是如何在计算机中表示的。

  4. 深入理解计算机系统 第 4 课 Machine Basics

    从这一讲开始,我们接触到更多机器相关的内容,这次要说的是基础知识,为之后更深入讲解打下基础。

  5. 深入理解计算机系统 第 5 课 Machine Control

    上一讲我们了解了关于机器代码,汇编和 CPU 相关的基础知识,这一讲要来说一下具体机器是怎么实现代码中常见的流程控制的。这一部分涉及的代码和思路稍微有些不容易理解,我会尽量写得详细一些。

  6. 深入理解计算机系统 第 6 课 Machine Procedures

    之前我们学习了机器是如何利用跳转实现流程控制的,这一讲我们来看一个更加复杂的机制:过程调用(也就是调用函数)具体在 CPU 和内存中是怎么实现了。理解之后,对于递归会有更加清晰的认识。

  7. 深入理解计算机系统 第 7 课 Machine Data

    上一讲我们了解了过程调用是如何用机器代码实现的,这一讲我们来看看基本的数据是如何存储在计算机中的。

  8. 深入理解计算机系统 第 8 课 Machine Advanced

    这一讲是机器代码的最后一部分,会介绍一些『高级』话题,比如程序在内存中的组织,缓冲区溢出引起的攻防大战,以及 Union 的具体实现方式。

  9. 深入理解计算机系统 第 9 课 Program Optimization

    这一讲可谓是全书最实用的部分,介绍如何基于代码执行的机制,去优化我们的代码。

  10. 深入理解计算机系统 第 10 课 Memory Hierarchy

    从这一讲开始我们会介绍有关存储的知识(估计前面的汇编已经看得够呛了吧),个人的感觉来说会稍微轻松一些,但是概念比较多,一定要弄清楚再继续。

  11. 深入理解计算机系统 第 11 课 Cache Memories

    上一讲我们了解了存储的相关知识,这节课我们来更加深入研究一下 cache memory 的知识。

  12. 深入理解计算机系统 第 12 课 Linking

    这一课我们要接触一个新概念:Linking,简单来说就是计算机如何让不同的代码协同工作的方式。

  13. 深入理解计算机系统 第 13 课 Exceptions and Processes

    了解完了链接,我们来看看在程序出错的时候会发生什么事情,这一课我们主要来了解异常与进程。

  14. 深入理解计算机系统 第 14 课 Signals and Nonlocal Jumps

    了解完了异常与进程,异常处理中另外两个很重要的部分是信号和非局部跳转,也就是我们这节课要介绍的内容。

  15. 深入理解计算机系统 第 15 课 System Level I/O

    了解完了 Exceptional Control Flow,我们再来看看系统级 IO 的相关内容,完成这一课之后,就可以开始写我们自己的 shell 程序了。

  16. 深入理解计算机系统 第 16 课 Virtual Memory - Concepts

    这节课开始,我们会接触到计算机系统中另外一个非常重要的概念:虚拟内存。这个机制提供给了上层应用一个统一的地址空间,而无须操心物理内存的位置。

  17. 深入理解计算机系统 第 17 课 Virtual Memory - System

    了解了基本的虚拟内存概念,这节课我们来具体看看 Core i7 和 Linux 的内存系统,相信会对虚拟内存这一套机制有更深刻的认识。

  18. 深入理解计算机系统 第 18 课 Dynamic Memory Allocation - Basic Concept

    前面了解了虚拟内存的相关知识,这节课我们来看看动态内存分配的基本概念,相信这之后就知道诸如 `malloc` 和 `new` 这类方法是怎么做的了。

  19. 深入理解计算机系统 第 19 课 Dynamic Memory Allocation - Advanced Concept

    这节课我们来看看关于内存分配的延伸话题,包括更加复杂的选择机制以及垃圾回收等相关内容。

  20. 深入理解计算机系统 第 20 课 Network Programming I

    网络已经成为了我们『智能』生活中最重要的一部分,这两节课我们会通过 C API 来了解具体的网络相关编程(用更高层次的封装只会更轻松!)

  21. 深入理解计算机系统 第 21 课 Network Programming II

    这节课我们来学习如何编写 web 服务器!

  22. 深入理解计算机系统 第 22 课 Concurrent Programming

    如果想要充分利用硬件资源,就要尽可能让计算机同时处理多项事务,具体是怎么实现的?又哪些基本的策略?这节课会一一解答。

  23. 深入理解计算机系统 第 23 课 Synchronization - Basics

    并行编程中最重要的问题就是同步,这节课我们来了解同步相关的基础知识

  24. 深入理解计算机系统 第 24 课 Synchronization - Advanced

    这节课我们通过『生产者-消费者问题』以及『读者-写者问题』来更深入理解同步机制。

  25. 深入理解计算机系统 第 25 课 Thread-Level Parallelism

    这节课我们从硬件讲起,然后介绍线程级并行,最后说一下一致性模型。这部分内容在我当助教的 18645 How to Write Fast Code 也有涉及。

  26. 深入理解计算机系统 第 26 课 Future of Computing

    从 1965 年看 2015 年,和从 2015 年想象 2065 年,究竟哪个会更让我们惊喜?

  27. 深入理解计算机系统 第 27 课 总结

    为什么 15213 在 CMU 是当之无愧的第一神课?我们需要怎么样的教育?这门课都给了我太多启发。

实验笔记7 篇

  1. 深入理解计算机系统 习题课 1 Datalab

    这一讲主要是介绍第一次作业 Datalab 的相关内容以及解法,还包括如何在远程机器上编写代码和测试。

  2. 深入理解计算机系统 习题课 2 Bomblab

    这一讲主要是介绍第二次作业 Bomblab 的相关内容以及解法。

  3. 深入理解计算机系统 习题课 3 Attacklab

    这次的作业中,我们将要亲自上手利用漏洞来进行代码注入的攻击,听起来很刺激不是吗?

  4. 深入理解计算机系统 习题课 4 Cachelab

    这节课我们来讲讲第四次作业,主要会尽可能利用缓存来加速计算,不过在开始作业之前会先复习一下 C 语言。

  5. 深入理解计算机系统 习题课 5 Shelllab

    这次的作业,我们需要自己完成一个简单的 shell 程序,通过具体的实现,我们可以更加深入地计算机运行的机制(尤其是 Exceptional Control Flow 和进程)。

  6. 深入理解计算机系统 习题课 6 Malloclab

    在这个实验中,我们会实现自己的 `malloc`, `free`, `realloc`, `calloc` 函数,并借此深入理解堆中的内存分配机制。

  7. 深入理解计算机系统 习题课 7 Proxylab

    这次,我们来自己实现一个多线程带缓存的代理服务器!

期中复习1 篇

  1. 深入理解计算机系统 期中考试复习

    这一次我们主要来回顾一下重要的知识点,以及讲解一些往年试题中容易混淆的概念。