操作系统 进程与线程
一句话
操作系统 进程与线程:4 个分支(Linux底层统一task、进程和线程的区别、程序、进程与CPU关系、何时用多进程多线程),共 215 个知识点,每个知识点都能翻面变成记忆卡。
知识点大纲
Linux底层统一task
进程和线程在内核中均以task_struct表示,调度机制相同。
Linux内核统一调度模型
- 底层统一为task:包含:底层统一为task、内核不区分进程与线程。
- 创建统一调clone:包含:创建统一调clone、fork转为clone调用、pthread_create调clone、clone系统调用创建进程、clone创建线程需指定标志位、fork与clone…
- task_struct为调度单元:本组讲解 task_struct 在 Linux 内核中作为统一调度单元的角色及其结构意义。
- clone标志位定语义:本组讲义介绍 Linux 中 clone 系统调用如何通过标志位区分进程与线程语义,以及共享资源在内核中的底层实现机制。
- 进程内存独立:本组讲义说明进程在 Linux 中作为资源分配基本单位的特性,涵盖其内存独立性、资源范围及管理职能定位。
- 线程共享虚拟内存:本组讲义说明线程在Linux内核中共享的虚拟内存空间、文件与信号相关资源,以及线程作为CPU调度基本单位的执行实体属性。
Linux调度统一性
本组讲义说明Linux内核如何统一实现进程与线程的底层抽象:二者均以task_struct结构体表示,调度逻辑一致,仅通过clone标志位区分行为。
- 线程组号即进程号:本组讲义说明Linux中线程组标识与进程号的关系:同一进程内的所有线程共享一个线程组号,该号码即主线程的进程号(PID),且线程创建依赖clone系统调用而非fork。
- 线程栈需手动分配:包含:线程栈需手动分配、栈顶地址传入clone、寄存器状态需保存恢复、程序计数器丢失致无法恢复、寄存器值被覆盖致数据错误。
- gettid获任务号:Linux中获取当前任务号(TID)需调用gettid系统调用。 该函数返回值为内核分配的唯一任务标识符(整数)。 打印结果为一个整数值,反映当前执行实体在内核中的唯一标识。
- getpid获进程ID:getpid() 系统调用返回的是当前 进程 ID (PID)。 在 Linux 线程实现中,通常 PID 等同于线程组标识符(TGID),即主线程的进程 ID。 该值在多线程进…
- 线程号即pthread地址:用户态获取的线程号(如 pthread_self() 返回值)是 pthread 结构体的地址 ,属于用户空间指针值。 该地址不等于内核中对应的 task_struct 地址,也…
- 创建进程用fork系统调用:创建新进程使用 fork() 系统调用,该调用最终进入内核执行系统调用处理路径。 fork() 在内核中通过 copy_process 等机制实现,传入特定 clone_flag…
进程和线程的区别
本组讲义阐述进程与线程在系统功能层面的根本差异。进程是操作系统进行 资源分配 的基本单位,拥有独立的内存空间和系统资源; 线程是操作系统进行 CPU调度 的基本单位,同一进程内的多个线程共享该进程的地址空间和大部分资源。二者共同构成程序执行的层次结构:进程提供隔离环境,线程实现并发执行。
进程线程本质辨析
本组讲义从底层机制出发辨析进程与线程的本质差异,包括执行上下文、资源视图、切换开销及故障影响范围等维度。
- 程序与进程关系:本组讲义说明程序、进程之间的静态与动态关系。程序是存储于硬盘的静态指令集合,进程是其在内存中加载并运行的动态实例。三者关系体现为:一个程序可生成多个进程,每个进程对应一个独立执行…
- 进程核心特性:本组讲义系统阐述进程所具备的核心属性,涵盖地址空间组织、通信方式、执行环境特征、健壮性表现及资源管理角色等方面。
- 线程核心特性:本组讲义介绍线程的八项核心特性:执行流单位、独享寄存器与栈、共享地址空间、并行最小单位、独立执行流资源、健壮性低、侧重并发性能、作为执行实体。
- 执行与资源视角:本组内容从执行与资源两个视角分析进程与线程的关系:包括CPU时间片调度对象、单核下线程的执行假象、多进程与多线程的协同模式、线程间共享的数据区域、多进程共享数据的高代价,以及多线…
- 线程崩溃影响整个进程:在C++中,一个线程发生 异常崩溃 可能导致整个进程终止,从而影响同一进程内的其他线程。这是因为线程共享进程的地址空间和资源,缺乏独立的错误隔离边界。
- 系统实现与联系:本组内容阐述进程与线程在系统实现层面的本质联系:进程是资源容器,线程是执行实体;Linux中二者统一由task_struct表示;区别维度涵盖资源独占性、调度单位、内存视图及错误…
进程与线程对比框架
本组内容围绕进程与线程的对比展开,涵盖资源归属、创建开销、隔离性、通信方式、适用场景等具体差异点。
- 进程与线程定义:本组内容定义进程与线程的基本概念:进程是程序的一次执行实例,拥有独立资源;线程是进程内部最小执行单元,共享进程资源。
- 资源与调度单位:包含:进程是资源分配单位、线程是CPU调度单位、进程创建即分配资源集合、线程控制块TCB、线程栈空间独立、进程与线程区别资源列表、进程与线程区别调度机制。
- 切换与开销对比:包含:进程与线程切换对比、进程与线程区别性能数据、进程与线程区别健壮性数据、创建线程开销更小。
- 隔离性与安全性:包含:进程间隔离性高、线程间易发数据竞争、多线程不安全性根源、多进程适用典型场景、多线程适用典型场景。
- 生命周期与依赖:本组讲义阐述进程与线程在生命周期层面的依存关系及执行模型差异。涵盖并发与并行的区别、进程结束对线程的影响、线程对进程的依附性等内容。
- 设计与应用原则:本组讲义阐述进程与线程在工程实践中的设计依据与应用方法,涵盖适用场景判断、混合架构设计、协同原则及决策导向等内容。
- 本质区别与类比:本组讲义阐述进程与线程在系统功能层面的根本差异。进程是操作系统进行资源分配的基本单位,拥有独立的内存空间和系统资源;线程是操作系统进行CPU调度的基本单位。
- 面试与考察本质:本组讲义聚焦面试中对进程与线程本质理解的考察方式,包括回答框架构建、核心区分点提炼及典型问题应对策略。
进程线程核心差异
本组讲义阐述进程与线程在系统功能层面的核心差异,涵盖资源归属、执行主体、切换行为、隔离特性及协作关系五个方面。
- 资源与执行单位:本组讲义说明操作系统将程序运行解耦为两个逻辑层面: 资源管理 由进程承担, 执行流调度 由线程承担。二者分工明确,共同支撑并发与隔离需求。
- 隔离性与共享性:本组讲义阐述进程与线程在数据可见性与错误影响范围上的根本差异:进程间内存空间相互隔离,线程间共享同一进程的内存空间。
- 切换开销对比:本组讲义对比进程与线程在上下文切换时的性能开销差异,核心在于是否需要切换地址空间。
- 本质与设计思想:包含:本质区别一句话、设计思想类比。
- 并发与响应性:包含:线程阻塞不阻塞CPU、多线程提升响应性。
程序、进程与CPU关系
本组讲程序、进程与CPU三者的基本关系。程序是静态的可执行文件,进程是该程序在内存中运行的动态实例,CPU通过频繁的上下文切换在多个进程间交替执行,从而实现宏观上的并发。
程序到进程的执行本质
本组讲程序转变为进程的内在机制。重点说明执行启动动作时发生的加载行为、内存分配及状态初始化过程。
- 程序到进程执行机制:本组厘清程序、进程、内存和CPU四者的结构性关联。涵盖从文件加载到地址空间建立,再到CPU调度执行的完整链条。
- 程序进程内存CPU本质:本组讲解程序、进程、内存与CPU之间的本质关系,聚焦静态代码如何通过上下文激活为动态执行实体。
并发执行的三粒度
- 进程线程基本概念:本组内容以微信、QQ、浏览器等日常软件为例,直观解释进程、线程、协程及上下文切换的基本概念与协作关系。
- 三类执行单元对比:本组内容对比进程、线程、协程三类执行单元及其上下文切换机制,涵盖共享与隔离特性、调度主体、资源开销及适用场景。
- 协程特性与定位
何时用多进程多线程
本组内容说明多进程与多线程的典型适用场景。多线程适用于 共享数据 且需 高并发响应 的任务;多进程适用于需要 强隔离性 和 高容错性 的场景。两者选择取决于数据共享需求与系统稳定性要求。
线程适用于共享数据并行
线程适用于需 共享同一份数据 并 并发执行多个任务 的场景。文档编辑器中,键盘响应、布局计算、磁盘保存三个任务需交替或同时运行。 它们操作的是 同一文档数据 ,因此通常处于 同一个进程内 。这种共享内存特性使线程间通信高效,适合高并发交互。
进程与线程是操作系统基本概念
进程与线程是 现代操作系统 中的两个基本概念。上层开发程序员,包括 Java开发 、 Go开发 和 C语言开发 人员,在实际工作中均会 涉及 这两个概念。 理解其定义与区别,是 操作系统环境下 程序设计与调试的基础能力。
常见问题
- 关于「创建统一调clone」,要记住什么?
- 包含:创建统一调clone、fork转为clone调用、pthread_create调clone、clone系统调用创建进程、clone创建线程需指定标志位、fork与clone均基于do_fork、区别关键在clone_flag。
- 关于「线程崩溃影响整个进程」,要记住什么?
- 在C++中,一个线程发生 异常崩溃 可能导致整个进程终止,从而影响同一进程内的其他线程。这是因为线程共享进程的地址空间和资源,缺乏独立的错误隔离边界。
- 关于「程序到进程执行机制」,要记住什么?
- 本组厘清程序、进程、内存和CPU四者的结构性关联。涵盖从文件加载到地址空间建立,再到CPU调度执行的完整链条。
- 关于「线程适用于共享数据并行」,要记住什么?
- 线程适用于需 共享同一份数据 并 并发执行多个任务 的场景。文档编辑器中,键盘响应、布局计算、磁盘保存三个任务需交替或同时运行。 它们操作的是 同一文档数据 ,因此通常处于 同一个进程内 。这种共享内存特性使线程间通信高效,适合高并发交互。
- 关于「线程栈需手动分配」,要记住什么?
- 包含:线程栈需手动分配、栈顶地址传入clone、寄存器状态需保存恢复、程序计数器丢失致无法恢复、寄存器值被覆盖致数据错误。
- 关于「资源与调度单位」,要记住什么?
- 包含:进程是资源分配单位、线程是CPU调度单位、进程创建即分配资源集合、线程控制块TCB、线程栈空间独立、进程与线程区别资源列表、进程与线程区别调度机制。
- 关于「进程线程基本概念」,要记住什么?
- 本组内容以微信、QQ、浏览器等日常软件为例,直观解释进程、线程、协程及上下文切换的基本概念与协作关系。
- 关于「进程与线程是操作系统基本概念」,要记住什么?
- 进程与线程是 现代操作系统 中的两个基本概念。上层开发程序员,包括 Java开发 、 Go开发 和 C语言开发 人员,在实际工作中均会 涉及 这两个概念。 理解其定义与区别,是 操作系统环境下 程序设计与调试的基础能力。
相关主题
内容由 AI 整理成导图,仅供复习参考,请以教材与官方资料为准。