CSAPP 第一章 计算机系统漫游
第一章 计算机系统漫游
C语言的起源:(系统级编程的首选)
- C语言与Unix操作系统关系密切
- C语言小而简单:其设计由一个人掌控
- C语言是为实践目的设计的:其设计用来实现Unix操作系统
C语言程序编译的四个阶段:

- 预处理阶段:预处理器(cpp),根据字符#开头的命令,修改原始的C程序,hello.c -> hello.i
- 编译阶段:编译器(ccl),将预处理结果翻译为汇编文件,hello.i -> hello.s
- 汇编阶段:汇编器(as),将汇编文件翻译成机器语言指令,hello.s -> hello.o
- 链接阶段:链接器(ld),合并不同的*.o文件,生成可执行目标文件,hello.o + printf.o -> hello
了解编译系统,有助于:
- 优化程序性能
- 理解链接时出现的错误
- 避免安全漏洞
系统的硬件组成:

- 总线:携带信息字节并负责在各个部件间传递
- 字:总线上传送的定长字节块
- I/O设备:系统与外部世界的而联系通道
- 控制器:I/O设备本身或者系统的主板上的芯片组
- 适配器:插在主板插槽上的卡
- 主存:临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据
- 处理器:解释(或执行)存储在主存中指令的引擎
- 核心:程序计数器,大小为一个字
- 指令集架构:描述每条机器代码指令的效果
- 微体系结构:描述处理器实际上是如何实现的
- 总线:携带信息字节并负责在各个部件间传递
高速缓存存储器(cache):数据暂时的集结区域,存放处理器近期可能会需要的信息
- L1高速缓存:容量可达数万字节,访问速度几乎和访问寄存器文件一样快
- L2高速缓存:容量为数十万到数百万字节,访问时间比访问L1高速缓存长5倍,但仍比访问主存快5~10倍
存储器层次结构:从上至下,设备的访问速度越来越慢,容量越来越大,并且每字节的造价也越来越便宜

- 主要思想:上一层的存储器作为低一层存储器的高速缓存
操作系统:应用程序与硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须通过操作系统
- 主要功能:
- 防止硬件被失控的应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备
- 基本抽象概念:
- 进程:对处理器、主存和I/O设备的抽象表示
- 虚拟内存:对主存和磁盘I/O设备的抽象表示
- 文件:对I/O设备的抽象表示
- 主要功能:
进程:操作系统对一个正在运行的程序的一种抽象,制造一种假象,即某个程序的代码和数据是系统内存中唯一的对象
- 并发运行:一个进程的指令和另一个进程的指令是交错执行的
- 上下文:跟踪程序运行所需的所有状态信息(PC、寄存器文件的当前值、主存的内容等)
- 上下文切换:一种进程间交错执行的机制,保存当前进程的上下文,恢复新进程的上下文,将控制权传递到新进程
- 操作系统内核:操作系统代码常驻主存的部分,是系统管理全部进程所用代码和数据结构的集合
- 当应用程序需要操作系统的某些操作时,它就执行一条特殊的系统调用指令,将控制权传递给内核,然后内核执行被请求的操作并返回应用程序
线程:一个进程可由多个执行单元(线程)组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据
虚拟内存:为每个进程提供一种假象,即每个进程都在独占地使用主存
内存地址空间

- 程序代码和数据:在进程一开始运行时就被指定了大小,直接按照可执行文件的内容初始化
- 堆:可以在运行时动态地扩展和收缩(调用free、malloc等函数)
- 共享库:用来存放像C标准库和数学库这样的共享库的代码和数据
- 栈:实现函数调用,在程序执行期间可以动态地扩展和收缩(调用函数、函数返回)
- 内核虚拟内存:为内核保留,不允许应用程序读写和直接调用
文件:字节序列,每个I/O设备都可以看成是文件
- 系统中所有输入输出都是通过使用Unix I/O系统函数调用读写文件来实现的
Amdahl定律:
主要思想:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度
总执行时间:
$T_{new}=(1-\alpha)T_{old}+(\alpha T_{old})/k=T_{old}[(1-\alpha)+\alpha/k]$
- $T_{old}$:(原来)系统执行某应用程序需要的时间
- $T_{new}$:(加速后)系统执行某应用程序需要的时间
- $\alpha$:系统某部分所需执行时间与$T_{old}$的比例
- $k$:该部分性能提升比例
加速比:
$S={T_{old}\over T_{new}}={1\over(1-\alpha)+\alpha/k}$
- $S$:加速比
并发和并行:
并发:指一个同时具有多个活动的系统
并行:指用并发来使一个系统运行得更快
三个层次:
线程级并发:传统意义上这种并发行为只是模拟出来的,是通过使一台计算机在它正在执行的进程间快速切换来实现的

- 超线程:一项允许一个CPU执行多个控制流的技术
- 涉及CPU某些硬件有多个备份:如程序计数器、寄存器文件
- 其他的硬件部分只有一份:如执行浮点算术运算的单元
- 多处理器:
- 减少了在执行多个任务时模拟并发的需要
- 可以使应用程序运行得更快
- 超线程:一项允许一个CPU执行多个控制流的技术
指令级并行:现代处理器可以同时执行多条指令的属性
- 流水线:将执行一条指令所需要的活动划分成不同的步骤,将处理器的硬件组织成一系列的阶段,每个阶段执行一个步骤。这些阶段可以并行地操作,用来处理不同指令的不同部分
- 超标量:处理器达到比一个周期一条指令更快的执行速率
单指令、多数据并行:允许一条指令产生多个可以并行执行的操作(SIMD并行)
抽象:

