当前位置: 首页 > news >正文

L10、11:用户级线程和内核级线程

线程、进程的区别

线程是一段指令序列,而进程是一个可执行程序,是若干指令序列与内存资源的组合。

进程中可以包含若干个线程,线程是进程的一个子部分,一个进程实现了一个程序,而线程只实现了这个程序中的一个子功能。

用户级线程

完全在用户态执行的线程

进程切换如何实现(yield)

使用TCB保存当前栈的位置,然后切换或创建另一个栈用于另一个线程,然后设置PC,跳到另一个指令序列中执行。

注意yield函数结束时自动弹出栈顶,自动挑战到栈顶记录的那个位置,不用手动jmp

两个线程与一个栈

混用栈会导致跳转异常

TCB

Thread Control Block,保存一个线程的信息,包括线程id、栈指针、指令指向到的位置地址、线程状态等

创建另一个线程create函数的步骤

创建TCB,创建栈,设置线程执行的初始地址

用户级线程切换与进程切换的矛盾处

当一个用户级线程执行IO,发生阻塞,此时进程要切换到另一个线程时,操作系统内核不会这么想,内核中只会发现当前进程开始执行IO,发生了阻塞,内核会让当前进程进入等待状态,切换至另一个进程去执行,当前进程就无法切换至另一个线程。

为什么没有用户级进程

进程是指令序列与内存资源的组合,处于用户态时无法调用内存资源,因此没有用户级进程。

为什么要核心级线程

为了利用多核的优势。

多处理器和多核的区别

二者都有多个CPU,区别是多处理器中每个CPU有各自单独的缓存、映射表等,而多核中的CPU共享缓存、映射表,一个进程中的多个线程也是共享映射表的,因此多核与多线程可以很好地搭配使用,减少了切换资源地步骤,提高了效率。

并发和并行

并发指一个CPU交替执行多个指令序列,而并行指多个CPU同时执行各自的指令序列

核心级、用户级线程的区别

  1. 一个运行在用户态而另一个运行在核心态
  2. 多个用户级线程都运行在一个CPU上,而多个核心级线程运行在不同的CPU上,利用了多核的优势,加快了运行速度。

核心级线程的用户栈和内核栈

一个核心级线程有用户栈和内核栈,分别存放用户态和核心态中的信息

从用户态切换到核心态

创建或切换至内核栈、内核TCB,在内核栈中保存当前用户态的信息(用户栈的地址SS:SP、用户栈当前执行到的指令的地址CS:IP),以便返回时使用。

核心态线程执行、切换的过程

当核心态线程阻塞时,会切换至另一个核心态线程去执行(与用户栈的切换类似),在另一个核心态线程执行中可以返回用户态,那么此时就在另一个用户态线程继续执行。

相关文章:

  • JS - 获取剪切板内容 Clipboard API
  • MySQL里面的日期字符串如何转成日期做比较运算,获取两个日期之间的所有日期(包括起始日期)
  • 如何使用python运行Flask开发框架并实现无公网IP远程访问
  • 云服务器部署DB-GPT项目
  • 企业四要素核验是什么?如何应用
  • 【Nginx系列】Nginx中rewrite模块
  • IDEA基础——Maven配置tomcat
  • mfc 疑难杂症之一
  • Linux之定时任务01
  • mac m3安装nvm安装说明;mac安装xbrew
  • 【问题解决】| conda不显示指示前面的(base)无法在终端激活虚拟环境
  • 进程等待
  • JS手写章节(1)—手写实现call、apply、bind
  • Nginx配置ssl证书(https证书)
  • (附源码)计算机毕业设计SSM基于的扶贫产品展销平台
  • Google Earth Engine APP——影像条带色差、色调不均匀等现象解决方案Landsat5 NDWI Image Restoration APP
  • 【读书笔记】【Effective STL】函数子、函数子类、函数及其他
  • Linux磁盘LVM根目录扩容ubuntu--vg-ubuntu--lv
  • [MRCTF2020]Ezpop
  • 【day12】【洛谷算法题】-P5712Apples-刷题反思集[入门2分支结构]
  • PayPal/Stripe/Square 轮询收单系统
  • unity 位移贴图正弦波面
  • javaScript 防抖/节流,探索学习,对新手友好的内容
  • Servlet基础(1)
  • 【Svelte】-(4)If 条件判断语句 / Each 循环语句 / Await 异步处理块
  • 手把手实现一个进度条时钟,麻麻再也不用担心我把时间看茬了
  • java毕业设计潮购购物网站Mybatis+系统+数据库+调试部署
  • Verilog写状态机的三种描述方式之二段式
  • 【正点原子I.MX6U-MINI应用篇】1、编写第一个应用App程序helloworld
  • 【Vue】父子组件通信
  • AI 应用的全流程存储加速方案技术解析和实践分享
  • 云服务器的介绍