支付宝网站设计分析自动添加标签wordpress

张小明 2026/3/2 23:11:33
支付宝网站设计分析,自动添加标签wordpress,给卖假性药的做网站一般要判多久,做网站比较好的. 什么是进程的切换#xff1f;进程切换#xff1a;#xff08;也称 “进程上下文切换”#xff09;是指 CPU 从当前正在执行的进程#xff0c;切换到另一个需要执行的进程的过程。它是操作系统实现 “多任务并发” 的核心机制 —— 即便在单核 CPU 上#xff0c;通过频繁…. 什么是进程的切换进程切换也称“进程上下文切换”是指 CPU 从当前正在执行的进程切换到另一个需要执行的进程的过程。它是操作系统实现“多任务并发”的核心机制 —— 即便在单核 CPU 上通过频繁的进程切换也能让多个进程 “看似同时运行”要理解进程切换首先需要明确一个关键概念进程上下文“进程上下文”是进程运行所需的全部信息集合包括两类核心内容硬件上下文CPU 寄存器中存储的临时数据。程序计数器 PC—— 记录下一条要执行的指令地址通用寄存器—— 存储进程运行中的临时变量程序状态字 PSW—— 记录 CPU 状态如中断屏蔽位软件上下文进程的地址空间代码、数据、堆、栈进程控制块 PCB记录进程 ID、优先级、状态等核心属性打开的文件描述符2. 死循环进程会卡死系统吗平时我们在集成开发环境IDE里写过死循环代码当这个死循环运行起来时系统确实会变得卡顿一些但绝对不会完全卡死。要理解为什么是这样的需先明白这个问题一个进程获得 CPU 使用权后会一直把自己的代码执行完毕吗答案是否定的除非代码非常简短能在操作系统分配的一个 “时间片” 内执行完。 操作系统会为每个进程分配时间片时间片就是 CPU 给进程的一段有限执行时长。比如一个进程要在 CPU 上运行操作系统会告知它“只能运行 1 毫秒哦1 毫秒内跑完了就结束要是没跑完我就会把你从 CPU 上‘请’下来你得回到运行队列里重新排队等下次调度时再执行。” 这里单次分配给进程的执行时间就被称为时间片所以进程并不是永久性地占用 CPU 资源而是临时拥有运行一段指定时间后就会被从 CPU 上剥离正因为每个进程都基于时间片来运行所以不会出现一个进程长期独占 CPU 的情况。有些小伙伴可能会疑惑要是在单核机器上运行死循环会不会卡死但事实上系统确实会变卡却不会彻底卡死。 不然我们怎么能用Ctrl C这样的快捷键去结束掉死循环进程呢这就说明其实死循环进程并没有一直在独占 CPU资源。3. CPU中的寄存器是什么寄存器是CPU内部极小、极快的内存单元用于临时存放当前正在执行的指令、数据以及指令的地址它们是CPU直接工作和计算的“临时工作台”当 CPU 执行当前进程时进程的 PCB进程控制块的作用就相对弱化了此时 CPU 的主要关注点是进程的代码和数据CPU 访问进程的代码和数据时并非一次性将所有内容都加载进来而是按照指令顺序逐条处理为此CPU 内部设计了多种寄存器来配合工作这些寄存器各有其特定功能比如我们常见的PC程序计数器也称 EIP用来记录下一条要执行的指令地址确保 CPU 能按顺序执行代码ebp/esp栈基址寄存器和栈指针寄存器用于管理进程的栈空间eax/ebx/ecx/edx通用寄存器用于临时存储运算数据或地址cs/ds/es/fs/gs段寄存器用于指定代码段、数据段等内存区域eflags状态寄存器用于记录CPU的运行状态比如运算是否溢出、是否产生进位、中断是否允许等cr0~cr4控制寄存器用于控制CPU的工作模式和系统功能比如内存分页管理、保护模式切换等当一个进程运行时CPU 的这些寄存器会被填充上与该进程相关的临时数据有的寄存器如eflags用于标记数据运算是否出现溢出、浮点数计算是否有误有的如PC指明代码的执行起点还有的可能指向 PCB 或其他关键数据结构协助 CPU 与操作系统配合完成进程管理这些寄存器就像 CPU 的“临时工作台”实时保存着进程运行中的关键信息确保指令能连续、正确地执行。小故事厨师做饭想象一个顶尖厨师(CPU)在厨房(计算机)里做一道菜(执行一个程序)菜谱放在书架上的一本烹饪书(内存)里面记录了做菜的所有步骤和原料清单(程序指令和数据)工作台厨师面前的一张很小的操作台(寄存器)冰箱/仓库厨房里的大型储物区(硬盘)存放着所有食材4. 进程如何进行切换4.1小故事学生当兵你是一名大学生某天偶然看到学校附近在招募大学生士兵政策是服役一年后可以返校继续完成学业。你平时身材高高壮壮外形也还算周正抱着试试看的心态报了名没想到顺利通过了选拔。 这时候你要是头脑一热直接一脚踹开宿舍门对舍友喊“兄弟们拜拜了我现在就去当兵明年见”就这么不管不顾地走了 那可就麻烦了。 等一年后退伍返校大概率会收到学校的退学通知 —— 毕竟服役的这一年里上课点名每次都没到也没参加期末考试一学年下来挂科累积了二十多门学校按规定只能作退学处理。 所以你正确的做法是通过选拔后第一时间找到辅导员申请 “保留学籍”这一步才是重中之重。辅导员核实情况后第二天会给你一个厚实的牛皮档案袋里面装着你的成绩单、课程进度表、学籍信息表等所有和学习相关的材料并且他会特意叮嘱你“这个档案你自己收好退伍回来时再交给我我帮你恢复学籍。” 做好这些准备你才能安心去服役。 一年后服役期满返校你还不能直接走进教室坐下来听课而是要先拿着档案袋找到辅导员办理学籍恢复手续。因为你入伍前读的是大二上学期辅导员核对完材料后会把你安排到该年级的某一个班级里你要跟着他们继续完成大二后续的课程。这个生活案例其实和操作系统里的 “进程切换” 逻辑高度相似我们可以一一对应来看学校→CPU是 “执行任务” 的核心载体学校承载学习任务CPU 承载进程执行辅导员→进程调度器负责 “资源协调与状态管理”辅导员管理学籍调度器管理进程你学生→进程是 “被调度的任务主体”学生完成学习任务进程完成计算任务学籍档案袋→进程上下文包含任务执行的全部关键信息档案袋装学习记录上下文装寄存器数据、PCB 信息等申请保留学籍→保存进程上下文任务暂停前先将关键状态信息学习档案/寄存器数据保存起来去服兵役→进程被剥离 CPU任务学习/进程执行暂时停止让出核心载体学校/CPU返校恢复学籍、续读课程→恢复进程上下文重新加载保存的状态信息档案袋/上下文让任务从暂停点继续执行通过这个类比就能清晰理解进程切换不是 “直接停、直接启”而是先 “保存状态”再 “让出资源”最后 “恢复状态续跑”—— 就像学生入伍前要先保留学籍回来后才能无缝衔接学业一样。4.2真实具体的切换流程在这里插入图片描述比如说现在进程 A 正在 CPU 上执行已经运行到代码的第 100 行它基于原始数据 4 和 6计算得出了结果 10此时CPU 的各个寄存器里都保存着与进程 A 相关的各类数据程序计数器记录着下一条要执行的指令地址通用寄存器存储着临时运算值……这些 CPU 寄存器内的全部数据我们称之为当前进程的硬件上下文数据当进程 A 的时间片耗尽时不能直接就让它退出 CPU。操作系统会先把 CPU 寄存器中进程 A 的硬件上下文数据完整地保存到进程 A 的 PCB进程控制块里保存好后再把进程 A 重新放入就绪队列的末尾让它等待下一次被调度执行的机会接着操作系统会选择进程 B把它调度到 CPU 上运行。此时进程 B 会用自身的硬件上下文数据覆盖 CPU 寄存器中原有的进程 A 的数据然后开始执行自己的代码运行一段时间后进程 B 的时间片也用完了同样要进行上下文保存操作 —— 将 CPU 寄存器里进程 B 的硬件上下文数据保存到它的 PCB 中之后进程 B 也被放回就绪队列如果之后需要再次调度进程 A 执行也不能直接把它放到 CPU 上。而是要先从进程 A 的 PCB 中把之前保存的硬件上下文数据重新恢复到 CPU 的寄存器里这样一来进程 A 就能从之前被暂停的位置代码第 100 行执行完、计算结果为 10 的状态继续往后运行了由此可见进程切换最核心的操作就是对当前进程硬件上下文数据即 CPU 内寄存器的内容的保存与恢复4.3进程的硬件上下文存放在……在这里插入图片描述在早期的操作系统设计中任务状态段TSSTask State Segment承担的核心角色其实就是存储进程的硬件上下文—— 也就是说进程运行时 CPU 寄存器里的所有临时数据如程序计数器、通用寄存器、状态寄存器等都会被保存到对应的 TSS 对象中。如果将所有硬件上下文数据都塞进进程控制块task_struct里会导致task_struct的体积变得异常庞大task_struct作为描述进程的核心数据结构每次创建新进程时都需要被分配和初始化过大的体积会直接增加内存开销同时拖慢进程创建的速度因此为了优化性能、让进程创建更高效设计就将 “硬件上下文” 这部分数据从task_struct中剥离出来用 TSS 或其他专门的结构来单独存储这样既精简了task_struct的结构又能让硬件上下文的管理更聚焦、更高效。---------------进程调度---------------1. 什么是进程的调度进程调度操作系统通过特定策略决定 “哪个进程能获得 CPU”、“能占用 CPU 多久”、“什么时候把 CPU 让给其他进程” 的管理过程。首先需要回到操作系统的核心矛盾CPU 是计算机中最核心的硬件资源但同一时间只能 “专注” 执行一个进程的指令而系统中通常同时存在成百上千个进程比如你正在用的浏览器、音乐软件、后台的聊天工具等为了让这些进程 “看起来同时运行”、避免 CPU 资源浪费并且保证系统响应及时操作系统就需要一套“合理分配CPU使用权”的机制—— 这就是进程调度它是操作系统实现“多任务并发”的关键也是连接“进程管理”与“CPU 硬件”的核心桥梁。2. Linux中真实进程的调度是什么样的一、queue[140]优先级链表数组在这里插入图片描述在 Linux 系统的进程调度设计中通常一个 CPU 核心对应一个独立的 “运行队列”Runqueue用于管理该核心上等待调度的进程。 而运行队列中会包含一个关键的数据结构 ——queue[140]它是理解 Linux 优先级调度的核心。一、queue[140] 是什么queue[140]的完整定义是struct task_struct *queue[140]本质是一个“结构体指针数组”数组的每一个元素queue[i]都是一个指针指向一个struct task_struct即进程控制块 PCB描述进程的核心数据如PID、状态、优先级等更准确地说queue[140]中的每一项对应一个“优先级链表头”—— 相同优先级的进程会被串联成一个链表而queue[i]就指向该优先级链表的第一个进程queue即queue[140]的本质是 Linux 运行队列runqueue中按 “进程优先级” 分类的 “链表头数组”它的核心作用是 “归类收纳”—— 把相同优先级的进程串联成一个双向链表而queue[i]就指向 “优先级为i的进程链表” 的表头。二、为什么是 140 项queue[140]的长度之所以是 140核心原因是Linux 系统将进程优先级划分为 140 个等级优先级数值越小优先级越高这 140 个优先级又进一步分为两大类对应不同的调度场景1. 实时优先级0~99 级共 100 个适用场景实时进程工业设备控制、自动驾驶的传感器数据处理、音频视频的实时编码等这类进程需要在严格时间内完成的任务核心特点优先级极高0 级最高99 级最低调度器会优先满足实时进程的 CPU 需求 —— 只要有实时进程处于就绪态非实时进程就无法获得 CPU以此保证 “实时性”对应队列queue[0]~queue[99]分别对应 0~99 级实时优先级的进程链表2. 分时优先级100~139 级共 40 个适用场景用户进程我们日常使用的浏览器、微信、文档编辑器等这类进程不需要 “严格实时”但需要公平分配 CPU 资源核心特点优先级相对较低100 级高于 139 级调度器通过 “时间片轮转” 等策略让不同分时进程公平分享 CPU避免某一进程长期独占资源对应队列queue[100]~queue[139]分别对应 100~139 级分时优先级的进程链表简单说queue[140]就是 Linux 运行队列中“按优先级分类的进程收纳架”140 个 “格子”数组项对应 140 个优先级每个 “格子” 里挂着同优先级的进程链表调度器调度时会从优先级最高的非空队列开始依次选取进程分配 CPU—— 这样既保证了实时进程的时效性又兼顾了普通进程的公平性。实时操作系统与分时操作系统的核心区别上面提到的“实时优先级”和“分时优先级”本质对应了两种不同的操作系统设计理念这里简单补充两者的核心差异帮助理解优先级划分的逻辑维度实时操作系统RTOS分时操作系统Time-Sharing OS核心目标保证关键任务在规定时间内必须完成时效性让多个用户/进程公平共享 CPU 资源公平性调度特点优先调度实时进程可抢占非实时进程按时间片轮转或优先级调度兼顾公平与响应性适用场景工业控制、医疗设备、自动驾驶、航空航天个人电脑Windows/macOS、服务器Linux失败后果错过时间可能导致严重事故如设备失控卡顿或延迟但不会造成安全问题Linux 系统是“通用操作系统”同时支持实时进程和普通分时进程 —— 通过queue[140]的优先级划分既能满足少量实时任务的需求又能保证普通用户进程的公平与流畅实现 “一机多用” 的灵活性。二、bitmap[5]优先级位图一、遍历queue[140]找进程时间复杂度太高如果只靠queue[140]调度器每次选进程时都要从最高优先级0 级开始逐个检查queue[0]、queue[1]…… 直到找到第一个 “非空的链表”—— 这个过程本质是 “遍历数组”最坏情况下要检查 140 次比如所有高优先级队列都空只有queue[139]有进程时间复杂度是O(n)对于需要快速响应的调度器来说O(n)的效率虽然不算差但仍有优化空间疑问能不能不用遍历直接 “一眼找到” 有进程的最高优先级队列这就需要runqueue中的另一个关键成员bitmap[5]优先级位图二、bitmap[5]如何让查找效率降到 O (1)bitmap[5]是专门为“快速定位非空队列”设计的“状态标记工具”1. bitmap[5]的基础属性为什么是 5 个无符号整型类型大小bitmap是unsigned int无符号整型数组每个unsigned int占 4 字节32 个比特位总比特位5 个unsigned int共占5 × 32 160个比特位设计逻辑我们需要标记queue[140]140 个优先级队列的 “空/非空” 状态 ——140 个状态需要 140 个比特位而 160 个比特位刚好能覆盖多余的 20 个比特位闲置不用不影响功能若用 4 个unsigned int仅 128 个比特位128 140无法覆盖所有优先级若用 6 个192 个比特位又会浪费过多内存 ——5 个是 “刚好够用且最省内存” 的选择2. bitmap[5]的核心作用比特位与queue[140]一一对应bitmap的每个比特位都和queue[140]的下标即优先级一一绑定比特位的 “0/1” 状态代表对应队列的 “空/非空”若queue[i]对应的链表有进程非空则bitmap中第i个比特位设为1若queue[i]对应的链表无进程空则bitmap中第i个比特位设为0比如queue[62]有进程 →bitmap的第 62 个比特位是 1queue[100]没进程 →bitmap的第 100 个比特位是 03. 调度器如何用bitmap快速找进程有了bitmap调度器找 “最高优先级非空队列” 时再也不用遍历queue[140]而是通过“位运算指令” 直接定位第一个为 1 的比特位操作系统内核会调用专门的位运算接口比如x86 架构的bsf指令即 “Bit Scan Forward”从低位到高位扫描第一个为 1 的比特位这个指令能在 “一个 CPU 周期” 内找到目标比特位进而确定对应的优先级i再直接通过queue[i]拿到该优先级的进程链表整个查找过程的时间复杂度从原来的 O (140)遍历数组降为O(1)单次位运算三、总结queue与bitmap的配合逻辑queue[140]是 “按优先级分类的收纳架”负责归类进程bitmap[5]是 “收纳架的状态指示灯”负责标记哪个收纳架有进程两者配合让调度器实现了“高效归类 快速查找”进程入队按优先级i直接挂到queue[i]的链表并将bitmap第i位设为 1进程出队调度用位运算扫描bitmap找到第一个为 1 的比特位直接定位到最高优先级的queue[i]取链表头的进程执行
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做家政应该下载什么网站电商网站建设布局

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/9 21:36:03 网站建设

