首页计算机计算机软件操作系统 04 第四章 多线程.pptx

04 第四章 多线程.pptx

页数:28页文件大小:98.9 KB来源: 操作系统ppt课件

本课件讲解操作系统中的线程机制。先说明进程在操作系统中的作用及其在并发与多处理器利用上的局限,引出引入线程的原因;随后给出线程的定义、特性与性质,比较线程与进程的异同;接着介绍线程状态、线程控制原语、线程组以及单线程与多线程进程模型;最后系统讲解用户级线程、核心级线程及两者结合的实现方式与各自优缺点。

第四章多线程章节页,指出线程机制重要程度不亚于进程且适用于多机与单CPU系统
进程在操作系统中的作用页,说明进程是拥有资源的基本单元与被调度运行的单元体
进程局限性页,指出传统进程难以支持共享地址空间的并发任务,也不能很好利用多处理器
查看本课件的文字版(共 28 页,供检索与复制)

第1页:第四章 多线程

第四章 多线程(thread):线程是近年来操作系统领域出现的一个非常重要的机制和技术,其重要程度不亚于进程。线程机制对提高程序执行有效性的效果显著,而且也方便了用户结构和编程。不但适用于多机系统,而且对大多数的单 CPU 的个人计算机也同样带来好处,当代操作系统都支持线程。

第2页:进程在操作系统中的作用

进程在操作系统中的作用

  • 进程是拥有自己资源的基本单元
  • 进程是被调度到处理机上运行的单元体

第3页:进程的局限性

进程的局限性

  • 许多应用想并发执行彼此间独立的任务,但又必须要共享一个公共的地址空间和其他资源,传统的进程概念对并行进程本身难以支持
  • 传统的进程不能很好的利用多处理器,因为一个进程在某个时刻只能使用一个处理器

第4页:引入线程的原因

在操作系统中,进程的引入提高了计算机资源的利用效率。但在进一步提高进程的并发性时,人们发现进程切换开销占的比重越来越大,同时进程间通信的效率也受到限制。线程的引入正是为了简化进程间的通信,以小的开销来提高进程内的并发程度。

第5页:引入多线程技术的重要性

引入多线程技术的重要性

  • 并行技术发展的需要
  • 网络技术发展的需要
  • 软件技术发展的需要
  • 并发程序设计的需要

第6页:线程的概念

线程是指进程中的一条执行路径,是系统进行处理器调度的基本单位,同一个进程中的所有线程共享进程获得的主存空间和资源。

线程具有

  • 一个线程执行状态
  • 有一个受保护的线程上下文,当线程不运行时用于存储现场信息
  • 一个独立的程序指令计数器
  • 一个执行堆栈
  • 一个容纳局部变量的静态存储器

第7页:对线程的不同理解

对线程的不同理解

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

第8页:线程的特性

并行性
同一进程的多个线程可在一个或多个处理器上并发或并行运行
共享性
同一个进程中的所有线程共享进程获得的主存空间和一切资源
动态性
线程也是程序在相应数据集上的一次执行,由创建而产生,至撤销而消亡,有其生命周期

第9页:线程的性质

线程的性质

  • 线程是进程内一个相对独立的可执行单元
  • 线程是操作系统中的基本的调度单元
  • 进程中至少要有一个或一个以上的线程
  • 线程可以创建其他线程
  • 进程是被分给并拥有资源的基本单元,同一进程中的线程共享资源,但并不拥有资源,只是使用资源
  • 由于共享资源,线程间需要通信和同步机制
  • 线程有生命期,有诞生和死亡

第10页:线程的好处

线程的好处

  • 创建和撤销线程的开销比创建和撤销进程小:如创建进程需要建立 PCB 并初始化、加入进程队列、申请内存空间以存放代码和数据、列出资源清单等,而建立线程只需建立线程控制表并将其加入线程队列
  • 两个线程的切换(开关)花费时间少
  • 通讯效率比较高,因为同一进程内的线程共享内存和文件,因此它们之间相互通信无须调用内核
  • 适合多处理机系统

第11页:线程的应用

线程的应用

  • 前台和后台工作
  • 异步处理工作
  • 加快执行速度
  • 组织复杂工作
  • 多用户服务

第12页:线程的状态

线程的状态

就绪状态
线程已具备执行的条件,等待调度程序分配给一个 CPU 运行
运行状态
线程正在 CPU 上运行
等待状态
线程正等待某事件发生

第13页:进程与线程的比较

