CSAPP学习笔记(一)—— 第一章 计算机系统漫游

前言程序员

    之因此开始记录学习CSAPP的笔记,是由于刚开始接触这么课的时候发现这门课实在是太有意思了。以前一直据说CSAPP这本书很是有意思,如今开始了以后发现确实可以对整个计算机系统有一个深入的理解,很是有助于程序员的程序编写。同时,由于今年咱们研一开设了这么课程,老师上课讲的也很是有意思,所以结合这本书和老师的上课笔记进行一个总结,但愿有兴趣的同窗能够一块儿来学习。再次强调,《深刻理解计算机系统》(简称CSAPP)这本书很是有意思,没看过的赶忙看一下,能学到不少东西。 shell

第一章 计算机系统漫游缓存

1.1信息=位+上下文安全

  源程序是以0和1组成的位序列构成的,其每一个字符都对应一个ASCII字符,。一个ASCII字符是以惟一的单字节大小的整数值来表示每一个文本字符,每一个字节由8bit组成,所以源程序里面的全部信息都是一串位来表示的。咱们能够理解为咱们看到的C语言程序最终都是0、1组合的形式告诉计算机。那么一样的一段数据有可能有不一样的含义,这就须要结合上下文来进行理解。服务器

1.2编译的工做原理网络

  以hello.c源文件来举例子:并发

  hello.c  --> 预处理器  -->  编译器  -->  汇编器  --> 连接器 --> 目标文件分布式

  首先,hello.c源文件须要进行预处理,也就是把头文件包含的内容添加到源文件中,至关于把头文件的库加载进来最终组成一个文件。而后将这个预处理好的文件进行统一编译,把高级语言转换成汇编语言,汇编语言再转化成机器语言,最后是处理hello.c里面涉及到的printf函数,须要把这部分代码与当前的代码进行连接,最终合并到一个文件。合并成功后就能够加载到内存中由系统来执行。函数

1.3理解编译系统的好处性能

  1. 优化程序性能——理解编译过程有助于优化代码
  2. 理解连接时出现的错误——莫名其妙的错误每每跟连接有关
  3. 避免安全漏洞——缓冲区溢出是常见的安全漏洞

1.4程序运行的流程

  目标文件存在磁盘中,当咱们在shell里面输入该文件名的时候,计算机会把目标文件从磁盘复制到主存,而后处理器开始执行main程序里面的机器语言指令,把相关数据从内存复制到寄存器文件中,而后再经过总线从寄存器复制到显示设备进行显示。

1.5高速缓存

  高速缓存在提高程序性能来讲是很是重要的,由于咱们的程序从磁盘到主存,从主存到寄存器这些过程都须要开销时间,这样就会下降效率。然而咱们能够利用高速缓存的局部性原理来进行有效提高程序的性能,把最近出现或者将来可能会用到的程序放到高速缓存中,这样就能够减小访问磁盘或者内存的次数,从而实现提升效率。同时,高速缓存的访问速度跟寄存器差很少,比访问主存要快不少,更比磁盘快不少。在如今的系统中,甚至已经有L一、L2和L3三级的高速缓存。

1.6存储设备层次结构

    访问速度从快到慢:寄存器文件 --> L1 cache --> L2 cache --> L3 cache --> 主存 --> 本地磁盘 -->分布式系统、Web服务器。

    同时,前面一个存储设备能够做为后面一个的高速缓存,至关于一个中间件桥梁的做用,或者理解为缓冲区的做用,这对于提高程序性能来讲很是重要,所以咱们须要好好理解高速缓存的概念。

1.7操做系统管理硬件

  操做系统至关于在应用程序和硬件之间加了一层软件,经过这层软件能够对底层硬件进行抽象化,而后方便用户更方便地操控硬件。操做系统有几个基本抽象概念来实现这些功能,分别是进程、虚拟存储器和文件。

  文件是对I/O设备地抽象,说白了文件就是字节序列,全部的I/O设备均可以抽象为文件,包括磁盘、键盘、显示器甚至网络。

  虚拟存储器是对文件和主存的抽象表示,为每个进程提供了独占地使用内存地假象。  

  进程是对处理器、主存和I/O设备的抽象表示,也是最重要的概念。进程是动态的,是正在运行的程序的一种抽象。处理器在处理代码和数据的时候每每会涉及到进程的上下文切换,这也是提升CPU利用率的方法。对进程的进一步划分还有一个线程的概念,线程能够共享进程的全部资源。

  综述所述,咱们须要理解操做系统对硬件设备的抽象表示,只有这样咱们才能更好地经过操做系统对硬件进行管理。

1.8系统间网络通讯

  网络其实能够当作是一个I/O设备,由于经过网络咱们能够链接到任何一台设备,这样地话咱们把任何一台设备地输出当成咱们本地设备地输入,也就能够把网络理解为I/O设备。网络之间地通讯最典型地机制是客户端—服务器的形式,其总体的运行流程跟本机运行的流程基本一致,只是把网络接口当成了一个输入输出通道而已。

1.9重要主题

  线程级并发、指令级并行和SIMD并行(单指令、多数据并行)这三个概念有点抽象,后续继续探讨。除此以外,抽象是一个很是重要的概念,添加一个虚拟机的概念,虚拟机是对整个计算机的抽象,包括操做系统、处理器和程序。

相关文章
相关标签/搜索