网络工程师 (7)进程管理
一、进程相关的概念
(一)定义
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是操作系统结构的基础。进程是程序的一次执行实例,具有动态性、并发性、独立性、异步性和结构性等基本特性。
(二)结构
进程由多个元素组成,主要包括程序代码、数据、进程控制块(PCB)以及系统资源等。其中,程序代码是进程执行的具体指令;数据是程序处理的对象;进程控制块是操作系统用于描述进程状态和控制进程运行的数据结构,是进程的唯一标识;系统资源则包括处理器、内存、I/O设备等。
(三)状态
进程在其生命周期中会经历多种状态,主要包括就绪状态、运行状态和阻塞状态。就绪状态是指进程已经获得了除处理器以外的所有资源,等待被调度执行;运行状态是指进程正在处理器上执行;阻塞状态则是指进程因等待某种资源(如I/O操作)而无法继续执行。进程的状态之间可以相互转换。
(四)特性
- 动态性:进程是程序的一次执行过程,它随着程序的运行而不断变化。
- 并发性:多个进程可以在同一个处理器上并发执行,提高系统效率。
- 独立性:每个进程都有自己独立的运行环境和资源,互不干扰。
- 异步性:进程的执行速度不可预知,可能受到多种因素的影响。
- 结构性:进程由多个部分组成,包括程序、数据和进程控制块等。
(五)进程与程序的区别
程序是静态的,它是一组有序的指令集合,用于描述计算机执行的任务。而进程则是程序的一次执行实例,是动态的、有生命周期的。程序可以多次执行,每次执行都会创建一个新的进程。进程包含了程序执行时的所有信息,如代码、数据、状态等。
(六)通信
在操作系统中,进程之间需要进行通信以共享数据或协调行动。进程的通信方式有多种,包括管道、消息队列、共享内存、信号量、套接字等。这些通信方式各有优缺点,适用于不同的应用场景。
(七)调度与管理
进程调度是操作系统的一项核心功能,它负责决定哪个进程应该获得处理器的使用权。进程调度的目标是提高系统吞吐量和响应速度,同时确保系统资源的公平分配。操作系统的进程管理功能包括进程的创建、终止、挂起、唤醒等,以及进程间的同步和互斥控制。
(八)进程与线程的关系
进程是系统进行资源分配和调度的基本单位,而线程则是进程内的一条执行路径。一个进程可以包含多个线程,这些线程共享进程的资源,并可以并发执行。线程具有更小的开销和更高的执行效率,因为线程之间的切换比进程之间的切换要快得多。然而,线程也带来了并发控制的问题,如线程间的同步和互斥控制等。
二、死锁问题
(一)死锁的定义
死锁是指两个或两个以上的线程(或进程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法继续执行下去。简单来说,就是每个线程都在等待另一个线程释放资源,而另一个线程又在等待该线程释放资源,从而形成了一个无法打破的循环等待链。
二、死锁产生的条件
- 互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅能为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
- 不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)。
- 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
- 循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。即存在一个处于等待状态的进程集合{P1, P2, …, Pn},其中Pi等待的资源被P(i+1)占有(i=0, 1, …, n-1),Pn等待的资源被P0占有。
(三)死锁产生的原因
- 资源竞争:线程之间需要共享有限的资源(如文件、内存、数据库锁等)。当多个线程同时访问并尝试获取多个资源时,就可能形成相互依赖,导致死锁。
- 不恰当的锁顺序:多个线程以不同顺序获取锁可能会导致死锁。例如,线程A先获取锁1,再获取锁2;线程B先获取锁2,再获取锁1。两者可能相互等待对方释放锁,从而形成死锁。
- 资源分配不当:系统提供的资源个数少于并发进程所要求的该类资源数,也可能导致死锁。
(四)死锁的解决方案
预防死锁
- 破坏互斥条件:通过共享资源,避免资源的独占。
- 破坏保持与等待条件:要求线程在获取资源之前,必须先释放已持有的资源。
- 破坏不剥夺条件:允许线程强制释放资源,以避免死锁。
- 破坏循环等待条件:为每个资源设定一个全局顺序,所有线程按顺序请求资源。
避免死锁
- 资源请求顺序:规定所有线程必须以相同的顺序请求资源,避免循环等待。
- 使用锁超时:在获取锁时设置超时时间,超时则放弃请求。
- 使用更高级的锁机制:例如读写锁或信号量,避免不必要的锁竞争。
- 死锁避免算法:例如银行家算法,通过预测资源分配的安全性来避免死锁。但需要注意的是,死锁避免算法的执行会增加系统的开销。
检测与恢复死锁
- 死锁检测:判断系统是否处于死锁状态。常用的方法包括资源分配图、死锁检测工具(如jstack、VisualVM)等。
- 死锁恢复:一旦检测到死锁,需要执行恢复策略。常用的方法包括剥夺某个进程所占有的资源(即强制释放资源),并将其分配给其他进程;或者将某些进程回滚到之前的状态,并重新尝试执行。
(五)死锁案例
假设有两个线程A和B,它们分别需要资源R1和R2。线程A先获取了资源R1,然后尝试获取资源R2;线程B先获取了资源R2,然后尝试获取资源R1。此时,线程A和B都在等待对方释放资源,从而形成死锁。
为了避免这种情况,可以规定所有线程必须以相同的顺序请求资源。例如,规定所有线程都必须先请求资源R1,再请求资源R2。这样,即使多个线程同时尝试获取资源,也不会形成死锁。
三、进程的互斥和同步
(一)进程的互斥
定义:
进程互斥(Mutual Exclusion)是指在多进程或多线程环境下,确保多个进程或线程在同一时刻只能有一个进程或线程访问共享资源的同步机制。
目的:
互斥是进程同步的一部分,是保证多个进程间不会因同时访问共享资源而发生冲突或数据不一致的关键技术。当多个进程访问共享资源时,如果没有有效的互斥机制,可能会导致竞态条件(Race Condition),即进程的执行结果依赖于执行顺序,从而产生不一致或错误的结果。
临界区:
临界区指的是访问共享资源的那一段代码。在这段代码执行时,进程可能会改变共享资源的状态。为了防止多个进程同时进入临界区而导致错误或冲突,必须实现进程互斥。
实现方法:
- 禁用中断:一种最简单的互斥实现方法。在操作系统中禁用中断后,CPU就无法响应外部的中断请求,这意味着没有其他进程能抢占当前正在执行的进程。然而,这种方法只适用于单处理器系统,并且存在不公平的问题,因为禁用中断后,当前进程会一直占用CPU,其他进程无法执行。
- 互斥锁:操作系统中最常用的同步机制之一。互斥锁用于确保同一时刻只有一个进程能够访问临界区。Lock(加锁):进程尝试获取锁,若当前没有其他进程持有锁,则进程获得锁并进入临界区;如果锁已被其他进程持有,进程将被阻塞。Unlock(解锁):进程执行完临界区代码后释放锁,允许其他进程获取锁并进入临界区。
- 信号量:用于管理资源的同步工具,通常用来解决互斥问题。二值信号量(Binary Semaphore):只允许值为0或1,常用于实现互斥锁。当信号量的值为1时,进程可以进入临界区;当信号量的值为0时,进程需要等待。计数信号量(Counting Semaphore):允许值为非负整数,表示共享资源的数量。通过适当的增减操作,控制多个进程对资源的访问。
- 自旋锁:一种简单的互斥锁,常用于多核或多处理器系统中。自旋锁的工作原理是,当一个进程尝试获取锁时,如果锁已经被其他进程持有,它会不断检查锁的状态,等待锁被释放,而不是阻塞自己。自旋锁避免了上下文切换的开销,但会消耗CPU时间,因此只适用于临界区代码执行时间非常短的情况。
遵循原则:
- 空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
- 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
- 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区。
- 让权等待:当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。
(二)进程的同步
定义:
进程同步是指协调多个进程间的执行次序,确保它们按照某种特定的顺序来访问共享资源或执行特定的操作。
目的:
进程同步的目的是防止数据竞争和资源争用,确保系统的正确性和性能。
实现方法:
- 信号量:除了用于解决互斥问题外,信号量还可以用于实现进程同步。通过控制资源访问许可证的数量,信号量可以协调多个进程对共享资源的访问顺序。
- 条件变量:通常与互斥锁一起使用,用于在某个条件满足时通知一个或多个进程。它允许进程在等待某个条件时释放互斥锁并进入等待状态,直到条件满足时才被唤醒。
- 读写锁:区分读操作和写操作,允许多个进程同时读取,但只允许一个进程写入。这可以提高系统的并发性能,同时确保写操作的原子性和一致性。
注意事项:
- 避免死锁:死锁是指两个或多个进程因互相等待对方持有的资源而无法继续执行的情况。合理地申请和释放资源,采用适当的资源分配策略,可以避免死锁的发生。
- 防止饥饿:饥饿指某个或某些进程由于长期得不到所需的资源而无法继续执行的情况。设计同步机制时需要考虑公平性,确保每个进程都有机会获得所需的资源。
结语
健康是最大的财富
没有健康,一切都是浮云
!!!
相关文章:

