深入理解计算机操作系统(第二版) 读书笔记(第一章 计算机系统漫游)
深入理解计算机操作系统(第二版) 读书笔记(第一章 计算机系统漫游)
第一章 计算机系统漫游
信息就是位+上下文
每8位拼成1字节,代表一个ASCII码。所有程序都是通一串位表示的。区分数据对象的唯一方法是我们读到这些对象时的上下文。
程序被其他程序翻译成不同的格式
在unix中,从源文件到目标文件的转化是由编译器驱动程序完成的:
unix> gcc -o hello hello.c
GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello。这个过程分为四个阶段。执行四个阶段的程序(预处理器,编译器,汇编器和链接器)一起构成了编译系统。
- 预处理阶段
根据以字符#开头的命令,修改原始c程序,把头文件插入程序文本中,通常以.i为文件扩展名。 - 编译阶段
将.i的文本文件翻译成.s的文本文件,它包含一个汇编语言程序。 - 汇编阶段
将.s文件翻译成机械语言指令,并打包成可重定位目标程序的格式,保存为.o文件。 - 链接阶段
以某种方式合并标准C库中得函数,得到一个可执行文件。
了解编译系统如何工作是大有益处的
优化程序性能,理解链接时出现的错误,避免安全漏洞。
系统的硬件组成
- 总线
贯穿整个系统的一组电子管道,携带信息字节并负责在各个部件间传递。通常被设计成传送定长字节块——字。 - I/O设备
每个I/O设备都会通过一个控制器或者适配器与I/O总线相连。 - 主存
一个临时的存储设备,在处理器执行程序时存放程序和程序处理的数据。 - 处理器(CPU)
解释或执行存储在主存中指令的引擎,核心是一个字长的存储设备,称为程序计数器(PC)。在任何时刻,PC都指向贮存中某条机器语言指令(即含有该条指令的地址)。
运行hello程序
我们在shell中执行命令后,shell会执行一系列指令来加载hello文件,将hello目标文件中的代码和数据从磁盘复制到贮存,数据包最终输出"Hello World"。
高速缓存至关重要
信息在磁盘,主存,显示设备之间的相互复制,所浪费的时间,减缓了程序“真正的工作”。
较大的存储设备要比较小的存储设备运行慢,而快速设备的造价远高于低速设备。处理器从寄存器文件中读数据的速度比从主存中读取几乎要快100倍,而且差距还在。
针对处理器与主存之间的差异,采用更小、更快的存储设备,即高速缓存储存器。
存储设备形成层次结构
每个计算机系统中存储设备都被组织成了一个存储器层次结构。在这个层次结构中,从上至下,设备便的访问速度越来越慢,容量越来越大,并且每字节造价越来越便宜。
L0:寄存器,cpu寄存器保存来自高速缓存储存器的字。
L1:高速缓存(SRAM),L1高速缓存保存取自L2高速缓存的高速缓存行。
L2:高速缓存(SRAM),L2高速缓存保存取自L3高速缓存的高速缓存行。
L3:高速缓存(SRAM),L3高速缓存保存取自主存的高速缓存行。
L4:主存(DRAM),主存保存取自本地磁盘的磁盘块。
L5:本地二级存储(本地磁盘),本地磁盘保存取自远程网络服务器上的磁盘的文件。
L6:远程二级存储(分布式文件系统,Web服务器)。
操作系统管理硬件
操作系统相当于程序和硬件之间插入的一层软件,所有应用程序对硬盘的操作尝试都必须通过操作系统。
操作系统有两个基本功能:
- 防止硬件被失控的应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂而又不同的低级硬件设备。
操作系统通过几个基本的抽象概念(进程,虚拟存储器和文件)来实现这两个功能。
文件是对I/O设备的抽象表示,虚拟存储器是对主存和磁盘I/O的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示。
进程
进程是操作系统对一个正在运行的程序的一种抽象,在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。
并发是指一个进程的指令和另一个进程的指令交错执行。操作系统实现这种交错执行的机制称为上下文切换。
操作系统保持跟踪进程运行所需的所有状态信息。这种状态,也就是上下文。当操作系统决定要把控制权从当前进程转移到了某个新进程时,就会进行上下文切换,即保存当前进程上下文,恢复新进程的上下文,然后将控制权传递给新进程。新进程会从上次停止的地方开始。
实现进程需要操作系统软件和低级硬件合作。
线程
一个进程实际上可以有多个称为线程的执行单元组成,每个线程都运行在进程上下文忠,并共享代码和全局数据。
虚拟存储器
虚拟存储器是一个抽象概念。它为每个进程提供一个假象,即每个进程都独占主存。每个进程看到的都是一致的存储器,称为虚拟地址空间。
虚拟地址空间(低地址->高地址):
- 程序代码和数据:代码从同一固定地址开始,紧接着是和C全局变量相应的数据位置。代码和数据区直接按照可执行目标文件的内容初始化。
- 堆:代码和数据区后紧随着是运行时堆。代码区和数据区在进程一开始运行时就被规定了大小。堆在调用malloc和free这样的函数时,可以动态扩展和收缩。
- 共享库:地址空间中间部分存在像c标准库和数学库这样的共享库代码和数据的区域。
- 栈:位于用户虚拟地址空间顶部。编译器用它来实现函数调用,可以动态扩展和收缩。
- 内核虚拟存储器:内核总是驻留在内存中,是操作系统一部分。地址空间顶部区域为内核保留,不允许应用程序读写或直接调用。
虚拟存储器基本思想史把一个进程虚拟存储器的内容存储在磁盘上,然后用主存作为磁盘的高速缓存。
文件
文件就是字节序列。
系统之间利用网络通信
从一个单独的系统看来,网络就是一个I/O设备。
并发和并行
并发指一个同时具有多个活动的系统。
并行指值用并发是一个系统运行得更快。
- 线程级并发
同时执行多个程序的系统,导致了并发。由一个处理器完成的被称为单处理器系统。
当构建一个由但操作系统内和控制的多处理器组成的系统时,我们就得到了一个多处理器系统。
多处理器是将多个CPU集成到一个集成电路芯片上。
超线程,有时称为同时多线程,是一项允许一个CPU执行多个控制流的技术。举例来说i7处理器可以让一个核执行两个线程。
多处理器可以从两方面提高性能。首先减少了在执行多个任务是模拟并发的需要。其次,它可以使应用程序运行得更快。 - 指令级的并行
在较低的抽象层次上,现代处理器可以同时执行多条指令的属性被称为指令级并行。如果处理器可以达到比一个周期一条指令更快的执行速率,就称之为超标量处理器。大多数现代处理器都支持超标量操作。 - 单指令多数据并行
在最低的抽象层次上,许多现代处理器拥有特殊硬件,允许一条指令产生多个可以并行执行的操作,这种方式称为单指令,多数据,即SIMD并行。
计算机系统中抽象的重要性
<font color=red>抽象</font>的使用是计算机科学中最为重要的概念之一。
- 文件是对I/O的抽象。
- 虚拟机存储器是对程序存储器的抽象。
- 进程是对一个正在运行的程序的抽象。
- 虚拟机提供对整个计算机(包括操作系统,处理器和程序)的抽象。
小结
计算机系统是由硬件和系统软件组成,它们共同协作一运行应用程序。计算机内部的信息蓓表示为一组组的位,它们一句上下文有不同的解释方式。程序被其他程序翻译成不同的形式,开始时ASCII文本,然后被编译器和链接器翻译成二进制可执行文件。
处理器读取并解释存放在住村里的二进制指令。因为计算机把大量的时间用于存储器、I/O设备和CPU寄存器之间复制数据,所以将系统中的存储设备划分成层次结构——CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器。在底层模型中,位于更高层的存储设备比底层的存储设备更快,单位比特开销也更高。层次结构中较高层次存储设备可以作为较低层次高速缓存。通过理解和运用这种存储层次结构的知识,程序员可以优化C程序的性能。
操作系统内核是应用程序和硬件之间的媒介。它提供三个基本的抽象:
- 文件是对I/O设备的抽象
- 虚拟存储器是对主存和磁盘的抽象
- 晋城市对处理器、主存和I/O设备的抽象
最后,网络提供了计算机系统之间通信的手段。从特殊系统的角度来看,网络就是一种I/O设备。

浙公网安备 33010602011771号