操作系统-进程与线程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———>恢复上下文———>执行

上下文切换和模式切换

什么调度算法适合分时系统和实时系统?