进程的概念:进程调度算法
进程概念进程Process是操作系统中资源分配和调度的基本单位它由程序块、进程控制块(PCB)、数据块三部分组成是程序在计算机中的一次动态执行过程程序块可执行文件的机器指令数据块程序运行时的全局变量、静态变量等PCBPCB是进程存在的唯一标志存储进程状态、优先级、资源占用等元数据内容包含进程标识符、状态、位置信控制信息、队列指针(链接同一状态的进程)、优先级、现场保护区等堆Heap动态分配的内存区域如malloc/new申请的空间栈Stack函数调用、局部变量、返回地址等临时数据进程与程序区别进程是程序的一次执行过程没有程序就没有进程。程序静态代码集合程序是存储在磁盘上的可执行文件如.exe、.py由二进制指令和数据组成。无状态程序本身不具备运行状态无法主动执行。示例一个保存在硬盘中的word.exe文件进程动态执行实例进程是程序在内存中的一次运行过程具有生命周期创建→运行→终止有状态进程包含运行时状态如 CPU 上下文、内存分配、文件句柄等示例双击word.exe后内存中启动的 Word 应用程序实例存在形式程序存储位置磁盘、需被加载到内存才能运行表现形式二进制文件静态进程存储位置内存RAM 磁盘缓存表现形式内存中的动态实体含 PCB生命周期程序可复用性同一程序可被多次启动为不同进程长期存在除非被删除或修改否则程序文件始终存在进程短暂存在从创建到终止的时间可能极短如毫秒级唯一性每个进程有唯一 PID进程 ID同一程序启动多次会生成多个独立进程资源占用程序无直接资源占用仅占用磁盘存储空间共享性多个进程可共享同一个程序文件如多个 Word 进程共享word.exe进程独占资源每个进程拥有独立的内存空间、文件描述符、CPU 时间片等资源竞争进程间可能因资源分配产生冲突如内存不足、文件锁竞争进程与线程区别进程 (Process):是一个正在运行的程序的实例。包含程序计数器、寄存器和程序变量的当前值。拥有独立的地址空间包括代码段、数据段和堆栈段线程 (Thread):是进程中的一个执行路径或子任务。同一个进程中的所有线程共享该进程的资源如内存空间。每个线程有自己的程序计数器、寄存器和局部变量但共享全局变量和其他进程级别的资源资源开销进程 创建、销毁和切换成本较高因为每个进程都有独立的地址空间线程 创建、销毁和切换成本较低因为线程共享进程的地址空间地址空间进程 每个进程拥有独立的地址空间相互隔离线程 所有线程共享同一个进程的地址空间便于线程间的通信和协作冲突处理进程 如果一个进程崩溃不会直接影响其他进程因为它们是完全隔离的线程 如果一个线程崩溃可能会导致整个进程终止因为线程共享相同的状态和资源并发性和性能进程 支持真正的并发执行但由于较高的创建和切换代价适用于长时间运行的任务线程 提供高效的并发执行能力由于低开销适用于短时间和频繁切换的小任务进程的状态进程在其生命周期内会经历多种状态这些状态反映了进程在不同阶段的执行情况和资源占用情况三态模型运行当一个进程在CPU上运行时单处理机处于运行态的进程只有一个就绪一个进程获得了除CPU外的一切所需资源一旦得到处理机即可运行将要运行的状态阻塞阻塞也称等待或睡眠状态一个进程正在等待某一事件发生(例如请求I/O等待I/0完成等)而暂时停止运行此时即使把CPU分配给进程也无法运行故称进程处于阻塞状态五态模型五态模型——也有的称为七态模型因为创建、就绪、运行、阻塞、挂起就绪、挂起阻塞、终止新建状态 (New State):进程刚被创建但尚未进入就绪队列的状态。新建过程中需要分配所需的资源并建立必要的管理信息就绪状态 (Ready State): 进程准备好随时获取CPU执行存在于内存中可以直接被调度执行运行状态 (Running State): 进程正在处理机上执行同一时刻最多只有一个进程处于运行状态阻塞状态 (Blocked/Waiting/Sleeping State): 进程因等待某些事件而暂停执行存在于内存中直到所需事件发生才返回就绪状态挂起就绪状态 (Ready Suspend): 进程具备运行条件但目前在外存中。只有当它被对换到内存中才能被调度执行。主要用于减少内存负担保留那些短期内可能需要使用的进程。挂起阻塞状态 (Blocked Suspend): 表明进程正在等待某一个事件发生且在外存中等待的事件完成后相应的挂起阻塞进程将转换为挂起就绪状态。减少了内存占用的同时避免了不必要的唤醒操作终止状态 (Exited/TerminatedState):进程已完成任务或因错误等原因被迫终止终止后的进程不再被调度执行最终从系统中移除。结束之前需要进行善后处理如回收资源并将PCB清零并归还系统⭐进程调度进程的同步与互斥进程同步简单来说就是一个进程的执行依赖于另一个进程的消息当一个进程没有得到来自另一个进程的消息时则需等待直到消息到达才被唤醒继续执行多个进程为了完成一个共同的任务在执行次序上需要进行协调彼此之间需要交换信息以保证各个进程都能正确地执行进程互斥多个进程需要访问同一临界资源时同时刻只允许一个进程访问该资源其他需要访问该资源的进程必须等待直到占用资源的进程释放该资源**临界资源**是指一次仅允许一个进程使用的共享资源进程中访问临界资源的那段代码称为临界区PV操作PV操作是一种用于实现进程同步与互斥的原语信号量(S)是一个整型变量(全局变量)用于表示系统中某种资源的数量。信号量可以分为两类一类是用于实现同步的同步信号量初始值根据具体情况设定另一类是用于实现互斥的互斥信号量初始值通常为 1P操作(加锁)也称为 “等待” 操作执行该操作时会尝试获取资源。若资源可用信号量值大于 0则占用资源并将信号量的值减 1若资源不可用信号量值为 0则进程会被阻塞进入与该信号量相关的等待队列假设S 是临界资源 P操作是 申请需要消耗使用资源假设s00-1-1 S 0 说明资源不足够无法继续执行任务则需要进入阻塞队列等待无法正常执行下面操作假设s100 100 -1 之后判断S 不小于 0 说明资源足够继续执行任务假设s11-1 S 不小于 0 说明资源足够继续执行任务V操作(解锁)也称为 “释放” 操作执行该操作时会释放资源。将信号量的值加 1如果此时有进程在等待该资源信号量值小于等于 0则唤醒等待队列中的一个进程假设S 是临界资源 P操作是 申请需要消耗使用资源假设s100 100 1 之后判断S 不小于等于 0 说明资源足够且没有阻塞的任务假设s-1-110 S 等于 0 说明资源-1此时存在阻塞任务则发起通知此时释放了一个资源信号量 与 PV操作信号量是一个整数值主要用于描述共享资源的状态正值:表示当前可用的资源数量负值:其绝对值表示正在等待获取该资源的进程数目二进制信号量Binary Semaphore也可以被称为互斥锁Mutex Locks计数器信号量Counting SemaphorePV单资源互斥模型PV互斥模型PV操作用于确保同一时刻只有一个进程能够进入临界区从而避免数据竞争和其他不一致的问题通过信号量、PV操作 P[测试并递减] 和 V [增]可以有效控制多个进程对共享资源的安全访问假设有一个共享资源如打印机我们需要确保在同一时间只有一个进程能够使用该资源// 我们可以使用一个初始值为1的二进制信号量semaphore printer_mutex1;voidprint_document(intdocument_id){P(printer_mutex);// 请求打印设备使用权printf(Printing Document %d\n,document_id);sleep(rand()%5);// 模拟打印耗时V(printer_mutex);// 打印结束后释放设备}//P操作//当进程调用 print_document 时首先执行 P(printer_mutex) 来尝试获取打印设备的使用权//如果 printer_mutex 大于等于0则进程可以获得使用权并将 printer_mutex 设定为0//这意味着现在没有任何其他的进程可以再进入临界区//V操作//在进程完成文档打印后它调用 V(printer_mutex) 来释放打印设备//并使 printer_mutex 回复为1这表明其他进程现在可以再次尝试进入临界区。PV操作在同一个进程中成对出现避免同时其他进程来抢占资源PV同步模型PV同步模型是操作系统中用于解决进程间同步问题的经典方法之一PV同步模型基于信号量它通过P操作[Wait等待]、V操作[Signal 释放] 来协调多个进程对共享资源的访问P操作 当一个进程执行P操作时它试图获取一个 信号量的许可如果信号量的值大于0则-10 并允许进程继续执行如果信号量的值为0-10 则该进程会被阻塞挂起进入等待队列直到其他进程 V操作释放信号量V操作当一个进程执行V操作时它会增加 信号量的值如果在执行V操作前有进程因为执行P操作而被阻塞那么V操作会唤醒队列中的一个或多个进程使它们能够继续执行应用实例生产者-消费者问题假设有一个缓冲区生产者向缓冲区添加产品消费者从缓冲区取出产品。为了同步它们的行为我们可以设置两个信号量empty: 表示缓冲区的空位数、full: 表示缓冲区中已填充的产品数生产者流程执行P1操作在empty上表示尝试放入产品。如果empty为0即缓冲区满生产者等待放置产品后执行V2操作在full上表示缓冲区中多了一个产品消费者流程执行P2操作在full上表示尝试消费产品。如果full为0即缓冲区空消费者等待消费产品后执行V1操作在empty上表示缓冲区中多了一个空位PV同步模型PV操作在不同线程之间**同步出现并且**不分先后控制多个线程之间执行顺序协调前趋图与PV操作这个不方便文字描述需要结合题目还有图形进行介绍所以需要个人悟性、看视频前趋图是一种图形化的工具用于描述一组进程之间的依赖关系在并发环境中哪些进程必须在其他进程完成之后才能启动节点:表示具体的进程或任务A节点 —— B节点边 (箭头):表示前后序关系即一个进程必须在其前趋进程完成后才能开始执行箭头左端表示 P操作—— V操作实际题目会出现很多节点需要判断某个位置是P\V操作 或信号量死锁问题所谓死锁是指两个以上的进程互相都要求对方已经占有的资源导致无法继续运行下去的现象。死锁四大条件互斥条件至少有一种资源是不可共享的同一时刻只能被一个进程使用持有并等待条件进程持有一些资源并且还在等待其他的资源非剥夺条件已经分配给进程的资源不能强制收回只能由该进程自行释放循环等待存在一个进程等待另一个进程所持有的资源从而形成了一个闭环解决死锁的方法打破四大条件预防死锁断坏死锁的四个必要条件中的任意一个方法包括静态地规定资源分配顺序、禁止进程同时请求多个资源等避免死锁动态地检查资源分配的安全性确保不会引入不安全的状态银行家算法 可以避免死锁 它可以判断是否可以安全地授予一个新的资源请求而不引起死锁死锁检测与回收定期检测是否存在死锁并采取措施终止某些进程以解除死锁忽略死锁(鸵鸟策略)认识到死锁不可避免仅在发现死锁时采取行动。这种方法简单直接但可能导致系统不稳定死锁最小资源数n × (m−1)1或(w-1)m 1 n计算死锁最小资源数需要考虑进程对资源的需求以及系统中进程的数量等因素假设系统中有n个进程每个进程需要m个资源才能完成任务计算资源数先给每个进程分配(m - 1)个资源。此时系统中资源总数为n * (m - 1)这种情况下每个进程都还差1个资源就能完成任务系统处于一种临界状态即只要再有1个资源就可以保证至少有一个进程能获取到足够的资源来运行完成并释放其占用的资源从而避免死锁得出结论所以避免死锁的最小资源数R为n×(m−1)1例如系统中有3个进程每个进程需要5个资源那么避免死锁的最小资源数为3 x(5 -1)1 13如果资源数小于13就有可能发生死锁这只是一种理论上的计算方法实际系统中死锁的情况可能更加复杂进程资源图圆圈一个圆圈表示一个进程矩形一个矩形表示一个资源矩形中圆圈的数量表示这类资源的个数1、表示进程向资源申请一个资源2、表示资源分配一个资源给进程3、表示资源向进程分配一个资源进程向资源申请一个资源。注意一定是先分配后申请资源先给进程分配资源进程才向资源又申请资源。4、资源共有三个资源分别给三个进程分配资源后没有剩余资源了此时进程1又向资源申请资源就会无法获得运行资源就会进入等待态** 阻塞状态**

