这一章我阅读下来,个人感觉是对于整本书的整体概括和介绍。从最基本的信息位开始介绍,然后介绍到编译器,计算机硬件以及计算机操作系统和网络通信。其中让我比较印象深刻的就是这本书对于编译器以及不同编译阶段的介绍以及进程、线程并发的一些理念的介绍。
关于编译器,我之前对此知之甚少,因为在学习编程刚开始的时候,都是用集成开发工具来完成的,集成开发工具屏蔽了很多复杂的关于编译器,编辑器的联动操作,并且提供了方便的调试工具,所以作为学习者,我对于程序的编译执行的一些中间过程处于一无所知的状态,在阅读次数之后才算有了基本的认知,以C语言为例,编译分为4个阶段,分别是预处理阶段,编译阶段,汇编阶段和链接阶段,在这些阶段也会依次生成这些中间文件: 预处理生成*.i文件,编译生成*.s的汇编语言文件,汇编器再将*.s文件翻译成机器语言指令并将其保存在目标文件*.o中,最后将进入链接阶段,我们在编写C语言文件的时候必定会用到相应的标准库函数,在调用这些库函数的时候,链接器会将这些库函数的目标文件合并到之前的源文件生成的目标文件中,最后生成可以运行的可执行文件。
关于进程和线程,在类似于Java和C#这样的高级编程语言中,都会提供一个线程类,因此我在此之前对于线程就有一个基本概念,对于进程,我在阅读此书之前,对于进程的理解几乎完全来源于Windows系统的Task Manager,非常浅薄。说一下在阅读完本章之后我对于进程以及线程的理解把。 首先,进程从本质上来说也是一种抽象,在操作系统上可以并发运行多个进程,这种并发运行看上去是同时发生的,其实并不是这样的,操作系统会切换不同的进程,完成进程的上下文切换,线程与进程不同,一般来说线程是运行在进程中的上下文中并且能够共享同样的代码和全局数据,所以相比起进程,线程不需要频繁地进行上下文切换,在系统开销上要比进程小得多。
以上就是我对于CSAPP一书第一章的一些粗浅理解。