秒懂:进程上下文切换

news/2024/9/19 18:48:25/ 标签: 服务器, linux, 运维

1、进程上下文的组成部分


进程的物理实体(代码和数据等)和支持进程运行的环境合称为进程的上下文:

        由进程的程序块、数据块、运行时的堆和用户栈(两者通称为用户堆栈)等组成的用户空间信息被称为用户级上下文。


        由进程标识信息、进程现场信息、进程控制信息和系统内核栈等组成的内核空间信息被称为系统级上下文。


        处理器中各寄存器的内容被称为寄存器上下文(也称硬件上下文),即进程的现场信息。

 2.进行进程切换的时机

下降进程自身造成切换(例如产生异常)或者外界强制下降进程和上升进程切换(例如cpu时间片用完)。
下降进程指的是当前即将被中断运行的进程。
上升进程指的是按照调度算法从就绪队列中选择的一个即将被运行的进程。

3.系统如何得知我们当前执行到那行代码? 

寄存器中有一种叫做程序计数器:pc,eip:

记录当前进程正在执行指令的下一行指令的地址!!

        寄存器的作用一般都是是为了提高效率 

4、进程上下文切换具体流程

(1)保存当前进程的硬件上下文(PC/PSW/SP和通用寄存器等);

linux系统而言,其硬件上下文大部分保存在struct thread_struct thread中,但通用寄存器(eax/ebx等保存在内核栈里)
(2)修改当前进程的PCB,比如将其状态由运行改为就绪或者阻塞,并将该进程PCB加入相关队列;

(3)调度另外一个进程(这涉及调度)
(4)修改被调度进程的PCB,将其状态改为运行(系统上下文)
(5)将“当前进程”的存储管理数据改为被调度进程的存储管理信息(如页表、TLB)(用户级上下文)
(6)恢复新进程的硬件上下文(即现场),让PC指向新进程代码

5.注意

进程从cpu上离开的时候,要将自己的上下文保存好,甚至带走。(它们一般保存在寄存器和自己的PCB上)

目的是为了自己被再次调度的时候,能够恢复。

进程被切换时候,

简单来说:保存上下文。

                  切换上下文。


http://www.ppmy.cn/news/1523969.html

相关文章

「数据科学」Seaborn图形可视化,概要介绍及实践

​Seaborn是一个使用Python语言编程,绘制各种统计图形的Python第三方库。Seaborn可以使用Python语言中的Pandas处理数据,基于matplotlib实现的,高级绘图环境。 Seaborn库简介 Seaborn能够帮助你,更好的探索和理解你的数据。其绘…

ios免签H5

1、windows下载mobileconfig文件制作工具,可在csdn搜索iPhone_Mobileconfig_Tool下载安装;IOS 从APP Store 下载Apple Configurator 2 2、用申请的域名SSL证书给mobieconfig文件签名,最好下载Apache证书,里面包含 AE86211.crt…

golang学习笔记11——Go 语言的并发与同步实现详解

推荐学习文档 golang应用级os框架,欢迎star基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学…

开发中的网络问题逻辑推理分析

基于TCP/IP的逻辑推理,大部分软件从业人员都不是很懂,导致很多问题都被误认为诡异问题。有些人是惧怕TCP/IP网络书籍中的复杂知识内容,有的是被wireshark[1]显示的深红色内容所干扰。 经典案例1: 例如有一个DBA遇到了性能问题&a…

【数据结构】2——二叉树遍历

