第十一讲 进程与线程
维护执行过程
程序执行状态的检测(CPU 内存 网络)
11.1 进程的概念
进程与程序的关系。
定义:
进程是具有一定独立功能
的程序在一个数据集合
上的一次动态执行
过程。
内存中的进程
进程的组成
和程序相比,多的是状态信息
的包含
- 代码,数据
- 状态寄存器 CPU状态CR0,指令指针IP
- 通用寄存器 AX BX CX
- 进程占用系统资源 (打开文件,已分配内存)
进程的特点
动态性,并发性(处理机),独立性,制约性(共享数据,资源和进程间同步)
进程与程序的联系
相同点:
进程 = 程序 + 运行时的资源环境。(内存,CPU)
进程:运行时的程序。它的状态会改变。程序是静态文件。
进程是暂时存在的。程序是永久存在的。
进程存在用户态/核心态
。程序是有序代码的集合。
进程与程序的组成不同:
进程组成包括:程序,数据集合进程控制块。
不同点
进程控制块 (PCB)
重要。运行信息的控制和管理。
集成的基本信息,PID,进程状态。
使用
通过对PCB的组织管理来进行对进程控制块的组织管理。
PCB
标识信息
交替部分?处理机的现场保护。
进程控制信息
进程控制信息
进程控制块的组织(就绪与阻塞)
疑问
PCB具体表现使用的代码过程。
进程状态
进程为什么要有状态:?
OS为了维护信息的变化,要知道进程在执行过程中会出现哪些状态,下一刻会发生哪些变化。
生命周期
创建
执行
等待
抢占(高优先级抢占了低优先级,从就绪状态
→ 执行状态
)
唤醒(等待的进程被唤醒,放到就绪状态
)
结束
进程创建(资源的初始化)
进程执行
如何选择 (就绪队列
)? 处理机的调度选法
进程等待
原因:(sleep)
- 等待的系统服务没有马上完成。
- 启动某种操作,读写磁盘,无法马上完成
- 需要的数据没有到达
等待事件
: 只有进程自身才知道等待时间何时发生(不是外部原因)
进程抢占(运行→就绪
)
原因:
- 高优先级在就绪状态中
- 进程执行的当前时间用完(处理机)
进程唤醒(等待→就绪
)
原因:
- 被阻塞进程的等待资源已满足
- 等待的事件到达
一定是被其他进程或OS唤醒
进程结束
资源的退还
- 正常退出
- 错误退出(自愿)
- 致命退出
- 被其他进程所杀
进程切换
疑问
具体实现:
- 保护现场的实现过程
- 恢复现场的实现过程
- 创建进程的demo
- 退出进程的demo (
对不同错误情况处理的demo
)- 如何执行一个进程?(就绪队列 → 运行 → 等待队列?)
- 等待的进程要监听自己的资源是否满足。
- 进程之间的优先级问题又如何分配?
三状态控制模型
进程状态的变迁(代码执行的地方,根据进程的状态标识位,来标识进程现在所处的不同状态)
进程与线程
为什么会引入线程
提高进程的并发性。
播放音频:
- 读数据
- 解压
- 播放
如果是三个进程去执行,那么进程之间通信与数据共享的问题。
线程概念
进程线程内存
不同操作系统对线程的支持
从单进程系统(一个指令指针流
)→多进程系统(进程切换,进程资源隔离
)
从单进程多线程系统(路由器
) → 多线程系统(现代UNIX
)
线程与进程的比较
线程实现
用户实现:在用户空间实现
内核线程:在内核中线程(网络后面才加入到内核中)
轻量级进程:二者的结合
进程控制
进程切换
进程创建
进程加载
程序加载和执行系统调用exec()
(小问题:)
- 系统加载过程:从bootloader加载os到内存中。自身是否算一个进程?
当系统启动好后,任何一个程序的运行,都是会调用系统函数将其加载到内存,成为进程。