网站首页面wordpress后台被黑

基于S7-200 PLC和组态王组态切片机控制系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面在工业自动化领域,切片机控制系统对于生产效率和产品质量起着至关重要的作用。本文将介绍如何基于 S7 - 200 PLC 和组态王来构建一…

张小明 2026/1/26 5:32:51 网站建设

wordpress链接自动加斜杠潍坊seo按天收费

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个最小化的PostgreSQL错误诊断原型,要求:1.能识别column does not exist错误模式;2.连接到测试数据库检查schema;3.返回简单的…

张小明 2026/1/7 16:13:20 网站建设

多个域名绑定同一网站吗设计网站软件开发

Kafka 作为高吞吐、高可靠的分布式消息队列,在大数据领域和微服务架构中应用广泛。搭建稳定的 Kafka 集群是其发挥作用的基础,但跨系统环境搭建常面临各类问题。本文将分别详解 Windows 和 Linux 环境下 Kafka 集群的完整搭建流程,并附上实战…

张小明 2026/1/12 1:05:07 网站建设

做网站引流做什么类型的网站最好wordpress 清除缓存

npm安装前端工具链配合Qwen-Image打造Web端图像生成应用 在数字内容创作日益普及的今天,越来越多的应用场景需要“一键生成高质量图像”的能力——从电商平台快速产出商品海报,到设计师借助AI激发灵感,再到教育平台辅助美术教学。然而&#x…

张小明 2026/1/7 18:43:03 网站建设

网站的建站方案最好用的搜索神器

测试数据管理的重要性与挑战 在软件测试领域,测试数据是确保产品质量和稳定性的核心要素。它直接影响测试用例的有效性、缺陷检测率以及整体开发效率。然而,传统测试数据管理(TDM)方法面临诸多挑战,包括数据稀缺、隐私…

张小明 2026/1/7 7:18:50 网站建设