本书第一章沿着一个程序的生命周期,简要地介绍一些逐步出现的关键概念、专业术语和组成部分。

一、信息就是位+上下文

在计算机系统中所有的信息都由一串比特来表示。

一串相同的比特(或者几个相同的字节)可以表示不同的信息 —— 整数、浮点数、字符串或者机器指令,这是通过使用不同的编码方式来实现的。

其中由ASCII码表编码的字符构成的文件称为文本文件,所有其他的文件称为二进制文件

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

程序员写的源代码(高级语言)必须被转换成计算机能够识别的低级机器语言指令,也就是源代码(文本文件)会被转换成可执行目标文件(二进制文件)。

这个转换由编译器程序完成,需要经历四个阶段:

  • 预处理阶段:预处理器读取头文件的内容,将所有代码整合起来,得到完整的源代码
  • 编译阶段:编译器将完整的源代码编译成汇编语言代码
  • 汇编阶段:汇编器将汇编语言代码翻译成机器语言指令,然后打包成可重定位目标程序
  • 链接阶段:链接器将可重定位目标程序和预先编译好的目标文件链接起来,得到完整的可执行文件

三、了解编译系统如何工作的益处

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

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

4.1、系统的硬件组成

总线:总线是贯穿整个系统的一组电子管道,负责在各个部件间传递信息字节。

I/O设备:I/O设备是系统与外部世界的联系通道。常见I/O设备有鼠标、键盘、磁盘。每个I/O设备都通过一个控制器适配器与I/O总线相连。

主存:主存是临时存储设备(动态随机存储器DRAM),在处理器执行程序时,用来存放程序和程序处理的数据。

处理器:处理器是解释(或执行)存储在主存中指令的引擎。处理器内部的运行围绕程序计数器(PC)寄存器文件、算术/逻辑单元(ALU)和主存展开。

指令集架构描述是每条机器代码指令的效果(第三章);而微体系结构描述的是处理器实际上是如何实现的(第四章)。

4.2、运行hello程序

shell程序先将程序从磁盘逐一读入寄存器,再把它存放到内存中。

如果使用直接存储器存取(DMA)技术,数据可以不通过处理器而直接从磁盘到达主存。

之后,处理器开始执行程序中的机器语言指令,并将结果从主存复制到寄存器,再从寄存器复制到显示设备并显示。

五、高速缓存至关重要

处理器从寄存器文件中读取数据比从主存中读取数据几乎要快100倍,从主存中读取数据比从磁盘驱动器上读取数据快1000万倍

但是一个寄存器文件只能存储几百字节的信息,主存可存放几十亿字节,磁盘驱动器更是比主存大1000倍

为了弥补处理器和主存之间的差异,在寄存器文件和主存之间构建高速缓存存储器(cache)—— 静态随机访问存储器SRAM:

  • L1高速缓存 —— 数万字节容量,访问速度几乎和寄存器文件一样快。
  • L2高速缓存 —— 数十万到数百万字节容量,比L1慢5倍。
  • L3高速缓存 ——

程序员可以利用高速缓存将程序的性能提高一个数量级。

六、存储设备形成层次结构

每个计算机系统中的存储设备都被组织成了一个存储器层次结构,在这个层次结构中,从上到下,设备的访问速度越来越慢、容量越来越大,并且每字节的造价也越来越便宜。

程序员可以利用对整个存储器层次结构的理解来提高程序性能。

七、操作系统管理硬件

操作系统可以被看成是应用程序和硬件之间插入的一层软件。

操作系统有两个基本功能:

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

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

7.1、进程

进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。

并发运行就是指一个进程的指令和另一个进程的指令是交错执行的。这是通过处理器在进程间切换来实现的。操作系统实现这种交错执行的机制称为上下文切换

上下文是指进程运行所需的所有状态信息,包括PC和寄存器文件的当前值,以及主存的内容。

操作系统内核来管理从一个进程到另一个进程的转换,即执行上下文的切换。内核是操作系统代码常驻主存的部分。

7.2、线程

一个进程可以由多个线程组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。

