首页 > 其他分享 >操作系统(2.8)--线程的实现

操作系统(2.8)--线程的实现

时间:2023-05-27 21:01:55浏览次数:41  
标签:-- 系统 用户 调度 2.8 线程 内核 进程

线程的实现方式

1.内核支持线程(KST)

内核支持线程,与进程相同,是在内核的支持下运行的,即无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消和切换等也是依靠内核,在内核空间实现的。

这种线程实现方式主要有如下四个优点:

  • (1)在多处理器系统中,内核能够同时调度同一进程中多个线程并行执行
  • (2)如果进程中的一个线程被阻塞了,内核可以调度该进程中的其它线程占有处理器运行,也可以运行其它进程中的线程;
  • (3)内核支持线程具有很小的数据结构和堆栈,线程的切换比较快,切换开销小;
  • (4)内核本身也可以采用多线程技术,可以提高系统的执行速度和效率。

内核支持线程的主要缺点是:

  • 其模式切换的开销较大。在同一个进程中,从一个线程切换到另一个线程时,需要从用户态转到内核态进行,这是因为用户进程的线程在用户态运行,而线程调度和管理是在内核实现的,系统开销较大。

内核级线程

操作系统(2.8)--线程的实现_用户线程

2.用户级线程(ULT)

用户级线程仅存在于用户空间中。对于这种线程的创建、撤消、线程之间的同步与通信等功能,都无须利用系统调用来实现。内核完全不知道用户级线程的存在。(轮转调度算法)

注意:对于设置了用户级线程的系统,其调度仍是以进程为单位进行的。假如系统中设置的是内核支持线程,则调度便是以线程为单位进行的。

使用用户级线程主要表现有如下三个方面的优点:

  • (1)线程切换不需要转换到内核空间,从而节省了模式切换的开销,也节省了内核的宝贵资源。
  • (2)调度算法可以是进程专用的。在不干扰操作系统调度的情况下,不同的进程可以根据自身需要,选择不同的调度算法对自己的线程进行管理和调度,而与操作系统的低级调度算法是无关的。
  • (3)用户级线程的实现与操作系统平台无关,因为对于线程管理的代码是在用户程序内的,属于用户程序的一部分,所有的应用程序都可以对之进行共享。因此,用户级线程甚至可以在不支持线程机制的操作系统平台上实现。

用户级线程实现方式的主要缺点:

  • (1)系统调用的阻塞问题。在基于进程机制的操作系统中,大多数系统调用将阻塞进程,因此,当线程执行一个系统调用时,不仅该线程被阻塞,而且进程内的所有线程都会被阻塞。而在内核支持线程方式中,则进程中的其它线程仍然可以运行。
  • (2)在单纯的用户级线程实现方式中,多线程应用不能利用多处理机进行多重处理的优点。内核每次分配给一个进程的仅有一个CPU,因此进程中仅有一个线程能执行,在该线程放弃CPU之前,其它线程只能等待。

用户级线程

操作系统(2.8)--线程的实现_系统调用_02

3.组合方式

有些操作系统把用户级线程和内核支持线程两种方式进行组合,提供了组合方式ULT/KST线程。在组合方式线程系统中,内核支持多KST线程的建立、调度和管理,同时,也允许用户应用程序建立、调度和管理用户级线程。一些内核支持线程对应多个用户级线程,程序员可按应用需要和机器配置对内核支持线程数目进行调整,以达到较好的效果。组合方式线程中,同一个进程内的多个线程可以同时在多处理器上并行执行,而且在阻塞一个线程时,并不需要将整个进程阻塞。所以,组合方式多线程机制能够结合KST和ULT两者的优点,并克服了其各自的不足。

混合式线程

操作系统(2.8)--线程的实现_用户线程_03

由于用户级线程与内核控制线程的连接不同

  • 1)一对一模型该模型是为每一个用户线程都设置一个内核控制线程与之连接,当一个线程阻塞时,允许调度另一个线程运行。
  • 2)多对一模型该模型是将多个用户线程映射到一个内核控制线程,为了管理方便,这些用户线程一般属于一个进程。
  • 3)多对多模型该模型结合上述两种模型的优点,将多个用户线程映射到多个内核控制线程,内核控制线程的数目可以根据应用进程和系统的不同而变化,可以比用户线程少,也可以与之相同。

线程的实现

1.内核支持线程的实现

内核支持线程直接利用系统调用为它服务,控制简单。系统在创建一个新进程时,便为它分配一个任务数据区PTDA(Per Task Data Area),其中包括若干个线程控制块TCB空间,这些TCB中的信息被保存在内核空间中。内核支持线程的创建、撤消、调度和切换均与进程的相类似。

操作系统(2.8)--线程的实现_调度算法_04

2.用户级线程的实现

用户级线程是在用户空间实现的,它们都运行在一个中间系统的上面。当前有两种方式实现的中间系统,即运行时系统和内核控制线程。

1)运行时系统

运行时系统所谓“运行时系统”,实质上是用于管理和控制线程的函数(过程)的集合,其中包括用于创建和撤消线程的函数、线程同步和通信的函数以及实现线程调度的函数等。正因为有这些函数,才能使用户级线程与内核无关。运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之间的接口。用户级线程是在用户空间实现的,它们都运行在一个中间系统的上面。当前有两种方式实现的中间系统,即运行时系统和内核控制线程。

2)内核控制线程

