admin管理员组

文章数量:1130349

本文参考《深入理解计算机系统》机械工程出版社

文章目录

  • Chapter 1 计算机系统漫游
    • 1.1 引入案例hello.c
    • 1.2 重要概念
      • 1.2.1 系统的主要硬件
      • 1.2.2 存储设备的层次结构
      • 1.2.3 进程、虚拟内存和文件
      • 1.2.4 系统间网络通信
      • 1.2.5 并发和并行
      • 1.2.6 计算机系统中的抽象
  • Chapter 2 信息的表示和处理
  • Chapter 3 程序的机器级表示
  • Chapter 4 处理器体系结构
    • 4.1 基本概念
    • 4.2 Y86-64指令集体系结构
    • 4.3 逻辑设计和硬件控制语言HCL
    • 4.4 Y86_64的顺序实现(SEQ)
    • 4.5 Y86_64的流水线实现
  • Chapter 5 优化程序性能
    • 5.1 基本概念
    • 5.2 基本优化
      • 5.2.1 消除循环的低效率
      • 5.2.2 减少过程调用
      • 5.2.3 消除不必要的内存引用
    • 5.3 处理器微体系结构的优化
      • 5.3.1 循环展开
      • 5.3.2 提高并行性
    • 5.4 存储优化
    • 5.5 大型应用场景的优化
  • Chapter 6 存储器层次结构
    • 6.1 存储技术
    • 6.2 局部性
    • 6.3 存储器结构层次
    • 6.4 高速缓存
      • 6.4.1 高速缓存种类
      • 6.4.2 编写高速缓存友好的代码
      • 6.4.3 高速缓存对程序性能的影响
  • Chapter 7 链接
    • 7.1 基本概念
    • 7.2 静态链接
    • 7.3 符号解析
    • 7.4 重定位
    • 7.5 静态链接库
    • 7.4 动态链接库
    • 7.5 库打桩机制
  • Chapter 8 异常控制流
    • 8.1 基本概念
    • 8.2 异常
      • 8.2.1 异常处理
      • 8.2.2 异常的类别
    • 8.3 进程
    • 8.4 信号
  • Chapter 9 虚拟内存
    • 9.1 基本概念
    • 9.2 虚拟内存的工作原理
    • 9.3 地址翻译
  • Chapter 10 系统级I/O
  • Chapter 11 网络编程
  • Chapter 12 并发编程

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

组合逻辑

本文参考《深入理解计算机系统》机械工程出版社

文章目录

  • Chapter 1 计算机系统漫游
    • 1.1 引入案例hello.c
    • 1.2 重要概念
      • 1.2.1 系统的主要硬件
      • 1.2.2 存储设备的层次结构
      • 1.2.3 进程、虚拟内存和文件
      • 1.2.4 系统间网络通信
      • 1.2.5 并发和并行
      • 1.2.6 计算机系统中的抽象
  • Chapter 2 信息的表示和处理
  • Chapter 3 程序的机器级表示
  • Chapter 4 处理器体系结构
    • 4.1 基本概念
    • 4.2 Y86-64指令集体系结构
    • 4.3 逻辑设计和硬件控制语言HCL
    • 4.4 Y86_64的顺序实现(SEQ)
    • 4.5 Y86_64的流水线实现
  • Chapter 5 优化程序性能
    • 5.1 基本概念
    • 5.2 基本优化
      • 5.2.1 消除循环的低效率
      • 5.2.2 减少过程调用
      • 5.2.3 消除不必要的内存引用
    • 5.3 处理器微体系结构的优化
      • 5.3.1 循环展开
      • 5.3.2 提高并行性
    • 5.4 存储优化
    • 5.5 大型应用场景的优化
  • Chapter 6 存储器层次结构
    • 6.1 存储技术
    • 6.2 局部性
    • 6.3 存储器结构层次
    • 6.4 高速缓存
      • 6.4.1 高速缓存种类
      • 6.4.2 编写高速缓存友好的代码
      • 6.4.3 高速缓存对程序性能的影响
  • Chapter 7 链接
    • 7.1 基本概念
    • 7.2 静态链接
    • 7.3 符号解析
    • 7.4 重定位
    • 7.5 静态链接库
    • 7.4 动态链接库
    • 7.5 库打桩机制
  • Chapter 8 异常控制流
    • 8.1 基本概念
    • 8.2 异常
      • 8.2.1 异常处理
      • 8.2.2 异常的类别
    • 8.3 进程
    • 8.4 信号
  • Chapter 9 虚拟内存
    • 9.1 基本概念
    • 9.2 虚拟内存的工作原理
    • 9.3 地址翻译
  • Chapter 10 系统级I/O
  • Chapter 11 网络编程
  • Chapter 12 并发编程

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

组合逻辑

本文标签: SystemsComputerperspectiveProgrammer