程序、进程、线程的基本概念、信号量的PV操作、前趋图的PV操作
程序、进程、线程的基本概念


进程控制块PCB的组织方式:顺序方式、链接方式、索引方式、Hash。


在JVM 中进程与线程关系
进程:
- 拥有资源的独立单位。
- 可以被独立调度。
- 可以分配资源。
线程:
- 可以被独立调度。
- 同一进程中的多个线程,共享一些资源:内存地址空间、代码、数据、数据、文件等。
- 同一进程中的多个线程,每个线程私有:程序计数器、寄存器栈等。
进程的状态
此处先不考虑进程抢占式CPU调度的情况

- 进程的状态模型根据不同的场景有多种,例如:三态模型、五态模型、七态模型…。

三态模型:
- 进程状态划分依据:将CPU和其他资源进行归类,将资源分为两大类(CPU、非CPU),进程状态根据资源被占用的情况进行划分;
- 当CPU和其他资源都都具备的情况下,进程被调度,状态:运行。
- 当CPU资源不足,而其他资源具备,(除CPU以外,其他资源都做好了准备),进程状态:就绪。
- 就绪状态等到CPU调度进程,状态转为运行。
- 一个进程无法长期占用多个CPU资源,把CPU资源划分为多个小的时间片段进行分发给多个进程,一个进程的时间片用完,就会从运行转为就绪,等待CPU的下一次调度。
- 当CPU资源和非CPU资源都不足时,进程状态:阻塞(等待)。
- 运行的进程等待某个事件,转为阻塞状态,等待事件发生,从阻塞转为就绪状态。
- 不考虑特殊情况,CPU资源准备好,非CPU资源不足。
- 阻塞态不能直接转为运行态。
- 就绪态不能直接转为阻塞态。
五态模型:
- 在原三态模型基础上加入了挂起,从而有了静止状态和活跃状态。
- 挂起:当内存中进程过多,内存不足,将某些条件不足的进程挂起,放入磁盘对换区里,暂时不参与调度。
- 挂起的过程:进程从内存放入磁盘的过程。
- 静止的状态必须进行恢复或者激活才能转为活跃状态。
- 活跃的状态挂起转为静止状态。
- 静止的状态存在磁盘对换区中,活跃的状态存在内存中。
- 静止的状态无法被CPU直接调度,必须进行激活成活跃状态才能被调度转为运行态。
- 运行态挂起转为静止就绪态。
运行中的进程等待某个事件的发生,从而转为活跃阻塞。
信号量的PV操作
进程间的同步关系与互斥关系

- 互斥模型(间接制约关系):由于临界资源的限制,进程间相互排斥,这种关系也叫:间接制约关系。
- 同步模型(直接制约关系):进程间存在互相依赖的关系,进程间存在顺序上的制约,这种关系也叫:直接制约关系。

- PV操作具有原子性。(原语)
- PV操作结合信号量进行操作。
- 信号量:资源数量(全局变量)。
- 对信号量-1(s-1)就是对资源数量-1,也就是对资源占据的过程。
- 对信号量+1 (s+1)就是对资源数量+1,也就是对资源释放的过程。
- P操作:申请并占用资源,加锁。
- V操作:释放占用的资源并通知排队进程,解锁。
- P操作,信号量<0(s<0),说明申请的资源没有占据到,资源不足。进程需要排队领资源,进入阻塞队列。
- V操作,信号量<=0(s+1),说明释放占用的资源,并通知排队进程进行下一个V操作,唤醒阻塞进程进入就绪态。无论信号量如何,进程继续进行后续动作。
- 信号量<0,可以表示资源数和排队的进程数。
- PV成对存在,只加锁不解锁(死锁),只解锁不加锁(无意义)。
前趋图的PV操作

- 前趋图是一种图的形式,一个图包含相应的节点,有向图中带有方向箭头连线各个节点,前趋图是有向图。
- 每一个节点代表一个进程。
- 箭头代表进程间的依赖关系。
- 如同所示:A是B的前趋,B是A的后继。
- 前趋图中,只有前趋完成,才能开始后继;后继开始前一定要确保前趋已完成。
- 存在多个进程并行的前趋图,进程间存在互相依赖的关系,是进程的同步关系,是直接制约关系。
- 前趋图体现的是:进程间存在互相依赖的关系,是进程的同步关系,是直接制约关系。
- A—>D可以表示为:(A,D)。

前趋图有时候可以不考虑信号量,主要关注节点间(进程间)的PV操作
死锁


