操作系统中的线程

一、多线程技术概述
【单线程结构进程】

  • 传统进程是单线程结构进程
    在这里插入图片描述

【单线程结构进程的问题】

  • 单线程结构进程在并发程序设计上存在的问题
    #进程切换开销大
    #进程通信开销大
    #限制了进程并发的粒度
    #降低了并行计算的效率

【解决问题的思路】

  • 把进程的两项功能,即“独立分配资源”与“被调度分派执行”分离开来
  • 进程作为系统资源分配和保护的独立单位,不需要频繁地切换;
  • 线程作为系统调度和分派的基本单位,能轻装运行,会被频繁地调度和切换
  • 线程的出现会减少进程并发执行所付出的时空开销,使得并发粒度更细、并发性更好

【多线程结构进程】
在这里插入图片描述

【多线程环境下进程的概念】

  • 在多线程环境中,进程是操作系统中进行保护和资源分配的独立单位
    #用来容纳进程映像的虚拟地址空间
    #对进程、文件和设备的存取保护机制

【多线程环境下线程的概念】

  • 线程是进程的一条执行路径,是调度的基本单位,同一个进程中的所有线程共享进程获得的主存空间和资源。它具有:
    #线程执行状态
    #受保护的线程上下文,当线程不运行时,用于存储现场信息
    #独立的程序指令计数器
    #执行堆栈
    #容纳局部变量的静态存储器

【多线程环境下线程的状态与调度】

  • 线程状态有运行、就绪和睡眠,无挂起
  • 与线程状态变化有关的线程操作有:
    #孵化、封锁、活化、剥夺、指派、结束
  • OS感知线程环境下
    #处理器调度对象是线程
    #进程没有三状态(或者说只有挂起状态)
  • OS不感知线程环境下
    #处理器调度对象仍是进程
    #用户空间中的用户调度程序调度线程

【并发多线程程序设计的优点】

  • 快速线程切换
  • 减少(系统管理开销)
  • (线程)通信易于实现
  • 并行程度提高
  • 节省内存空间

【多线程技术的应用】

  • 前台和后台工作
  • C/S应用模式
  • 加快执行速度
  • 设计用户接口

二、KLT与ULT
【内核级线程KLT,Kernel-Level Threads】

  • 线程管理的所有工作由OS内核来做
  • OS提供了一个应用程序设计接口API,供开发者使用KLT
  • OS直接调度KLT
    在这里插入图片描述

【内核级线程的特点】

  • 进程中的一个线程被阻塞了,内核能调度同一进程的其他线程占有处理器运行
  • 多处理器环境中,内核能同时调度同一进程中多个线程并行执行
  • 内核资深也可用多线程技术实现,能提高操作系统的运行速度和效率
  • 应用程序线程在用户态运行,线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要模式切换,系统开销较大。

【用户级线程ULT,User-Level Threads】

  • 用户空间运行的线程库,提供多线程应用程序的开发和运行支撑环境
  • 任何应用程序均需通过线程库进行程序设计,再与线程库连接后运行
  • 线程管理的所有工作都由应用程序完成,内核没有意识到线程的存在
    在这里插入图片描述

【用户级线程的特点】

  • 所有线程管理数据结构均在进程的用户空间中,线程切换不需要内核模式,能节省模式切换开销和内核的宝贵资源
  • 允许进程按应用特定需要选择调度算法,甚至根据应用需求裁剪调度算法
  • 能运行在任何OS上,内核在支持ULT方面不需要做任何工作
  • 不能利用多处理器的优点,OS调度进程,仅有一个ULT能执行
  • 一个ULT的阻塞,将引起整个进程的阻塞

【Jacketing 技术】

  • 把阻塞式系统调用改造成非阻塞式的
  • 当线程陷入系统调用时,执行jacketing程序
  • 由jacketing程序来检查资源使用情况,以决定是否执行进程切换或传递控制权给另一个线程

【用户级线程vs.内核级线程】
在这里插入图片描述

  • ULT(用户级)适用于解决逻辑并行性问题
  • KLT(内核级)适用于解决物理并行性问题

三、多线程实现的混合策略
【多线程实现的混合式策略】

  • 线程创建时完全在用户空间做的
  • 单应用的多个ULT可以映射成一些KLT,通过调整KLT数目,可以达到较好的并行效果
    在这里插入图片描述

【多线程实现混合式策略的特点】

  • 组合用户级线程/内核级线程设施
  • 线程创建完全在用户空间中完成,线程的调度和同步也再应用程序中进行
  • 一个应用中的多个用户级线程被映射到一些(小于等于用户级线程数目)内核级线程上
  • 程序员可以针对特定应用和机器调节内核级线程的数目,以达到整体最佳效果
  • 该方法将会结合纯粹用户级线程方法和内核级线程方法的优点,同时减少它们的缺点

【线程混合式策略下的线程状态】

  • KLT三态,系统调度负责
    在这里插入图片描述
  • ULT三态,用户调度负责
    在这里插入图片描述
  • 活跃态的ULT代表绑定KLT的三态
    在这里插入图片描述
  • 活跃态ULT运行时可激活用户调度
  • 非阻塞系统调度可使用jacketing启动用户调度,调整活跃态ULT

【多线程实现的各种策略总结】
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值