计算机组成原理-CSAPP


第一章 计算机系统漫游

1.1 信息是位+上下文

信息是位+上下文,例如hello world,程序的生命周期是从一个源程序(源文件)开始的,即程序员通过编辑器创建并保存的文本文件。

源程序实际上就是一个由01组成的位(比特)序列,8个位一组叫字节。字节表示程序中的文本字符。

这样的表示方法说明了一个基本思想:系统中的所有信息——包括磁盘文件,内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。

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

编译系统:预处理阶段→编译阶段→汇编阶段→链接阶段,每个阶段对应相应执行程序。
在这里插入图片描述

1.3 了解编译系统

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

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

1.4.1 系统的硬件组成
在这里插入图片描述

  • 总线: 贯穿整个系统的一组电子管道。携带字节负责在各个部件间传递。被设计成传送定长的字节块,也就是字,机器字长32位(4个字节)或者64位(8个字节)。
  • I/O设备:通过一个控制器或适配器与I/O总线相连。控制器与适配器之间的区别主要在于它们的封装方式。
  • 主存:临时存储设备,在处理执行程序时,用来存放程序和程序处理的数据。从物理上来说,是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址是从零开始的。一般来说,组成程序的每条机器指令都由不同数量的字节构成。
  • 处理器:中央处理单元(CPU),是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。在任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。算术/逻辑单元(ALU),由一些单个字长的寄存器组成,寄存器都有唯一的名字。ALU计算新的数据和地址值。CPU操作包括:加载,存储,操作,跳转

1.4.2 hello world的运行

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

1.5 高速缓存至关重要

在这里插入图片描述
意识到cache存在的程序员能够利用高速存储将程序性能提高一个数量级。

1.6 存储设备形成层次结构

在处理器和较大较慢的设备之间插入一个更小更快的存储设备的想法已经成为了一个普遍的观念。
在这里插入图片描述

1.7 操作系统管理硬件

在这里插入图片描述
操作系统有两个基本功能:

  1. 防止硬件失控的程序滥用;
  2. 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。

操作系统通过几个基本的抽象概念(进程、虚拟内存和文件)来实现这两个功能。

1.7.1 进程
在这里插入图片描述

  • 只考虑单处理器的情况。
  • 进程在大多数情况下是在并发运行的。
  • 操作系统持续保持跟踪进程运行所需的所有状态信息,也就是上下文,包括了PC和寄存器文件的当前值,以及主存的内容。
  • 控制权在进程间转移时,就会发生上下文切换,由操作系统内核(kernel)管理。
  • 内核不是一个独立的进程,它是系统管理全部进程所用代码和数据结构的集合。

1.7.2 线程

  • 一个进程实际上由多个线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。
  • 多线程比多进程更容易共享数据

1.7.3 虚拟内存

  • 虚拟内存是抽象概念,对每个进程而言提供了一种假象,每个进程都是在独占使用主存。
  • 每个进程看到的内存是一致的,称为虚拟地址空间

1.7.4 文件

1.8 系统之间利用网络通信(非408)

在这里插入图片描述

1.9 主要概念

1.9.1 Amdahl定律
主要思想:对系统某个部分加速时,其整体影响取决于该部分的重要性和加速性。

  • T n e w , T o l d T_{new},T_{old} Tnew,Told 代表应用程序执行所需的目前用时过去用时
  • α , k α,k α,k 表示部分执行时间占比部分性能提升比例
    在这里插入图片描述
    得到一个结论:想要显著加速整个系统,必须提升全系统中相当大部分的速度。

1.9.2 并发和并行

  • 并发:一个同时具有多个活动的系统。(做的多)
  • 并行:使用并发来使一个系统运行得更快。(做的快)

1 线程级并发

多核处理器:多核集成到一个集成电路芯片上。
在这里插入图片描述
超线程:也被称为同时多线程(simultaneous multi-threading),运行一个cpu执行多个控制流的技术。

2 指令级并行

  • 处理器可以同时执行多条指令的属性。(流水线-pipeline)
  • 超标量(superscalar)处理器:处理器可以达到比一个周期一条指令更快的执行速率

3 单指令、多数据并行

  • 允许一条指令产生多个可以并行的操作,SIMD并行。
  • 为了提高处理影像、声音和视频数据应用的执行速度。

1.9.3 计算机系统中抽象的重要性
在这里插入图片描述

第二章 信息的表示和处理

2.1 信息存储

大多数计算机使用8位的块,或者字节,作为最小的可寻址内存单位。
机器级程序将内存视为一个非常大的字节数组,称为虚拟内存
内存的每个字节都由一个唯一的数字来标识,称为地址,所有可能的地址集合称为虚拟地址空间

2.1.1 十六进制表示法

2.1.2 字数据大小

每台计算机都有一个字长,指明指针数据的标称大小。

2.1.3 寻址和字节顺序
在这里插入图片描述
个人计算机大多数使用小端模式,还有Android和IOS运行小端模式。
虽然比较新的微处理器是双端法,但是一旦选择特定操作系统,其字节顺序就会固定下来。
对于大多数应用程序员来说,其机器使用的字节顺序是完全不可见的
字节顺序重要

  1. 从小端发送到大端(或者反过来)
  2. 当阅读表示整数数据的字节序列时
  3. 当编写规避正常的类型系统的程序时

2.1.4 表示字符串

2.1.5 表示代码

计算机系统的基本概念,从机器的角度来看程序仅仅只是字节序列。

2.1.6 布尔代数简介

2.1.7 c语言中的位级运算(|,&,~)

2.1.8 c语言中的逻辑运算(!,||,&&)

2.1.9 c语言中的移位运算(<<,>>)

2.2 整数表示

2.1.1 整型数据类型
在这里插入图片描述
在这里插入图片描述
C/C++支持有符号数和无符号数。Java只支持有符号数。

2.2.2 无符号数的编码

在这里插入图片描述
2.2.3 补码编码

在这里插入图片描述
2.2.4 有无符号数的转换
2.2.5 C语言中的有无符号
2.2.6 扩展一个数字的位表示(零扩展/符号扩展)
2.2.7 截断数字(溢出/损失)

2.3 整数运算

2.4 浮点数

第三章 程序的机器级表示

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值