1. CMU 15213_15513 CSAPP 深入理解计算机系统 Lecture 01 Course Overview 中英字幕_哔哩哔哩_bilibili
从这个课程中可以学到什么?(为什么要学这门课)
Great Reality #1(数字类型): Ints are not Integers, Floats are not Reals
对于整数的理解可能不像是你期望的那样。
Example1:数的平方一定大于等于0吗?
Float: yes!
Int:
Example2: 加法结合律
Unsigned & Signed Int:Yes!
Float:
Great Reality #2(汇编语言): You’ve Got to Know Assembly
可以学到汇编语言。它是 机器级别模型运行 的关键。
Great Reality #3(存储结构): Memory Matters
memory referencing bug example
typedef struct{int a[2];double d;
} struct_t;double fun(int i){volatile struct_t s;s.d = 3.14;s.a[i] = 1073741824; /* possibly out of bounds */return s.d;
}
运行结果:
为什么会出现这样的运行结果?
答:与数据如何在内存中布局有关。
调用 fun(3)
、fun(4)
时,是在改变这个浮点数d的字节。
当输入 6 时,修改了该程序的某些状态(它被用于维持程序运行,最有可能是记录已经分配的内存),这就导致了程序崩溃。
理解数据结构的机器级别表示、以及他们如何运行对于你处理这些漏洞的能力十分重要。
Great Reality #4: There’s more to performance than asymptotic complexity
程序中需要用到一些低级的优化,就需要了解系统的运行规律。 是什么让它运行得很好,是什么让它运行不佳。
Memory system performance example
将一个矩阵从源地址src 复制到 目标地址dst
void copyij(int src[2048][2048], int dst[2048][2048]){int i, j;for(i = 0; i < 2048; i++)for(j = 0; j < 2048; j++)dst[i][j] = src[i][j];
}
// 4.3ms
void copyij(int src[2048][2048], int dst[2048][2048]){int i, j;for(j = 0; j < 2048; i++)for(i = 0; i < 2048; i++)dst[i][j] = src[i][j];
}
// 81.8ms
第一个 比 第二个 快得多,与内存层次结构中的缓存有关。
Great Reality #5(网络): Computers do more than execute programs
网络。
学习方法
每章阅读三遍,然后做练习题。