csapp 深入理解计算机系統 笔记
- 参考
- lab
- 第1章:计算机系统漫游
- 第 2 章:信息的表示和处理
- Data Lab
参考
- 计算机速成课 | Crash Course 字幕组 (全40集 2018-5-1 精校完成)
- csapp重点解读
- 深入理解计算机系統 csapp
lab
- Lab Assignments
- Lab 直接下载
- 参考
第1章:计算机系统漫游
Amdahl定律: 当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度, 某一个部分占的时间百分比为
α
\alpha
α ,然后,把这一部分的性能提升 k 倍,系统性能提速的倍数为:
S
=
1
(
1
−
α
)
+
α
/
k
S=\frac{1}{(1-\alpha)+\alpha/k}
S=(1−α)+α/k1
第 2 章:信息的表示和处理
#include <stdio.h>
typedef unsigned char *pointer;
void show_bytes(pointer start, size_t len){
size_t i;
for (i = 0; i < len; i++)
printf("%p\t0x%.2x\n",start+i, start[i]);
printf("\n");
}
int main(){
int a = 0x01234567;
show_bytes((pointer) &a, sizeof(int));
}
输出:
gcc -g -O0 -o main main.c
./main
"小端表示:"
0x7fff82d76b84 0x67
0x7fff82d76b85 0x45
0x7fff82d76b86 0x23
0x7fff82d76b87 0x01
Data Lab
Data Lab: Manipulating Bits
wget http://csapp.cs.cmu.edu/3e/datalab-handout.tar
tar -xf datalab-handout.tar
# 直接安装gcc-multilib 可能会报
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc: No such file or directory
# 安装对应版本的
sudo apt install -y gcc-9-multilib
# 编译与测试
make
./btest -f bitXor
参考
/* 德摩根定律
(1) x^y = (~x&y)|(~y&x) = ~(~((~x&y)) & (~((~y&x)))
(2)x ^ y = (x | y) & ~(x & y)
* bitXor - x^y using only ~ and &
*/
int bitXor(int x, int y) {
// return (~(x & y)) & (~(~x & ~y));
int a = ~(~x & y); //
int b = ~((~y)&x);
return ~(a&b);
}
// https://stackoverflow.com/questions/7300650/how-to-find-tmax-without-using-shifts
int isTmax(int x) {
int a = ~((x + 1) ^ x); // 当是最大值是为0
int b = !(x + 1);
return !(a + b);
}