相关新闻

SparseArray、ArrayMap

SparseArray、ArrayMap

SparseArray与ArrayMap都是Android提供的两个列表数据结构&#xff0c;它们采用的是以时间换空间的方式来提高效率&#xff0c;即增加时间投入、减少内存占用。SparseArraySparseArray稀疏数组&#xff0c;它采用压缩的方法存储稀疏数组中的内容。SparseArray是android里为<…

2026/8/7 22:11:15 阅读更多 →
Flutter-Dribbble-Challenge深度剖析:从在线银行到测验应用的界面实现原理

Flutter-Dribbble-Challenge深度剖析:从在线银行到测验应用的界面实现原理

Flutter-Dribbble-Challenge深度剖析&#xff1a;从在线银行到测验应用的界面实现原理 【免费下载链接】Flutter-Dribbble-Challenge A Flutter ui kit made with designs from dribbble. 项目地址: https://gitcode.com/gh_mirrors/fl/Flutter-Dribbble-Challenge Flut…

2026/8/7 22:11:15 阅读更多 →
从安装到部署:Gramateria一站式Web开发与Netlify上线教程

从安装到部署:Gramateria一站式Web开发与Netlify上线教程

从安装到部署&#xff1a;Gramateria一站式Web开发与Netlify上线教程 【免费下载链接】gramateria Drag and drop web builder with Grapes js, Bootstrap 5, Electron js and Netlify deployment. 项目地址: https://gitcode.com/gh_mirrors/gr/gramateria Gramateria是…

