操作系统闲谈06——进程管理
操作系统闲谈06——进程管理
一、进程调度
01 时间片轮转
给每一个进程分配一个时间片,然后时间片用完了,把cpu分配给另一个进程
时间片通常设置为 20ms ~ 50ms
02 先来先服务
就是维护了一个就绪队列,每次选择最先进入队列的进程,然后一直运行,直到进程退出或者被阻塞,然后继续从队列中选择一个进程接着运行
不利于 短作业进程
03 优先级调度
高响应比优先调度
主要权衡了长作业和短作业
每次计算响应比优先级
短作业优先调度
从就绪队列中挑选运行时间最短的进程来运行
高优先级调度
从就绪队列中挑选进程优先级最高的先运行
二、进程通信
01 管道
分为匿名管道和有名管道
匿名管道 用于有父子亲缘关系的进程之间的通信
有名管道 则是打破了父子亲缘关系的限制
不管是匿名管道还是有名管道 通信的方向都是单向的 通信数据遵循先进先出的原则
02 消息队列
管道传输数据的大小有限制、并且数据是无格式的字节流
在内核维护了一个消息链表 消息队列的消息体可以是用户自定义的数据类型,采用消息队列进程进程通信
03 共享内存
由于消息队列每次数据的写入和读取都需要经过用户态和内核态的拷贝
引入了共享内存 它是IPC通信最快的方式
直接分配了一个共享空间,每个进程都可以访问
04 信号量
共享内存确实加快了IPC通信的速度,但是也带来了新的问题,就是多个进程同时竞争共享资源引起的数据的错乱
引入了信号量 它主要设置了信号量来保护共享资源,设置两个原子操作,P操作,V操作,用于进程的互斥和同步
05 信号
然后还要IPC通信中的异步通信方式 信号
主要分为软件触发和硬件触发
软件触发 例如 kill
硬件触发 例如 键盘的 ctrl C
06 socket
C/S架构 用于不同主机的进程进行通信
常见的基于TCP的Socket网络通信模型
三、互斥与同步
01 互斥
进程互斥
- 信号量:使用信号量可以在多个进程间实现互斥,信号量是一个整数值,用于计数,在多个进程对共享资源进行访问时,可以通过对信号量的操作来实现互斥。
- 互斥锁:互斥锁是一种常用的互斥机制,可以实现对共享资源的独占访问。
- 管程:管程是一种特殊的进程,它可以管理多个其他进程对共享资源的访问,通过管程的锁定和解锁机制,可以实现互斥。
线程互斥
- 互斥锁:互斥锁是最常用的线程同步机制,可以保证多个线程对共享资源的独占访问。
- 信号量:信号量是一种用于线程同步的机制,它可以用于控制多个线程对共享资源的访问。
- 原子操作:原子操作是一种无需加锁即可实现线程间同步的方法,其特点是操作不可中断。
02 同步
进程同步
- 信号量:信号量是一种用于实现进程间同步的机制,通过对信号量的操作来实现同步。
- 信号:信号是一种异步通信机制,可以在进程间传递信息,以实现同步。
- 消息队列:消息队列是一种内核态的通信机制,可以在不同进程间传递消息。
线程同步
-
信号量(Semaphore):信号量是一种用于线程间同步的机制,通过对信号量的操作来实现同步。
-
条件变量(Condition Variable):条件变量是一种用于线程间协作的同步机制,通过等待和唤醒来实现同步。
-
读写锁(Read-Write Lock):读写锁是一种用于保护共享资源的同步机制,支持多个读线程同时访问,但只允许一个写线程访问。
四、锁
01 锁的基本类型
互斥锁
互斥锁(Mutex):互斥锁是最常见的同步机制,它可以在多线程中保证任意时刻只有一个线程能够访问某个共享资源,从而保证数据的完整性和一致性。
多了线程切换的开销
自旋锁
自旋锁(Spinlock):自旋锁也是一种同步机制,与互斥锁类似,但是自旋锁会一直占用CPU资源,直到获得锁为止,因此当竞争激烈的时候会导致大量的CPU浪费。
读写锁
读写锁是一种特殊的同步机制,它可以同时允许多个读者线程同时访问某个共享资源,但是当有写者线程要修改该共享资源时,就必须阻塞读者线程,从而保证数据的一致性。
02 死锁
死锁的条件
- 互斥条件:一个资源每次只能被一个进程使用。
- 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
如何解决死锁
-
预防死锁:通过一些方法防止系统出现死锁,例如请求资源的顺序,使用银行家算法。
-
避免死锁:通过动态调整系统的状态来避免死锁,例如释放资源。
-
检测死锁:通过定期检测死锁的情况,以便及时解决死锁。
检测死锁的方法有以下几种:
- 资源分配图法:该方法通过分析系统的资源分配图,以检测系统是否存在死锁。资源分配图法通过建立一个描述系统资源分配关系的图,然后寻找图中的环,如果存在环,则说明存在死锁。
- Wound-Wait法:该方法通过记录每一个进程的等待次数和被放弃的次数,来判断是否存在死锁。如果一个进程的等待次数大于0,而该进程被放弃的次数为0,则说明该进程处于死锁状态。
- 银行家算法:该算法是一种预防死锁的方法,也可以用来检测死锁。该算法在每一个进程申请资源之前,先检查系统的资源分配情况,以确定该进程是否能够获得所需的资源。如果系统中存在资源分配不合法的情况,则说明存在死锁。
以上是检测死锁的三种方法,每一种方法都有其优势和劣势,具体使用哪种方法需要根据实际情况来决定。
- 解除死锁:通过撤销一些进程,使系统恢复正常状态。
五、多线程与多进程
01 进程、线程、协程
进程、线程和协程都是并发编程中的重要概念,它们在实现多任务处理时有着不同的作用和特点。
- 进程
进程是操作系统中分配资源的基本单位,一个进程包含程序代码、数据和内存空间等资源,每个进程都拥有独立的地址空间和系统资源,进程之间互不干扰,通信需要使用进程间通信(IPC)机制。
进程之间的切换需要进行上下文切换,会产生较大的开销。多进程适合处理不同任务之间的并行处理,可以充分利用多核 CPU 的性能。
- 线程
线程是进程内的一个执行单元,一个进程可以包含多个线程,线程共享进程的资源,包括内存空间、文件句柄、网络连接等。
不同线程之间的切换需要进行上下文切换,但相对于进程来说,线程的创建和销毁开销较小。线程之间的数据共享相对容易,但也需要注意线程安全和同步问题。多线程适合处理单个任务的并发执行,可以提高程序的执行效率。
- 协程
协程是一种轻量级的线程,它是一种用户态的线程,不需要操作系统的参与,可以在单个线程中实现多个任务的并发执行。协程在执行过程中可以自由切换执行上下文,不需要进行系统调用,因此切换开销较小。
协程之间的数据共享相对简单,但也需要注意同步和互斥问题。协程适合处理大量的 I/O 操作,比如网络通信和文件读写等,可以提高程序的响应速度。
综上所述,进程、线程和协程都有各自的优点和适用场景,需要根据具体的任务需求选择合适的并发编程方式。
02 多进程与多线程
- 定义
首先在定义方面。
多进程是指同时运行多个程序,每个程序都拥有自己独立的虚拟地址空间,相互之间不影响。
多线程是指在同一个程序中,同时运行多个独立的线程,每个线程都可以访问程序的共享内存空间,不同线程之间可以共享数据。
- 资源开销
多进程在创建和销毁进程时会产生较大的开销。
而多线程在同一进程中共享资源,因此创建和销毁线程的开销相对较小
- 数据共享
多进程之间的数据通信通常需要使用进程间通信(IPC)机制,如管道、消息队列等,开销较大;
而多线程之间可以直接共享进程的内存空间,数据共享相对简单。
- 并发性
由于多进程之间相互独立,因此它们的执行是并行的,可以充分利用多核 CPU 的性能;
而多线程之间共享 CPU 资源,因此它们的执行是并发的,需要通过线程调度算法来实现多线程之间的切换。
多线程在同一进程中共享资源,因此创建和销毁线程的开销相对较小
相关文章:

