此资源非彼资源

news/2025/2/22 2:40:41

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


http://www.niftyadmin.cn/n/1616056.html

相关文章

链表头插, 链表逆置

title: reverse the linkList date: 2020-09-23 17:49:03 tags: [链表头插, 链表逆置, C语言, 算法, AL, DS] categories: DSandAL 链表的头插和逆置操作&#xff0c;很有技巧性&#xff0c;很值得思考#include <stdio.h> #include <stdlib.h>typedef struct MyStr…

OS记录型信号量-读者写者问题

dtitle: OS记录型信号量-读者写者问题 date: 2021-04-09 19:06:16 tags: [信号量机制, OS, 读者写者问题, 记录型信号量] categories: OS 利用记录型信号量实现读者写者问题 写在最前 最近对 OS 这门课着了迷&#xff0c;hhh&#xff0c;拿起课本就是硬啃 用了一段时间领悟了…

Java枚举源码级理解

title: Java枚举源码级理解 date: 2020-11-08 16:47:39 tags: [Java枚举, 源码理解, Java源码理解, 枚举, JavaBase, Java基础] categories: Java Java中枚举体的一些东西很怪&#xff0c;看了源码之后恍然大悟&#xff0c;收获颇丰废话不多说&#xff0c;直接上代码 第一种形…

Java加载顺序

title: Java代码执行顺序 date: 2021-03-30 20:28:37 tags: [JavaBase, Java变量加载顺序] categories: Java Java源文件中代码的加载顺序执行顺序 对类的加载 加载类的方法和静态属性 为方法和静态属性分配空间按照静态代码块和静态属性定义语句 在源文件中的顺序执行静态代…

hadoop一键启动脚本

Hadoop一键启动脚本 #!/bin/bash jps>tmp.txt NNcat tmp.txt|grep -w NameNode DNcat tmp.txt|grep -w DataNode SNNcat tmp.txt|grep -w SecondaryNameNode RMcat tmp.txt|grep -w ResourceManager NMcat tmp.txt|grep -w NodeManager JHScat tmp.txt|grep -w JobHistoryS…

hadoop一键关闭脚本

hadoop一键关闭脚本 #!/bin/bash jps>tmp.txt NNcat tmp.txt|grep -w NameNode DNcat tmp.txt|grep -w DataNode SNNcat tmp.txt|grep -w SecondaryNameNode RMcat tmp.txt|grep -w ResourceManager NMcat tmp.txt|grep -w NodeManager JHScat tmp.txt|grep -w JobHistoryS…

算法思想之求值法

一、求值法 求值法是一种最简单的问题求解方法&#xff0c;也是最常见的算法设计方法。它是根据问题给定的条件&#xff0c;运用基本的顺序、选择和循环控制语句结构来解决问题。例如&#xff1a;求最大值、求平均值等问题就是其具体应用。 二、算法设计思路 1、确定边界约束…

C语言链表项目-学生信息管理系统

核心知识 单向链表基本操作对文件的基本操作 使用说明 请先建好一个.txt文件并记下路径名&#xff0c;文件可以为空&#xff0c;也可以预先存好数据建议创建一个空文件&#xff0c;通过程序来向文件中存数据。手动去文件中存数据需要严格按照格式。 如果想预先手动存一些数据…