2026/8/7 22:11:15 阅读更多 →

最新新闻

5G VoNR技术解析:高清语音通话的实现与优化

5G VoNR技术解析:高清语音通话的实现与优化

1. 5G与VoNR技术全景解析当我们在城市里看到越来越多的5G基站时&#xff0c;可能很少有人意识到这些铁塔背后正在发生一场通信技术的革命。作为从业十余年的通信工程师&#xff0c;我见证了从2G到5G的演进过程&#xff0c;而VoNR&#xff08;Voice over New Radio&#xff09;无…

2026/8/8 1:09:02 阅读更多 →
PostgreSQL安装配置与基础操作指南

PostgreSQL安装配置与基础操作指南

1. PostgreSQL入门指南&#xff1a;从安装到基础应用PostgreSQL作为一款功能强大的开源关系型数据库系统&#xff0c;已经成为了企业级应用和开发者工具箱中不可或缺的一部分。我最初接触PostgreSQL是在2013年一个电商项目的数据迁移工作中&#xff0c;当时就被它出色的JSON支持…

2026/8/8 1:09:02 阅读更多 →
网络工程师实战入门:从零构建企业网与故障排查方法论

网络工程师实战入门:从零构建企业网与故障排查方法论

最近两年&#xff0c;我身边想转行或者刚入行的朋友&#xff0c;问得最多的问题就是&#xff1a;“网络工程师到底该怎么学&#xff1f;” 他们手里可能有一堆教程&#xff0c;从“零基础”到“实战案例”应有尽有&#xff0c;但真正打开电脑&#xff0c;面对一个模拟的网络拓扑…

