CSAPP读书笔记,其一

不是所有的书都需要写笔记,比如代码大全这种就是需要经常读读,结合项目自我体验升华。但是对于某些涉及大量细节,或者繁杂的逻辑的书,如果只是顺序的往下读,基本上只是过眼即忘,更好的方法是仔细的看一遍,认真的做完习题,然后自己再总结一下脉络梗概。如果时间比较匆忙,习题没时间做也最好认真的做笔记,脑子里面有一条线,方便需要时迅速找到自己需要的内容。

CSAPP这本书,主要涉及到极底层的操作系统相关的东西,充斥着大量细节和要素,以及大量习题,正是适合写读书笔记的好书,因此便成此文,以为始。

程序被编译为二进制程序的过程:预处理器—编译器—汇编器—链接器,这就是所谓的"编译系统",预处理用于扩展宏和被include的文件,生成一个新的C程序,一般以.i作为文件扩展名;编译器将文本文件.i翻译成.s,后者是一个汇编语言程序;汇编器将.s翻译成机器语言指令,并把这些指令打包成.o文件,后者被称为"可重定位目标程序",它已经是一个二进制文件了;链接器负责合并目标文件,生成最终的"可执行目标文件"。

程序执行过程:程序最初存放在磁盘上,当通过shell执行程序时,在敲入回车键之前,shell将命令逐一读入register,然后通过总线放入主存储器中,回车键敲入后,shell执行一系列指令来加载可执行文件,将目标文件的代码和数据从磁盘复制到内存,当处理器运行程序时,指令又从主存复制到处理器。

CPU高速缓存是用SRAM实现的。寄存器,多级高速缓存和内存、磁盘构成了一个存储器层次结构,存取速度从上到下逐渐变慢。程序员可以利用这种结构来调整程序的性能。

如果有操作系统,那么所有应用程序对硬件的操作尝试都必须通过操作系统。OS通过几个基本的抽象概念来向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备,并以此防止硬件被失控的应用程序滥用。这几个抽象的概念主要包括:文件、进程、线程、虚拟存储器等。

进程是操作系统对一个正在运行的程序的一种抽象,进程是一个CPU可以并发执行很多程序的关键。CPU通过上下文切换来完成进程间的切换执行,所谓context,是进程运行所需的所有状态信息,上下文切换需要在用户代码和内核代码之间来回切换,实际上是比较耗费时间的。

线程,线程编程模型比多进程编程模型更高效,原因在于多线程之间更容易共享数据;

虚拟存储器:操作系统划分给进程的存储空间,它构成了一种每个进程都在独占地使用内存的假象。虚拟地址空间的布局根据操作系统有所不同,在linux中,地址空间最上面的区域是为操作系统中的代码和数据保留的,往下(地址减少)依次是stack,共享库存储器,heap,.data,.text。

文件:文件就是字节序列,所有的I/O设备均可抽象为文件,甚至包括网络。

并发:线程级并发(包括多核、超线程等概念);指令级并发:流水线技术(DSP中也有);单指令多数据并发:SIMD并发,新型的CPU有些特殊的硬件完成此功能;

抽象:抽象是最重要的概念,是管理工程复杂度的关键。

以上是第一章的内容概述,本章为以下各章节的序言,阐述了全文的几个最终的概念和叙述脉络。

posted @ 2013-03-20 11:23  生无所息  阅读(795)  评论(0编辑  收藏  举报