深入理解计算机系统 第八章 异常控制流 part2
关于进程,需要关注其提供给应用程序的两个关键抽象:
1、一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器
2、一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统
逻辑控制流:
如果想用调试器单步执行程序,我们会看到一系列的程序计数器(PC)的值,这些值唯一地对应于包含在程序的可执行目标文件中的指令,或是在运行时动链接到程序的共享对象的指令。这个 PC 值的序列叫做逻辑控制流,或者简称逻辑流。
并发流:
计算机系统中逻辑流有许多不同的形式。异常处理程序、进程、信号处理程序、线程和 java 进程都是逻辑流的例子。
一个逻辑流的执行在时间上与另一个重叠,称为并发流(concurrent flow),这两个流被称为“并发地运行”。
多个流并发地执行的一般现象被称为并发(concurrency)。一个进程和其他进程轮流运行的概念称为多任务(multitasking)。一个进程执行它的控制流的一部分的每一时间段叫做时间片(time slice)。因此,多任务也叫做时间分片(time slicing)。
私有地址空间:
进程也为每个程序提供一种假象,好像它独占地使用系统地址空间。在一台 n 位地址的机器上,地址空间时 2^n 个可能的地址的集合,0,1,…,2^n -1。进程为每个程序提供它自己的私有的地址空间。一般而言,和这个空间中某个地址相关联的那个内存字节是不能被其它进程读或者写的,从这个意义上说,这个地址空间是私有的。
用户模式和内核模式:
为了使操作系统内核提供一个无懈可击的进程抽象,处理器必须提供一种机制,限制一个应用可以执行的指令以及它可以访问的地址空间的范围。
处理器通常是用某个控制寄存器中的一个模式位(mode bit)来提供这种功能的,该寄存器描述了进程当前享有的特权。当设置了模式位时,进程就运行在内核模式中。一个运行在内核模式的进程可以执行指令集中的任何指令,并且可以方位系统中的任何内存位置。
没有设置模式位时,进程就运行在用户模式中。用户模式中的进程是不允许执行特权指令的,例如停止处理器、改变模式位,或者发起一个 I/O 操作。也不允许用户模式中的进程直接引用地址空间中内核区内的代码和数据。任何这样的尝试都会导致致命的保护故障。反之,用户程序必须通过系统调用接口间接地访问内核代码和数据。