进程与线程的比较

  • 进程中有挂起操作,线程不拥有资源,没有权力决定进程或线程自己从主存撤出,挂起只是进程一级的概念,线程没有挂起状态
  • 进程中可能有多个线程,一个线程阻塞并不影响整个进程,进程中的其他线程仍然可以参与调度运行

第14页:线程控制原语

线程控制原语

  • 创建线程原语
  • 撤消线程原语
  • 阻塞或等待原语
  • 挂起一个线程(注意:与挂起一个进程有什么不同?)
  • 恢复(或解除挂起)一个线程
  • 改变优先数原语

第15页:线程组(thread group)

线程组(thread group):为方便地管理线程,引入线程组。

  • 每个线程属于某个线程组
  • 每个线程创建时,用户可以显式的说明为它创建一个新的线程组;也可以由系统自动把该线程归入创建该线程的线程所在的线程组
  • 线程组是多个线程的集合,系统将它们归入一个单独的对象,统一加以管理
  • 可为线程组设置不同的特性和保密安全方法
  • 一个线程在已被创建后,不能更改移入其他线程组

第16页:单线程进程模型

单线程进程(模型)示意图:本页以图示方式展示单线程进程由用户地址空间、进程控制块、用户堆栈、内核堆栈构成,并标明管理者与执行序列。

第17页:多线程进程模型

多线程进程(模型)示意图:本页以图示方式展示多线程进程中各线程分别拥有线程控制块、系统堆栈与用户堆栈,并共享进程的用户地址空间与进程控制块。

第18页:基于线程的操作系统分类

基于线程的操作系统分类

单进程和单线程系统
只有一个进程和一个线程,如 MS-DOS
多进程和单线程系统
有多个进程,每个进程只有一个线程,如 UNIX
单进程和多线程系统
只有一个进程,每个进程有多个线程,如 Java Run-time System
多进程和多线程系统
有多个进程,每个进程又有多个线程,如 WINDOWS NT

第19页:线程的实现机制

线程的实现机制

  • 用户级线程
  • 核心级线程
  • 两者结合方法

第20页:用户级线程(ULT)

用户级线程(User Level Thread,ULT)

  • ULT 是指由用户应用程序建立的线程
  • 由应用程序完成 ULT 的调度执行和管理(注意:不是由操作系统完成,为什么?操作系统本身不是基于多线程的,如 MS-DOS、UNIX)
  • 核心不知道线程的存在
  • 线程切换不需要核心态特权
  • 调度是由应用程序特性而定

第21页:线程库(Threads Library)

Threads Library 是一个基于多线程的用户应用程序开发环境和运行环境:

  • 创建、撤消线程
  • 在线程之间传递消息和数据
  • 调度线程执行
  • 保护和恢复线程上下文

第22页:对用户级线程的核心活动

对用户级线程的核心活动

  • 核心不知道线程的活动,但仍然管理线程的进程的活动
  • 当线程调用系统调用时(如线程 A 申请 I/O 或其他资源),整个进程阻塞,但对线程库来说其他线程仍然是运行状态,即线程状态是与进程状态独立的
  • 当然,在基于进程的操作系统(MS-DOS、UNIX)中,调度是以进程为单位的,实际上其他线程也都被阻塞了

第23页:用户级线程的优点

用户级线程的优点

  • 线程切换不调用核心
  • 调度是应用程序特定的:可以选择最好的算法
  • ULT 可运行在任何操作系统上(只需要线程库)

第24页:用户级线程的缺点

用户级线程的缺点

  • 大多数系统调用是阻塞的,因此核心阻塞进程,故进程中所有线程将被阻塞
  • 核心只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上

第25页:核心级线程(KLT)

核心级线程(KLT)

  • 所有线程管理由核心完成
  • 没有线程库,但对核心线程工具提供 API
  • 核心维护进程和线程的上下文
  • 线程之间的切换需要核心支持
  • 以线程为基础进行调度
  • 例子:Windows NT,OS/2

第26页:核心级线程的优点及缺点

核心级线程的优点及缺点

优点
对多处理器,核心可以同时调度同一进程的多个线程;阻塞是在线程一级完成;核心例程是多线程的
缺点
在同一进程内的线程切换需调用内核,导致速度下降

第27页:ULT和KLT结合方法

ULT 和 KLT 结合方法:

  • 线程创建在用户空间完成
  • 大量线程调度和同步在用户空间完成
  • 程序员可以调整 KLT 的数量
  • 可以取两者中最好的
  • 例子:Solaris(改进型的 UNIX)

第28页:本章结束致谢页

Thanks!

顶部目录