多线程之间比多进程之间更容易共享数据,线程一般来说也比进程更高效。

7.3、虚拟内存

虚拟内存为每个进程提供了假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间

虚拟地址空间由大量准确定义的区构成,每个区都有专门的功能(从最低地址开始,逐步向上):

  • 程序代码和数据区 —— 直接按照可执行目标文件的内容初始化的
  • 运行时堆 —— 调用像malloc和free这样的C标准库函数时,堆可以在运行时动态地扩展和收缩。
  • 共享库 —— 用于存放像C标准库和数学库这样的共享库的代码和数据
  • 用户栈 —— 编译器用它来实现函数调用,和堆一样,在程序执行期间可以动态地扩展和收缩
  • 内核虚拟内存 —— 保留给操作系统中的代码和数据。

7.4、文件

文件就是字节序列。每个I/O设备都可以看成是文件。

文件向应用程序提供了一个统一的视图,来看待系统中可能含有的所有各式各样的I/O设备。

八、系统之间利用网络通信

系统和系统之间可以通过网络连接在一起。从一个系统来看,网络可视为I/O设备,系统可以往里写、读数据。

九、重要主题

9.1、Amdahl定律

Amdahl定律揭示了系统的某个部分性能提升程度与相应的系统整体性能提升程度的差异。

推导过程:

系统整体执行所需时间为

,系统某部分执行所需时间为
,则系统该部分执行所需时间与系统整体执行所需时间的比例为

系统该部分性能得到提升后所需的执行时间为

,该部分性能提升比例为

系统该部分性能提升后,系统整体执行所需时间为

加速比为

Amdahl定律的主要观点:要想显著加速整个系统,必须提升全系统中相当大的部分的速度。

9.2、并发和并行

并发指一个同时具有多个活动的系统。并行指的是用并发来使一个系统运行得更快。

1)线程级并发

并发执行只是模拟出来的,是通过使一台计算机在它正在执行的进程间快速切换来实现的。

单处理器系统是指由单个处理器来完成并发任务,多处理器系统是指由多个处理器来共同完成并发任务,多处理器系统中每个处理器都有自己的L1、L2高速缓存,同时多个处理器间共享更高层次的高速缓存,例如L3。

多处理器的使用可以从两方面提高系统性能:

  • 减少了在执行多个任务时模拟并发的需要。
  • 可以使程序运行得更快

2)指令级并行

现代处理器可以同时执行多条指令的属性称为指令级并行

3)单指令、多数据并行

现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作,这种方式称为单指令、多数据(SIMD —— Single Instruction Multiple Data)

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

抽象的目的是为了提供对系统中不同层次的简单表示,来隐藏实际实现的复杂性。

计算机系统中的主要抽象有:

  • 文件 —— I/O设备的抽象
  • 虚拟内存 —— 主存和I/O设备的抽象,即对程序存储的抽象
  • 指令集架构 —— 对处理器的抽象
  • 进程 —— 对处理器、主存和I/O设备的抽象,即对一个正在运行的程序的抽象
  • 虚拟机 —— 对整个计算机的抽象,包括操作系统、处理器和程序