网络工程师 (7)进程管理
一、进程相关的概念 (一)定义 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是操作系统结构的基础。进程是程序的一次执行实例,具有动…...

登录授权流程
发起一个网络请求需要:1.请求地址 2.请求方式 3.请求参数 在检查中找到request method,在postman中设置同样的请求方式将登录的url接口复制到postman中(json类型数据)在payload中选择view parsed,将其填入Body-raw中 …...

Flutter_学习记录_导航和其他
Flutter 的导航页面跳转,是通过组件Navigator 和 组件MaterialPageRoute来实现的,Navigator提供了很多个方法,但是目前,我只记录我学习过程中接触到的方法: Navigator.push(), 跳转下一个页面Navigator.pop(), 返回上一…...

二叉树-堆(补充)
二叉树-堆 1.二叉树的基本特性2.堆2.1.堆的基本概念2.2.堆的实现2.2.1.基本结构2.2.2.堆的初始化2.2.3.堆的销毁2.2.4.堆的插入2.2.5.取出堆顶的数据2.2.6.堆的删除2.2.7.堆的判空2.2.8.堆的数据个数2.2.9.交换2.2.10.打印堆数据2.2.11.堆的创建2.2.12.堆排序2.2.13.完整代码 3…...

Big Bird:适用于更长序列的Transformer模型
摘要 基于Transformer的模型,如BERT,已成为自然语言处理(NLP)中最成功的深度学习模型之一。然而,它们的一个核心限制是由于其全注意力机制,对序列长度的二次依赖(主要是在内存方面)…...
doris:MySQL Load
Doris 兼容 MySQL 协议,可以使用 MySQL 标准的 LOAD DATA 语法导入本地文件。MySQL Load 是一种同步导入方式,执行导入后即返回导入结果。可以通过 LOAD DATA 语句的返回结果判断导入是否成功。一般来说,可以使用 MySQL Load 导入 10GB 以下的…...

