第一章计算机系统漫游
计算机系统是由硬件和系统软件组成的,他们共同工作来运行程序。
举例hello程序的生命周期
1.1信息就是位+上下文
从源程序(源文件)开始,即程序员通过编辑器创建保存的文本文件,文件名是hello.c,源程序实际上就是一个有值0和1组成的位序列
Hello.c程序是以字节序列的方式存储在文件中。每个字节都有一个整数值,对应于某些字符。像这样只由ASCⅡ字符构成的文件称为文本文件,所有其它文件都称为二进制文件。
Hello.c的表示方法说明了一个基本思想;系统中所有的信息都是由一串比特表示的。区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。
1.2程序被其他程序翻译成不同的格式
hello.c程序的生命周期是从一个高级c语言程序开始的,因为这种形式能被人读懂
为了在系统上运行hello.c程序,每条c语句都必须被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序格式打包好,并以二进制磁盘文件的形式存放起来。
Gcc编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件,共有四个阶段。
预处理阶段:预处理器(cpp)根据以字符#靠头的命令,修改原始的C程序。结果就得到了另一个C程序,通常是以.i作为文件扩展名。
编译阶段:编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含了一个汇编语言程序。每条语句都以一种文本格式描述了一条低级机器语言指令。
汇编阶段:汇编器(as)将hello.s翻译成机器语言指令,把这些这些指令打包成可重定位目标程序的格式,并将结果保存在目标文件hello.o中。
链接阶段:每个c编译器都提供的标准c库,链接器负责处理函数于hello.o的合并,得到hello文件,它是一个可执行目标文件,可以被加载在内存中,由系统执行
1.3了解编译系统如何工作是大有益处的
1.优化程序性能2.理解链接时出现的错误3.避免安全漏洞。
1.4处理器度并解释存储在内存中的指令
将已经被编译系统翻译成可执行目标文件的hello在unix上输入到称为shell的应用程序中:
Linux> ,/hello
Hello,world
Linux>
Shell是一个命令行解释器,他输出一个提示符,等待输入一个命令行,然后执行这个命令。
1.4.1系统的硬件组成
1.总线:贯穿整个系统的是一组电子管道。称作总线。
2.I/O(输入/输出)设备:系统与外部世界的联系通道。
3.主存:主存是一个临时存储设备。
4.处理器:***处理单元简称处理器,是解释或执行存储在主存中指令的引擎。
1.4.2运行hello程序
1.5高速缓存至关重要
根据机械原理较大的存储设备比较小的存储设备运行的慢,而快速设备的造价远高于同类的低速设备,所以处理器从存储器文件中读取数据比主存快的多,这种处理器于主存之间的差距还在持续增大。
针对这种处理器于主存之间的差异,系统设计者采用了更小更快地存储设备称为***(高速缓存)。
1.6存储设备形成的层次结构
寄存器、一级缓存、二级缓存、三级缓存、主内存、本地磁盘、远程磁盘构成一个层次结构。上面一层是当前层的高速缓存。
1.7操作系统管理硬件
操作系统有两个基本功能:
1. 防止硬件被失控的应用程序滥用
2. 向应用程序提供了简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。
1.7.1进程
进程是操作系统对一个正在运行程序的一种抽象。操作系统保持跟组进程运行所需的所有状态信息,当操作系统决定要把控制权从当前进程抓移到某个新进程时,就会进行上下文切换(保存当前进程的上下文,恢复新进程的上下文,然后将控制权传递到新进程)
1.7.2线程
一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程上下文中,并共享同样的代码和全局数据。
1.7.3虚拟存储
一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独立地使用主存。Linux中,地址空间最上面的区域是为操作系统中的代码和数据保留的,这对素有进程来说是一样的,地址空间的地步存放用户进程定义的数据和代码
· 程序代码和数据。对所有的进程来数,代码是从同一固定地址开始的,紧接着是C全局变量,代码和数据区是直接按照可执行文件加载的,如上图的hello片段。
· 堆:代码和数据区后是运行时堆,代码和数据区是进程在一开始运行时就被规定了大小,但是堆可以在调用malloc和free等函数式动态的扩展和收缩
· 共享库:大约在地址空间的中间部分是用来存放C标准库等这样共享库的代码和数据的区域。
· 栈:位于用户虚拟地址空间的顶部,编译器用它来实现函数调用,和堆一样,在程序执行期间可以动态地扩展和收缩。(调用函数会使得栈增加,从函数返回时,栈收缩)
· 内核虚拟存储器:内核总是驻留在内存中,是操作系统的一部分,不允许程序续写,或直接调用内核代码定义的函数。
1.7.4文件
字节序列。I/O设备,磁盘,键盘,显示器都可视为文件。
1.8系统之间利用网络通信
网络也是一个I/O设备,系统通过网络进行通信
1.9重要主题
系统是硬件与软件的集合体,它们必须共同协作以达到运行应用程序的最终目的。
1.9.1并发和并行
· 并发:指一个同时具有多个活动的系统。
· 并行:用并发使一个系统跑的更快。
· 线程级并发
· 进程这个抽象的出现,使我们能够设计出能同时执行多个程序的系统。
· 线程可以在一个进程中执行多个控制流。
· 指令级并行
· 现代处理器可以处理多条指令
· 单指令、多数据并行
· 一条指令可以产生多个可以并行执行的操作。
1.9.2计算机系统中抽象的重要性
抽象的使用是计算机科学中最为重要的概念之一。