读薄/读厚 CSAPP
本系列脱胎于我的《深入理解计算机系统》学习笔记,做了精简和整合。这是一本非常经典的教材,也是一本大部头(一千多页),我希望以『读薄』和『读厚』的形式,让更多人能领略到经典的风采。
18 篇 · 按学习顺序阅读
专题目录
读薄:基础知识10 篇
- 【读薄 CSAPP】零 系列概览
曾经的《深入理解计算机系统》课程笔记重新启航出发,更清晰的知识结构,更细致的概念分析,更紧密的课程关联。从文字到图片完全原创,希望能给大家不一样的阅读体验。
- 【读薄 CSAPP】壹 数据表示
道生一,一生二,二生三,三生万物。计算机中的一二三是什么?它们又是如何构造出如此精彩纷呈的数字世界的?这一讲我们从最基本的数据表示开始,慢慢走进计算机系统的大门。
- 【读薄 CSAPP】贰 机器指令与程序优化
计算机能读懂的只有零和一,而我们用汇编去和计算机『感同身受』。接近硬件底层,很多代码中再平常不过的概念,具体实现起来则并没有看起来那么『理所当然』。这一讲我们会了解程序到底是如何执行的,在知其所以然后,自然可以发现高效代码的秘密。
- 【读薄 CSAPP】叁 内存与缓存
我们知道,速度越快的存储,价格也就越贵。计算机作为工程的结晶,是如何从一条规则出发,做到『物美价廉』的呢?这条规则又是什么呢?这一讲我们从不同的存储讲起,看看『带着镣铐跳舞』的最高境界。
- 【读薄 CSAPP】肆 链接
不同的代码是如何被拼到一起协同工作的呢?所谓的静态库,动态库又是什么?编译和链接的不同在哪里?这一讲我们结合一丁点编译原理的内容,来说说链接那点事儿。
- 【读薄 CSAPP】伍 异常控制流
异常控制流可能是很多人知道却说不清楚具体发生了什么的『著名』概念,什么是异常?系统又是怎么处理这个看起来『不一样』的机制的呢?信号在这里扮演了什么角色?这一讲我们就来讲讲异常与信号到底是怎么回事儿。
- 【读薄 CSAPP】陆 系统输入输出
Linux 系统中 IO 的概念是非常有趣的,结合『所有东西都是文件』这个抽象,无论是输入输出重定向,还是挂载不同的设备,甚至是网络编程,都可以由系统输入输出这个统一的模型来进行描述。这一讲我们就来了解一下以 stdin, stdout 等为代表的系统输入输出。
- 【读薄 CSAPP】柒 虚拟内存与动态内存分配
进程是操作系统中最重要的抽象,虚拟内存令这一切成为可能,为什么进程可以使用完整且连续的虚拟地址空间,而不需要关注物理内存呢?另外,计算机又是如何管理我们 new 的对象的?这一讲我们就来看看关于内存的这两个重要话题。
- 【读薄 CSAPP】捌 网络编程
在这个网络成为『必需品』的时代,让我们从最原始的 Socket(套接字)开始,来看看程序是如何通过网络进行『沟通』的。更有意思的是,这一讲我们会介绍如何通过 C 语言从零开始实现自己的服务器程序。
- 【读薄 CSAPP】玖 并行与同步
进程和线程有什么差别?超线程又是什么意思?为什么多线程能够提高程序执行的速度?是所有情况都适用吗?并行程序有没有什么限制?这一讲我们来聊聊并行与同步这两个『继往开来』的概念。在今后的学习中,大家一定会不止一次发现,很多问题说来说去,其实就是并行与同步的问题。
读厚:动手实验8 篇
- 【读厚 CSAPP】实验概览
如果说《深入理解计算机系统》的课本是九十分的话,那么配套的实验少说得有一百五十分。完成实验的过程,也就是深入理解计算机系统的过程,真正动手去做,一是会发现『纸上得来终觉浅』,二是会意识到『知行合一』的重要性。
- 【读厚 CSAPP】I Data Lab
万事开头难,尤其是和 0 与 1 打交道,和后面的实验相比,这次只能算个热身。但是喜欢运动的都知道,热身很重要!
- 【读厚 CSAPP】II Bomb Lab
想体验拆弹部队的千钧一发吗?想当一回柯南来一次『真相只有一个』吗?那么这个实验绝对能给你非同寻常的感受:原来作业可以这么有趣!
- 【读厚 CSAPP】III Attack Lab
漏洞天天听说,为什么溢出了就可以进行攻击呢?虽然做完这次实验并不能赋予自己给 iOS 越狱的能力,但是至少能实现简单的代码攻击了。
- 【读厚 CSAPP】IV Cache Lab
缓存系统可谓是『随风潜入夜,润物细无声』的代表了,这次我们要当一次幕后英雄,来自己写一个缓存系统!
- 【读厚 CSAPP】V Shell Lab
前面的实验都要在 shell 中运行,这次我们直接做一个自己的 shell!这之后无论是异常还是信号,都难不倒我们啦。
- 【读厚 CSAPP】VI Malloc Lab
这次我们会实现自己的 malloc, free, realloc, calloc 函数,并借此深入理解堆中的内存分配机制。更有意思的是,gdb 在这次实验中基本没太多用处,我们要自己写堆检查器用来 debug。
- 【读厚 CSAPP】VII Proxy Lab
很多人用过 tomcat,但很少人会想写一个自己的 tomcat,毕竟听起来就觉得浩大。不过不要紧张,这次我们用几百行代码写一个代理服务器,多线程还带缓存,甚至可以自己在浏览器里用!