电感的饱和、温升、额定电流
电感饱和电流的定义: 电感的感值下降30%时候对应的电流 注意不要让电感的瞬间电流大于饱和电流: 温升电流: 电感器的饱和电流、温升电流和额定电流是描述电感在不同工作条件下表现的三个重要参数。它们分别反映了电感的不同工作特性…...

基于阿里云百炼大模型Sensevoice-1的语音识别与文本保存工具开发
基于阿里云百炼大模型Sensevoice-1的语音识别与文本保存工具开发 摘要 随着人工智能技术的不断发展,语音识别在会议记录、语音笔记等场景中得到了广泛应用。本文介绍了一个基于Python和阿里云百炼大模型的语音识别与文本保存工具的开发过程。该工具能够高效地识别东…...
【go语言】函数
一、什么是函数 函数是入门简单精通难,函数是什么??? 函数就是一段代码的集合go 语言中至少有一个 main 函数函数需要有一个名字,独立定义的情况下,见名知意函数可能需要有一个结果,也可能没有…...

CTF-web: phar反序列化+数据库伪造 [DASCTF2024最后一战 strange_php]
step 1 如何触发反序列化? 漏洞入口在 welcome.php case delete: // 获取删除留言的路径,优先使用 POST 请求中的路径,否则使用会话中的路径 $message $_POST[message_path] ? $_POST[message_path] : $_SESSION[message_path]; $msg $userMes…...
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(动态菜单组件实现)
目录 面对对象C的程序设计(范例) 面对对象C的程序设计(应用) 进一步谈论我上面给出的代码——继承 实现一个面对对象的文本编辑器 所以,什么是继承 重申我们对菜单的抽象 抽象菜单项目 抽象菜单动画 实现菜单功…...
EtherCAT主站IGH-- 23 -- IGH之fsm_slave.h/c文件解析
EtherCAT主站IGH-- 23 -- IGH之fsm_slave.h/c文件解析 0 预览一 该文件功能`fsm_slave.c` 文件功能函数预览二 函数功能介绍`fsm_slave.c` 中主要函数的作用1. `ec_fsm_slave_init`2. `ec_fsm_slave_clear`3. `ec_fsm_slave_exec`4. `ec_fsm_slave_set_ready`5. `ec_fsm_slave_…...

windows10 配置使用json server作为图片服务器
步骤1:在vs code中安装json server, npm i -g json-server 注意:需要安装对应版本的json server,不然可能会报错,比如: npm i -g json-server 0.16.3 步骤2:出现如下报错: json-server 不是…...

Linux——网络(tcp)
文章目录 目录 文章目录 前言 一、TCP逻辑 1. 面向连接 三次握手(建立连接) 四次挥手(关闭连接) 2. 可靠性 3. 流量控制 4. 拥塞控制 5. 基于字节流 6. 全双工通信 7. 状态机 8. TCP头部结构 9. TCP的应用场景 二、编写tcp代码函数…...
腾讯云开发提供免费GPU服务
https://ide.cloud.tencent.com/dashboard/web 适用于推理场景,每个月10000分钟免费时长 166 小时 40 分钟 自带学术加速,速度还是不错的 白嫖 Tesla T4 16G 算力 显存:16GB 算力:8 TFlops SP CPU:8 核 内存&#…...
详解python的修饰符
Python 中的修饰符(Decorator)是一种用于修改或扩展函数或类行为的工具。它们本质上是一个函数,接受另一个函数或类作为参数,并返回一个新的函数或类。修饰符通常用于在不修改原函数或类代码的情况下,添加额外的功能。…...
《攻克语言密码:教AI理解隐喻与象征》
在自然语言处理(NLP)领域,让计算机理解人类语言中的隐喻和象征,是迈向更高语言理解水平的关键一步。从“时间就是金钱”这样的概念隐喻,到文学作品里象征着坚韧的“寒梅”,这些非字面意义的表达方式承载着丰…...
如何解除TikTok地区限制:实用方法解析
随着社交媒体的不断发展,TikTok作为一款短视频平台,已经在全球范围内吸引了数以亿计的用户。然而,不同地区对TikTok的使用权限存在一定的限制,这使得一些用户无法享受平台提供的完整内容和功能。 一、了解TikTok地区限制的原因 在…...
神经网络|(七)概率论基础知识-贝叶斯公式
【1】引言 前序我们已经了解了一些基础知识。 古典概型:有限个元素参与抽样,每个元素被抽样的概率相等。 条件概率:在某条件已经达成的前提下,新事件发生的概率。实际计算的时候,应注意区分,如果是计算综…...

《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》
DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance)订阅 已识别 - 已识别问题,并且正在实施修复。 1月 29, 2025 - 20:57 CST 更新 - 我们将继续监控任何其他问题。 1月 28, 2025 - 22&am…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
MeanFlow:何凯明新作,单步去噪图像生成新SOTA
1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架,旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念,这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换,显…...