深入理解计算机系统第四版_《深入理解计算机系统》读书笔记 —— 第一章 计算机系统漫游...相关推荐

  1. 计算机操作系统 (第四版汤小丹老师) 复习笔记第一章

    教材为西安电子科技大学 汤小丹老师 第四版 1.1操作系统目标和作用 1.目标 目前存在着多种类型的OS,不同类型的OS,其目标各有所侧重.通常在计算机硬件上配置的OS,其目标有以下几点: 方便性 便 ...

  2. 深入理解计算机系统第四版_深入理解计算机系统之存储器层次结构

    我的计算机模型是这样的: CPU执行指令,内存犹如一个巨大的字节数组,存储着指令和数据,硬盘保存着各种程序与程序用到的数据.I/O完成输入输出的功能.在本文中我们抛开I/O,谈一谈关于CPU,内存,硬 ...

  3. 数据结构(c语言版严蔚敏_吴伟民)读书笔记 第一章

    目录 数据结构第一章 绪论 数据元素之间存在的关系称为结构 算法 1.算法应具有的特性 2.设计算法的要求 3.算法效率度量(时间复杂度)T(n) = O(f(n)) 4.算法的储存空间的需求(空间复 ...

  4. 深入理解计算机系统(CSAPP)读书笔记 第一章

    第1章 计算机系统漫游 1.1 信息就是位+上下文 系统中所有的信息--包括磁盘文件.内存中的程序.内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的.区分不同数据对象的唯一方法是我们读到 ...

  5. 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析

    Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...

  6. 【mssql】SQL Server2012编程入门经典(第四版)(上) 读书笔记

    本文转载连接: https://www.cnblogs.com/peterYong/p/6556646.html 目录 select语句 insert语句 update语句 用来更新已有的数据 del ...

  7. [CSAPP笔记][第一章计算机系统漫游]

    计算机系统漫游 我们通过追踪hello程序的生命周期来开始对系统的学习-–从它被程序员创建,到系统上运行,输出简单的消息,然后终止.我们沿着这个程序的生命周期,简要介绍一些逐步出现的概念,专业术语和组 ...

  8. 计算机图形学矩形_《交互式计算机图形学》读书笔记 —— 第一章、图形系统和模型...

    一.计算机图形学的应用 略 二.图形系统 图形系统包含6个主要元素: 输入设备 中央处理单元(CPU) 图形处理单元(GPU) 存储器 帧缓存 输出设备 2.1.像素和帧缓存 像素:图形元素 光栅:像 ...

  9. 深入理解计算机系统 -资料整理 高清中文版_在所不辞的博客-CSDN博客_深入理解计算机系统第四版pdf

    深入理解计算机系统 -资料整理 高清中文版_在所不辞的博客-CSDN博客_深入理解计算机系统第四版pdf

最新文章

  1. RAID 与 LVM 磁盘阵列技术
  2. Java线程入门第三篇
  3. 关于能否命令Scrum团队的对话
  4. [Leetcode] 第306题 累加数
  5. c语言定时器作用,Go语言定时器实现原理及作用
  6. SharePoint网站集备份与恢复
  7. 读懂 Redis 源码,我总结了这7点心得
  8. Jarvis Oj Pwn 学习笔记-level3
  9. 一道数学题引发的思考
  10. 辞职腾讯去了小公司,从0到1搭建后端架构,工资就翻倍了
  11. c# zxing条形码设置密度_C# 中 ZXing.Net 怎样突破 条形码 多识别 数量限制
  12. java中的控制执行流程
  13. 服务器删除的excel文件备份在哪里,microsoft excel备份文件在哪 - 卡饭网
  14. [前端三剑客之CSS]display:none opacity:0 visibility:hidden三角恋的爱恨情仇
  15. debian mysql 日志_Apache2:使用mod_log_sql(Debian Etch)记录到MySQL数据库
  16. 微软在文件夹里插广告,把用户恶心到了,官方:试验功能,不小心推送了!...
  17. 推荐系统论文:Personalized News Recommendation Based on ClickBehavior
  18. 最笨的管理,就是什么事都自己做
  19. 什么是微服务?微服务架构的优缺点、应用
  20. 咖啡烘焙饕餮盛宴——洛阳新都汇有你想要的感觉

热门文章

  1. python生成api文档_sphinx生成python文档
  2. UI设计素材|愉快的万圣节的插图着陆页
  3. android view添加背景,android – 如何将视图作为背景添加到surfaceView?
  4. C++设计模式详解之工厂模式解析
  5. Windows监听进程是否退出C++
  6. Build your own distribution based on Fedora CoreOS
  7. Linux开机启动过程(12):start_kernel()->还是setup_arch
  8. 《深入浅出DPDK》读书笔记(一):基础部分知识点
  9. Linux内核开发:创建proc文件并与用户空间接口
  10. Django视图层:URL的反向解析(主路由include之namespace,子路由之name,模板标签{%url%},视图reverse()函数,反向解析示例,URL命名空间