操作系统-进程与线程1
2.1 进程与线程
基本概念
1.进程是什么?多种定义
比如进程是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位
2.程序段,数据段和PCB构成了进程实体
3.PCB是进程的唯一标识
4.进程特征:动态性,并发性,独立性和异步性
进程的状态
运行态,就绪态,阻塞态,创建态和终止态
进程的组成
程序段,数据段和PCB
PCB有进程标识符(PID),状态,优先级,上下文等等,链接成队列或者放在索引表中
进程控制
创建:分配PID,申请PCB———>分配资源———>初始化PCB———>插入就绪队列
终止:查找PCB———>终止子孙进程———>归还资源———>从所在队列中删除
阻塞:查找PCB———>保护现场,设置状态———>插入相应队列
唤醒:查找PCB———>移出队列,设置状态———>插入就绪队列
进程间通信
共享存储:数据结构,存储区
消息传递:signal()和slot()
管程:生产者消费者方式,单向
线程
基本概念
基本的CPU执行单元,只拥有必不可少的资源,调度代价小
可以创建和撤销另一个进程
状态
执行,就绪和阻塞
组成与控制
TCB线程控制块:线程标识符,寄存器,状态,优先级,堆栈等等。
同一进程中所有线程共享地址空间和全局变量,即各线程可读写其他线程的堆栈。
线程被终止后不立即释放资源,仍可被其他线程调用,以使被终止线程重新恢复运行
用户级线程
内核不知道线程的存在
线程切换不用转换到内核空间
进程间调度算法不同
一个阻塞所有阻塞(我感觉是一内核对多用户模型的问题)
内核级线程
阻塞可调度
调度代价小
但线程切换需转换到内核空间
多线程模型
一内核对多用户模型
一对一模型
多内核对多用户模型
(线程阻塞后能不能及时调度到底是看什么?)
2.2 处理机调度
基本概念
调度就是对CPU进行分配,从队列中选择一个进程执行,以实现并发
高级调度(创建进程),中级调度(内存调度,暂时挂起),低级调度(进程调度,上下CPU)
or长程调度,短程调度
调度的目标
CPU利用率,系统吞吐量,周转时间(完成时间-提交时间),等待时间,响应时间
调度的实现
进程是怎么调度的?
不能调度的情况:中断;临界区;原子操作
调度方式:非抢占式调度(进程不可“中断”),抢占式调度
无就绪进程,则执行闲逛进程(仅有CPU资源)
调度算法
先来先服务调度算法(FCFS):适合CPU繁忙型
短作业优先调度算法(SJF):可能饿死;未考虑优先级;平均等待时间和平均周转时间最少
优先级调度算法:非抢占型or抢占型,静态优先级or动态优先级
高响应比优先调度算法:${响应比=\frac{等待时间+要求服务时间}{要求服务时间}}$
时间片轮转调度算法(RR)
多级队列调度算法:不同队列不同调度算法
多级反馈队列调度算法:多个就绪队列,除最后一级为RR外都使用FCFS,若若未完成则降级
进程切换
上下文切换(计算密集型)(内核态中发生):
挂起进程,保存上下文———>更新PCB———>将PCB移入相应队列———>
选择一个进程,更新其PCB———>恢复上下文———>执行
上下文切换和模式切换
什么调度算法适合分时系统和实时系统?