1 简介
进程是对正在运行程序的一种抽象,或者说是实例,它包括程序计数器、寄存器和变量的当前值。
关于进程的一个重要思想:一个进程是某种类型的一个活动,它有程序、输入、输出以及状态。单个处理器可以被若干个进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。
2 进程的创建
有4种主要事件会导致进程的创建:
- 系统初始化
- 正在运行的程序执行了创建进程的系统调用
- 用户请求创建一个新的进程
- 一个批处理作业的初始化
Unix系统,只有一个系统调用用于创建进程:fork。这个系统调用会创建一个与调用进程相同的副本。对于不可写的内存区是共享的;但对于可写的内存是不可以共享的,而是会进程写时复制,即当两者之一想要修改这部分数据时,则这块内存被明确的复制,以保证修改发生在私有区域。
Windows系统,使用CreateProcess函数创建进程,父子进程的地址空间一开始就是不同的。
3 进程的终止
以下条件将引起进程的终止:
- 正常退出(自愿):
执行结束后由编译器执行一个系统调用(Unix系统:exit;Windows:ExitProcess)
- 出错退出(自愿):
程序错误,例如除零
- 严重错误(非自愿)
- 被其他进程杀死(非自愿):
另外一个进程通过一个系统调用杀死该进程(Unix系统:kill;Windows系统:TerminateProcess)
4 进程的层次结构
对于Unix系统,进程和它的所有子进程以及后裔共同组成进程组;整个系统中,所有进程都属于以init为根的一棵树。
对于Windows系统,没有层次的概念,所有的进程地位相同。
5 进程的状态
三状态:
- 就绪态
- 运行态
- 阻塞态。
状态转换图如下:
1 | 就绪态 ----> 运行态 ----> 阻塞态 |
6 进程的实现
操作系统维护了一张进程表,每个进程占用一个进程表项(也称进程控制块),其中包含了程序计数器、堆栈指针、内存分配状况、所打开文件的转台、账号和调度信息,以及其他在进程由运行态装换到就绪态或阻塞态时必须保存的信息。