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章,其他章节等有空闲继续看吧. 我的许多博客是给自己快速复习使用的,比如此读书后感,你可以根据我下面的建议读完原书几章再回来复习一下(或许那时候就没必要回 ...
随机推荐
- 牛客网PAT练兵场-组个最小数
题解:从小到大输出 题目地址:https://www.nowcoder.com/questionTerminal/86ede762b450404dbab59352963378e9 /** * *作者: ...
- C# DataTable查询示例
代码 public void Test() { #region 初始化数据 /* 数据 张三 语文 34.00 张三 数学 58.00 张三 英语 61.00 李四 语文 45.00 李四 数学 87 ...
- 水滴app
在选择了软件工程专业之后,指导教师也让我们参加到了学长学姐的作业之中来,使用学长学姐们的软件并写出自己的使用评价以及自己的一些小评价. 这体验的是第三十二组学长们的软件,他们的队名是自然选择,他们做的 ...
- 小程序商城系统CRMEB Pro v1.1全新重构,新增DIY功能
CRMEB ProV1.1全新升级发布,真正实现了后台可自由拖拽组合实现首页布局的DIY功能,这一功能的实现,将告别过去千篇一律的同质化界面布局,真正实现个性化.高自由的随心组合.本次发布的版本中我们 ...
- javaScript 推荐书籍 由简单到入门,初级到高级。
- selenium上手
功能自动化 前提 自动化的主要目的并不是为了找Bug,是为了证明功能可用 不只是所有的功能都可以自动化,如UI 并不是所有的项目都可以使用自动化,如selenium只能使用bs项目,小项目不适合使用自 ...
- Python基本
Python基本规则 1.面向对象的跨平台的编程语言 2.文件类型是.py, 3.一个文件是一个模块module,运行整个文件 4.不支持非英文字符,区分大小写 5.一行是一条语句,多条语句写一行用; ...
- 手写mybatis框架
前言 很久没有更新mybatis的源码解析了,因为最近在将自己所理解的mybatis思想转为实践. 在学习mybatis的源码过程中,根据mybatis的思想自己构建了一个ORM框架 .整个代码都是自 ...
- HTTP协议中的提交方式和解释POST、GET、HEAD、PUT等
最基本的方法有4种,分别是GET,POST,PUT,DELETE HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作 GET一般用于获取/查询资源信息,而PO ...
- Jwt快速入门(copy即可)
Jwt 什么是jwt JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法. 互联网服务离不开用户认证.一般流程是下面这样. 1.用户向服务器发送用户名和 ...