操作系统闲谈06——进程管理
操作系统闲谈06——进程管理 一、进程调度 01 时间片轮转 给每一个进程分配一个时间片,然后时间片用完了,把cpu分配给另一个进程 时间片通常设置为 20ms ~ 50ms 02 先来先服务 就是维护了一个就绪队列,每次选择最先进入队列的进程&#…...

DaVinci 偏好设置:用户 - UI 设置
偏好设置 - 用户/ UI 设置Preferences - User/ UI Settings工作区选项Workspace Options语言Language指定 DaVinci Resolve 软件界面所使用的语言。目前支持英语、简体中文、日语、西班牙语、葡萄牙语、法语、俄语、泰语和越南语等等。启动时重新加载上一个工作项目Reload last…...

Nacos超简单-管理配置文件
优点理论什么的就不说了,按照流程开始配配置吧。登录Centos,启动Naocs,使用sh /data/soft/restart.sh将自动启动Nacos。访问:http://192.168.101.65:8848/nacos/账号密码:nacos/nacos分为两部分,第一部分准…...

基于微信小程序的中国各地美食推荐平台小程序
文末联系获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.…...
如何优雅的导出函数
在开发过程中,经常会引用外部函数。方法主要有两种: 方法一:包含头文件并制定lib位置 优点:使用简单缺点:lib和vs版本有关,不同的版本和编译模式可能导致编译失败 方法二:GetProcAddress 优…...
c++多重继承
1.概论多重继承是否有必要吗?这个问题显然是一个哲学问题,正确的解答方式是根据情况来看,有时候需要,有时候不需要,这显然是一句废话,有点像上马克思主义哲学或者中庸思。但是这个问题和那些思想一样&#…...