2026/8/8 1:09:02 阅读更多 →
go:Prim Algorithms and Kruskal Algorithms

go:Prim Algorithms and Kruskal Algorithms

项目结构&#xff1a;/* # 版权所有 2026 ©涂聚文有限公司™ # 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎 # 描述&#xff1a; Prim Algorithms and Kruskal Algorithms 普里姆算法和克鲁斯卡尔算法 # Author : geovindu,G…

2026/8/8 1:09:02 阅读更多 →
Python: Prim Algorithms and Kruskal Algorithms

Python: Prim Algorithms and Kruskal Algorithms

项目结构&#xff1a;本文展示了一个珠宝供应链物流规划的Python实现&#xff0c;采用领域驱动设计(DDD)架构&#xff0c;包含Prim和Kruskal两种最小生成树算法。系统主要包含&#xff1a;领域模型&#xff1a;LogisticsNode(实体)、LogisticsEdge(值对象)、LogisticsMST(聚合根…

2026/8/8 1:09:02 阅读更多 →
3.2V锂电池,在太阳能产品及消费品的升压芯片应用案例,支持样品测试!

3.2V锂电池,在太阳能产品及消费品的升压芯片应用案例,支持样品测试!

在追求绿色能源与便携供电的今天&#xff0c;磷酸铁锂软包电芯凭借其高安全性、长循环寿命、宽温域适应性以及优异的轻薄形态&#xff0c;已成为户外太阳能产品及诸多消费电子设备的理想电源解决方案。本文将聚焦其在太阳能户外照明领域的核心应用&#xff0c;并深入探讨如何为…

2026/8/8 1:08:02 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及&#xff0c;无数企业下场搭建智能体系统&#xff0c;可落地阶段难题接踵而至&#xff1a;上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节&#xff0c;空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南&#xff1a;用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代&#xff0c;二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起&#xff1a;为什么我们需要一个隐私保护通用组件&#xff1f;最近在维护一个基于uniapp开发的微信小程序矩阵时&#xff0c;我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格&#xff0c;几乎每一个新版本发布&#xff0c;或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流&#xff1a;一个核心问题的诞生想象一下&#xff0c;你是一个城市供水系统的总工程师。你的城市有多个水源&#xff08;水库&#xff09;&#xff0c;需要通过一个复杂的地下管道网络&#xff0c;将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起&#xff1a;为什么我们需要互相关几年前&#xff0c;我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号&#xff0c;理论上它们接收到的声音波形应该非常相似&#xff0c;只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →