简介
资源冲突简单来说一个对象请求的资源已经被其他对象占有。例如流水线上的一个指令需要使用已经被另一个指令占据的资源。资源冲突主要是指计算机中硬件资源的冲突。一般把资源冲突分进程级资源冲突和指令级资源冲突。前者是引起死锁的主要原因,后者影响流水线的加速比。
进程级资源冲突死锁死锁(Deadlock),是指多个进程在运行过程中因争夺资源而造成的一种僵局(DeadlyEmbrace),当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。
产生死锁的原因可归结为如下两点:
(1) 竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。
(2) 进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生进程死锁。
可剥夺和非剥夺性资源可把系统中的资源分成两类,一类是可剥夺性资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺。例如,优先权高的进程可以剥夺优先权低的进程的处理机。又如,内存区可由存储器管理程序把一个进程从一个存储区移到另一个存储区,此即剥夺了该进程原来占有的存储区。甚至可将一个进程从内存调出到外存上。可见,CPU和主存均属于可剥夺性资源。另一类资源是不可剥夺性资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放,如磁带机、打印机等。1
资源冲突产生方式竞争非剥夺性资源
在系统中所配置的非剥夺性资源,由于它们的数量不能满足诸进程运行的需要,会使进程在运行过程中,因争夺这些资源而陷入僵局。例如,系统中只有一台打印机 R 1 和一台磁带机 R 2 ,可供进程 P 1 和 P 2 共享。假定 P 1 已占用了打印机 R 1 ,P 2 已占用了磁带机 R 2 。此时,若 P 2 继续要求打印机,P 2 将阻塞;P 1 若又要求磁带机,P 1 也将阻塞。于是,在 P 1 与P 2 之间便形成了僵局, 两个进程都在等待对方释放出自己所需的资源。 但它们又都因不能继续获得自己所需的资源而不能继续推进, 从而也不能释放出自己已占有的资源,以致进入死锁状态。
进程推进顺序非法
是指进程推进顺序不是正常运行顺序,导致一个进程请求使用本已经释放的资源,仍然没有释放,这导致了资源冲突。
指令级资源冲突流水线流水线,亦称管线,是现代计算机处理器中必不可少的部分,是指将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度。其具体执行过程类似工厂中的流水线,并因此得名。
如果作出类比,则计算机指令就是流水线传送带上的产品,各个硬件处理单元就是流水线旁的工人。
在使用流水线的处理器中一个指令不是在处理器的一个定时器讯号中完成的,而是被分到多个讯号中去完成,但是与此同时多个指令的分任务被同时处理。由于这些分任务比整个指令要简单,因此可以通过使用流水线提高定时器频率。虽然每个指令需要多个讯号后才能完成,但是通过多个指令的并行运算每个讯号内一个指令可以完成,因此通过这个方法整个速度可以提高。
资源冲突资源冲突是指当有多条指令进入流水线后在同一机器周期内争用同一功能部件所发生的冲突。从图中可以看出,在时钟4时,第i条指令的MEM段和第i+3条指令的IF段都要访问存储器。通常,由于数据和指令存放在同一存储器中,且只有一个访问口,这样便会发生这两条指令争用存储器资源的相关冲突。解决冲突的方法,一是停顿一拍流水线,通常是将后一条指令停顿一拍后再发动,如图所示;另一种方法是再重复设置一个存储器,使指令和数据分别存放在不同的存储器中。应该指出的是,图中两条指令同时访存造成资源相关冲突是由于第6条指令是LOAD指令的缘故,若不是LOAD指令,则由于在MEM段不访存就不会发生对存储器的争用。2