线程、进程基础知识
进程:具有一定独立功能的程序在一个数据集合一次动态执行的过程。
-
是操作系统对处于执行状态的程序的抽象 - 是程序的执行,是暂时的(一个状态变化的过程)
-
由程序、数据、进程控制块组成
-
包含了一个正在运行的程序的所有信息
- 动态性:可动态地创建、结束进程
- 并发性:可被独立调度,占用处理机处理
- 独立性:不同进程的工作不互相影响
- 制约性:因访问共享数据、资源或进程间同步而产生制约
-
进程控制块(PCB):控制、管理进程运行所需的信息集合
- 是进程存在的唯一标志,在操作系统中,每个进程有一个对应的PCB
- 在进程创建时生成,进程终止时回收
- 通过对PCB的组织管理来实现对进程的组织管理
- 调度和状态信息:调度进程和处理机使用情况
- 进程间通信信息:进程间通信相关的标识
- 存储管理信息:指向进程映像存储空间数据结构
- 进程所用资源:进程使用的系统资源
- 有关数据结构连接信息:PCB相关的进程队列
- 同一状态的进程的PCB成一链表,各状态进程形成不同的链表。就绪链表、阻塞链表...
- 同一状态的进程归入一个索引表(索引指向PCB),各状态的进行形成不同的索引表。就绪索引表、阻塞索引表...
-
三状态进程模型
- 就绪状态
- 等待状态
- 运行状态
-
挂起进程模型
- 处于挂起状态的进程映像在磁盘上,目的是减少进程占用内存
- 等待挂起状态:进程在外存,等待某事件的出现
- 就绪挂起状态:进程在外存,进入内存即可运行。(内存不够、优先级低...)
- 挂起:把一个进程从内存转到外存
- 等待->等待挂起:没有进程处于就绪状态/就绪进程要求更多的内存
- 就绪->就绪挂起:有高优先级进程,低优先级进程挂起以保证有足够的内存空间
- 运行->就绪挂起:有高优先级等待挂起进程因事件出现进入就绪挂起状态
- 外存中的状态转换:
- 等待挂起 -> 就绪挂起(相关事件出现)
- 激活:一个进程从外存转到内存
- 就绪挂起到就绪:没有就绪进程/挂起就绪进程优先级高于就绪进程
- 等待挂起到等待:有足够的内存,等待挂起优先级较高
-
状态队列:操作系统维护的一组队列,表示系统中所有进程的当前状态(就绪队列、各种等待队列)
线程:是进程的一部分,描述指令流的执行状态。是进程中指令执行流的最小单元,CPU调度的基本单位。
-
进程的资源分配角色:一组相关资源 --> 地址空间(代码段,数据段),打开的文件等各种资源
-
线程的处理机调度角色:线程描述在进程环境中指令流执行状态
-
线程 = 进程 - 共享资源
-
优点
- 一个进程中可同时存在多个线程
- 各线程间可并发地执行
- 各线程间可共享地址空间、文件等资源
-
确定
- 一个线程的崩溃会导致所属进程的所有线程崩溃
-
与进程比较
- 进程是资源分配单位,线程是CPU调度单位
- 进程拥有一个完整的资源平台,线程只独享指令流执行的必要资源:寄存器、栈等
- 线程具有就绪、等待、运行三种基本状态和状态间转换
- 线程能减少并发执行的时间、空间开销
- 线程创建、终止的时间比进程短
- 同一进程间线程切换时间比进程短
- 同一进程的各线程共享文件、内存资源可不通过内核直接进行通信
-
实现方式
-
用户线程:在用户空间实现(通过函数库)
-
由一组用户级的线程库函数来完成现成的管理(线程的创建、终止、同步、调度等)
-
特征:
-
不依赖操作系统的内核
- 内核不了解用户线程的存在
- 可用于不支持线程的多进程操作系统
-
在用户空间实现的线程机制
- 每个进程有私有的线程控制块(TCB)列表
- TCB由线程库函数维护
-
同一进程的用户线程切换速度快:无需用户态/核心态切换
-
允许每个进程有自己的线程调度算法
-
-
缺点:
- 线程发起系统调用而阻塞时,整个进程进入等待
- 不支持基于线程的处理机抢占:除非当前运行线程主动放弃,所在进程的其它线程无法抢占CPU
-
-
内核线程:在内核中实现
- 进程由内核通过系统调用实现线程机制,由内核完成线程的创建、终止、管理。
- 特征:
- 由内核维护PCB/TCB
- 线程执行系统调用而被阻塞不影响其他线程
- 线程创建、终止、切换相对较大:通过系统调用/内核函数,在内核实现
- 以线程为单位进行CPU时间分配:多线程的进程可获得更多CPU时间
-
轻权进程(LWP):结合前两者的优点(轻量级进程)-- 过于复杂,未完全实现预期效果
- 内核支持的用户线程。一个进程可以有一个或多个轻量级进程,每个轻权进程由一个单独的内核线程来支持。
-
轻量级线程:在内核中实现,支持用户线程
-