深入理解计算机系统结构_ch1

第1章 计算机系统漫游

1.1 信息就是位+上下文
1.2 程序被其他程序翻译成不同的格式
1.3 了解编译系统如何工作是大有益处的
1.4 处理器读并解释储存在内存中的指令
1.5 高速缓存至关重要
1.6 储存设备形成层次结构
1.7 操作系统管理硬件
1.8 系统之间利用网络通信
1.9 重要主题
1.10 小结


1.1 信息就是位+上下文

  • hello程序的生命周期是从一个源程序开始的,即程序员通过编辑器创建并保存的文本文件,文件名hello.c。源程序实际上就是一个由值0和1组成的位序列。hello.c程序是以字节序列的方式储存在文件中。像hello.c这样只由ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
  • 大部分现代计算机系统都使用ASCII标准来表示文本字符。
  • 系统中所有的信息都是由一串比特表示的。
  • 作为程序员,需要了解数字的机器表示方法,因为它们与实际的整数和实数是不同的。它们是对真值的有限近似值。

1.2 程序被其他程序翻译成不同的格式

gcc编译器驱动程序,编译系统

Linux> gcc -o hello hello.c

在这里插入图片描述

  • 预处理阶段. hello.c -> hello.i.预处理器cpp根据以字符#开头的命令,修改原始的C程序。读取头文件,插入程序文本中,得到另一个C程序,以.i作为文件扩展名。
  • 编译阶段. hello.i -> hello.s. 编译器ccl将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序
  • 汇编阶段. hello.s -> hello.o. 汇编器as将hello.s翻译成机器语言指令,把这些指令打包成可重定位的目标程序,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件。
  • 链接阶段. hello.o -> hello. 链接器ld负责将printf函数单独预编译的printf.o和hello.o程序合并,得到hello文件,是可执行目标文件,可以被加载到内存中,由系统执行。

1.3 了解编译系统如何工作是大有益处的

了解编译系统工作机制,可

  • 优化程序性能。
  • 理解链接时出现的错误。
  • 避免安全漏洞。

1.4 处理器读并解释储存在内存中的指令

  • hello.c 源程序已经被编译系统翻译成可执行的目标文件hello,并存储在磁盘上。执行
    linux> ./hello

  • 典型的系统硬件组织
    在这里插入图片描述

  • 总线.携带信息字节并负责在各个部件间传递。字,字中的字节数是字长。

  • I/O设备.系统与外部世界的联系通道。每个I/O设备通过一个控制器适配器与I/O总线相连。控制器适配器之间的区别主要在于它们的封装方式。控制器是I/O设备本身或者系统的主印制电路板(主板)上的芯片组,而适配器时一块插在主板插槽上的卡。功能都是在I/O总线和I/O设备之间传递信息。

  • 主存.临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的;从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),地址从零开始。

  • 处理器. 中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎。核心是一个大小为一个字存储设备(或寄存器),称为程序计数器(PC)。PC任何时候都指向主存中某条机器指令。不断更新程序计数器,指向下一条指令。寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字。加载:从主存到寄存器、存储:从寄存器到主存、操作:寄存器到寄存器、跳转:到PC

  • 运行hello程序。

  1. 键盘输入字符,shell程序将字符逐一读入寄存器,再存放到内存中。
    在这里插入图片描述
  2. 将hello目标文件中的代码和数据从磁盘复制到主存,利用直接存储器存取(DMA)技术,数据可以不通过处理器直接从磁盘到主存。
    在这里插入图片描述
  3. 处理器执行机器语言指令,将结果字符串“hello, world\n”中字节从主存复制到器存起文件,再从寄存器文件复制到显示设备。

在这里插入图片描述


1.5 高速缓存至关重要

  • 根据机械原理,较大的存储设备要比较小的存储设备运行得慢,而快速设备的造价远高于同类的低速设备。
  • 针对处理与主存之间的差异,设计高速缓存存储器
  • 高速缓存是用静态随机访问存储器(SRAM)的硬件技术实现的。
  • 利用高速缓存的局部性原理。

1.6 储存设备形成层次结构

  • 存储器层次结构。
    在这里插入图片描述

1.7 操作系统管理硬件

在这里插入图片描述

  • 进程是操作系统对一个正在运行的程序的抽象。处理器在进程间切换,操作系统实现这种交错执行的机制称为上下文切换,保存当前进程的上下文,恢复新进程的上下文。通过系统调用将控制权传递给操作系统。进程转换是由系统内核管理的,内核是操作系统代码常驻主存的部分,不是一个独立的进程,是系统管理全部进程所用的代码和数据结构的集合
    在这里插入图片描述

  • 线程.一个进程由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同意的代码和全局数据。

  • 虚拟内存. 一个抽象概念,为每个进程提供一个假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间。最上面的区域是保留给操作系统中的代码和数据的,所用进程都是一样的。底部区域存放用户进程定义的代码和数据。
    程序代码和数据:对所有进程,代码从同一固定位置开始。代码和数据区是直接按照可执行目标文件的内容初始化的
    堆:代码和数据区在进程已开始运行时就指定来大小,当调用malloc和free这样的c标准库函数时,堆可以在运行时动态的扩展和收缩
    共享库:地址空间中间部分是一块用来存放像C标准库和数据库这样的共享库的代码和数据的区域
    栈:位于用户虚拟空间顶部的是用户栈,编译器用它来实现函数调用,可以动态扩展和收缩
    内核虚拟内存:地址空间顶部的区域是为内核保留的
    在这里插入图片描述

  • 文件就是字节序列。每个I/O设备都可以看成是文件。


1.8 系统之间利用网络通信

  • 网络可视为一个I/O设备,通过网络适配器。

在这里插入图片描述
在这里插入图片描述


1.9 重要主题

  • Amdahl定律
    在这里插入图片描述
    Amdahl定律主要观点:想要显著加速整个系统,必须提升全系统中相当大的部分的速度。
    在这里插入图片描述

  • 并发和并行.
    1.线程级并发.
    在这里插入图片描述
    2.指令级并行.流水线,超标量处理器(比一个周期一条指令更快的执行速率)。
    3.单指令、多数据并行. SIMD

  • 计算机系统中抽象的重要性.
    文件是对I/O设备的抽象,虚拟内存是对程序存储器的抽象,进程是对正在运行的程序的抽象,虚拟机是对整个计算机的抽象。
    在这里插入图片描述


1.10 小结

在这里插入图片描述

发布了46 篇原创文章 · 获赞 15 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/sinat_34686158/article/details/104356246