macOS 系统精简可行性分析:DAS-CTS 调度机制与 SSV 限制
一、问题背景
1. 现象描述
打开活动监视器(Activity Monitor),即使 Mac 处于空闲状态,也会看到数百个进程在运行。在最小化服务的虚拟机中,至少有 500 个进程;而在原生 Mac 的标准设置下,即使没有打开任何应用,进程数量也可能超过 700 个。
2. 用户疑问
其中许多进程如 WindowServer 显然是系统必需的,但是否有可能禁用那些不必要的进程?这是作者经常被问到的问题,本文将尝试给出答案。
3. 研究挑战
A. 识别难度
- 需要了解每个进程的功能
- 理解进程之间的相互关系
- 即使是 Apple 内部可能也没有人完全了解所有进程
B. 工作量评估
- 假设需要研究 500 个候选进程
- 每个进程平均需要 1 周时间研究
- 总计需要超过 10 人年
- 研究完成时系统可能已发生变化
二、案例研究:Time Machine 进程
1. 选择理由
A. 易于识别
Time Machine 备份进程是众所周知的进程组,作者自 macOS Sierra 以来一直在研究它们。
B. 可移除性
许多用户不使用 Time Machine,而是使用其他备份方案,因此有充分的理由想要移除 backupd 及相关进程。
C. 独立性强
虽然 Time Machine 进程依赖其他进程才能运行,但作者不知道有其他子系统依赖 Time Machine,因此它可能具有可处置性。
2. 进程观察
A. 进程存在性
在 macOS 26.2 的基础虚拟机中,即使从未启用过 Time Machine,活动监视器中仍会显示其进程。
B. 资源占用
即使 Time Machine 完全禁用,backupd 和 backupd-helper 仍会占用少量 CPU。
同时也会占用少量内存,总计约 5.1 MB。虽然单个进程占用不多,但累积到 500 个进程时就变得值得关注。
3. 进程控制机制
A. LaunchDaemons 配置
这两个进程由 /System/Library/LaunchDaemons 中的 LaunchDaemons 控制,对应的属性列表文件为:
- com.apple.backupd-helper.plist
- com.apple.backupd.plist
B. SSV 限制
这些文件位于签名系统卷(Signed System Volume,SSV)中,这意味着我们无法以任何方式更改它们。
同样的限制适用于其他 417 个 LaunchDaemons 和 460 个 LaunchAgents,它们占据了活动监视器列出的大部分进程。
C. 历史对比
在 SSV 出现之前,可以通过编辑属性列表来阻止进程启动。但在现代 macOS 中,这已不再可能。
三、进程调度机制:DAS-CTS
1. 调度架构演进
A. 早期方式(macOS Sierra 之前)
Time Machine 备份由 launchd 作为定时事件运行。
B. 现代方式(macOS Sierra 及之后)
备份的调度和分发由以下两个系统共同完成:
- Duet Activity Scheduler(DAS)
- Centralised Task Scheduling(CTS)
它们使用轻量级进程间通信(XPC)进行协调。
2. DAS-CTS 工作原理
graph TB
subgraph DAS
A[Duet Activity Scheduler]
A --> B[管理活动列表]
B --> C[com.apple.backupd-auto]
A --> D[决策调度]
end
subgraph CTS
E[Centralised Task Scheduling]
E --> F[XPC 通信]
F --> G[进程分发]
end
D -->|XPC 请求| F
F -->|启动| H[backupd-auto]
H -->|完成反馈| E
E -->|重新调度| A
style A fill:#f9f,stroke:#333,stroke-width:2px
style E fill:#9ff,stroke:#333,stroke-width:2px
style H fill:#ff9,stroke:#333,stroke-width:2pxA. DAS 职责
- 管理庞大的活动列表,包括 com.apple.backupd-auto
- 决定何时将其分发到 CTS 运行
- 系统启动后的前 5 分钟不会调度,以允许其他进程先运行
B. CTS 职责
- 通过 XPC 接收 DAS 的调度指令
- 实际启动和管理进程执行
- 处理进程完成后的状态反馈
3. 调度日志分析
A. DAS 决策阶段
38.738 DAS 0:com.apple.backupd-auto:2052A3, Decision: CP Score: 0.949374
38.738 DAS '0:com.apple.backupd-auto:2052A3' CurrentScore: 0.949374, ThresholdScore: 0.068531 DecisionToRun:1
38.762 DAS REQUESTING START: 0:com.apple.backupd-auto:2052A3B. CTS 分发阶段
38.762 CTS-XPC DAS told us to run com.apple.backupd-auto (0xb671bcc80)
38.844 CTS-XPC Initiating: com.apple.backupd-auto (0xb671bcc80)
38.846 CTS-XPC _xpc_activity_dispatch: beginning dispatch, activity name com.apple.backupd-auto, seqno 0
38.846 CTS-XPC _xpc_activity_begin_running: com.apple.backupd-auto (0x7a9014280) seqno: 0.
38.878 CTS-XPC Running (PID 537): com.apple.backupd-auto (0xb671bcc80)
38.879 DAS STARTING <_DASActivity: "0:com.apple.backupd-auto:2052A3", Utility, 60s, [1/19/26, 8:50:43 PM - 1/19/26, 9:10:43 PM], Started at 1/19/26, 9:10:38 PM, Group: com.apple.dasd.default, PID: 537>C. Time Machine 响应
由于在禁用 Time Machine 的虚拟机中运行:
38.879 Time Machine Skipping scheduled Time Machine backup: Automatic backups disabledD. 完成反馈
38.879 CTS-XPC _xpc_activity_set_state: send new state to CTS: com.apple.backupd-auto (0x7a9014280), 5
38.880 CTS-XPC Completed: com.apple.backupd-auto (0xb671bcc80)E. 重新调度
38.881 CTS-XPC Rescheduling: com.apple.backupd-auto (0xb671bcc80)
38.881 DAS SUBMITTING: 0:com.apple.backupd-auto:B293AE
38.882 DAS Submitted: 0:com.apple.backupd-auto:B293AE at priority 30 with interval 1800 (Mon Jan 19 21:25:38 2026 - Mon Jan 19 21:40:43 2026)4. 调度频率分析
即使 Time Machine 被禁用,DAS-CTS 仍会以大约 1 小时的间隔继续调度自动运行。
整个调度序列在 0.144 秒内完成,使用轻量级进程间通信,资源占用可忽略不计,且仅每小时重复一次。
四、系统架构限制
1. SSV(签名系统卷)
A. 不可修改性
- 所有 LaunchDaemons 和 LaunchAgents 配置文件位于 SSV 中
- 用户无法编辑或修改这些配置
- 无法通过传统方式禁用系统进程
B. 安全设计
SSV 是 Apple 的安全设计,防止恶意软件修改系统文件,但也限制了用户对系统的控制能力。
2. DAS-CTS 隔离性
A. 用户控制隔离
DAS-CTS 系统与所有用户控制隔离,这意味着用户无法通过系统设置或命令行工具来:
- 阻止进程调度
- 修改调度频率
- 禁用特定活动
B. 资源占用特点
虽然频繁调度,但:
- 使用轻量级 XPC 通信
- 单次执行时间极短(0.144 秒)
- 资源占用可忽略不计
3. 系统设计理念
graph LR
subgraph 用户层
A[系统设置]
B[命令行工具]
end
subgraph 控制层
C[launchd]
D[用户可控配置]
end
subgraph 保护层
E[SSV 签名系统卷]
F[DAS-CTS 调度系统]
end
subgraph 执行层
G[系统进程]
H[后台守护进程]
end
A -->|可控制| D
B -->|可控制| D
D --> C
C --> G
E -->|保护| F
F -->|自动调度| H
style E fill:#f99,stroke:#333,stroke-width:3px
style F fill:#f99,stroke:#333,stroke-width:3pxA. 设计哲学
macOS 从来就不是传统的 Unix 系统,而是一个:
- 闭源的专有操作系统
- 为数百万消费者和普通用户设计
- 通过系统设置暴露控制,而非配置文件或属性列表
B. 历史对比
经典 Mac OS 更加模块化,用户可以选择性安装组件,如 Mac OS 9.1 所示。
但在 SSV 时代,选择从一开始就更加有限,真正的选择仅限于:
- AI 功能使用的 cryptexes
- x86 代码翻译器 Rosetta 2(后者是临时的,可能在明年移除)
4. Unix 认证争议
A. 技术合规性
macOS 通过了 Open Group 的 Unix 认证,但这仅意味着技术合规性。
B. 实际使用差异
管理与 macOS 相比,熟悉 HP-UX 或 AIX 的管理员在面对 macOS Tahoe 时会像鱼离水一样不适应。
C. 准确定义
更准确的描述是:macOS 是「基于 Unix」的操作系统,就像它也是「基于 NeXTSTEP」、「基于 Mach」和「基于经典 Mac OS」的。但它既不是 NeXTSTEP、Mach,也不是经典 Mac OS。
五、精简可行性结论
1. 技术障碍
A. SSV 限制
签名系统卷阻止用户修改系统进程配置,这是最主要的障碍。
B. DAS-CTS 隔离
集中式任务调度系统与用户控制完全隔离,无法干预其调度行为。
C. 进程复杂性
- 500+ 进程需要逐一研究
- 进程间相互关系复杂
- 系统持续更新变化
2. 实际影响分析
A. 资源占用
虽然后台进程众多,但:
- 大多数在 Apple silicon Mac 上运行在能效核(E cores)上
- 使用轻量级通信机制
- 单个进程资源占用极小
B. 用户感知
对普通用户而言,这些后台进程:
- 不会影响系统响应速度
- 不会显著影响电池续航
- 系统会自动管理核心频率和资源分配
3. 社区尝试
A. 第三方方案
有用户创建了如「Tahoe Disenshittify」之类的脚本,试图禁用大量 macOS 功能和后台守护进程。
B. 副作用警告
这类脚本会:
- 破坏 iCloud/桌面和文档同步
- 降级 Spotlight 搜索
- 部分或完全禁用 App Store/iCloud/Push/Continuity 功能
C. 作者观点
如果用户需要禁用这么多系统功能,应该考虑使用其他操作系统。
4. 最终结论
无论喜欢与否,现代 macOS 的设计和实现都没有给用户太多选择来控制其运行的进程。架构特性包括:
- 签名系统卷(SSV)
- DAS-CTS 调度系统
这些特性阻止用户将系统进程削减到任何显著程度。
A. 现实建议
对于希望精简系统的用户:
- 购买尽可能多的统一内存,这是最实用的解决方案
- 如果需要更多控制,考虑使用其他操作系统
- 接受 macOS 的设计理念,专注于使用而非定制
B. 未来展望
随着 Rosetta 2 可能明年移除,以及 Apple 对服务器导向芯片的开发,可能会有更多变化,但 SSV 和 DAS-CTS 的核心架构不太可能改变。