操作系统第六版-第四章-进程
进程
非正式的,进程是运行中的程序。进程不仅仅是程序代码, 有时也称之为代码段( text section)。 它也包含了当前的状态,这由程序计数器和处理器中的寄存器表示。另外,进程通常包含了进程栈 ( process stack)(如方法参数( method parameters)、返回地址和本地变量)和一个数据段( 存储全局变量)。
我们强调程序本身不是进程;程序是静态实体(就像是存储在磁盘上的文件),进程是动态实体,它有一个程序计数器指明下一条要执行的指令, 并且拥有一组相关的资源。
虽然两个进程可能会关联到同样的程序,但仍被视为两个独立的执行序列。例如,几个用户可能会同时运行主程序的不同拷贝,用户也可能会执行多个编辑程序拷贝。那么其中的每一个都是一个独立的进程,而且虽然其文本段是相同的,但是数据段不同。一个进程运行时产生多个进程也是很普遍的。
进程状态
新: 进程正被创建。
运行:(进程的)指令正被执行。
等待:进程正在等待发生一些事件(如 I/O 完成或接收一个信号)。
就绪:进程正等待分配处理器。
终止:进程结束运行。
进程控制块(PCB)
操作系统通过进程控制块( PCB)表示进程,进程控制块也被称为任务控制块。
进程状态:该状态可能是新、就绪、运行、等待、停止等等。
程序计数器:该计数器指明了该进程要执行的下一条指令的地址。
CPU 寄存器:基于计算机体系结构,这些寄存器的数量和类型很不相同。这包括了累加器、变址寄存器、栈指针、通用寄存器,以及条件信息( condition-code information)。 连同程序计数器,在 中断发生时必须要保存这些状态信息,这样便于后来进程继续正确执行( 图 4.3)。
CPU 调度信息:包括进程优先权、指向调度队列的指针和其它的调度参数。
存储器管理信息: 可能包括诸如基址寄存器和界限寄存器值、页表或段表,这取决于操作系统所选用的存储系统。
记账信息( accounting information): 包括 CPU 数量和实时使用量、时间限制、账户数目、作业或进程数目等等。
I/O 状态信息:包括分配给该进程的 I/O 设备的列表、打开的文件的列表等等。
调度队列
进程进入系统之后,它们被放到作业队列里。这个队列由系统中的所有进程组成。 驻留在主存储器中与就绪状态等待执行的进程被保留在一个列表中,这个列表被称为就绪队列。这个队列通常存储为链表。就绪队列的头部保存了指向列表中首个和最后一个 PCB 的指针。我们扩展了每个 PCB,使他们包含一个指针字段来指向就绪队列中的下一个 PCB。
操作系统也有其它的队列。 当一个进程分配到 CPU 时,它执行一段时间并最终退出、被中断或等待特定事件的发生( 如一个 I/O 请求的完成)。 在等待 I/O 请求的情况下,这样的一个请求可能会针对一个磁带驱动器或一个共享设备(如磁盘)。因为系统中有多个进程,所以磁盘可能会忙于应付其它进程的 I/O 请求。因此这个进程必须要等到磁盘空闲下来。等待某一特定 I/O 设备的进程列表被称为设备队列。每个设备都有自己的设备队列。
进程交换机制
将进程从内存中移除(不再占用 CPU)并降低了多道程序度。 稍后再把进程重新载入内存并从停止的地方继续运行。这种机制被称为交换。通过中程调度程序,进程被换出,然后被换入。 为了改善进程混合集(混合集的意义是为了保持系统平衡,如果进程集都是IO密集型,那么就绪队列几乎总是空的,cpu无事可做,如果进程集都是计算密集型,那么设备几乎都是空闲的,所以混合集的意义在保持平衡,最大化的利用系统资源),或者内存需求过多或者太多空闲了,就有必要进行交换。
上下文切换
要将 CPU 转向另一个进程需要保存当前进程的状态并载入为新进程存储的状态。这个工作被称为上下文转换。一个进程的上下文表示在进程的 PCB 中;它包括了 CPU 寄存器值、进程状态和内存管理信息。 当上下文转换发生时,内核存储当前进程 PCB 中的上下文信息并载入被调度运行的新进程存储的上下文信息。 上下文转换时间是纯粹的开销,因为在转换进行时系统不能做任何有用的工作。 根据内存速度、必须要拷贝的寄存器数量和是否存在用于上下文转换的专门指令(例如有独立的指令来载入或存储所有的寄存器),转换速度与具体的机器有关。
进程通信
共享存储器,消息系统,socket。