《深入理解计算机系统》学习总结(一)

402 阅读4分钟

1.1 信息就是位+上下文

  • 位(bit) 来自英文bit,音译为“比特”,表示二进制位。位是计算机内部数据储存的最小单位
  • 位之上又有字节(byte) 8个位组成1个字
  • 计算机中储存信息用0和1(也就是位)来存储 但单独的位又无法达到存储信息的目的 只有连续的位才能达到存储的信息的目的 即位+上下文就是信息

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

在用户端编写的程序都需要被其他程序翻译成不同的格式来使计算机执行某种指令

例如hello程序

#include <stdio.h>

 int main()
 {
     printf("hello,world\n");
     return 0;
 }

hello程序在计算机中经过一系列翻译最终得到一个可执行目标程序

预处理器 编译器 汇编器 链接器一起构成编译系统

  • 预处理主要是处理一些宏定义,比如 #define、#include、#if 等。预处理的实现有很多种,有的编译器会在词法分析前先进行预处理,替换掉所有 # 开头的宏,而有的编译器则是在词法分析的过程中进行预处理。当分析到 # 开头的单词时才进行替换。当文件被预处理后就会生成另一个文件(即图片中hello.c预处理后生成hello.i)
  • 编译器降源程序代码编译为汇编语言进入汇编器
  • 汇编器将编译器生成的汇编语言程序翻译为机器语言指令 将指令打包打包成一种叫做可重复定位目标程序的文件,并将结果保存在hello.o中 (hello.o为二进制文件)
  • 链接阶段,程序调用标志C库里面的函数如‘printf’函数。‘printf’函数存在于一个名为printf.o的单独的预编译好的目标文件中。链接即是hello.o和print.o通过某种方式合并在一起,结果得到hello文件(可执行目标文件)

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

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

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

1.41系统的硬件成组成

  • 总线:贯穿整个系统的一组电子管道
  • I/O设备:即输入和输出设备
  • 主存:即我们平时所说的运行内存
  • 处理器:中央处理单元(CPU)

1.42运行hello程序

  • shell从键盘上读取hello命令
  • shell执行一系列指令来使可执行hello文件从磁盘加载到主存
  • 处理器执行hello程序的main程序中的机器语言指令
  • 这些指令将字符串中的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备

1.5高速缓存至关重要

  • 根据机械原理,较大的存储设备要比较小的存储设备运行得慢
  • 计算机运行快慢:磁盘<主存<处理器
  • 针对磁盘、主存、处理器之间的差异,设计了一种更小更快的存储设备,称为高速缓存,作为暂时的集结区域,存放处理器近期可能会需要的信息

1.6存储设备形成层次结构

存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存

1.7操作系统管理硬件

  • 进程:进程是操作系统对一个正在运行的程序的一种抽象
  • 一个CPU看上去可以并发地处理多个进程,这是通过处理器在进程间切换来实现的
  • 操作系统实现这种交错执行的机制称为上下文切换
  • 线程:多个线程组成一个进程,每个线程都运行在进程的上下文中,并共享同一的代码和全局数据
  • 虚拟内存:虚拟内存为一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存
  • 文件:广义说,所有输出输入设备都可以成为文件(显示屏、键盘、鼠标)

1.8重要主题

Amdahl定律:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度

  • 并发:并发是指一个时间段内,有几个程序都在同一个CPU上运行,但任意一个时刻点上只有一个程序在处理机上运行。
  • 并行:并行是指一个时间段内,有几个程序都在几个CPU上运行,任意一个时刻点上,有多个程序在同时运行,并且多道程序之间互不干扰。