本文参考《深入理解计算机系统》机械工程出版社
文章目录
Chapter 1 计算机系统漫游
1.1 引入案例hello.c
代码
#include <stdio.h>
int main()
{
printf ("hello world\n");
return 0;
}
编译过程
运行hello程序 P7
1.2 重要概念
1.2.1 系统的主要硬件
- 总线
- I/O设备
- 主存
- 处理器
1.2.2 存储设备的层次结构
1.2.3 进程、虚拟内存和文件
1.2.4 系统间网络通信
1.2.5 并发和并行
并行是指两个或者多个事件在同一时刻发生;
并发是指两个或多个事件在同一时间间隔内发生。
在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。
倘若在计算机系统中有多个处理器,则这些可以并发执行的程序便可被分配到多个处理器上,实现并行执行,即利用每个处理器来处理一个可并发执行的程序,这样,多个程序便可以同时执行。
并行可以在计算机系统的多个抽象层次上运用
由高到低的三个层次
- 线程级并发:一个进程执行多个控制流(多个CPU)
- 指令级并行:CPU同时执行多条指令
- 单指令、多数据并行:允许一个指令产生多个可以并行执行的操作
1.2.6 计算机系统中的抽象
Chapter 2 信息的表示和处理
Chapter 3 程序的机器级表示
ATT 与 Intel 汇编代码格式的不同
- Intel 代码省略了指示大小的后缀,我们看到指令 push 和 mov,而不是 pushq 和 movq
- Intel 代码省略了寄存器名字前面的 ’%‘ 符号,用的是 rbx,而不是 %rbx
- Intel 代码用不同的方式来描述内存中的位置,例如是 ’QWORD PTR [rbx]‘ ,而不是 ’(%rbx)‘。
- 在带有多个操作数的指令情况下,列出操作数的顺序相反。当在两种格式之间进行转换的时候,这一点非常令人困惑。
Chapter 4 处理器体系结构
4.1 基本概念
本章主要介绍一个处理器的硬件和指令,以及处理器的工作原理
本章定义了一个ISA为“Y86-64”指令集,数据类型、指令、寻址方式都比x86少些,设计它的CPU译码逻辑也比较简单,但足够完整。
指令集体系结构ISA
一个处理器支持的指令和指令的字节级编码
ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层,编译器编写者只需要知道允许哪些指令,以及它们是如何编码的;而处理器的设计者必须建造出支持这些指令的处理器。
4.2 Y86-64指令集体系结构
定义一个ISA,包括定义
- 各种状态单元
- 指令集
- 指令集编码
- 一组编程规范和异常事件处理
程序员可见的状态:可修改的处理器的某些部分
- 15个程序寄存器:%rax %rbx %rcx %rdx %rsp %rbp %rsi %rdi %r8 %r14
- 3个一位条件吗:ZF、SF、OF
- 程序计数器PC
- DMEM内存
- 状态码Stat:表明程序执行的总体状态,会指示是正常运行,还是出现了某种异常
指令
- 4个movq指令:irmovq、rrmovq、mrmovq、rmmovq。显式地指明源和目的操作数。第一个字母表明源类型,可以是立即数(i)、寄存器(r)和内存(m),第二个字母表示目的类型,可以是寄存器(r)或内存(m)
内存传送指令中的内存引用方式是简单的基址+偏移量形式
不允许内存间直接传数据,也不允许将立即数传送到内存 - 4个整数操作指令:addq、subq、andq、xorq。只能对寄存器数据进行操作,x86可对内存操作,这些指令会设置3个条件码ZF、SF、OF
- 7个跳转指令:jmp、jle、jl、je、jne、jge、jg。
- 6个条件传送指令:cmovle、cmovl、cmove、cmovne、cmovge、cmovg。
- call指令:将返回地址入栈,然后跳到目的地址。
ret指令:从调用中返回 - pushq和popq:入栈和出栈
- halt:停止指令的执行,并将状态码设置为HLT
指令编码
见书P246
异常
状态码Stat
值 | 名字 | 含义 |
---|---|---|
1 | AOK | 正常操作 |
2 | HLT | 遇到器执行halt指令 |
3 | ADR | 遇到非法地址 |
4 | INS | 遇到非法指令 |
4.3 逻辑设计和硬件控制语言HCL
在当前技术中,逻辑1是用1.0伏特左右的高电压表示的,逻辑0是用0.0伏特左右的低电压表示的。
要实现一个数字系统需要三个主要的组成部分
- 计算对位进行操作的函数的组合逻辑
- 存储位的存储器单元
- 控制存储器单元更新的时钟信号
现代逻辑设计
- HDL:一种文本表示,用来描述硬件结构而非程序行为的
- Verilog:语法类似C
- VHDL:语法类似Ada
组合逻辑