当前位置: 首页 > news >正文

NJU OS 程序和进程;fork, execve, exit

目录
  • 程序与进程
  • 虚拟化与 CrazyOS
  • 进程状态与可观测性
  • /proc 与 procfs
  • fork / execve / exit
  • UNIX 设计哲学

程序与进程

  • 程序是状态机的静态描述:代码规定了状态转移规则,但自己不会运行。
  • 进程是运行中的状态机实例:有当前 PC/寄存器、地址空间、打开文件、信号状态、凭据、工作目录、环境变量等上下文。
  • 因而“程序”更像模板,“进程”更像带现场的执行对象。
  • 不是所有进程的父进程都是 systemd;只有孤儿进程才会被 PID 1 接管。
  • 子进程退出时发 SIGCHLD 给它的父进程,不是直接通知 systemd
  • 僵尸进程的本质是“已经退出,但父进程还没 wait”;PID 1 接管孤儿后会负责回收。

虚拟化与 CrazyOS

  • 操作系统对 CPU 的核心虚拟化可以抽象成:
while (1) {p = pick_next();run_one_step(p);
}
  • CrazyOS 用用户态模拟器把这个想法落地:每个 proc 维护自己的寄存器和内存,主循环每次只执行当前进程的一条 guest instruction。
  • 于是“并发”首先是交错执行,不是同时执行;哪个进程更快看到输出,取决于它完成同一可观察动作需要多少条指令。
  • 这也是 ./crazy-os p2.bin p1.bin | lessp2 看起来更快的原因:p2 打印 1,2,3...p1 打印 10,20,30...,后者每行通常多一位数字,也就多一次 ecall 和更多模拟指令。

进程状态与可观测性

  • 进程的最小可执行核心是:寄存器现场 + 虚拟地址空间。
  • 但一个 Unix 进程的完整状态远不止这些,还包括:
    pid/ppid、调度状态、页表与映射、文件描述符表、cwd、umask、信号处理器与 mask、session/process group、uid/gid、资源限制、环境变量等。
  • 用户态可以直接读自己地址空间中的数据,也天然在使用当前寄存器;但内核代管的那部分状态不能直接 load,只能通过内核接口观测。
  • 这些接口既可以是系统调用,也可以是内核导出的伪文件系统,如 /proc

/proc 与 procfs

  • procfs 是文件系统类型,/proc 是它通常的挂载点;前者是机制,后者是位置。
  • /proc 中的项在接口层面确实是“文件/目录/链接”,可以 open/read/write/stat
  • 但它们通常不是磁盘上长期存在的普通文件,内容多半由内核在读取时按当前状态动态生成。
  • 因而 /proc/<pid>/maps/proc/<pid>/status/proc/<pid>/fd 本质上是“进程状态的文件化视图”。

fork / execve / exit

  • fork() 复制当前进程,返回两次:父进程得到子进程 PID,子进程得到 0;失败返回 -1
  • 语义上 fork 复制的是整个执行上下文,实现上通常依赖 Copy-on-Write:先共享物理页,写时再真正复制。
  • fork 不是“从初始模板创建新进程”,而是“把当前计算过程分叉成两条执行线”;这使共享预处理结果、zygote、checkpoint、fork-based DFS 变得自然,避免了对公共子问题的重复计算。
  • fork bomb :() { : | : & }; : 的危险在于进程数指数增长;系统可能通过 RLIMIT_NPROC、cgroup、PID/内存限制、OOM 等机制缓解
  • execve(path, argv, envp) 用新程序替换当前进程的代码/数据/堆/栈;PID 通常不变,默认文件描述符保留,成功后不返回。
  • 环境变量就是 execveenvp:一组传给新进程的 key=value 字符串,如 PATH/HOME/LANG
  • _exit(status) 终止当前进程,释放资源,并向父进程发送 SIGCHLD;父进程通过 wait/waitpid 回收退出状态。

UNIX 设计哲学

  • fork + execve 的分离体现了“小原语 + 可组合”的哲学。
  • fork 只负责复制当前上下文,execve 只负责替换程序映像;两步之间用户态可以自由做重定向、改环境变量、改工作目录、设置信号处理。
  • 因而 shell 能用 fork + dup2 + execve + wait 组合出管道、重定向、后台任务,而不需要一个臃肿的“万能创建进程”系统调用。
http://www.rkmt.cn/news/1449593.html

相关文章:

  • Pulover‘s Macro Creator:基于AutoHotkey的自动化脚本生成器深度解析
  • 鸣潮终极自动化指南:5分钟掌握后台战斗与声骸刷取技巧
  • 内网开发福音:手把手教你在无外网服务器离线部署1Panel Docker管理面板
  • Android TV搞多路Miracast投屏?小心这个‘单通道’陷阱让你的优化前功尽弃
  • 音乐解锁终极指南:3分钟学会解密各大平台加密音乐文件
  • 从SfM点云到可交互3D场景:手把手教你用Gaussian Splatting重建你的房间
  • 2026 北京靠谱装修公司深度测评:从资质、施工、付款、售后多维筛选,避坑不踩雷 - 资讯纵览
  • 北京万腾老酒回收“老酒文化月”开幕,公益鉴定进社区,普及真伪鉴别知识 - 资讯焦点
  • 闲鱼爬虫实战:模拟手机端破解反爬策略,爬取指定商品搜索数据,爬取闲鱼搜索指定商品(需手机端模拟)o 技术点:抓包分析、cookie与token
  • 咸阳黄金回收实地测评分享:深耕20年的本地老店真的更靠谱 - 铭汇黄金回收
  • 界面干净/使用丝滑,哔哩哔哩 V3.20.4 谷歌国际版(下架前珍藏)
  • 2026年全自动吨袋包装机公司实测:数据与用户口碑联合推荐 - 资讯焦点
  • 2026贵阳装修优选|福旺居装饰全维度深度报告 高性价比装企实测 - 资讯纵览
  • 2026年6月 | 磁悬浮空压机TOP8品牌推荐 - 资讯焦点
  • 如何通过3个步骤实现微信QQ消息永久防撤回功能?
  • 2026 年 6 月教资真题试卷实测:免费完整题库全对比 - 讲清楚了
  • YOLO玩家必看:用Gold-YOLO-Nano在边缘设备上实现实时检测的完整部署指南(基于ONNX/TensorRT)
  • 如何快速掌握游戏修改:Smithbox终极使用指南
  • 无需网络!Flix像聊天一样传文件,跨设备传输太香了
  • 8秒极速AI图像编辑终极指南:Qwen-Rapid-AIO如何彻底改变你的创作流程
  • 大语言模型如何变革用户体验研究:处理海量定性数据的新范式
  • 广州 3 + 证书高职高考复读辅导班机构推荐 - GrowthUME
  • 跨平台文件同步终极方案:告别下载限速的极速体验
  • 苏州靠谱犬舍选购全攻略|5家本地实体门店甄选、防坑指南与四季养护要点 - 资讯纵览
  • 别再为keyCode发愁了!UniApp兼容各品牌扫码枪的键盘监听终极方案
  • 2026 年 6 月教资备考神器:免费题库真免费才靠谱 - 讲清楚了
  • 贵阳福旺居装饰深度调研|闭口合同/透明报价/施工工艺全方位解读 - 资讯纵览
  • 如何快速构建个人漫画库:哔咔漫画下载器完整指南
  • 遵义市黄金回收钻戒白银铂金彩金回收门店优选+2026年6月黄金回收TOP5靠谱排行榜及联系方式 - 资讯纵览
  • 如何快速配置华硕笔记本性能:G-Helper轻量化控制工具完整指南