线程

本文深入探讨了线程和进程的区别,指出线程是轻量级实体,拥有较低的调度和切换成本,提高了并发执行的效率。线程的状态包括执行、就绪和阻塞,而在多线程操作系统中,进程作为资源分配单位,包含多个线程。线程同步机制包括互斥锁和条件变量,用于控制资源的访问和线程的协作。此外,介绍了内核级线程和用户级线程的概念及其优缺点,以及如何通过运行时系统和轻型进程实现线程控制。
摘要由CSDN通过智能技术生成

线程的基本概念
1.线程的引入
在20世纪90年代后,多处理机系统得到迅速发展,所以提出了比进程更小的、能独立运行的基本单位----线程,以提高系统内程序并发执行的程度,改善0S的性能。
➢创建进程时,需要为它分配资源,建立PCB;
➢撤销进程时,需要回收资源,撤销PCB;
➢进程切换时,需要保留当前进程的CPU环境、设置新选中进程的CPU环境,代价较高。
由于进程在切换时,付出较大的时空开销,所以,在系统中所设置的进程数不宜过多,否则会影响系统的并发程度。
引入线程的目的是简化进程间的通信,以小的开销来提高进程内的并发程度。
2.线程与进程的比较
资源:进程是拥有资源的基本单位,线程只拥有必不可少的资源,如:线程状态、寄存器上下文和栈;
调度:由于线程基本不拥有资源,切换代价低,所以,线程作为调度和分派的基本单位。
并发:进程可以并发,一.个进程中的多个线程也可以并发。例如:一个文件服务进程可设置多个线程,当一个线程阻塞时,其它线程仍可提供服务。
开销:在系统中,线程的切换、同步、通信比进程的代价更低。
3.线程的属性
➢轻型实体。
➢独立调度和分派的基本单位。
➢可并发执行。
➢共享进程资源。
4.线程的状态
在操作系统中的每一个线程,都可以利用线程标识符和一组状态参数进行描述。
(1)状态参数
①寄存器状态
②堆栈
③线程运行状态
④优先级
⑤线程专有存储器
⑥信号屏蔽
(2)线程运行状态;
各线程之间也存在着共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。
①执行状态
②就绪状态
③阻塞状态
由于线程不拥有资源,所以无“挂起状态。
Windows NT的7种线程状态:
初始化状态(Initialized):线程创建过程中的线程状态;
就绪状态(Ready):进程已获得除处理机外的所需资源,等待执行。
备用状态(Standby):特定处理器的执行对象,系统中每个处理器上只能有一个处于备用状态的线程。
运行状态(Running):完成描述表切换,线程进入运行状态。
等待状态(Waiting):线程等待对象句柄,以同步它的执行。
转换状态(Transition):线程在准备执行而其内核堆栈处于外存时,线程进入转换状态;当其内核堆栈调回内存,线程进入就绪状态。
终止状态(Terminated):线程执行完就进入终止状态;如执行体有一指向线程对象的指针,可将线程对象重新初始化,并再次使用。
5.线程的创建和终止
在多线程0S环境下,应用程序在启动时,通常仅有一个线程在执行,称为“初始化线程”。它可以根据需要再去创建若干个线程。
终止线程的方式有两种:一种是在线程完成了自己的工作后退出;另一
种是线程在运行中出现错误、或由于某种原因而被其它线程强行终止。
6.多线程0S中的进程
多线程0S中的进程有以下属性:
(1)作为系统资源分配的单位。
(2) 可包括多个线程。
(3)进程不是一个可执行的实体。
在多线程0S中,进程是作为拥有系统资源的基本单位,通常的进程都包含多个线程并为它们提供资源,此时的进程就不再作为一个执行的实体。
所谓进程处于执行状态,实际上是该进程中的线程正在执行。
线程间的同步和通信
1.互斥锁(mutex)
在多线程0S中提供多种同步机制。互斥锁是一种比较简单的、用于实现进程间对资源互斥访问的机制。
互斥锁可以有两种状态,即开锁(unlock)和关锁(lock)状态
由于操作互斥锁的时间和空间开锁都较低,较适合于高频度使用的关键共享数据和程序段。
2.条件变量
许多情况下,只利用mutex实现互斥会引起死锁,所以,引入条件变量;每一个条件变量通常都与一个互斥锁一起使用,亦即,在创建一个互斥锁时便联系着一个条件变量。
单纯的互斥锁用于短期锁定,主要是用来保证对临界区的互斥进入。
条件变量则用于线程的长期等待,直至所等待的资源成为可用的。
内核支持线程和用户级线程
1.内核支持线程
系统在内核空间还为每一个内核支持线程设置了一个线程控制块,内 核是根据该控制块而感知某线程的存在的,对其加以控制。
(1)内核维护线程的切换;
(2)一个线程发起系统调用而阻塞,不会影响其他线程的运行,CPU会调度其它线程运行。
内核线程只拥有很少的资源,相对于进程,其切换开销小。但相对于用户级线程,系统开销较大。
2.用户级线程
用户级线程仅存在于用户空间中。对于这种线程的创建、撤消、 线程之间的同步与通信等功能,都无须利用系统调用来实现。
内核不了解用户线程的存在;
用户线程的维护由应用进程完成;
用户线程切换不需要内核特权。
如:进程A包括1个用户级线程,进程B包括100个用户级线程,由于内核不了解用户线程的存在,为进程A、B分配相同的资源,A中线程的运行速度将是B中线程的100倍。
线程控制
内核级线程和用户级线程
不管是内核级线程,还是用户级线程,都必须直接或者间接地取得内核支持。
1.内核支持线程的实现
系统创建新线程时,为其分配一个任务数据区PTDA包括若千个线程控制块TCB,每个TCB中可保存线程标识符、优先级、线程运行时间等信息。
在这里插入图片描述
内核支持线程的创建、撤消、调度、切换等,与前面讲过的进程方式,十分相似。其开销比进程少得多。
2.用户级线程的实现
用户级线程具有相同的结构,由于是存放在用户空间,必须借助于某种形式的中间系统的帮助,方能取得内核服务。
(1)运行时系统
是用于管理和控制线程的函数(过程)的集合,其中包括用于创建和撤消线程的函数、线程同步和通信的函数以及实现线程调度的函数等。
运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之间的接口。
(2)内核控制线程
内核控制线程又称轻型进程。
每一个进程都可拥有多个轻型进程,每个LWP都有自己的数据结构(如TCB)
LWP可通过系统调用来获得内核提供的服务,当一个用户级线程运行时,只要将它连接到一个LWP上,此时它便具有了内核支持线程的所有属性。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值