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

操作系统(2.8.1)--线程的实现方式

时间:2023-04-11 16:32:35浏览次数:59  
标签:-- 用户 调度 阻塞 2.8 线程 内核 进程

1.内核支持线程(KST)

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

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

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

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

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

内核级线程

操作系统(2.8.1)--线程的实现方式_调度算法

2.用户级线程(ULT)

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

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

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

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

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

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

用户级线程

操作系统(2.8.1)--线程的实现方式_调度算法_02

3.组合方式

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

混合式线程

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

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

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

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

相关文章

  • Flutter实现直播间礼物收发
    下面是一个简单的礼物发送系统的实现代码,包括支持连送和单次送等功能:import'package:flutter/material.dart';classGift{finalStringname;finalintcount;Gift(this.name,this.count);}classGiftSendingScreenextendsStatefulWidget{constGiftSendin......
  • EasyCVR平台如何正确配置设备移动侦测告警信息的上传?
    EasyCVR视频融合平台基于云边端协同架构,支持海量视频汇聚管理,平台融合性强、拓展灵活、视频能力丰富,具体包括:视频监控直播、轮播、录像、视频转码、云存储、检索与回看、告警上报、电子地图、云台控制、语音对讲、集群、级联共享等。用户在现场部署了EasyCVR,需要将设备的移动侦测告......
  • Rust 资源汇总
    基础库tokiochronoUI库PCslint-uitaruiWebyew嵌入式slint-uiWeb库rocket数据库ormdieselsqlx......
  • Git——基本操作
    Git基本操作Git的工作就是创建和保存你项目的快照及与之后的快照进行对比。本章将对有关创建与提交你的项目快照的命令作介绍。Git常用的是以下6个命令:gitclone、gitpush、gitadd 、gitcommit、gitcheckout、gitpull,后面我们会详细介绍。说明:workspace:工作区s......
  • KindEditor粘贴图片自动上传到服务器(Java版)
    ​图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM.plugins['autoupload'],然后找到autoUploadHandler方法,注释掉其中的代码。加入下面的代码://判断剪贴......
  • ABC216G
    将区间按照右端点排序,贪心的往最右边填\(1\),不难发现这样一定是正确的。感性理解一下就是越往右的位置对于后面的区间贡献越大。而且每个点最多只会被放置一个\(1\),所以我们可以暴力的找到下一个可以填的位置,并填入\(1\),可以使用线段树维护,复杂度是\(\mathcal{O}(n\logn)\)......
  • ansible模块实战练习
    ansible模块实战练习Cloud研习社 Cloud研习社 2023-04-0110:55 发表于山东收录于合集#一站式教程220个#计算机185个#ansible22个#云计算196个#linux209个教程每周二、四、六更新今天我们练习一下ansible模块的用法,也算是一个小复习:准备三个节点:其中一个作......
  • 哪吒探针 - Windows 和Linux端agent安装(详细注意版)
    一、Windows端agent安装配置环境准备环境:Windows服务器软件:哪吒探针点击下载、nssm点击下载(探针agent和nssm都要下载准备好)设置环境变量下载软件后,解压到任意位置,然后按win+R打开运行窗口,输入sysdm.cpl打开系统属性–>高级–>环境变量–>系统变量–>Path在最后把......
  • iis 7.5 下站点日志开启以及默认位置设置方法
       一直用iis6的日志管理,最近升级了2008所以打算启用一下iis7.5的日志,这里就为大家分享一下方法,需要的朋友可以参考下  在iis6时,通过iis管理器的日志配置可以找到站点日志存储的位置。但是在iis7下,iis管理器下的日志配置只能找到iis日志配置的主目录,......
  • docker 容器的数据卷
    一Docker数据卷简介1.1为什么用数据卷•宿主机无法直接访问容器中的文件•容器中的文件没有持久化,导致容器删除后,文件数据也随之消失•容器之间也无法直接访问互相的文件为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现:•容器与主机之间、......