当前位置: 首页 > news >正文

操作系统闲谈06——进程管理

操作系统闲谈06——进程管理

一、进程调度

01 时间片轮转

给每一个进程分配一个时间片,然后时间片用完了,把cpu分配给另一个进程

image-20230214101040202

时间片通常设置为 20ms ~ 50ms

02 先来先服务

就是维护了一个就绪队列,每次选择最先进入队列的进程,然后一直运行,直到进程退出或者被阻塞,然后继续从队列中选择一个进程接着运行

image-20230214101318595

不利于 短作业进程

03 优先级调度

高响应比优先调度

主要权衡了长作业和短作业

每次计算响应比优先级

image-20230214101752274

短作业优先调度

从就绪队列中挑选运行时间最短的进程来运行

image-20230214101557437

高优先级调度

从就绪队列中挑选进程优先级最高的先运行

二、进程通信

01 管道

分为匿名管道和有名管道

image-20230214103612002

匿名管道 用于有父子亲缘关系的进程之间的通信

有名管道 则是打破了父子亲缘关系的限制

不管是匿名管道还是有名管道 通信的方向都是单向的 通信数据遵循先进先出的原则

02 消息队列

管道传输数据的大小有限制、并且数据是无格式的字节流

在内核维护了一个消息链表 消息队列的消息体可以是用户自定义的数据类型,采用消息队列进程进程通信

03 共享内存

由于消息队列每次数据的写入和读取都需要经过用户态和内核态的拷贝

引入了共享内存 它是IPC通信最快的方式

image-20230214103708264

直接分配了一个共享空间,每个进程都可以访问

04 信号量

共享内存确实加快了IPC通信的速度,但是也带来了新的问题,就是多个进程同时竞争共享资源引起的数据的错乱

引入了信号量 它主要设置了信号量来保护共享资源,设置两个原子操作,P操作,V操作,用于进程的互斥和同步

05 信号

然后还要IPC通信中的异步通信方式 信号

主要分为软件触发和硬件触发

软件触发 例如 kill

硬件触发 例如 键盘的 ctrl C

06 socket

C/S架构 用于不同主机的进程进行通信

常见的基于TCP的Socket网络通信模型

image-20230214102447045

三、互斥与同步

01 互斥

进程互斥

  • 信号量:使用信号量可以在多个进程间实现互斥,信号量是一个整数值,用于计数,在多个进程对共享资源进行访问时,可以通过对信号量的操作来实现互斥。
  • 互斥锁:互斥锁是一种常用的互斥机制,可以实现对共享资源的独占访问。
  • 管程:管程是一种特殊的进程,它可以管理多个其他进程对共享资源的访问,通过管程的锁定和解锁机制,可以实现互斥。

线程互斥

  • 互斥锁:互斥锁是最常用的线程同步机制,可以保证多个线程对共享资源的独占访问。
  • 信号量:信号量是一种用于线程同步的机制,它可以用于控制多个线程对共享资源的访问。
  • 原子操作:原子操作是一种无需加锁即可实现线程间同步的方法,其特点是操作不可中断。

02 同步

进程同步

  • 信号量:信号量是一种用于实现进程间同步的机制,通过对信号量的操作来实现同步。
  • 信号:信号是一种异步通信机制,可以在进程间传递信息,以实现同步。
  • 消息队列:消息队列是一种内核态的通信机制,可以在不同进程间传递消息。

线程同步

  • 信号量(Semaphore):信号量是一种用于线程间同步的机制,通过对信号量的操作来实现同步。

  • 条件变量(Condition Variable):条件变量是一种用于线程间协作的同步机制,通过等待和唤醒来实现同步。

  • 读写锁(Read-Write Lock):读写锁是一种用于保护共享资源的同步机制,支持多个读线程同时访问,但只允许一个写线程访问。

四、锁

01 锁的基本类型

互斥锁

互斥锁(Mutex):互斥锁是最常见的同步机制,它可以在多线程中保证任意时刻只有一个线程能够访问某个共享资源,从而保证数据的完整性和一致性。

多了线程切换的开销

自旋锁

自旋锁(Spinlock):自旋锁也是一种同步机制,与互斥锁类似,但是自旋锁会一直占用CPU资源,直到获得锁为止,因此当竞争激烈的时候会导致大量的CPU浪费。

读写锁

读写锁是一种特殊的同步机制,它可以同时允许多个读者线程同时访问某个共享资源,但是当有写者线程要修改该共享资源时,就必须阻塞读者线程,从而保证数据的一致性。

02 死锁

死锁的条件

  1. 互斥条件:一个资源每次只能被一个进程使用。
  2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  3. 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
  4. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

如何解决死锁

  • 预防死锁:通过一些方法防止系统出现死锁,例如请求资源的顺序,使用银行家算法。

  • 避免死锁:通过动态调整系统的状态来避免死锁,例如释放资源。

  • 检测死锁:通过定期检测死锁的情况,以便及时解决死锁。

