CSAPP-1-计算机系统漫谈

CSAPP第一章总览

1.1信息就是位+上下文

  • 源程序实际上就是一个由0和1组成的位(又称为比特)序列,8个位被组织成一组,称为字节。

  • 使用ASCII标准来表示文本字符,这种方式实际上就是用一个唯一的单字节大小的整数值。来表示每个字

  • 只由ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件。

  • 系统中所有的信息——包括磁盘文件、内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。比如,在不同的上下文中,一个同样的字节序列可能表示一个整数、浮点数、宇符串或者机器指令。

1.2程序被翻译成不同格式

  • C语句都必须被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来。目标程序也称为可执行目标文件。

1.3编译系统

  • 优化程序性能

    需要了解机器代码以及编译器将C语句转化为代码的方式

  • 理解链接时出现的错误

    最令人困扰的程序往往都与链接器操作有关,有些错误直到运行才会出现

  • 避免安全漏洞,降低攻击威胁

    缓冲区溢出错误为主要原因

    需要限制数据接收的数量和格式理解数据和控制信息存储在程序栈上的方式

1.4处理器读取并解释指令

例:

1.4.1硬件组成

  • 总线

  • I/O设备

    作为用户输入的键盘和鼠标,作为用户输出的显示器,以及用于长期存储数据和程序的磁盘驱动器(简单地说就是磁盘

    每个I/O设备都通过一个控制器或适配器与I/O总线相连

  • 主存

    主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来说,主存是由一组动态随机存取存储器(DRAM)芯片组成的。从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),==地址从零开始。==

  • 处理器

    中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。在任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。(~AX)

    ==处理器从程序计数器指向的内存处读取指令,解释指令中的位,执行该指令指示的简单操作,然后更新PC,使其指向下一条指令,而这条指令并不一定和在内存中刚刚执行的指令相邻。==

    寄存器

    寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字。

    • 加载:从主存复制一个字节或者一个字到寄存器,以覆盖寄存器原来的内容。
    • 存储:从寄存器复制一个字节或者一个字到主存的某个位置,以覆盖这个位置上原来的内容。
    • 操作:把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖该寄存器中原来的内容。
    • 跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的值。

    现代处理器使用了非常复杂的机制来加速程序的执行。因此,我们将处理器的指令集架构和处理器的微体系结构区分开来:

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

1.4.2具体例子

1.5高速缓存

高速缓存存储器(cache memory,简称为cache或高速缓存),作为暂时的集结区域,存放处理器近期可能会需要的信息。

Ll和L2高速缓存是用一种叫做静态随机访问存储器(SRAM)的硬件技术实现的。

利用高速缓存的局部性原理,即程序具有访问局部区域里的数据和代码的趋势。通过让高速缓存里存放可能经常访问的数据,大部分的内存操作都能在快速的高速缓存中完成。

1.6存储设备层次结构

存储器层次结构主要思想是上一层的存储器作为低一层存储器的高速缓存。

寄存器文件是L1的高速缓存,L1是L2的高速缓存……最后的是主存的高速缓存,主存是磁盘的高速缓存……

1.7操作系统

我们可以把操作系统看成是应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须通过操作系统。

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

(1)防止硬件被失控的应用程序滥用;

(2)向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。

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

文件是对I/O设备的抽象表示,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示。

标准Unix规范”的独立标准化工作已经与Posix一起创建了统一的Unix系统标准。这些标准化工作的结果是Unix版本之间的差异已经基本消失。

1.7.1进程

​ 像hello这样的程序在现代系统上运行时,操作系统会提供一种假象,就好像系统上只有这个程序在运行。程序看上去是独占地使用处理器、主存和I/O设备。处理器看上去就像在不间断地一条接一条地执行程序中的指令,即该程序的代码和数据是系统内存中唯一的对象。这些假象是通过进程的概念来实现的,进程是计算机科学中最重要和最成功的概念之一。

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

并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的。

在大多数系统中,需要运行的进程数是多于可以运行它们的CPU个数的。传统系统在一个时刻只能执行一个程序,而先进的多核处理器同时能够执行多个程序。无论是在单核还是多核系统中,一个CPU看上去都像是在并发地执行多个进程,这是通过处理器在进程间切换来实现的。

操作系统实现这种交错执行的机制称为==上下文切换。==

1.7.2线程

1.7.3虚拟内存

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

1.7.4文件

文件就是字节序列。所有计算机系统中的交互设备都可以看作文件。

这个概念向应用程序提供了一个统一的视图来看待系统中各种I/O设备。

1.8网络

1.9小结

系统不仅仅只是硬件,系统是软硬件互相交织的集合体,它们共同协作来运行应用程序。

Amdahl定律:短板效应

课后习题要点

总结

以上是对现代计算机系统的综述和总结,以及对本书主要内容的梳理。

下面是复习时主要关注的内容:


CSAPP-1-计算机系统漫谈
http://example.com/2023/09/04/CSAPP/CSAPP-1-计算机系统漫谈/
作者
Jwj-Learning
发布于
2023年9月4日
许可协议