操作系统之进程
进程的概念(3方面):
- CPU执行任务的单位
- 获得计算机资源(内存、文件、IO等)的单位
- 正在执行中的程序
进程在计算机中的组成(4部分,共同构成进程映像(process image)):
- code :将被执行的程序(在内存中或者虚拟内存中)
- data :将被程序调用的数据(可能在栈中也可能在寄存器或者内存或虚拟内存中)
- 系统栈:每个进程有一个或多个这样的栈,用于参数调用或中断后的系统调用(在内存中)
- PCB(进程控制块):操作系统控制进程需要的数据(在内存中,详见下图)
标志符 |
|
用户可见寄存器 | |
系统控制寄存器(程序状态字PSW) |
|
栈指针 | |
调度信息 |
|
队列指针 | 进程在不同的状态时处于不同的队列中 |
进程间通信的数据结构 | |
进程特权 | 有的系统分用户态和系统态两种,有的系统则分:普通、管理、特权、系统等4个等级 |
存储管理 | 在内存及虚拟内存中的位置 |
资源所有权和使用情况 | 正在使用及使用过的资源的情况 |
进程的状态(7种):
- 新建:已经创建PCB,但是还没载入内存
- 就绪:已经载入内存,等待被执行
- 运行:执行中
- 阻塞:因为请求IO事件等被阻塞
- 挂起阻塞:从内存转移到磁盘中等待引发阻塞的事件发生
- 挂起就绪:阻塞事件已经发生,但是还没重新载入内存
- 退出:已经完成或意外终止,不将再被执行,但是进程控制块还没清空,等待其他 程序收集其中的数据
进程切换:
- 进程的切换的原因:
时钟中断 | 进程执行超过最大时间片 |
IO中断 | 每个指令执行后,下一个指令执行前,操作系统会先检查有没有IO活动等待事件,如果有比当前进程优先级高的IO事件,操作系统会中断当前执行的进程 |
内存失效 | 进程要访问的虚拟内存地址不在物理内存中时 |
陷阱 | 错误或者异常发生时 |
系统调用 | 调用操作系统的函数 |
- 进程切换的过程:
- 调用中断处理程序,进入内核态
- 当前进程的上下文保存在进程控制块中(中断产生时,处理器的状态信息的保存和恢复由硬件完成)
- 将进程控制块移到相应的进程状态队列
- 选择另一个进程执行,并更新其PCB的状态
- 更新内存结构
- 恢复换入进程的上次执行的上下文