数据结构2——二叉树遍历 单纯记录 文章目录 数据结构2——二叉树遍历一、二叉树遍历1,先序遍历:根左右递归实现非递归实现(栈) 2.中序遍历:左根右递归非递归 3 .后序遍历:左右根递归非递归(两…

GDB 查看汇编

查看汇编 x disassemble

Linux 中 Tail 命令的 9 个实用示例

引言 我们作为 Linux 用户,经常会操作那些在后台长时间运行的进程,这些进程被称作守护进程或服务。例如 Secure Shell (sshd)、Network Manager (networkd)、Volume Manager (LVM)、Cron 等都是服务的典型例子,这样的服务还有很多。 在许多情…

Windows安装HeidiSQL教程(图文)

一、软件简介 HeidiSQL是一款开源的数据库管理工具,主要用于管理MySQL、MariaDB、SQL Server、PostgreSQL和SQLite等数据库系统。它提供了直观的用户界面,使用户可以轻松地连接到数据库服务器、执行SQL查询、浏览和编辑数据、管理数据库结构等操作。 跨…

Java 内部类包含静态内部类(Static Nested Class)、非静态内部类(Inner Class)

在 Java 中,内部类主要分为以下几种类型: 成员内部类(Member Inner Class)静态内部类(Static Nested Class)局部内部类(Local Inner Class)匿名内部类(Anonymous Inner …

芋道系统excel导出,springcloud+vue3

前端代码&#xff1a; <el-form-item><el-buttontype"success"plainclick"handleExport":loading"exportLoading"v-hasPermi"[teach:course-manage:export]"><Icon icon"ep:download" class"mr-5px&quo…

【mysql】mysql之主从延迟复制测试场景

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

当水泵遇上物联网:智能水务新时代的浪漫交响

在当代科技的宏伟乐章中&#xff0c;物联网&#xff08;IoT&#xff09;技术宛如一位技艺高超的指挥家&#xff0c;引领着各行各业迈向智能化的新纪元。当这股创新浪潮涌向古老的水务行业时&#xff0c;一场前所未有的“智能水务”革命便悄然上演&#xff0c;而水泵——这一传统…

小宝宝的好伙伴Baby Buddy

好友 Eduna 前天半夜告诉我&#xff0c;Docker 的下载已经恢复&#xff0c;又可以愉快的玩耍了&#xff0c;大家赶紧去试试吧~ 什么是 Baby Buddy &#xff1f; Baby Buddy 是宝宝的好伙伴&#xff01;能帮助宝爸、宝妈、及护理人员跟踪宝宝的睡眠、喂食、换尿布、趴着的时间等…

【Linux】循序进阶学运维-服务篇-tomcat入门

[rootgaosh-1 jdk]# ##### []( )2\. 配置java环境\[rootgaosh-1 jdk\]# vim /etc/profile![在这里插入图片描述](https://img-blog.csdnimg.cn/20200801062552258.png)export JAVA_HOME/root/jdk/jdk1.8.0_131 ## 路径一定要对 export PATH J A V A H O M E / b i n : JAVA_HO…

Collections

Collections 是 Java 中的一个实用工具类&#xff0c;提供了一系列静态方法来操作集合。以下是其详细介绍&#xff1a; 前置知识 在 Java 中&#xff0c;可变参数&#xff08;Varargs&#xff09;允许方法接受可变数量的参数。使用可变参数时&#xff0c;可以传递任意数量的参…

EmguCV学习笔记 C# 11.3 DNN其它

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Python Web 框架篇:Flask、Django、FastAPI介绍及其核心技术

Python Web 框架篇&#xff1a;Flask、Django、FastAPI介绍及其核心技术 目录 &#x1f40d; Flask Flask 核心概念&#xff08;路由、视图函数、模板渲染&#xff09;Flask Blueprint 模块化应用Flask 扩展&#xff08;Flask-SQLAlchemy、Flask-WTF、Flask-Migrate 等&#…

Centos7.9部署Gitlab-ce-16.9

一、环境信息 软件/系统名称版本下载地址备注Centos77.9.2009https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.isogitlab-cegitlab-ce-16.9.1https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.9.1-ce.0.el7.x86_64.rpm…

半监督学习能否帮助训练更好的模型?

数据科学家面临的最常见挑战之一是缺乏足够的标记数据来训练一个可靠且准确的模型。标记数据对于监督学习任务&#xff0c;如分类或回归至关重要。然而&#xff0c;在许多领域&#xff0c;获取标记数据既昂贵又耗时&#xff0c;有时甚至是不切实际的。另一方面&#xff0c;未标…

CSS学习18--伸缩布局

伸缩布局 一、伸缩布局二、属性设置 一、伸缩布局 给父级display: flex; 给孩子flex: 1; 自由变动 <html><head><style>section {width: 1000px;height: 200px;border:1px solid pink;margin:100px auto;/*父级盒子添加f1ex*/dispLay:flex;/*伸缩布局模式*/…