系统有M个进程,每个进程都需要W个资源,系统需要多少个资源(N)才不可能发生死锁?
N>= M(W-1)+1*
相关文章:
程序、进程、线程的基本概念、信号量的PV操作、前趋图的PV操作
程序、进程、线程的基本概念 进程控制块PCB的组织方式:顺序方式、链接方式、索引方式、Hash。 在JVM 中进程与线程关系 进程: 拥有资源的独立单位。可以被独立调度。可以分配资源。 线程: 可以被独立调度。同一进程中的多个线程,…...
设计测试用例
目录 测试用例的基本要素 测试用例的设计方法 功能需求测试分析 非功能需求测试分析 设计测试用例的具体方法 测试用例的基本要素 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境…...
CSS 选择器以及CSS常用属性
目录 🐇今日良言:可以不光芒万丈,但不要停止发光 🐯一、写CSS的三种方法 🐯二、CSS选择器的常见用法 🐯三、CSS常用属性 🐇今日良言:可以不光芒万丈,但不要停止发光 🐯一、写CSS的三种方法 CSS的基本语…...
测试概念及模型
今日目标掌握测试用例包含的基本内容使用等价类方法设计出测试用例1. 软件测试分类(复习)1.1 按阶段划分单元测试测试:针对单个功能进行测试,如:登录、购物车等开发(更多的理解):针对…...
王道计算机组成原理课代表 - 考研计算机 第六章 总线 究极精华总结笔记
本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 计算机组成 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “总线” 章节知识点总结的十分全面,涵括了《计算机组成原理》课程里的…...
【C++升级之路】第八篇:string类
🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【C学习与应用】 ✒️✒️本篇内容:简单介绍string类的概念、string类的常用接口、string类的模拟实现(各个常见接口的实现代码&…...
mysql性能优化_原理_课程大纲
1、MySQL在金融互联网行业的企业级安装部署 目录章节版本说明版本说明安装MySQL规范1 安装方式2 安装用户3 目录规范MySQL 5.7 安装部署1 操作系统配置2 创建用户3 创建目录4 安装5 配置文件6 安装依赖包7 配置环境变量8 初始化数据库9 重置密码MySQL8 安装MySQL8 安装源码安装…...
项目管理报告工具的功能
项目报告软件哪个好?Zoho Projects的项目管理报告工具为您提供整个组织的360可见性,获取所有项目的实时更新,使用强大的项目报告软件推动成功。Zoho Projects的项目报告软件允许团队整理和监控他们的资源和项目,以评估进度并避免对…...
centos8上安装hbase
【README】1.本文部分内容转自:https://computingforgeeks.com/how-to-install-apache-hadoop-hbase-on-centos-7/2.本文是在单机上安装hbase (仅用于学习交流); 【1】更新系统因为 hadoop和hbase是动态的,为便于hbase…...
linux 进程及调度基础知识
引用Linux进程管理专题Linux进程管理与调度-之-目录导航Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)蜗窝科技-进程管理郭健: Linux进程调度技术的前世今生之“前世”郭健: Linux进程调度技术…...
Python计算分类问题的评价指标(准确率、精确度、召回率和F1值,Kappa指标)
机器学习的分类问题常用评论指标有:准确率、精确度、召回率和F1值,还有kappa指标 。 每次调包去找他们的计算代码很麻烦,所以这里一次性定义一个函数,直接计算所有的评价指标。 每次输入预测值和真实值就可以得到上面的指标值&a…...
51单片机LCD1602的使用
文章目录前言一、LCD1602简单介绍二、LCD1602中各个引脚的作用四、LCD1602命令解析1.写命令2.写数据3.清屏指令4.光标归位指令5.进入模式设置指令6.显示开关控制指令7.设定显示屏或光标移动方向指令三、LCD1602代码编写四、代码测试总结前言 本篇文章将为大家讲解LCD1602的使用…...
[深入理解SSD系列综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?
版权声明:付费作品,未经许可,不可转载前言SSD (Solid State Drive),即固态硬盘,通常是一种以半导体闪存(NAND Flash)作为介质的存储设备。SSD 以半导体作为介质存储数据&…...
zio1升级到zio2踩坑和总结
并不全,记录了一些流程和注意点。新项目建议直接用zio2! 首先,从1.0迁移到2.0,可以使用官方的scalefix规则完成一部分方法自动替换(迁移主要解决方法重命名,去掉Has)。 然后,添加依…...
【算法题】1834. 单线程 CPU
插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你一个二维数组 tasks ÿ…...
Vue学习[2023]
笔记 一、Vue基础: 1.模板语法有2大类: 插值语法: 功能:用于解析标签体内容。 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。 指令语法: 功能:用于…...
【Redis】Redis分片集群
【Redis】Redis分片集群 文章目录【Redis】Redis分片集群1. 搭建分片集群1.1 分片集群结构1.2 搭建分片集群1.2.1 集群结构1.2.2 准备实例和配置1.2.3 启动1.2.4 创建集群1.2.5 测试2. 散列插槽2.1 总结3. 集群伸缩4. 故障转移4.1 数据迁移5. RedisTemplate访问分片集群1. 搭建…...
【Android笔记81】Android之RxJava的介绍及其使用
这篇文章,主要介绍Android之RxJava及其使用。 目录 一、RxJava响应式编程 1.1、RxJava介绍 1.2、RxJava常用方法 (1)引入RxJava依赖...
Pr 定格拍照动画
哈喽,各位小伙伴!今天我们来学习一下如何制作定格拍照动画? 新建序列 新建一个1920*1080的序列,将视频拖入序列中 选择定格画面右键—插入帧定格分段中间部分就会变成一张图片(图片时长可伸缩) 复制素…...
放弃node-sass,启用sass
在下载一个新项目时运行:npm run install 发现报错 npm uninstall 异常 Error: Could not find any Visual Studio installation to use 或是 ------------------------- You need to install the latest version of Visual Studio npm ERR! gyp ERR! find VS incl…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
