title: 此资源非彼资源
date: 2021-04-10 20:08:41
tags: [系统资源问题, 操作系统, OS, 进程阻塞, 进程运行, 进程激活]
categories: OS
问题出处
计算机操作系统 第四版 P60
问题描述
在看AND型信号量的Ssignal操作中的一段伪代码的时候产生的疑问,最后我给推广了,也不错,想通了一个事hhh
其中的一段伪代码是这么描述的👇
Remove all the process waiting in the queue associated with si into the ready queue.
将与si关联的队列中等待的所有进程都删除,并移动到就绪队列中
我的分析
我觉得这么干有些不妥
首先解释一下就绪队列,就绪队列中的进程一定都是就绪状态了吧
那么就绪状态的定义是什么? 获得了除CPU以外的所有的所需资源
不妥的地方有两个:
第一前面将进程加入阻塞队列的原因是 这个进程只要遇到了一个它想要的但是系统没有的资源就会被送进相应的缺少资源的阻塞队列中,但是并不能保证后面的资源一个也不缺。但是你因为现在这个资源被归还了,就直接把因为判到却这个资源而被放进相应阻塞队列里的进程直接给放进就绪队列里吗? 参考 一下上面的就绪状态的定义
还有就是,即便是这样,你也不能把因为这个资源而进入阻塞队列的所有进程都给激活了吧,你不应该是找一个优先级最高的给激活,放到就绪队列中吗
所以我认为,书上啊 八成是没有表达对,它其实并不是想表达给放进就绪队列中的意思,而是让它解除阻塞,从而可以继续去判断资源是否够用
恍然大悟
啊…woc 我明白了 确实应该给放进就绪队列里,为啥呢?因为代码运行所需的资源和 你说的那个s1,s2,s3,s4…si 资源不是一个资源,这些东西确实是不够的,但这不是代码运行需要的资源,怎么说呢,代码就是为了实现这个东西而设置的…我也不知道怎么说出来好了, 总之 这俩资源不是一个资源 把运行代码的进程放进就绪队列里是正确的,当它获得CPU以后,就开始继续判断 那几个资源是否足够,够了的话 访问临界区。
推广
进程运行需要的资源 是内存和CPU等等 我们回到进程的定义 进程是什么? 进程是程序在一定数据集合上的执行过程 , 那么进程可以说就是在执行程序 也就是在跑代码,跑代码肯定是不需要太多资源的,这个资源仅仅是内存、CPU… 而 s1,s2,s3,s4,…,sn 这些资源是进程想要访问/使用的资源,这些资源需要通过进程执行wait操作判断, 如果这些资源不够,进程把自己阻塞起来,但是并非因为这些资源 进程就没法运行了,进程运行其实就是跑代码,然后通过跑代码 来判断那些资源够不够,不够的话 把自己阻塞起来,跑代码需要的资源和那些资源不是一回事。当进程被阻塞的时候,它就不能跑代码了,当它被激活的时候,继续去判断信号量的值 从而判断 资源是否可以使用 若可以 则使用资源。 其实这里面也是包含了一些进程阻塞和进程激活的一些本质。