15_FreeRtos计数信号量优先级翻转互斥信号量
目录 计数型信号量 计数型信号量相关API函数 计数型信号量实验源码 优先级翻转简介 优先级翻转实验源码 互斥信号量 互斥信号量相关API函数 互斥信号量实验源码 计数型信号量 计数型信号量相当于队列长度大于1的队列,因此计数型信号量能够容纳多个资源,这在…...

二叉树(一)
二叉树(一)1.树的概念2.树的相关概念3.树的表示4.树在实际中的运用5.二叉树概念及结构6.特殊的二叉树7.二叉树的性质🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀🚀系列专栏…...

【SCL】1200案例:天塔之光数码管显示液体混合水塔水位
使用scl编写天塔之光&数码管显示&液体混合&水塔水位 文章目录 目录 文章目录 前言 一、案例1:天塔之光 1.控制要求 2.编写程序 3.效果 二、案例2:液体混合 1.控制要求 2.编写程序 三、案例3:数码管显示 1.控制要求 2.编写程序 3…...

5.1配置IBGP和EBGP
5.2.1实验1:配置IBGP和EBGP 实验目的 熟悉IBGP和EBGP的应用场景掌握IBGP和EBGP的配置方法 实验拓扑 实验拓扑如图5-1所示: 图5-1:配置IBGP和EBGP 实验步骤 IP地址的配置 R1的配置 <Huawei>system-view Enter system view, return …...

c++中超级详细的一些知识,新手快来
目录 2.文章内容简介 3.理解虚函数表 3.1.多态与虚表 3.2.使用指针访问虚表 4.对象模型概述 4.1.简单对象模型 4.2.表格驱动模型 4.3.非继承下的C对象模型 5.继承下的C对象模型 5.1.单继承 5.2.多继承 5.2.1一般的多重继承(非菱形继承) 5.2…...

[答疑]经营困难时期谈建模和伪创新-长点心和长点良心
leonll 2022-11-26 9:53 我们今年真是太难了……(此处删除若干字)……去年底就想着邀请您来给我们讲课,现在也没有实行。我想再和我们老大提,您觉得怎么说个关键理由,这样的形势合适引进UML开发流程? UML…...

计算机基础知识
计算机网络的拓扑结构 一、OSI 7层网络模型是指什么? 7层分别是什么?每层的作用是什么? OSI7层模型是 国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。 每层功能:(自底向上) 物理层:建立、…...

Java爬虫—WebMagic
一,WebMagic介绍WebMagic企业开发,比HttpClient和JSoup更方便一),WebMagic架构介绍WebMagic有DownLoad,PageProcessor,Schedule,Pipeline四大组件,并有Spider将他们组织起来…...

[软件工程导论(第六版)]第2章 可行性研究(复习笔记)
文章目录2.1 可行性研究的任务2.2 可行性研究过程2.3 系统流程图2.4 数据流图概念2.5 数据字典2.6 成本/效益分析2.1 可行性研究的任务 可行性研究的目的 用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究的3个方面 (1)技术可行性&…...

Mac下安装Tomcat以及IDEA中的配置
安装brew 打开终端输入以下命令: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 搜索tomcat版本,输入以下命令: brew search tomcat 安装自己想要的版本,例…...

【Linux详解】——文件基础(I/O、文件描述符、重定向、缓冲区)
📖 前言:本期介绍文件基础I/O。 目录🕒 1. 文件回顾🕘 1.1 基本概念🕘 1.2 C语言文件操作🕤 1.2.1 概述🕤 1.2.2 实操🕤 1.2.3 OS接口open的使用(比特位标记)…...
HomMat2d
1.affine_trans_region(区域的任意变换) 2.hom_mat2d_identity(创建二位变换矩阵) 3.hom_mat2d_translate(平移) 4.hom_mat2d_scale(缩放) 5.hom_mat2d_rotate(旋转 &…...

Python3 JSON 数据解析
Python3 JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: json.dumps(): 对数据进行编码。json.loads(): 对数据进行解码。 在 json 的编解码…...

Homebrew 安装遇到的问题
Homebrew 安装遇到的问题 例如:第一章 Python 机器学习入门之pandas的使用 文章目录Homebrew 安装遇到的问题前言一、安装二、遇到的问题1.提示 zsh: command not found: brew三、解决问题前言 使用 Homebrew 能够 安装 Apple(或您的 Linux 系统&#…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...