CSAPP 第一章 计算机系统漫游的更多相关文章
- [CSAPP笔记][第一章计算机系统漫游]
计算机系统漫游 我们通过追踪hello程序的生命周期来开始对系统的学习—–从它被程序员创建,到系统上运行,输出简单的消息,然后终止.我们沿着这个程序的生命周期,简要介绍一些逐步出现的概念,专业术语和组 ...
- CSAPP:第一章计算机系统漫游
CSAPP:计算机系统漫游 关键点:上下文.程序运行.计算机系统抽象. 信息就是位+上下文一个程序的运行过程系统的硬件组成编译系统是如何工作的?一个程序的运行过程(c语言举例)计算机系统中的抽象 信息 ...
- 《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游
本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念 ...
- CSAPP学习笔记 第一章 计算机系统漫游
Ch 1.0 1.计算机系统是由硬件和系统软件组成的 2.本书阐述了计算机组件是如何工作的以及执行组件是如何影响程序正确性和性能的. 3.通过跟踪hello程序的生命周期来开始对系统的学习. #inc ...
- CSAPP - Ch 1 - 计算机系统漫游
目录 0 序言及摘要 1 信息就是位+上下文 2 程序被其他程序翻译成不同的格式 3 了解编译系统如何工作是大有益处的 0 序言及摘要 (1) 序言: CS:APP -- Computer Syste ...
- 读CSAPP第一章的收获
这个系列只写了CSAPP第三版对于我的收获. 里面的内容很多,我只写我以前不知道的,然后现在又觉得挺有用的内容. 没有很好的排版,将就看. Amadhl定律:主要观点,想要显著加速整个系统,必须提升全 ...
- CSAPP之阅读笔记-计算机系统漫游(1)
最近在看CSAPP(深入理解计算机系统第二版),其实最新版是第三版.但是,我看了一下价格100多大洋,于是去老夫子旧书网上买了本第二版的,花了30多块钱.哈哈. 网上看了一些关于此书的书评,都说是本好 ...
- CSAPP =1= 计算机系统漫游
思维导图 预计阅读时间:15min 阅读书籍 <深入理解计算机系统> 参考视频 [精校中英字幕]2015 CMU 15-213 CSAPP 深入理解计算机系统 课程视频 参考文章 < ...
- 深入理解计算机系统 Start && 第一章要点
对此书已经慕名已久了,抽空看了第1,2,3,5章,其他章节等有空闲继续看吧. 我的许多博客是给自己快速复习使用的,比如此读书后感,你可以根据我下面的建议读完原书几章再回来复习一下(或许那时候就没必要回 ...
随机推荐
- 从ReentrantLock详解AQS原理源码解析
数据结构 java.util.concurrent.locks.AbstractQueuedSynchronizer类中存在如下数据结构. // 链表结点 static final class Nod ...
- Spring注解驱动开发03(按照条件注册bean)
按照条件注册bean 使用@Conditional注解来控制bean的注册 使用步骤 先实现Condition接口,条件写在matches方法里 注意事项:Condition接口是org.spring ...
- springboot + kafka 入门实例 入门demo
springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...
- Linux下执行SQL文件
最近在使用MySQL数据库时,想要执行一些sql文件,就想到了source命令. source介绍:source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令. 功能:使Shell ...
- Statistics and Samples in Distributional Reinforcement Learning
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1902.08102v1 [stat.ML] 21 Feb 2019 Abstract 我们通过递归估计回报分布的统计量,提供 ...
- MS建模mmt
一.流程:1.定义好每个原子力场类型:Edit Sets(分组) 2.加H(一般是仅与Al-O八面体中的Al相连的O原子).给H分组 3.“make P1”.校核化学式(正确与否) 4.扩成超晶胞(N ...
- 区块链入门到实战(24)之以太坊(Ethereum) – 网络节点
用途: 全节点:用于区块和交易的校验 轻节点:电子钱包 以太坊(Ethereum)网络是一个公共的区块链网络,网络中包含2种网络节点: 全节点 轻节点 全节点 包含了从初始区块开始的全部区块,这些区块 ...
- Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContex
问题描述: 在idea中maven构建web项目,启动Tomcat插件时,出现Failed to start component [StandardEngine[Tomcat].StandardHos ...
- asp .net core 静态文件资源
前言 对静态资源的简单的一个概况,在<重新整理.net core 计1400篇>系列后面会深入. 正文 我们在加入中间件是这样写的: app.UseStaticFiles(); 默认是给w ...
- 《MySQL数据库》MySQL ERRORLOG,BINLOG,SLOWLOG日志详解
前言 MySQL 经常出现启动错误或者执行错误等等,这个时候我们需要查询error日志 在数据库使用中,经常会出现需要恢复数据的情况,MySQL如果需要恢复数据的话需要开启binlog(二进制日志). ...