Lec11 Thread switching (Robert)

news2024/11/19 5:52:14

线程的概念

线程就是单个串行执行代码的单元,它只占用一个CPU并且以普通的方式一个接一个的执行指令。

线程还具有状态,我们可以随时保存线程的状态并暂停线程的运行,并在之后通过恢复状态来恢复线程的运行。

  • 程序计数器(Program Counter),它表示当前线程执行指令的位置。
  • 保存变量的寄存器。
  • 程序的Stack

内核线程

XV6内核共享了内存,并且XV6支持内核线程的概念

用户线程

xv6每一个用户进程都有独立的内存地址空间,并且包含了一个线程,这个线程控制了用户进程代码指令的执行。每个用户进程都是拥有一个线程的独立地址空间

Linux,允许在一个用户进程中包含多个线程

XV6线程切换

用户寄存器存在trapframe中,内核线程的寄存器存在context中。

当用户程序在运行时,实际上是用户进程中的一个用户线程在运行。如果程序执行了一个系统调用或者因为响应中断走到了内核中,那么相应的用户空间状态会被保存在程序的trapframe中,同时属于这个用户程序的内核线程被激活,CPU被切换到内核栈上运行,实际上会走到trampoline和usertrap代码中,之后内核会运行一段时间处理系统调用或者执行中断处理程序。在处理完成之后,如果需要返回到用户空间,trapframe中保存的用户进程状态会被恢复。

定时器中断将CPU运行切换到另一个用户进程

在定时器中断程序中,如果XV6内核决定从一个用户进程切换到另一个用户进程,那么首先在内核中第一个进程的内核线程会被切换到第二个进程的内核线程。之后再在第二个进程的内核线程中返回到用户空间的第二个进程,这里返回也是通过恢复trapframe中保存的用户进程状态完成。

XV6从CC程序的内核线程切换到LS程序的内核线程时

  • XV6会首先会将CC程序的内核线程的内核寄存器保存在一个context对象中。
  • 类似的,因为要切换到LS程序的内核线程,那么LS程序现在的状态必然是RUNABLE,表明LS程序之前运行了一半。这同时也意味着LS程序的用户空间状态已经保存在了对应的trapframe中,更重要的是,LS程序的内核线程对应的内核寄存器也已经保存在对应的context对象中。所以接下来,XV6会恢复LS程序的内核线程的context对象,也就是恢复内核线程的寄存器
  • 之后LS会继续在它的内核线程栈上,完成它的中断处理程序(注,假设之前LS程序也是通过定时器中断触发的pre-emptive scheduling进入的内核)。
  • 然后通过恢复LS程序的trapframe中的用户进程状态,返回到用户空间的LS程序中。
  • 最后恢复执行LS。

XV6中,切换线程需要经历的几个步骤

  1. 从一个用户进程切换到另一个用户进程,都需要从第一个用户进程接入到内核中,保存用户进程的状态并运行第一个用户进程的内核线程。
  2. 再从第一个用户进程的内核线程切换到第二个用户进程的内核线程。
  3. 之后,第二个用户进程的内核线程暂停自己,并恢复第二个用户进程的用户寄存器。
  4. 最后返回到第二个用户进程继续执行。

请添加图片描述

注意点

context保存位置

每一个内核线程都有一个context对象。每一个用户进程有一个对应的内核线程,它的context对象保存在用户进程对应的proc结构体中。
每一个调度器线程,它也有自己的context对象,但是它却没有对应的进程和proc结构体,所以调度器线程的context对象保存在cpu结构体中。在内核中,有一个cpu结构体的数组,每个cpu结构体对应一个CPU核,每个结构体中都有一个context字段。 每一个调度器线程都有自己独立的栈。实际上调度器线程的所有内容,包括栈和context,与用户进程不一样,都是在系统启动时就设置好了

trapframe还是只包含进入和离开内核时的数据。而context结构体中包含的是在内核线程和调度器线程之间切换时,需要保存和恢复的数据

怎么区分不同进程的内核线程?

每一个进程都有一个独立的内核线程。实际上有两件事情可以区分不同进程的内核线程,其中一件是,每个进程都有不同的内核栈,它由proc结构体中的kstack字段所指向;另一件就是,任何内核代码都可以通过调用myproc函数来获取当前CPU正在运行的进程。内核线程可以通过调用这个函数知道自己属于哪个用户进程。myproc函数会使用tp寄存器来获取当前的CPU核的ID,并使用这个ID在一个保存了所有CPU上运行的进程的结构体数组中,找到对应的proc结构体。

这就是不同的内核线程区分自己的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1155305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

精品基于Python的个性化电影推荐系统

《[含文档PPT源码等]精品基于Python的个性化电影推荐系统设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:python 使用框架:Django 前端技…

AutoX.js - openCV多分辨率找图

AutoX.js - openCV多分辨率找图 一、起因 AutoXjs 中有两个找图相关的方法 findImage 和 matchTemplate,之前一直没发现什么问题,但最近在一次测试找图时,明明大图和模板图的轮廓都清晰,却怎么也找不到图,降低阈值参…

【数据结构】顺序表实例探究

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:1. 顺序表的基本内容1.1 概念及结构1.2 时间和空间复杂度1.3 基本操作1.4 顺序表的优缺点 2. 静态顺序表…

CVPR 2023 | 主干网络FasterNet 核心解读 代码分析