内核控制线程这种线程又称为轻型进程LWP。每一个进程都可拥有多个LWP,同用户级线程一样,每个LWP都有自己的数据结构(如TCB)。它们也可以共享进程所拥有的资源。LWP可通过系统调用来获得内核提供的服务,这样,当一个用户级线程运行时,只要将它连接到一个LWP上,此时它便具有了内核支持线程的所有属性。这种线程实现方式就是组合方式。由LWP实现了在内核与用户级线程之间的隔离,从而使用户级线程与内核无关。

利用轻型进程作为中间系统

操作系统(2.8)--线程的实现_用户线程_05

线程的创建和终止

在多线程0S环境下,应用程序在启动时,通常仅有一一个线程在执行,该线程被人们称为“初始化线程”。它可根据需要再去创建若干个线程。终止线程的方式有两种:一种是在线程完成了自己的工作后自愿退出;另一种是线程在运行中出现错误或由于某种原因而被其它线程强行终止。但有些线程(主要是系统线程),在它们一-旦被建立起来之后,便一直运行下去而不再被终止。虽已被终止但尚未释放资源的线程,仍可以被需要它的线程所调用,以使被终止线程重新恢复运行。

信箱通信是一种(B)方式。

A.直接通信

B.间接通信

C.低级通信.

D.信号量

在消息缓冲通信中,消息队列是一种(A)资源。

A.临界

B.共享.

C.永久

D.可剥夺

(A)不是进程之间的通信方式。

A.过程调用

B.消息传递

C.共享存储器

D.信箱通信

(D)不是线程的实现方式。

A.用户级线程

B.内核级线程

C.用户级线程与内核级线程组合的方式

D.轻量级线程

标签:--,系统,用户,调度,2.8,线程,内核,进程
From: https://blog.51cto.com/hwuu/6363068

相关文章

  • 如何用C语言做一个三子棋游戏
    如何来做一个三子棋游戏呢,首先老规矩先来做一个简易的菜单下一步让这个菜单能够实现它的功能,选则1就开始游戏,选择0就退出游戏,不是1不是0 那就是选错了提示选择错误。创建一个变量input 用来存放我们输入的数字,利用do while(因为dowhile 循环最少可以循环一次,比较符......
  • 2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两
    2023-05-27:给你一个只包含小写英文字母的字符串s。每一次操作,你可以选择s中两个相邻的字符,并将它们交换。请你返回将s变成回文串的最少操作次数。注意,输入数据会确保s一定能变成一个回文串。输入:s="letelt"。输出:2。答案2023-05-27:大体过程如下:1.定义结构体Index......
  • 行业信息科普
       三种互联网公司的运作模式1.ToC(Business-to-Customer):表示卖或服务的东西是给买东西的普通客人2.ToB(Business-to-Business):表示卖或服务的东西是给大公司的3.ToVC(Venturecapitalinvestment):风险投资,表示现在的这个公司不挣钱,但是这公司服务却很到位,于是......
  • 文心一言 VS 讯飞星火 VS chatgpt (23)-- 算法导论4.2 5题
    五、V.Pan发现一种方法,可以用132464次乘法操作完成68x68的矩阵相乘,发现另一种方法,可以用143640次乘法操作完成70x70的矩阵相乘,还发现一种方法,可以用155424次乘法操作完成72x72的矩阵相乘。当用于矩阵相乘的分治算法时,上述哪种方法会得到最佳的渐近运行时间?与......
  • 观点收录
    合理的工艺设计胜过牛逼的程序设计千万倍:计算机系统是辅助工艺实现,对于这种大型的设备制造,工艺真正决定了生产效能以及产品质量。——贺臣......
  • java后端开发流程总结
    流程简介:1、数据库见表(工具建表和cmd命令行(sql语言)两种方式)2、前端页面准备(html+css+js)3、controler层编写(针对具体功能编写,比如登录功能,在这一层获取前台输入的账号密码。这是就可以等待来自数据库里的数据了)4、接着编写serverdao层依据controler层的功能编写相应的get......
  • Odoo常用字段属性
     string是字段的默认标签,在用户界面中使用。除Selection和关联字段外,它都是第一个位置参数,所以大多数情况下它用作关键字参数。如未传入,将由字段名自动生成。default设置字段默认值。可以是具体值(如active字段中的default=True),或是可调用引用,有名函数或匿名函数均可。help提......
  • jmeter线程组之间数据共享
    jmeter添加环境变量,可使跨线程组访问该属性值,实现了数据共享使用函数setProperties实现思路:先创建两个线程组,第一个线程组设置环境变量,第二个线程组获取环境变量的值(1)第一个线程组:设置随机生成四位数字后,在将值赋值给环境变量将设置的变量${param}引用到环境变量,在添加......
  • 分布式机器学习(Parameter Server)
    分布式机器学习中,参数服务器(ParameterServer)用于管理和共享模型参数,其基本思想是将模型参数存储在一个或多个中央服务器上,并通过网络将这些参数共享给参与训练的各个计算节点。每个计算节点可以从参数服务器中获取当前模型参数,并将计算结果返回给参数服务器进行更新。为了保持......
  • 旷视人脸识别代码
    servletpackagecom.sxr;importjavax.net.ssl.SSLException;importjava.io.*;importjava.net.HttpURLConnection;importjava.net.URL;importjava.net.URLEncoder;importjava.util.HashMap;importjava.util.Iterator;importjava.util.Map;importjava.util......