线程的状态

所谓状态是指线程当前正在干什么和它能干什么
几个基本状态:
就绪状态
运行状态
等待状态(或阻塞状态)

几点说明

线程没有挂起操作和挂起状态;
 线程不是资源的拥有者,资源属于进程,所以线程不应有决定整个进程或自己从主存撤出的权力。
进程中可能有多个线程,当其中一个线程在执行中成为阻塞状态时,不阻塞其他
线程,该进程中其他线程仍然可以参与调度运行;
对于多线程进程中的进程状态,可以只划分为活动(可运行)状态和非活动(不
可运行)状态。

线程的生命周期

线程的状态插图

线程的描述

线程状态(就绪、运行、阻塞等);
当线程不运行时,被保存的现场信息;
  程序计数器、程序状态字、通用寄存器、堆栈指针
一个执行堆栈;
存放每个线程的局部变量的主存区;
访问被同一进程中所有线程共享的该进程的主存和其他资源。
线程控制块TCB——描述和记录其属性和调度所需的数据,是线程存在的标志;
进程对象和线程对象

进程对象属性

进程ID——系统中进程的唯一标识
存取令牌——包含该进程所对应的已登录用户的安全信息的对象
基本优先级——该进程的线程的基线执行优先级
默认处理器族——进程的线程所能运行的默认处理器族
配额限制——一个用户进程所能使用的分页和非分页的系统主存,页面调度文件空间和处理器时间的最大数量
执行时间——进程的所有线程的执行时间总量
I/O计数器——记录其所有线程所执行的I/O操作数和种类的变量
VM操作计数器——记录其所有线程所进行的虚拟存储操作数量和种类的变量
异常情况/调试端口——进程间通信的信道
退出状态——进程终止原因

线程对象属性

线程ID——当线程调用一个服务时,对该线程的唯一标识
线程描述表(context)——定义线程执行状态数据,如程序计数器、程序状态字的内容和通用寄存器、堆栈指针等
动态优先级——在给出时刻的线程的执行优先级
基本优先级——线程动态优先级的最低限
线程处理器族——线程可以运行的处理器集合
线程执行时间——线程在用户态和内核态已执行时间的累计量
报警信号状态——指示线程是否执行在异步过程调用的标志
挂起计数——线程的执行没有被恢复的次数
模仿令牌——允许线程在其他进程中执行操作的临时性的访问令牌
终止端口——当线程终止时,发送给进程管理程序一个消息的进程间的通信通道
线程出口状态——线程终止的原因

线程的管理(与进程类似)

也用链指针将TCB或线程对象按它们所处的状态链接成相应的线程队列来加以管理;
操作系统的进程管理程序为某用户应用程序创建进程时,同时为该进程创建第一个线程;
以后在线程的运行过程中,线程可以在需要的时候创建所需的线程;
线程间不提供父子关系的支持。

线程控制原语

创建线程原语:为线程得到一个TCB或线程对象,并初始化线程ID,线程描述表(程序计数器PC、程序状态字PSW、通用寄存器、堆栈指针等)和其他有关项,然后进入相应就绪队列。
撤消线程原语:撤消线程TCB或线程对象、线程堆栈和描述表。
阻塞或等待原语
挂起一个线程
恢复(解挂)一个线程
改变优先数

基于线程观点的操作系统分类

单进程和单线程系统——只有一个进程,每个进程中只有一个线程,如MS-DOS;
多进程和单线程系统——有多个进程,但每个进程中只有一个线程,如传统意义上的UNIX系统;
单进程和多线程系统——只有一个进程,但每个进程有多个线程;
多进程和多线程系统——有多个进程,每个进程中又有多个线程,是当前应用最广泛的系统类型。

线程的概念

线程的引入

提高系统的并行性
 硬件方面:流水线计算机、数据流计算机、并行处理器、流水存储器、多体交叉及多端口存储器等
 操作系统方面:中断、通道、多道程序设计技术、并发程序技术
仅使用进程来解决并行性问题的缺点
 经常性进程开关,系统开销很大(切换时资源浪费)
  与进程运行有关的表格要改写
  进程的地址空间要进行转换为新被调度的进程地址空间
  两次模式开关的开销(用户模式-内核模式-用户模式)

进程再操作系统中担任的角色

进程是拥有自己资源的单元体
 虚拟地址空间
 控制其他为进程运行所需要的I/0资源
进程是被调度分派再处理器上运行的基本单位

第一个要点是关于拥有资源的主权(由进程来完成)
第二个要点是关于应用程序的执行(由线程来完成)

线程的引入

传统的进程概念由两个严重的局限性
 许多应用想并发执行彼此间独立的任务,但又必须要共享一个公告的地址空间和其他资源,将这类应用中独立的任务串行化,效率很低
 传统的进程不能很好的利用多处理器系统
(传统的单线程进程即使分配了多个处理器单元,也只能穿行的执行)
(多线程可以并行的执行)

线程的模型

线程的概念插图
(a)三个进程,每个拥有一个线程 (b)一个进程拥有三个线程
线程的概念插图1
每个线程又自己的栈

多线程机制的优点

在进程内创建多线程,可以提高系统的并行处理能力。
线程机制可显著提高程序执行的有效性,也可方便用户编程;
不但适用于多机系统(尤其是对称式多机系统),而且对大多数单CPU系统也同样有好处。

线程(thread)的概念

进程内的一个执行单元
进程内的一个可调度实体
线程是程序(或进程)中相对独立的一个控制流序列
线程是执行的上下文,即执行的现场数据和其他调度所需要的信息

线程是进程内一个相对的、可调度的执行单元
有些系统把线程称为轻质进程(lightweight process)

线程的性质

线程是进程内一个相对独立的可执行单元;
线程是操作系统中的基本调度单元,因此线程中应包含有调度所需要的必要信息;
每个进程在创建时,至少需要同时为该进程创建一个线程,即进程中至少要有一个或一个以上线程,否则该进程无法被调度执行;
需要时,线程可以创建其他线程;
进程是被分给并拥有资源的基本单元,同一进程内的多个线程共享该进程的资源,但线程并不拥有资源,只是使用它们;
由于共享资源(数据和文件),所以线程间需要通信和同步机制;
线程有生命期,有诞生和死亡,在生命期中有状态的变化。

多线程机制

一个进程可以有多个线程,这些线程共享该进程资源;
这些线程驻留在相同的地址空间,共享数据和文件;
如果其中的一个线程修改了一个数据项,其他线程可以了解和使用此结果数据;
一个线程打开并读一个文件时,同一进程中的其他线程也可同时读此文件。

多线程机制的优点

首先用于创建和撤消线程的开销比创建和撤消进程的系统开销(CPU时间)要少得多(比如不需要建立它的地址空间和所需资源等);
CPU在线程之间开关时的开销也远比在进程之间开关的开销小;
线程机制也增加了通讯的有效性(无须内核参与);
方便和简化了用户的程序结构工作。