处理机调度与死锁

来源:互联网 发布:软件开发的几个阶段 编辑:程序博客网 时间:2024/06/04 18:01

一,处理机调度

分配处理机的任务是由处理机调度程序完成的,在多任务操作系统中,一个作业被提交后必须经过处理机调度后,才能获得处理机执行。对于批量型作业而言,通常需要经历作业调度和进程调度两个过程后才能获得处理机。在较完善的操作系统中往往还设置了中级调度,为了提高内存的利用率。


二,处理机的层次

1,高级调度

高级调度又称为作业调度,主要是根据某种算法,把外存上处于后备队列中的那些作业调入内存,它的调度对象是作业。

作业:是比程序更广泛的概念,它不仅包含了通常的程序和数据,而且还配有一份作业说明书,系统根据该说明书对程序的运行进行控制,在批处理系统中是以作业为单位从外存调入内存的。

作业控制块:为了管理和调度作业,在多道批处理系统中为每个作业设置一个作业控制块,它是作业在系统中的存在的标志,其中保存了系统对作业进行管理与调度的全部信息。


2,低级调度

低级调度又称为进程调度,用于决定就绪队列中的哪个进程应获得处理机,它的调度对象是进程。


3,中级调度

引入中级调度的主要目的是为了提高内存的利用率与系统的吞吐量,为此应该把那些在内存中暂时不能运行的进程,调至外存上去等待,把此时的进程状态设置为挂起状态。当这些进程重新具有运行条件并且内存又有空闲的空间,由中级调度决定将哪些进程调入到内存中使用。


三,调度算法

在OS中调度的实质是一种资源分配,调度算法是指根据系统的资源分配策略所规定的资源分配算法。

(1),先来先服务调度算法

这是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。这个算法比较有利于长作业(进程),不利于短作业(进程)。


(2),短作业(进程)优先调度算法

短作业(进程)优先调度算法,是指对短作业(进程)优先调度的算法。这个算法既可用于作业调度也可用于进程调度。短作业优先的调度算法是从后备队列中选择一个估计运行时间最短的作业,将它调入内存。短进程优先调度算法是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它使用。


(3),高优先权优先调度算法

为了照顾比较紧迫的作业,为了使这个作业获得优先处理,引入了最高优先权优先调度算法。当把这个算法用于作业调度时,系统将从后备队列中选择优先权最高的作业调入内存。当把这个算法用于进程调度时,该算法将处理机分配给就绪队列中优先权最高的进程。


(4),时间片轮转调度算法

系统将所有的进程按照先来先服务的原则排成一个队列,每次调度时,把CPU分给队首进程,并令其执行一个时间片,当执行的时间片用完时,系统会停止该进程的执行,并将它送往就绪队列的末尾,然后再把处理结果分配给就绪队列的队首进程,同时让它执行一个时间片。


四,产生死锁的原因

所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵局状态时,如果没有外力的作用,它们都将无法再向前推进。产生死锁的原因,有下面这两个:

1,竞争资源

2,进程间推进顺序非法。


五,产生死锁的四个必要条件

(1),互斥条件:

进程对所分配到的资源不允许其他进程进行访问,若其他进程要访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源。
(2),请求和保持条件:

进程获得一定的资源之后,又对其他资源发出请求,但是该资源可能被其他进程占有,此时该请求进程会阻塞,但又对自己获得的资源保持不放。
(3),不可剥夺条件:

是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完后自己释放。
(4),环路等待条件:

是指进程发生死锁后,必然存在一个进程--资源之间的环形链。


六,处理死锁的基本方法

1,预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件。
2,避免死锁:
在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁。
3,检测死锁:
允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉。
4,解除死锁:
该方法与检测死锁配合使用。


七,互斥锁与自旋锁
(1),
自旋锁是一种非阻塞锁,也就是说如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的消耗CPU的时间,不停的试图获取自旋锁。
(2),
互斥锁是阻塞锁,当某线程无法获取互斥锁时,该线程会被直接挂起,该线程不再消耗CPU时间,当其他线程释放互斥锁后,操作系统会激活那个被挂起的线程,把它放到就绪队列中。

原创粉丝点击