操作系统——进程线程模型
⼀、基础概念
进程的分类
系统进程,⽤户进程;前台进程,后台进程;CPU密集型进程,I/O密集型进程
进程层次结构
UNIX:进程家族树;Windows:地位相同
进程映像
对进程执⾏活动全过程的静态描述
上下⽂切换
将CPU硬件从⼀个进程换到另⼀个进程的过程称为上下⽂切换。进程不运⾏时,寄存器的值保存于PCB,要允许新进程时,PCB的相关值送到对应的寄存器。进程控制块 PCB
PCB —— Process Control Block,⼜称进程描述符。
操作系统⽤于管理控制进程的⼀个专门数据结构。进程与PCB⼀⼀对应。
1. 进程描述信息
进程标识符(process id),唯⼀,通常是⼀个整数
⽤户标识符(user id)
进程名
进程组关系
2. 进程控制信息
当前状态
优先级
代码执⾏⼊⼝地址
程序的磁盘地址
运⾏统计信息
进程间同步和通信
进程的队列指针
进程的消息队列指针
3. 所拥有的资源和使⽤情况
虚拟地址空间的状况
打开⽂件列表
4. CPU现场信息
寄存器值
指向该进程页表的指针
⼆、进程的状态及状态转换
6种基础状态
1. 运⾏态: 占有CPU,并在CPU上运⾏
2. 就绪态: 已经具备运⾏条件,但⽆空闲CPU,⽽暂时不能运⾏
3. 等待态: 也叫阻塞态、封锁态、睡眠态,因等待某⼀时间⽽暂时不能运⾏
4. 创建: 已完成创建,但尚未同意执⾏该进程
5. 终⽌: 终⽌进程,资源回收
6. 挂起: ⽤于调节负载,其进程映像交换到磁盘上
进程队列:
伴随着进程的改变,其PCB从⼀个队列进⼊另⼀个队列
进程控制:
进程控制操作完成进程各状态之间的转换,由具有特定功能的原语完成。
进程创建原语,进程撤销原语,阻塞原语,唤醒原语,挂起原语,激活原语,改变进程优先级。
原语(primitive)⼜叫原⼦操作(atomic)
1. 完成特定功能的⼀段程序,具有不可分割或不可中断性
2. 即原语的执⾏必须是连续的,在执⾏过程中不允许被中断
进程的执⾏过程
1. 进程的创建
为新进程分配⼀个唯⼀标识以及PCB
为进程分配地址空间
初始化进程控制块
设置相应的队列指针
UNIX: fork/exec; WINDOWS: CreateProcess
exec: 通过⽤⼀段新的程序代码覆盖原来的地址空间,实现进程执⾏代码的转换
2. 进程的撤销
结束进程
收回进程所占有的资源
关闭打开的⽂件、断开⽹路连接、回收分配的内存
撤销该进程的PCB
UNIX: exit; WINDOWS: TerminateProcess
3. 进程的阻塞
等待某⼀事件发⽣,在其尚未发⽣时,由进程⾃⼰执⾏阻塞原语,使⾃⼰由运⾏态变为阻塞态
UNIX: wait; WINDOWS: WaitForSingleObject
Fork 的实现
实现原理
1. 为⼦进程分配⼀个空闲的进程描述符(proc结构)
2. 分配给⼦进程唯⼀标识pid
3. 以⼀次⼀页的⽅式复制⽗进程地址空间(Linux采⽤了写时复制技术COW加快创建进程Copy-On—Write)
4. 从⽗进程处继承共享资源,如打开的⽂件和当前⼯作⽬录等
5. 将⼦进程的状态设为就绪,插⼊到就绪队列
6. 对⼦进程返回标识符0
7. 向⽗进程返回⼦进程的pid
三、线程的引⼊
概念
createprocessa为什么在进程中再派⽣出线程?
1. 应⽤的考虑
2. 开销的考虑
3. 性能的考虑
线程:进程中的⼀个运⾏实体,是CPU的调度单位,有时将线程称为轻量级进程
有标识符ID
有状态及状态转换 -> 需要提供⼀些操作
不运⾏时需要保存上下⽂
有⾃⼰的栈和栈指针
共享所在进程的地址空间和其他资源
可以创建、撤销另⼀个线程
线程机制的实现
⽤户级线程,核⼼(Kernel)级线程,混合-两者结合⽅法。
⽤户级线程⼩结
优点:
线程切换快
调度算法是应⽤程序特定的
⽤户级线程可运⾏在任何OS上
缺点:
内核只能讲CPU分配给进程,同⼀进程中的两个线程不能同时运⾏于两个处理器上
⼤多数系统调⽤是阻塞的,因此由于内核阻塞进程,进程中的所有线程也被阻塞可以将系统调⽤改为⾮阻塞的
Jackeing/Wrapper

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。