操作系统-线程的实现方式和多线程模型(用户级线程 内核级线程 多线程模型的情况)和线程的状态,转换,组织,控制

线程的实现方式和多线程模型

总览

在这里插入图片描述

线程的实现方式

用户级线程

程序自己通过自己设计的线程库实现线程管理调度

如QQ有三个功能,这三个功能需要同时进行,通过进程实现就是三个进程分别实现这三个功能

在这里插入图片描述
如果由一个进程实现?相当于并发执行三个功能
在这里插入图片描述

线程的管理工作:由线程库(如上面通过while),不是操作系统。
线程切换由程序自己的线程库来完成,不需要CPU变态
操作系统不能意识到用户级线程的存在,它只是在执行进程的代码,代码中的线程库部分能够实现并发执行各个线程

优点:切换线程只需要在用户态完成
缺点:被阻塞在某段代码时整个进程的其他线程都会阻塞,且多个线程都是运行在一个CPU的(CPU的调度单位依然是进程)

在这里插入图片描述

内核级线程

线程的管理工作由操作系统完成
线程的切换需要CPU变态(需要操作系统介入)

引入内核级线程后,CPU调度的基本单位是线程,多个线程也可以分派到多个CPU上并行运行

在这里插入图片描述

多线程模型

一对一

在这里插入图片描述

多对一

在这里插入图片描述

多对多

此时内核级线程与用户级线程的对应关系由有两种
一个内核级线程对应多个用户级线程就是之前的多对一的情况
而一个内核级线程对应一个用户级线程就是之前的一对一情况

在这里插入图片描述

小结

在这里插入图片描述

线程的状态,转换,组织,控制

总览

线程的状态和转换与进程的差不多
在这里插入图片描述

线程的状态与转换

时间用完是并发执行中的轮换的原因

我们通常关注这三个状态
在这里插入图片描述

线程的组织与控制

保存堆栈指针是在保存该线程的栈顶地址和栈底地址,切换线程后,该线程的堆栈信息依然在内存中

组织线程表的类型可以不同,如将系统的线程都组成一张表,或者按照进程来组成线程表,又或者按照线程状态来分状态组织线程表

在这里插入图片描述
控制就是实现线程状态的切换和线程的调度

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看星猩的柴狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值