第1段。步骤是计算机科学实现的重要手段。操作系统能提供一种抽象,把不同的程序区分开来,使它们都在各自专有的cpu缓存,内存空间中运行。处理器不停地执行程序中的指令。程序中的数据和代码在系统中是唯一的。都归功于步骤的概念。
第2段。流程是操作系统运行程序的抽象。多种流程可以同时在计算机上运行,每个都使用专有的硬件空间。在并发系统里,每个流程的指令都混合着其他流程的指令。多数系统运行不同的流程超出运行不同的cpu。一个cpu同时执行多个流程,通过在不同的流程中切换cpu实现。操作系统执行这种变换通过一种叫做上下文切换的器件。
第3段。操作系统监控着每个进程的状态信息。这个状态就是上下文,包括PC,寄存器和内存内容。当操作系统决定执行另一个进程,它保存当前进程的执行信息,载入新进程的上下文,然后将控制权交给新进程。新进程就从它上一次离开cpu时的状态开始执行。
第4段。略。
第5段。图1.12表明,一个进程切换到另一个进程是由操作系统的内核处理的。内核是操作系统的一部分,常驻于内存。进程通过一个特殊的系统调用,将cpu控制权交给内核。内核执行完进程要求的操作然后返还cpu,执行之前的进程。注意内核不是一个独立的进程,它是一个代码和数据结构的集合。操作系统用它来管理所有的进程。
第6段。实现进程抽象需要关闭低级硬件和操作系统软件的协作。我们会探索它是怎么工作的,应用程序怎样创建和控制他们自己的进程,在第8章。
1.7.2 Threads 线程
第1段。虽然我们通常认为进程就是一个控制流,在现代系统中一个进程实际由多个执行单元组成,叫做线程,它们都运行在进程的上下文中,共享同样的代码和全局数据。线程是一个日益重要的编程模型因为网络服务要求并发性。因为很容易在多个线程中共享数据而不是多个进程中。也因为线程比进程效率高。当处理器支持多核时多线程是使程序运行更快的一种方式,我们会在1.9.2中继续讨论。你会学到并发的基本概念,包括怎么写多线程程序,在12章。
1.7.3 Virtual Memory 虚拟内存
第1段。虚拟内存是一种抽象,它给每个进程提供一种错觉,进程有专门的内存使用。每个进程以相同的视角看待内存,被熟知为虚拟地址空间。在Linux中,最上层的地址空间区域是被保留的操作系统代码和数据,在所有进程中都是共同的。最下层是用户的进程定义的代码和数据。
第3段。为了虚拟内存工作,要求硬件和操作系统软件之间进行复杂的交互,包括硬件翻译由处理器生成的每个地址。一种基础的做法是在磁盘中保存进程的虚拟内存的上下文,并且使用内存作为磁盘的缓存。在第9章将解释它的工作原理和重要性。
1.7.4 Files 文件
第1段。一个文件就是一系列的字节,不多不少。每一种输入输出设备,包括磁盘,键盘,显示器,甚至网络,被视为文件模型。系统中所有的输入输出操作都是对文件的读写操作,使用一个叫做Unix I/O的小的系统调用集。
第2段。这种简单而又高雅的文件的概念却很强大因为它为应用程序提供了统一的视角看待不同操作系统中的不同输入输出设备。举个例子,程序开发者不知道具体的磁盘技术而去操作磁盘文件中的内容。更夸张的是,同样的程序可以在不同的系统不同的磁盘技术中运行。你将在第10章学到关于Unix I/O的知识。
1.8 Systems Communication with Other Systems Using Networks 通过网络实现系统之间交流
第1段。直到现在我们将系统看作是一个孤岛似的硬件和软件的集合。事实上,现代系统经常通过网络与其他系统连接。从独立的系统的视角看,网络就是另一个输入输出设备。