此资源非彼资源

博客讨论了操作系统中AND型信号量的Ssignal操作,分析了进程从阻塞队列移到就绪队列的合理性。指出进程运行需要的资源如内存、CPU与特定资源信号量不同,信号量用于判断资源是否可用,激活进程后,进程将继续检查资源并尝试执行。
摘要由CSDN通过智能技术生成

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操作判断, 如果这些资源不够,进程把自己阻塞起来,但是并非因为这些资源 进程就没法运行了,进程运行其实就是跑代码,然后通过跑代码 来判断那些资源够不够,不够的话 把自己阻塞起来,跑代码需要的资源和那些资源不是一回事。当进程被阻塞的时候,它就不能跑代码了,当它被激活的时候,继续去判断信号量的值 从而判断 资源是否可以使用 若可以 则使用资源。 其实这里面也是包含了一些进程阻塞和进程激活的一些本质。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值