1. 为什么需要理解进程刚接触操作系统时很多人会疑惑为什么不能直接让程序在硬件上运行我最初也有这个困惑直到第一次遇到程序卡死导致整个系统崩溃的情况。现代操作系统通过进程机制实现了程序间的隔离与资源管理就像给每个程序分配了独立的工作间。进程Process是操作系统进行资源分配和调度的基本单位。举个生活中的例子你同时开着浏览器查资料、用文档写报告、还在后台播放音乐——这三个任务就是三个独立的进程。操作系统负责协调它们对CPU、内存等资源的使用避免互相干扰。2. 进程的核心概念拆解2.1 进程的组成结构一个进程通常包含以下几个关键部分代码段存放程序的可执行指令数据段存储全局变量和静态变量堆动态分配的内存区域如malloc/new栈存放函数调用时的临时变量和返回地址进程控制块(PCB)操作系统维护的身份证包含进程IDPID进程状态运行/就绪/阻塞程序计数器下一条指令地址寄存器值内存分配情况打开文件列表提示理解PCB特别重要。当进程被切换时操作系统就是通过保存/恢复PCB中的上下文来实现无缝切换的。2.2 进程的生命周期进程状态转换是面试常考点也是理解调度机制的基础新建 → 就绪 ↔ 运行 → 终止 ↑ ↓ └─ 阻塞新建刚创建但尚未被操作系统完全加载就绪已获得除CPU外的所有资源等待调度运行正在CPU上执行指令阻塞等待某事件如I/O完成终止正常结束或被强制终止3. 进程的创建与管理实操3.1 创建进程的两种方式1. 系统启动时创建操作系统初始化时创建的守护进程如日志服务在Linux中通常PID1的init/systemd进程2. 运行时通过系统调用创建Unix/Linux使用fork()exec()组合pid_t pid fork(); // 创建子进程 if (pid 0) { // 子进程执行新程序 execl(/bin/ls, ls, -l, NULL); } else { // 父进程继续执行 wait(NULL); // 等待子进程结束 }Windows使用CreateProcess() API3.2 进程间通信(IPC)的5种方式当需要进程协作时就需要IPC机制方式特点适用场景管道(Pipe)单向通信有血缘关系限制父子进程简单数据传递消息队列结构化数据克服管道限制松散耦合的进程通信共享内存最快的方式需要同步机制大数据量频繁交换信号量计数器用于进程同步资源访问控制Socket跨网络通信分布式系统实际项目中共享内存信号量的组合很常见。比如我参与过的视频处理系统就用这种方案实现解码器和渲染器的数据交换。4. 进程调度算法深度解析4.1 常见调度算法对比算法特点优缺点先来先服务(FCFS)按到达顺序执行简单但平均等待时间长短作业优先(SJF)选择预计执行时间最短的进程最优但不现实优先级调度按预设优先级执行可能造成饥饿时间片轮转(RR)每个进程分配固定时间片响应快但上下文切换开销大多级反馈队列结合时间片和优先级进程可在队列间移动平衡响应和吞吐量4.2 Linux的CFS调度器现代Linux采用完全公平调度器(CFS)不再区分时间片而是基于虚拟运行时间(vruntime)红黑树结构维护可运行进程权重机制保证优先级差异最小粒度约0.75ms可通过sched_min_granularity_ns调整查看进程调度策略的命令chrt -p PID5. 常见问题与实战技巧5.1 僵尸进程处理当子进程退出但父进程未调用wait()时会产生僵尸进程。解决方法父进程中正确编写wait()逻辑如果父进程已结束僵尸进程会被init进程接管并清理紧急情况下可用kill -9终止父进程检查僵尸进程ps aux | grep Z5.2 进程资源限制通过ulimit/cgroups限制进程资源# 限制CPU使用率 cgcreate -g cpu:/mygroup echo 50000 /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us # 限制内存使用 echo 100M /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes5.3 性能分析工具链top/htop实时监控进程状态ps查看进程快照strace跟踪系统调用perf性能分析工具/proc文件系统查看进程详细信息例如查看进程内存映射pmap -x PID6. 从理论到实践模拟进程调度用Python模拟简单的多级反馈队列调度import heapq from collections import deque class Process: def __init__(self, pid, arrival, burst, priority0): self.pid pid self.arrival arrival self.remaining burst self.priority priority self.wait_time 0 def mlfq_scheduler(processes, time_quantum4, boost_interval50): queues [deque() for _ in range(3)] # 3级队列 current_time 0 boost_time boost_interval while processes or any(queues): # 新进程到达 while processes and processes[0].arrival current_time: p processes.pop(0) queues[0].append(p) # 周期性地将所有进程提到最高优先级队列 if current_time boost_time: for q in queues[1:]: while q: queues[0].append(q.popleft()) boost_time boost_interval # 选择要运行的进程 for i, q in enumerate(queues): if q: current_process q.popleft() quantum time_quantum * (2 ** i) # 低优先级队列获得更多时间 # 模拟执行 exec_time min(quantum, current_process.remaining) current_process.remaining - exec_time current_time exec_time # 更新其他进程等待时间 for queue in queues: for p in queue: p.wait_time exec_time # 如果未完成放入下一级队列 if current_process.remaining 0: if i len(queues) - 1: queues[i1].append(current_process) else: queues[i].append(current_process) break else: current_time 1 # CPU空闲这个模拟器展示了多级队列的优先级机制动态时间片分配周期性优先级提升防止饥饿进程在不同队列间的迁移理解进程概念后建议通过以下方式深化学习阅读Linux内核源码中的sched目录使用strace跟踪简单命令的系统调用自己实现一个简单的shell处理进程创建、管道等通过/proc文件系统观察进程状态变化
企业数字化 ERP 产品动态
相关推荐
Linux终端进度条实现原理与优化技巧 1. Linux终端下的进度条实现原理在Linux终端环境下实现进度条看似简单,但背后涉及多个关键技术点。终端进度条本质上是通过不断刷新同一行内容来模拟动态效果,这需要正确处理终端控制字符和输出缓冲。1.1 终端控制字符解析实现进度条最核心的是掌握两个控… · 2026/8/2 5:18:19
Agent 上线即崩?LangGraph 工作流才是从 Demo 到生产的安全网 聊《LangGraph上线前,最值得检查的不是模型参数》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要上周有个粉丝在群里吐槽,说自己用 LangChain 写了一个“自动回复客服”的 Agent… · 2026/9/25 4:47:17
C++ string类模拟实现:从深拷贝到移动语义的底层原理与实践 1. 项目概述:为什么要亲手实现一个 string 类?在C的学习和面试路上,std::string几乎是每个开发者最早接触、最频繁使用的标准库组件之一。它封装了字符数组的复杂性,提供了便捷的拼接、查找、比较等操作,让我们能专注于… · 2026/9/21 14:13:58
郑州报考避坑指南:电工作业证课间考试题怎么考?别被中介坑了 郑州报考避坑指南:电工作业证课间考试题怎么考?别被中介坑了 你是不是也遇到过这种情况:想考个电工作业证,结果一打听,报名流程复杂、价格参差不齐,生怕被中介骗钱?特别是在郑州这样的大城市,电工证报考市场鱼龙混杂,稍不注意就可能掉进坑里。别急,… · 2026/11/13 12:51:27
电工证还能上岗吗 在哪考才能顺利复审延期 电工证还能上岗吗 在哪考才能顺利复审延期 你是不是也遇到过这种情况:证书快到期了,却不知道在哪考、怎么复审?电工证还能上岗吗?这些问题,直接影响你的工作安排和职业发展。今天就来帮你把关,讲清楚电工证的复审流程、报考地点以及证书的有效性,让你… · 2026/11/13 12:51:27
电工证可以就近复审吗?考前押题怎么拿高分 电工证可以就近复审吗?考前押题怎么拿高分 手里拿着电工证,找工作却卡在复审这道关?眼下正是特种作业证上岗的黄金期, 急需特种作业证才能上岗找工作 ,可偏偏复审流程让人摸不着头脑。尤其是像你这种在 洛阳公路工程… · 2026/11/13 12:51:27
济南市叉车证电工证多久拿证?实操考试心里没底怕挂科?别慌,一步步教你搞定 济南市叉车证电工证多久拿证?实操考试心里没底怕挂科?别慌,一步步教你搞定 实操考试心里没底怕挂科,这几乎是每个打算考取济南市叉车证电工证的人的真实写照。尤其是在当前就业竞争激烈的情况下,一张权威的电工证不仅是求职的敲门砖,更是职业发展的保障… · 2026/11/13 12:51:27
低压电工证补贴怎么拿 低压电工证怎么报名全攻略 低压电工证补贴怎么拿 低压电工证怎么报名全攻略 实操考试心里没底怕挂科?很多人一提到低压电工证考试就发愁,尤其对刚入行或转行的人来说,报名流程、考试内容、补贴政策都摸不着头脑。别急,本文就从南阳市政公用工程从业者的角度,把低压电工证… · 2026/11/13 12:51:27
花溪在哪考电工证内部消息全揭秘:外省证书怎么转过来 花溪在哪考电工证内部消息全揭秘:外省证书怎么转过来 之前考的证在外省能不能转过来?这个问题几乎是每个打算在花溪考电工证的小伙伴最关心的。很多人手里拿着外地的证书,但因为工作或生活的原因,想在当地发展,却不知道能不能把证“带过来”。而… · 2026/11/13 12:50:27
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/12 14:09:01
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43
维修电公用考电工证吗 在哪考最靠谱 维修电公用考电工证吗 在哪考最靠谱 工地太忙根本没时间复习考试,你是维修电工,天天在项目上跑,连抽个空背个题都难。那问题来了—— 维修电公用考电工证吗 ?答案是: 必须考 。尤其是在当前施工行业,没有电工证,连进场都可能被拦下。而且,… · 2026/11/13 0:00:08
电工证是不是可以登高?含金量和证书范围你必须知道的事 电工证是不是可以登高?含金量和证书范围你必须知道的事 证书过期了不知道怎么复审延期,这事儿很多人遇到过,尤其是像你这样在郑州金水区做劳务班组负责人,手里握着几十个工人的证书,稍微一疏忽,就可能影响工程进度和公司信誉。特别是电工证是不是可以登… · 2026/11/13 0:00:08
鸡西电工证哪家下证快官方报名入口怎么找 鸡西电工证哪家下证快官方报名入口怎么找 你是不是也担心 学历不高怕报不上名 ?别急,今天我就来跟你说说, 鸡西电工证哪家下证快 ,还有 官方报名入口 到底怎么找,别让那些“代办”“代考”耽误了你的机会。… · 2026/11/13 0:00:08
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 21:15:21