深入理解计算机系统

第一章:计算机系统漫游

1.1信息就是位+上下文

基本思想:系统中所有的信息————包括磁盘文件,内存中的程序,内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象的上下文。 C语言的起源: C语言最开始作为一种用于Unix系统的程序语言开发出来的。

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

image.png

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

1.优化程序性能 2.理解链接时出现的错误 3.避免安全漏洞

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

shell是一个命令行解释器,它输出一个提示符,等待等待输入一个命令行,然后执行这个命令。如果该命令行的第一个单词不是一个内置的shell命令,那么shell就会假设他是一个可执行文件的名字,他将加载并运行这个文件。

1.4.1系统的硬件组成

1.总线 贯穿整个系统的是一组电子管道,称做总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节快,也就是字.现在要么是四字节(32位)要么八字节(64位). 2.I/O设备 每个I/O设备都通过一个控制器或适配器与I/O总线相连,控制器和适配器的区别主要在于他们的封装方式 功能:在I/O设备和I/O设备之间传递信息 3.主存 主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据 4.处理器 解释存储在主存中指令的引擎 image.png

1.4.2运行hello程序

1.5高速缓存至关重要

image.png

1.6存储设备形成层次结构

image.png

1.7操作系统管理硬件

操作系统基本功能: 防止硬件被失控的应用程序滥用 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备

1.7.1进程

进程: 进程是操作系统对一个正在运行的程序的一种抽象.操作系统会提供一种假象,就好像系统上中i有这个程序在运行

并发运行: 一个进程的指令和另一个进程的指令是交错执行的

上下文: 操作系统保持跟进进程运行所需要的所有状态信息.

上下文切换: 一个CPU看上去都像是在并发的执行多个进程.这是通过处理器在进程见切换来实现的

1.7.2线程

1.7.3虚拟内存 虚拟内存是一个抽象概念,它为每个进程提供一个家乡,即每个进程都在单独地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间.

进程和线程的区别

简单来说,进程是资源分配的单位,线程是执行的单位。线程是进程的子单位,线程的切换和通信成本较低,但安全性较差;进程的切换和通信成本较高,但安全性较好。在实际应用中,通常会根据具体需求选择合适的模型,

image.png

地址空间最上面的区域是保留给操作系统中的代码和数据 地址空间的底部区域存放用户进程定义的代码和数据 程序代码和数据 略 堆 略 共享库 略 栈 内核虚拟内存 略

1.7.4文件

文件就是字节序列 ??? 每个I/O设备,包括磁盘,键盘,显示器,甚至网络,都可以看成是文件。系统中的所有输入输出都是通过使用一小组称为UnixI/O的系统函数调用读写文件来实现的.

1.8系统之间的网络通信

image.png

image.png

1.9重要主题

1.9.1Amdahl定律

主要思想:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度 参数含义: Told旧时间,Tnew新时间,a执行时间与该时间的比例,k性能提升比例,S加速比 image.png

image.png

考虑k趋向于∞时的效果,这就意味着,我们可以取系统的某一部分将其加速到一个点,在这个点上,这部分花费的时间可以忽略不计 image.png

1.9.2并发和并行

并发:同时具有多个活动的系统 并行:用并发来使一个系统运行的更

1.线程级并发

image.png

image.png

超线程:同时多线程,是一项允许一个CPU执行多个控制流的技术

2.指令级并行

在较低的抽象层次上,现代处理器可以同时执行多条指令的属性称为指令 级并行

超标量处理器:处理器可以达到比一个周期一条指令更快的执行效率

3.单指令,多数据并行

在最低层次上,许多现代处理器拥有特殊的硬件,允许一条指令缠上多个可以并行执行的操作这种方式称为单指令,多数据,即SIMD并行.

1.9.3计算机系统中抽象的重要性

抽象的使用时计算机科学中最为重要的概念之一 例如:为一组函数规定一个简单的应用程序接口(API)就是一个很好的变成习惯,程序员无需了解它内部的工作便可以使用这些代码 指令集架构提供了对实际处理器硬件的抽象 image.png

文件是对I/O设备的抽象,虚拟内存是对程序存储器的抽象,而进程是对一个正在运行的程序的抽象,虚拟机,它提供对整个计算机的抽象,包括操作系统,处理器和程序.

1.10小结

image.png

操作系统内核时应用程序和硬件之间的媒介.它提供三个基本的抽象:1.文件是对I/O设备的抽象;2.虚拟内存是对主存和磁盘的抽象3.进程是处理器,主存和I/O设备的抽象 网络提供计算机系统之间的通信的首选.从特殊系统的角度来看,网路就是一种I/O设备.

第二章:信号的表示和处理

无符号编码基于传统的二进制表示法 补码编码是表示有符号整数的最常见的方式有符号整数就是可以为正或者可以为负的数字 浮点数编码是表示实数的科学计数法以2为基数的版本

2.1信息存储

机器级程序将内存视为一个很大的字节数组,称为虚拟内存.内存的每个字节都是由唯一的数字来标识,称为地址,所有可能地址的集合就称为虚拟地址空间

2.1.1十六进制表示法

在C语言中,以0x或ox开头的数字常量被认为是十六进制的值,字符’A~‘F‘即可以是大写也可以是小写 将给定二进制数字转换为十六进制,可以首先把它分为每四位一组来转换十六进制。不过,如果总数不是4的位数,最左边的一组可以少于4位,前面用0补足 image.png

二进制和十六进制之间的转换

二进制和十六进制之间的简便转换 2的n次方 = x, n = i + 4j 变成十六进制就是前面是2的i次方,后面是j个零

十进制和十六进制之间的转换

取16模 除16

2.1.2字数据大小

每台计算机都有一个字长,指明指针数据的标称大小 其数据大小是固定的,不随编译器和机器设置而变化: int32_t 4个字节 int64_t 8个字节

2.1.3寻址和字节顺序

最低有效字节在最前面的方式,称为小端法 最高 有效字节在最前面的方式,称为大端法 image.png

image.png

反汇编器:是一种确定可执行程序文件所表示的指令序列工具

第三章:程序的机器级表示

第四章:处理器体系结构

图片 1 图片 2 图片 3 图片 4 图片 5 图片 6 图片 7 图片 8 图片 9 图片 10 图片 11 图片 12 图片 13 图片 14 图片 15 图片 16 图片 17