这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
进程的概念
我们编译的代码可执行文件只是存储在硬盘的静态文件,运行时被加载到内存,CPU执行内存中指令,这个运行的程序被称为进程。进程是对运行时程序的封装,操作系统进行资源调度和分配的基本单位。
进程的实现
中断发生后,操作系统底层的工作步骤
-
硬件压入堆栈程序计数器等
-
硬件从中断向量装入新的程序计数器
-
汇编语言过程保存寄存器值
-
汇编语言过程设置新的堆栈
-
C中断服务例程运行
-
调度程序决定下一个将运行的进程
-
C过程返回至汇编代码
-
汇编语言过程开始运行新的当前进程
进程表:
- 为了实现进程模型,操作系统维护着一张表格(一个结构数组),即进程表。
- 每个进程占用一个进程表项
- 该表项包含进程的重要信息
- 包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号的调度信息,以及其他在进程从运行态转换成就绪态或阻塞态时必须保存的信息,从而保障该进程随后能再次启动,就像从未中断一样
并发与并行
- 单个核心在很短时间内分别执行多个进程,称为并发
- 多个核心同时执行多个进程,称为并行
- 对于并发来说,CPU需要从一个进程切换到另一个进程,这个过程需要保存进程的状态信息
进程的状态与切换
某个进程在某种时刻所处的状态分为以下几种:运行态 就绪态 阻塞态。
对于阻塞状态:比如read系统调用阻塞,进程会占用内存空间,这是一种浪费行为,于是操作系统把阻塞的进程置换到磁盘中,此时进程未占用物理内存,称为挂起。
除了创建和结束有三个状态:
-
运行态:该时刻进程占用CPU
-
就绪态:可运行,由于其他进程处于运行状态而暂时停止运行
-
阻塞态:该进程正在等待某一事件的发生(如等待输入输出的操作完成)而暂时停止运行
-
挂起态:描述进程没有占用实际物理内存空间的情况
-
阻塞挂起状态:进程在外存(硬盘)并等待某个事件的出现
-
就绪挂起状态:进程在外存(硬盘),但只要进入内存,马上运行