检测死锁的方法有以下几种:

  1. 资源分配图法:该方法通过分析系统的资源分配图,以检测系统是否存在死锁。资源分配图法通过建立一个描述系统资源分配关系的图,然后寻找图中的环,如果存在环,则说明存在死锁。
  2. Wound-Wait法:该方法通过记录每一个进程的等待次数和被放弃的次数,来判断是否存在死锁。如果一个进程的等待次数大于0,而该进程被放弃的次数为0,则说明该进程处于死锁状态。
  3. 银行家算法:该算法是一种预防死锁的方法,也可以用来检测死锁。该算法在每一个进程申请资源之前,先检查系统的资源分配情况,以确定该进程是否能够获得所需的资源。如果系统中存在资源分配不合法的情况,则说明存在死锁。

以上是检测死锁的三种方法,每一种方法都有其优势和劣势,具体使用哪种方法需要根据实际情况来决定。

  • 解除死锁:通过撤销一些进程,使系统恢复正常状态。

五、多线程与多进程

01 进程、线程、协程

进程、线程和协程都是并发编程中的重要概念,它们在实现多任务处理时有着不同的作用和特点。

  1. 进程

进程是操作系统中分配资源的基本单位,一个进程包含程序代码、数据和内存空间等资源,每个进程都拥有独立的地址空间和系统资源,进程之间互不干扰,通信需要使用进程间通信(IPC)机制。

进程之间的切换需要进行上下文切换,会产生较大的开销。多进程适合处理不同任务之间的并行处理,可以充分利用多核 CPU 的性能。

  1. 线程

线程是进程内的一个执行单元,一个进程可以包含多个线程,线程共享进程的资源,包括内存空间、文件句柄、网络连接等。

不同线程之间的切换需要进行上下文切换,但相对于进程来说,线程的创建和销毁开销较小。线程之间的数据共享相对容易,但也需要注意线程安全和同步问题。多线程适合处理单个任务的并发执行,可以提高程序的执行效率。

  1. 协程

协程是一种轻量级的线程,它是一种用户态的线程,不需要操作系统的参与,可以在单个线程中实现多个任务的并发执行。协程在执行过程中可以自由切换执行上下文,不需要进行系统调用,因此切换开销较小。

协程之间的数据共享相对简单,但也需要注意同步和互斥问题。协程适合处理大量的 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&#xff1a;配置IBGP和EBGP 实验目的 熟悉IBGP和EBGP的应用场景掌握IBGP和EBGP的配置方法 实验拓扑 实验拓扑如图5-1所示&#xff1a; 图5-1&#xff1a;配置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一般的多重继承&#xff08;非菱形继承&#xff09; 5.2…...

[答疑]经营困难时期谈建模和伪创新-长点心和长点良心

leonll 2022-11-26 9:53 我们今年真是太难了……&#xff08;此处删除若干字&#xff09;……去年底就想着邀请您来给我们讲课&#xff0c;现在也没有实行。我想再和我们老大提&#xff0c;您觉得怎么说个关键理由&#xff0c;这样的形势合适引进UML开发流程&#xff1f; UML…...

计算机基础知识

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

Java爬虫—WebMagic

一&#xff0c;WebMagic介绍WebMagic企业开发&#xff0c;比HttpClient和JSoup更方便一&#xff09;&#xff0c;WebMagic架构介绍WebMagic有DownLoad&#xff0c;PageProcessor&#xff0c;Schedule&#xff0c;Pipeline四大组件&#xff0c;并有Spider将他们组织起来&#xf…...

[软件工程导论(第六版)]第2章 可行性研究(复习笔记)

文章目录2.1 可行性研究的任务2.2 可行性研究过程2.3 系统流程图2.4 数据流图概念2.5 数据字典2.6 成本/效益分析2.1 可行性研究的任务 可行性研究的目的 用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究的3个方面 &#xff08;1&#xff09;技术可行性&…...

Mac下安装Tomcat以及IDEA中的配置

安装brew 打开终端输入以下命令&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 搜索tomcat版本&#xff0c;输入以下命令&#xff1a; brew search tomcat 安装自己想要的版本&#xff0c;例…...

【Linux详解】——文件基础(I/O、文件描述符、重定向、缓冲区)

&#x1f4d6; 前言&#xff1a;本期介绍文件基础I/O。 目录&#x1f552; 1. 文件回顾&#x1f558; 1.1 基本概念&#x1f558; 1.2 C语言文件操作&#x1f564; 1.2.1 概述&#x1f564; 1.2.2 实操&#x1f564; 1.2.3 OS接口open的使用&#xff08;比特位标记&#xff09;…...

HomMat2d

1.affine_trans_region&#xff08;区域的任意变换&#xff09; 2.hom_mat2d_identity&#xff08;创建二位变换矩阵&#xff09; 3.hom_mat2d_translate&#xff08;平移&#xff09; 4.hom_mat2d_scale&#xff08;缩放&#xff09; 5.hom_mat2d_rotate&#xff08;旋转 &…...

Python3 JSON 数据解析

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

Homebrew 安装遇到的问题

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

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...