进程
在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程(sequential process),简称进程(process)。一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值。从概念上说,每个进程拥有它自己的虚拟CPU。一个进程是某种类型的一个活动,它有程序、输入、输出以及状态。单个处理器可以被若干进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。
PCB (Process Control Block)
进程管理字段 | 存储管理字段 | 文件管理字段 |
---|---|---|
寄存器 | 正文段指针 | root目录 |
程序计数器 | 数据段指针 | 工作目录 |
程序状态字 | 堆栈段指针 | 文件描述符 |
堆栈指针 | 用户ID | |
进程状态 | 组ID | |
优先级 | ||
调度参数 | ||
进程ID | ||
父进程 | ||
进程组 | ||
信号 | ||
进程开始时间 | ||
使用的CPU时间 | ||
子进程的CPU时间 | ||
下次报警时间 |
从上表可以更好的理解进程的定义:一个进程是某种类型的一个活动,它有程序、输入、输出以及状态。
进程状态变更
对于进程的控制,使用的是原语,一般有创建原语、撤消原语、阻塞原语、唤醒原语等。
原语是指由若干条指令组成的程序段,在执行过程中不可被中断
进程的各种状态
创建
进程的创建由创建原语实现,创建原语主要有四步操作:
- 申请PCB
- 分配资源
- 初始化PCB
- 插入就绪队列
进程的创建主要由四种事件触发:
- 系统初始化
- 正在运行的进程创建子进程(fork)
- 用户请求创建
- 批处理初始化
就绪
此状态表示进程可运行,但因为其他进程正在运行而暂时停止。
阻塞
此状态下,除非某种外部事件发生,否则进程不能运行。
运行
此状态表示该时刻进程实际占用CPU,即正在运行。
终止
终止有两大类,一是自愿终止(正常退出&出错退出),二是非自愿终止(严重错误&被其他进程杀死),由撤销原语完成。
进程三种主要状态的变更
就绪状态 -> 运行状态
分配到CPU使用时间,状态变更至运行状态。
运行状态 -> 就绪状态
CPU使用时间结束,状态变更至就绪状态。
运行状态 -> 阻塞状态
进程请求资源或者等待事件时,状态变更至阻塞状态,操作由阻塞原语完成。
阻塞状态 -> 就绪状态
由唤醒原语进行状态的切换,由系统进程或事件发生进程唤醒。
参考
https://houbb.github.io/2020/10/04/os-01-process
http://kjwy.5any.com/czxt/content/czxt03/Czxt-kcjj-030302.htm
ANDREW S.TANENBAUM. 现代操作系统