disable()----enable()是通知处理器:在这两个函数及其之间的程序执行期间,不理睬外界提出的中断要求(这里的不理睬,是假设外界有提出中断,如果外界没有提出中断要求,那最好了,程序本身就是顺序执行到enable()结束),外界的中断请求只有在enable()语句执行以后,才会被响应。
而P操作和V操作,其是加在临界区前后的两个操作,是对临界资源实现访问保护的一种机制。首先,我们知道,P操作和V操作,其本身也是一个函数,在处理机执行P()内部的指令时,是不会让外界打断的,这就是因为在P()函数内部开始先添加了disable()函数结尾加了enable()实现的功能(如上段对disable()和enable()的介绍。V()函数同理),但是,P操作和V操作之间的程序是一般程序,其在被执行期间,其是允许外界中断打断的。刚开始接触PV操作时,大多会对这里感到困惑:允许外界中断打断?那不是没有实现对临界资源访问保护了吗?稍微去思考一下信号量的作用,就可以理解了:比如说,系统此时有两个进程,两个进程中都有要访问共用的临界资源的语句,所以,我们在这两个进程的访问临界资源的语句前后分别加上了P操作和V操作。在其中一个进程访问临界资源前,肯定是执行了P操作的,而且这个P操作是原子性的(由前面对P操作的分析可得),在P操作中,我们设置对信号量做“更改”的操作(形象地讲,可以说是该进程宣布“我正在使用临界资源”)。P操作后,V操作前,如时间片中断发生,该进程运行被打断(此时仅做了P操作还没做V操作),CPU调度,另外一个进程如访问临界资源,开始也一样要执行P操作,在P操作里查询到前一个进程正在访问临界资源,所以当前进程被阻塞。该进程可以在另一进程被重新调度后执行了V操作后被唤醒。这就是PV操作和disable()enable()综合起到的作用。
P操作,V操作 与 disable(),enable() 的区别
最新推荐文章于 2024-05-05 12:34:29 发布