本文分享来自CVPR 2023的论文,提出了一种快速的主干网络,名为FasterNet。 论文提出了一种新的卷积算子,partial convolution,部分卷积(PConv),通过减少冗余计算和内存访问来更有效地提取空间特征。 创新在于部分卷积…

xhadmin多应用SaaS框架怎么更新?

xhadmin是什么? xhadmin 是一套基于最新技术的研发的多应用 Saas 框架,支持在线升级和安装模块及模板,拥有良好的开发框架、成熟稳定的技术解决方案、提供丰富的扩展功能。为开发者赋能,助力企业发展、国家富强,致力于…

【设计模式】第13节:结构型模式之“享元模式”

一、简介 所谓“享元”,顾名思义就是被共享的单元。享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。 实现:通过工厂模式,在工厂类中,通过一个Map或者List来缓存已经创建好的享元对象&am…

这样的软件测试报告模板你绝对没见过!!!

测试报告如此重要,那么我们应该如何撰写呢?为了让大家彻底掌握测试模板的撰写,所以本文结构如下: 1、测试报告写给谁看? 2、测试报告的基本骨架(通过|不通过)? 3、测试报告如何才能达…

超级搜索技术,普通人变强的唯一外挂

搜索效率:Google >微信公众号 >短视频 >百度 1、信息咨询搜索 在Google搜索栏前面加上 “” 限定关键词 intitle 限定标题 allintitle 限定标题多个关键词 intext 限定内容关键词 inurl 限定网址关键词 site 限定网址来源 imagesize 限定图片尺寸 filet…

[LeetCode]-27. 移除元素-26.删除有序数组中的重复项-88.合并两个有序数组

目录 27.移除元素 题目 思路 代码 26. 删除有序数组中的重复项 题目 思路 代码 88.合并两个有序数组 题目 思路 代码 总结 27.移除元素 27. 移除元素 - 力扣(LeetCode)https://leetcode.cn/problems/remove-element/description/ 题目 给你一…

【快报】正在把教学视频搬运到B站和油管

hello 大家好,我是老戴。 熟悉我的同学知道,我从14年开始录制GIS相关的教学视频,之前是放到优酷上给大家下载,后期发现很多人把视频弄下来淘宝上卖,然后我就把视频整体放到了我自己的网站上。 随着视频录制的数量越来…

C++归并排序算法的应用:计算右侧小于当前元素的个数

题目 给你一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例 1: 输入:nums [5,2,6,1] 输出:[2,1,1,0] 解释: 5 …

2024年湖北武汉建筑企业三类人员安全员ABC怎么报考

2024年湖北武汉建筑企业三类人员安全员ABC怎么报考 武汉建筑企业报考三类人员,建筑单位归属地在武汉,且有建筑相关的一些资Z,才可以申报一定数量的三类人员、安全员ABC、建筑安全员ABC、专职安全员C证、建设厅安全员ABC证。 建筑企业-报考建…

在线开发平台是什么?有哪些优势?

目录 一、什么是在线开发平台? 二、企业为什么选择在线开发平台? (1)风险低,回报高 (2)可视化操作更形象 (3)易维护 三、在线开发平台功能展示 技术介绍 随着互联网和信息…

Jetpack:024-Jetpack中的滚动事件

文章目录 1. 概念介绍2. 使用方法2.1 高级事件2.2 低级事件 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack中事件相关的内容,本章回中主要 介绍事件中的滚动事件。闲话休提,让我们一起Talk Android Jetpack吧! 1. 概念介绍 我们在…

三相马达的电机故障维护

目录 电机故障维护​编辑 更换电机操作 三相电路 热继电器 今天继续小编的工作经验的分享,今天就说说遇到的问题吧,今天组立熔接机出现故障,后面部分出现了“咕噜噜”的杂声,走到后面一听是电机发出的声音。没有办法了就开始拆…

Py之transformers_stream_generator:transformers_stream_generator的简介、安装、使用方法之详细攻略

Py之transformers_stream_generator:transformers_stream_generator的简介、安装、使用方法之详细攻略 目录 transformers_stream_generator的简介 1、Web Demo T1、original T2、stream transformers_stream_generator的安装 transformers_stream_generator的…

【Linux虚拟机】 JDK、Tomcat、MySQL安装配置讲解

目录 一、上传安装包到服务器 二、JDK与Tomcat安装 2.1 解压安装包 2.2 配置JDK环境变量 2.3 配置Tomcat环境 三、MySQL安装配置 3.1 删除默认数据库 3.2 安装mysql安装包 3.3 mysql初始化操作 四、后端接口部署 4.1 导入项目.war 4.2 新建数据库 4.3 运行服务器项目…

白票某度自媒体混剪剪辑视频素材/爬虫软件说明文档

大家好,我是淘小白~ 软件:某度自媒体混剪素材爬虫软件 语言:Python 说明文档: 1、自定义关键词采集 2、采集百度aigc视频素材,经过测试,使用剪映的文字成片某度视频素材,可过头条的原创检测…

SPSS单样本t检验

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

OSFP基础实验

目录 题目:拓扑如下 实验步骤: 第一步:设计思路 第二步:搭建拓扑 第三步:配置命令 1)IP地址配置 2)OSPF配置 3)R3部分接口做静默接口 4)缺省路由 5&#xff09…