网络工程师 (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…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...

数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

react更新页面数据,操作页面,双向数据绑定
// 路由不是组件的直接跳转use client,useEffect,useRouter,需3个结合, use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…...

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建
目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. 本…...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地
NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配,成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景,通过标准化 SQL 工作台与细粒度权限管控两大能力,助力企业安全高效…...