深入理解进程,线程,协程

进程,线程,协程,以及golang协程和python协程的区别。

1. 进程

进程是系统进行资源分配和调度的一个独立单位,程序段、数据段、PCB三部分组成了进程实体(进程映像),PCB是进程存在的唯一标准

image.png

1.1 进程的组织方式:

链接方式

按照进程状态将PCB分为多个队列,就绪队列,阻塞队列等

操作系统持有指向各个队列的指针

索引方式

根据进程状态的不同,建立几张索引表

操作系统持有指向各个索引表的指针

1.2 进程的状态

image.png

创建态: 操作系统为进程分配资源,初始化PCB

就绪态:运行资源等条件都满足,存储在就绪队列中,等待CPU调度

运行态:CPU正在执行进程

阻塞态:等待某些条件满足,等待消息回复,等待同步锁,sleep等,阻塞队列

终止态 :回收进程拥有的资源,撤销PCB

1.3 进程的切换和调度

进程在操作系统内核程序临界区中不能进行调度与切换

临界资源:一个时间段内只允许一个进程使用资源,各进程需要互斥地访问临界资源

临界区:访问临界资源的代码

内核程序临界区:访问某种内核数据结构,如进程的就绪队列(存储各进程的PCB)

进程调度的方式:

非剥夺调度方式(非抢占方式),只允许进程主动放弃处理机,在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或者主动要求进入阻塞态

剥夺调度方式(又称抢占方式)当一个进程正在处理机上执行时,如果有一个优先级更高的进程需要处理机,则立即开中断暂停正在执行的进程,将处理机饭呢陪给优先级高的那个进程

进程的切换与过程:进程的调度、切换是有代价的

对原来运行进程各种数据的保存

对新的进程各种数据恢复(程序计数器,程序状态字,各种数据寄存器等处理机的现场)

进程调度算法的相关参数:

CPU利用率:CPU忙碌时间/作业完成的总时间

系统吞吐量:单位时间内完成作业的数量

周转时间:从作业被提交给系统开始,到作业完成为止的时间间隔 = 作业完成时间-作业提交时间

带权周转时间:(由于周转时间相同的情况下,可能实际作业的运行时间不一样,这样就会给用户带来不一样的感觉) 作业周转时间/作业实际运行时间, 带权周转时间>=1, 越小越好

平均带权周转时间:各作业带权周转时间之和/作业数

等待时间

image.png

响应时间

image.png

调度算法:

算法思想,用于解决什么问题?

算法规则,用于作业(PCB作业)调度还是进程调度?

抢占式还是非抢占式的?

优缺点?是否会导致饥饿?

以下调度算法是适用于当前交互式操作系统

时间片轮转(Round-Robin)

算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内可以得到相应

算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。

用于作业/进程调度:用于进程的调度(只有作业放入内存建立相应的进程后,才会被分配处理机时间片)

是否可抢占?若进程未能在规定时间片内完成,将被强行剥夺处理机使用权,由时钟装置发出时钟中断信号来通知CPU时间片到达

优缺点:适用于分时操作系统,由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度

是否会导致饥饿? 不会

优先级调度算法

算法思想:随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的进程成都决定处理顺序

算法规则:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程

用于作业/进程调度:即可用于作业调度(处于外存后备队列中的作业调度进内存),也可用于进程调度(选择就绪队列中的进程,为其分配处理机),甚至I/O调度

是否可抢占? 具有可抢占版本,也有非抢占式的

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwsdf.html