操作系统闲谈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 系统&#…...
Metasploit框架基础(二)
文章目录前言一、Meatsplooit的架构二、目录结构datadocumentationlibmodulesplugins三、Measploit模块四、Metasploit的使用前言 Metasploit是用ruby语言开发的,所以你打开软件目录,会发现很多.rb结尾的文件。ruby是一门OOP的语言。 一、Meatsplooit的…...
c++容器
1、vector容器 1.1性质 a)该容器的数据结构和数组相似,被称为单端数组。 b)在存储数据时不是在原有空间上往后拓展,而是找到一个新的空间,将原数据深拷贝到新空间,释放原空间。该过程被称为动态拓展。 vec…...
Vue.js如何实现对一千张图片进行分页加载?
目录 vue处理一千张图片进行分页加载 分页加载、懒加载---概念介绍: 思路: 开发过程中,如果后端一次性返回你1000多条图片或数据,那我们前端应该怎么用什么思路去更好的渲染呢? 第一种:我们可以使用分页…...
计算机网络复习(六)
考点:MIME及其编码(base64,quoted-printable)网络协议http是基于什么协议,应用层到网络层基于什么协议6-27.试将数据 11001100 10000001 00111000 进行 base64 编码,并得到最后传输的 ASCII 数据。答:先将 24 比特的二…...
Redis进阶:布隆过滤器(Bloom Filter)及误判率数学推导
1 缘起 有一次偶然间听到有同事在说某个项目中使用了布隆过滤器, 哎呦,我去,我竟然不知道啥是布隆过滤器, 这我哪能忍?其实,也可以忍,但是,可能有的面试官不能忍!&#…...
Java创建对象的方式
Java创建对象的五种方式: (1)使用new关键字 (2)使用Object类的clone方法 (3)使用Class类的newInstance方法 (4)使用Constructor类中的newInstance方法 (5&am…...
dom基本操作
1、style修改样式 基本语法: 元素.style.样式’值‘ 注意: 1.修改样式通过style属性引出 2.如果属性有-连接符,需要转换为小驼峰命名法 3.赋值的时候,需要的时候不要忘记加css单位 4.后面的值必须是字符串 <div></div> // 1、…...
如何将python训练的XGBoost模型部署在C++环境推理
当前环境:Ubuntu,xgboost1.7.4过程介绍:首先用python训练XGBoost模型,在训练完成后注意使用xgb_model.save_model(checkpoint.model)进行模型的保存。找到xgboost的动态链接库和头文件动态链接库:如果你在conda环境下面…...
About Oracle Database Performance Method
bottleneck(瓶颈): a point where resource contention is highest throughput(吞吐量): the amount of work that can be completed in a specified time. response time (响应时间): the time to complete a spec…...
JavaScript 日期和时间的格式化大汇总(收集)
一、日期和时间的格式化 1、原生方法 1.1、使用 toLocaleString 方法 Date 对象有一个 toLocaleString 方法,该方法可以根据本地时间和地区设置格式化日期时间。例如: const date new Date(); console.log(date.toLocaleString(en-US, { timeZone: …...
温州市建设小学大南网站/南宁关键词排名公司
5 类型参数列表我们学习了模板函数和模板类的定义和使用。但是,看到的“类型形参表”都只有一个元素,那么,如果要定义多个类型,应该怎么样操作?在telplate<类型形参表>中,“类型形参表”可以定义多个…...
哪个网站做黑色星期五订酒店活动/域名解析网站
作者:LanceToBigDatahttps://www.cnblogs.com/zhangyinhua/p/11558510.html一、Lambda简述1.1、Lambda概述Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有…...
杭州网站建设开发有限公司/搜索引擎是网站吗
参考http://www.cnblogs.com/showson/p/5602460.html 一样的解法,注意到在后面添加/删除与树形结构的互相转换。 【code】 http://uoj.ac/submission/77367转载于:https://www.cnblogs.com/showson/p/5602502.html...
佛山高明建网站/站长字体
类是用来描述具有相同属性和方法的对象的集合。对象是类的实例化。创建一个类很简单,使用class关键字加上大括号即可,如下<?php class Person{}如上,这样一个名为Person的类就创建好了,通常情况下类名的首字母是需要大写的。实…...
做企业网站价格/seo建站网络公司
第1关:平移、缩放、旋转正方体 (1) 理解几何变换基本原理, 掌握平移、旋转、缩放变换的方法; (2) 根据平移算法原理补全translation、scale、rotation_x、rotation_y和rotation_z函数; (3) 根据几何变换基本原理,将main函数中的translation、scale、rotation_z参数补充完整。…...
wordpress主题修改软件/b站推广网站入口mmm
以太网转串口是工控领域最常见的智能通信模块,有的是一网口转1串口,有的是一网口转4串口,最多的可以达到一转16串口(好像有的最多可以支持32串口)。如果该类模块做的足够完善,可以提供一个windows系统的设备…...