深入理解计算机系统(csapp)阅读笔记——第一章计算机系统漫游

1.信息就是位+上下文

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

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

  • 编译系统
    在这里插入图片描述
    • 预处理阶段:预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如hello.c中第1行的#include<stdio.h>命令高速预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中结果就得到了另一个C程序通常是以.i作为文件扩展名
    • 编译阶段编译器(ccl)将.i文件编译成为.s后缀文件,即从高级语言到汇编语言的过程
    • 汇编阶段:汇编器(as)将.s文件翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序后缀为.o
    • 链接阶段:print函数是每个C编译器都提供的标准C库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到.o文件中,链接器(ld)就负责处理这种合并,成为一个可执行目标文件

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

  • 了解编译系统的重要原因:
    • 优化程序性能
    • 理解链接出现的错误
    • 避免安全漏洞

4.系统的硬件组成

  • 计算机系统图
    在这里插入图片描述
  • 总线:贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字。
  • I/O设备:是系统与外部世界的联系通道
  • 主存:主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。
  • 处理器(CPU):是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备,称为程序计数器(PC)

5.高速缓存至关重要

  • 高速缓存器:解决CPU和主存处理速度不同的问题
    在这里插入图片描述

6.存储设备形成层次结构

在这里插入图片描述

7.操作系统管理硬件

  • 我们可以把操作系统看成是应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须通过操作系统
    在这里插入图片描述
  • 操作系统有两个基本功能
    (1)防止硬件被失控的应用程序滥用
    (2)向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备
  • 操作系统通过几个基本的抽象概念来实现这两个功能。
    • 文件是对I/O设备的抽象表示
    • 虚拟内存是对主存和磁盘I/O设备的抽象表示
    • 进程则是对处理器、主存和I/O设备的抽象表示。
      在这里插入图片描述
  • 一个CPU看上去像是在并发地执行多个进程,这是通过处理器在进程间切换来实现的,操作系统实现这种交错执行的机制称为上下文切换
  • 内核:操作系统内核是指大多数操作系统的核心部分它由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成操作系统内核通常运行进程,并提供进程间的通信操作系统只是一个抽象的概念,操作系统是实现操作系统的核心部分
  • 从一个进程到另一个进程的转换是由操作系统内核(kernel)管理的。内核是操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,比如读写文件,它就执行一条特殊的系统调用指令将控制权传递给内核。然后内核执行被请求的操作并返回应用程序注意:内核不是一个独立的进程。相反,它是系统管理全部进程所用代码和数据结构的集合
    在这里插入图片描述
  • 虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用内存。每个进程看到的内存是一致的,称为虚拟地址空间
    在这里插入图片描述
    在这里插入图片描述
  • 文件:文件就是字节序列,仅此而已。每个I/O设备,包括磁盘、键盘、甚至网络,都可以看成是文件系统中的所有输入输出都是通过一小组称为UnixI/O的系统函数调用读写文件来实现的。

8.系统之间利用网络通信

在这里插入图片描述

9.重要主题

  • Amdahl定律:对提升系统某一部分性能所带来的效果作出了简单却有见地的观察。
  • Amdahl的主要思想:当我们对系统的某一部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度
  • Amdahl具体定理:若系统执行某应用程序需要时间Told。假设系统某部分所需执行时间与改时间的比例为α,而该部分性能提升比例为k。即该部分初始所需时间为αTold,现在所需时间为(αTold)/k。因此,总的执行时间为:
    Tnew=(1-α)old+(αTold)/k = Told[(1-α)+a/k]
    由此可以计算加速比:
    S=Told/Tnew= 1 ( 1 α ) + α / k {1 \over (1-α)+α/k}
  • 由上述公式可知,虽然我们对系统的一个主要部分做出了重大改进,但是获得的系统加速比却却明显小于这部分的加速比。即——想要显著加速整个系统,必须提升全系统中相当大的部分的速度
发布了33 篇原创文章 · 获赞 3 · 访问量 621

猜你喜欢

转载自blog.csdn.net/qq_43647628/article/details/104484645