CSAPP读书笔记(一)

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

 

从源程序到目标文件的转化过程:

 

了解编译系统的好处:

  • 优化程序性能
  • 理解链接时出现的错误

  • 避免安全漏洞

 

系统的硬件组成:

  • 总线是贯穿整个系统的一组电子管道,负责在各个部件之间传送定长的字节块,称为字。
  • I/O设备是系统与外部世界的联系通道。每个I/O设备都通过一个控制器或适配器与I/O总线相连。
  • 主存从逻辑上可被看作一个线性字节数组,每个字节都有其唯一的地址(数组索引)。
  • 处理器是解释和执行存储在主存中指令的引擎,它执行如下的循环:处理器从PC指向的内存处读取指令,解释指令中的比特,执行该指令指示的简单操作,然后更新pc使其指向下一条指令。基本的指令类型包括加载、存储、操作、跳转。ISA描述每条机器代码指令的效果;micro-architecture描述处理器实际上是如何实现的。

根据机械原理,较大的存储设备要比较小的存储设备运行的慢;而快速设备的造价远高于同样容量的低速设备。processor-memory gap在持续增大,增加了位于处理器和主存之间的cache来缓和这一冲突;其依据是程序局部性原理----程序具有访问局部区域里的数据和代码的趋势。

 

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

 

可以把操作系统看成是应用程序和硬件之间插入的一层软件,它主要有两个基本功能:

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

操作系统通过几个基本概念实现其功能:

  • 文件是对I/O设备的抽象表示,向应用程序提供了一个统一的视图来看待系统中可能含有的所有各式各样的I/O设备
  • 虚拟内存是对主存和磁盘I/O设备的抽象表示,为每个进程提供了一个假象,即每个进程独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间。每个进程看到的虚拟地址空间由大量准确定义的区构成,每个区有专门的功能。其基本思想是把一个进程虚拟内存的内容存储在磁盘上,然后用主存作为磁盘的高速缓存。

  • 进程是操作系统对一个正在运行的程序的一种抽象。一个系统上可以并发运行多个进程,每个进程都好像在独占地使用硬件。这是通过上下文切换机制实现的:保存当前进程的上下文、恢复新进程的上下文、将控制权传递到新进程;新进程就会从它上次停止的地方继续运行。进程作为资源分配的基本单位,现代OS都在“进程内部”实现了线程机制,线程是调度和执行的基本单位,它们共享所属进程的大部分资源。

 

现代系统通过网络和其他系统连接到一起;从一个单独的系统来看,网络可视为一个I/O设备;典型的网络交互是通过客户端/服务器模式实现的。

 

Amdahl定律:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度;要想显著加速整个系统,必须提升系统中相当大部分(针对时间比例而言)的速度。

 

在计算机历史中,有两个需求是驱动进步的持续动力:一个是我们想要计算机做得更多;另一个是我们想要计算机运行的更快。

并行可以在计算机系统的多个抽象层次上运用:

  • 线程级并发:多核程序是在源码级别上的并发,要由程序员主动实现来利用多处理器同时执行的优势,即使不如此它也能通过在多个核上执行不同应用来增加系统性能;超线程可以允许一个cpu执行多个控制流,它涉及cpu某些硬件有多个备份而其他硬件部分只有一份,实现在单个时钟周期基础上决定要执行哪一个线程,通过加快线程切换提高性能。
  • 指令级并行:通过流水线和超标量等技术实现指令的重叠执行,这些是硬件实现的,但程序本身的编写也可以利于流水操作的方式进行。
  • 单指令多数据并行:SIMD指令多为提高处理影像、声音和视频数据应用的执行速度;用编译器支持的特殊向量数据类型编写程序有利于编译器抽取SIMD并行性。

 

计算机系统中的典型抽象:

 

posted @ 2020-02-01 20:58  whynotup  阅读(107)  评论(0)    收藏  举报