CANN/runtime条件模型示例
2026/6/15 22:00:58
一、线程(进程管理部分)
定义:线程是进程内的独立调度单位,是CPU调度的基本单元。它只拥有运行所必需的少量资源(如程序计数器、寄存器、栈等),而与同属一个进程的其他线程共享该进程的代码段、数据段、打开的文件和系统资源。
特点:
二、存储管理
核心对象:内存,尤其是主存(RAM),是操作系统必须高效管理的核心资源之一。
管理目标:
具体管理方式:
单一连续区管理:
分区存储管理:
| 对比维度 | 进程(Process) | 线程(Thread) |
|---|---|---|
| 定义 | 操作系统资源分配的基本单位,是程序的一次执行过程 | 进程内的执行单元,是CPU调度的基本单位 |
| 资源拥有 | 拥有独立的地址空间、文件描述符、信号处理、环境变量等系统资源 | 不拥有系统资源,仅拥有运行所需的栈、寄存器、程序计数器等少量资源 |
| 地址空间 | 每个进程有自己独立的虚拟地址空间,相互隔离 | 同一进程内的线程共享该进程的地址空间和全局数据 |
| 通信方式 | 进程间通信(IPC)复杂,需借助管道、消息队列、共享内存等机制 | 线程间可直接通过共享变量通信,更高效但需同步控制 |
| 创建/销毁开销 | 较大,涉及内存映射、资源分配等操作 | 小,无需创建新地址空间,只需分配栈和线程控制块 |
| 切换开销 | 高,需保存和恢复整个地址空间、页表、寄存器等 | 低,仅需保存/恢复寄存器状态和栈信息,无需切换地址空间 |
| 独立性 | 进程之间相互独立,一个崩溃不影响其他进程 | 同一进程内某一线程崩溃可能导致整个进程终止 |
| 安全性 | 高,地址空间隔离提供天然保护 | 相对较低,共享数据易受竞争条件影响 |
为什么线程切换比进程切换更快?
线程切换快的主要原因在于资源共享程度高:
无需切换地址空间:
同一进程内的线程共享虚拟地址空间和页表,因此在切换时不需要刷新TLB(转换检测缓冲区)或切换页表基址寄存器(如CR3),避免了昂贵的内存管理单元(MMU)操作。
上下文更小:
线程切换只需保存和恢复少量寄存器内容(如程序计数器、栈指针、通用寄存器)以及线程栈的信息;而进程切换还需保存整个用户/内核态上下文、内存映射、打开文件列表等。
无需资源重新分配:
线程共享进程的文件、信号、信号量等资源,切换时不涉及资源归属变更。
缓存友好性更高:
由于共享内存空间,线程切换后仍能有效利用CPU缓存中的数据,减少缓存未命中。
综上,线程切换本质上是“轻量级”任务切换,适用于需要高并发、快速响应的应用场景(如服务器、GUI程序等)。