速度《深入理解计算机系统》总结
1.“hello”程序的生命周期
(1) “hello”程序的生命周期是从一个源程序开始的,即程序员通过编辑器创建并保存文本文件hello.c;
(2)每条C语句都必须转化为一系列的低级机器语言指令才能在系统上运行,源文件要被转化为编译文件并存放在磁盘上;
(3)将文件名输入到成为shell的应用程序中才能运行该可执行文件,如下:
linux>./hello
hello,world
linux>
(4)运行“hello”程序
2.压入和弹出栈数据
栈是一种数据结构,可以添加或者删除值。不过,要遵循“先进后出”的原则,通过push操作把数据压入栈中,通过pop操作删除数据。指令效果如下表。
将一个四字值压入栈中,首先要将栈指针减8,然后将值写到新的栈顶地址。因此指令pushq %rab的行为相当于下面两条指令:
subq $8,%rsp
movq %rab,(%rsp)
数据具体移动存储过程如下图。
3.Y86-64的顺序实现和流水实现
(1)顺序实现:取指,译码,执行,访存,写回,更新PC。下图是SEQ的硬件结构(一种顺序实现)
(2)流水实现:SEQ+重新安排计算
插入流水线寄存器
对信号进行重新编排和标号
预测下一个PC
4.存储器层次结构
存储技术:不同存储技术的访问时间差异很大。速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小。CPU和主存之间的速度差距在增大。
计算机软件:一个编写良好的程序倾向于展示出良好的局部性。
硬件和软件的这些基本属性互补得很完美。根据这一性质,人们想到了一个组织存储器系统的方法,即存储器层次结构。从高层向底层走,存储设备变得更慢,更大,更便宜。
5.Linux、x86-64系统中的异常
(1)Linux/x86-64故障和终止
- 除法错误
- 缺页
- 一般保护故障
- 机器检查
(2) Linux/x86-64系统调用