进程,线程,协程,以及golang协程和python协程的区别。
1. 进程进程是系统进行资源分配和调度的一个独立单位,程序段、数据段、PCB三部分组成了进程实体(进程映像),PCB是进程存在的唯一标准
1.1 进程的组织方式:链接方式
按照进程状态将PCB分为多个队列,就绪队列,阻塞队列等
操作系统持有指向各个队列的指针
索引方式
根据进程状态的不同,建立几张索引表
操作系统持有指向各个索引表的指针
1.2 进程的状态
创建态: 操作系统为进程分配资源,初始化PCB
就绪态:运行资源等条件都满足,存储在就绪队列中,等待CPU调度
运行态:CPU正在执行进程
阻塞态:等待某些条件满足,等待消息回复,等待同步锁,sleep等,阻塞队列
终止态 :回收进程拥有的资源,撤销PCB
1.3 进程的切换和调度进程在操作系统内核程序临界区中不能进行调度与切换
临界资源:一个时间段内只允许一个进程使用资源,各进程需要互斥地访问临界资源
临界区:访问临界资源的代码
内核程序临界区:访问某种内核数据结构,如进程的就绪队列(存储各进程的PCB)
进程调度的方式:
非剥夺调度方式(非抢占方式),只允许进程主动放弃处理机,在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或者主动要求进入阻塞态
剥夺调度方式(又称抢占方式)当一个进程正在处理机上执行时,如果有一个优先级更高的进程需要处理机,则立即开中断暂停正在执行的进程,将处理机饭呢陪给优先级高的那个进程
进程的切换与过程:进程的调度、切换是有代价的
对原来运行进程各种数据的保存
对新的进程各种数据恢复(程序计数器,程序状态字,各种数据寄存器等处理机的现场)
进程调度算法的相关参数:
CPU利用率:CPU忙碌时间/作业完成的总时间
系统吞吐量:单位时间内完成作业的数量
周转时间:从作业被提交给系统开始,到作业完成为止的时间间隔 = 作业完成时间-作业提交时间
带权周转时间:(由于周转时间相同的情况下,可能实际作业的运行时间不一样,这样就会给用户带来不一样的感觉) 作业周转时间/作业实际运行时间, 带权周转时间>=1, 越小越好
平均带权周转时间:各作业带权周转时间之和/作业数
等待时间
响应时间
调度算法:
算法思想,用于解决什么问题?
算法规则,用于作业(PCB作业)调度还是进程调度?
抢占式还是非抢占式的?
优缺点?是否会导致饥饿?
以下调度算法是适用于当前交互式操作系统
时间片轮转(Round-Robin)
算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内可以得到相应
算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。
用于作业/进程调度:用于进程的调度(只有作业放入内存建立相应的进程后,才会被分配处理机时间片)
是否可抢占?若进程未能在规定时间片内完成,将被强行剥夺处理机使用权,由时钟装置发出时钟中断信号来通知CPU时间片到达
优缺点:适用于分时操作系统,由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度
是否会导致饥饿? 不会
优先级调度算法
算法思想:随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的进程成都决定处理顺序
算法规则:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程
用于作业/进程调度:即可用于作业调度(处于外存后备队列中的作业调度进内存),也可用于进程调度(选择就绪队列中的进程,为其分配处理机),甚至I/O调度
是否可抢占? 具有可抢占版本,也有非抢占式的