操作系统中最核心的概念是进程:这是一个对正在运行程序的抽象。操作系统的其他所有内容都是围绕着进程的概念展开的。
进程是操作系统提供的最古老的也是最重要的抽象概念之一。即使只有一个CPU,它也是支持(伪)并发操作的能力。它们将一个CPU变成多个虚拟CPU。这里我同大家一起学习关于进程的基础知识。
进程
进程模型
在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,都被组织成若干顺序进程(sequential process),简称进程(process)。一个进程就是一个正在执行的程序实例,包括程序计数器,寄存器和变量的当前值。从概念上讲,每个进程都拥有它自己的虚拟CPU。在单CPU模式下,任何给定瞬间都只有一个进程真正在运行。当然,实际上只有一个物理程序计数器,所以在每个程序运行时,它的逻辑程序计数器会被装入实际的物理计数器中。当该程序执行结束或暂定时,物理程序计数器被保存在内存中该进程的逻辑程序计数器中。
创建进程
新进程都是由于一个已经存在的进程执行了一个用于创建进程的系统调用而创建的,这个进程的作用是,执行一个用来创建进程的系统调用,这个系统调用通知操作系统创建一个新进程,并且直接或间接地指定在该进程中运行的程序。
进程终止
进程终止通常有四种条件引起:
1)正常退出(自愿)
2)错误退出(自愿)
3)严重错误(非自愿)
4)被其他进程杀死(非自愿)
进程的状态
进程有三种状态:
1)运行态(该时刻进程实际占用CPU)
2)就绪态(可运行,但因为其他进程正在运行而暂时停止)
3)阻塞态(除非某种外部事件发生,否则进程不能运行,比如等待外部输入)
进程的三种状态直接有四种切换关系,运行态和就绪态可以相互切换;运行态可以进入阻塞态;阻塞态可以进入就绪态。
进程的实现
为了实现进程模型,操作系统维护着一张表格(一个结构数组),即进程表(process table)。每个进程占用一个进程表项。该表项包含了进程状态的重要信息,包括程序计数器,堆栈指针、内存分配状况、所打开的文件状态、账号和调度信息,以及其他在进程由运行态转换到就绪态或阻塞态时必须保留的信息,从而保证该进程随后能再次启动,就像从未被中断过一样。
当一个磁盘中断发生时,用户进程正在运行,则中断硬件将程序计数器、程序状态字、寄存器等压入堆栈,计算机随即跳到中断向量所指示的地址。这些是硬件完成的所有操作,然后软件,特别是中断服务例程就接管一切剩余操作。