程序、进程、线程的基本概念、信号量的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…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...