0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

上下文切换与栈寄存器变化

冬至子 来源:BU科研通通 作者:BU科研通通 2023-09-20 15:46 次阅读

call指令

CPU执行call指令时,进行两步操作:

(1)将当前的IP或CS和IP压入栈中;

(2)转移。

即:

(1)(sp) = (sp)-2

((ss)*16 +(sp)) = (IP)

(2)(IP) = (IP)+16位位移。

16位位移=“标号”处的地址-call指令后的第一个字节的地址

ret和retf指令

ret指令用栈中的数据,修改IP的内容,从而实现近转移;

retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。

CPU执行ret指令时,进行下面的两步操作:

(1)(IP) = ((ss)*16 +(sp))

(2)(sp) = (sp)+2

CPU执行retf指令时,进行下面四步操作:

(1)(IP) = ((ss)*16) + (sp)

(2)(sp) = (sp) + 2

(3)(CS) = ((ss)*16) + (sp)

(4)(sp) = (sp) + 2

中断过程的上下文切换:

图片

在进程切换时,一个进程存储在处理器寄存器中的中间数据叫做进程的上下文。在进程未占用处理器时,进程的上下文是存储在进程的私有堆栈中的。

图片

关于寄存器

64位环境中用rip rsp rbp表示

32位环境用eip esp ebp 表示

CS是代码段寄存器

IP是指令指针寄存器(相当于偏移地址)

SS:存放栈的段地址;

SP:堆栈寄存器SP(stack pointer)存放栈的偏移地址;

BP: 基数指针寄存器BP(base pointer),存储堆栈基地址。

SP,BP一般与段寄存器SS 联用,以确定堆栈寄存器中某一单元的地址。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19135

    浏览量

    228926
  • 寄存器
    +关注

    关注

    31

    文章

    5305

    浏览量

    119909
  • 串口中断
    +关注

    关注

    0

    文章

    64

    浏览量

    13852
收藏 人收藏

    评论

    相关推荐

    编写一个任务调度程序,在上下文切换后遇到了一些问题求解

    \"rfe\" 不会在 A[11] 寄存器中设置新的返回地址。 当任务函数以\"ret16\" 结束时,µC 将在陷阱中运行。 我在上下文切换的准备过程中错过了什么? 在上下文切换/\"rfe\" 之后,A[11] 的正确行为是
    发表于 05-22 07:50

    关于进程上下文、中断上下文及原子上下文的一些概念理解

    调用,用户空间的应用程序就会进入内核空间,由内核代表该进程运行于内核空间,这就涉及到上下文切换,用户空间和内核空间具有不同的 地址映射,通用或专用的寄存器组,而用户空间的进程要传递很多变量、参数给内核
    发表于 09-06 09:58

    BT堆栈上下文切换

    100ms就会产生一个上下文切换上下文切换每秒似乎有点高。我想我真的不能抱怨10个开关,但是有什么东西吗?在BT协议中真的需要这个吗?不能处理中断驱动吗?(这是BT是可连接的,但既没有连接,也没有
    发表于 12-17 16:30

    上下文切换简介

    处理系统中,CPU需要处理所有程序的操作,当用户来回切换它们时,需要记录这些程序执行到哪里。上下文切换就是这样一个过程,他允许CPU记录并恢复各种正在运行程序的状态,使它能够完成切换操作。
    发表于 08-06 08:08

    上下文切换的情况发生

    处理系统中,CPU需要处理所有程序的操作,当用户来回切换它们时,需要记录这些程序执行到哪里。上下文切换就是这样一个过程,他允许CPU记录并恢复各种正在运行程序的状态,使它能够完成切换操作。
    发表于 08-07 08:38

    ucos上下文该怎么切换

    有两个问题请教一下大神!!!-->1在ucos中的上下文切换时发生在pendSV异常中,代码见下:PendSV_Handler CPSIDI; Prevent interruption
    发表于 08-26 03:21

    基于cortex-m3的rt-thread系统如何实现线程上下文切换

    rt_interrupt_from_thread变量设置为空。线程上下文切换是,上下文保存在各个线程的空间中, 这里我们只需要在PendSV中手动保存和恢复r4-r11寄存器,因为其
    发表于 05-05 15:00

    Cortex-M4在线程上下文切换中的优化

    cortex-m4相对比cortex-m3,在线程上下文切换中,主要增加了FPU寄存器,总共需要保存34个寄存器,合计136byte。因此原来在cortex-m3上面运行的程序在cortex-m4f
    发表于 08-05 10:58

    讨论ARM mbed OS(RTX) 的上下文切换

    1. 垫话从本文开始,正式进入对调度实现细节及底层的探讨。本文讨论 ARM mbed OS(RTX) 的上下文切换。解构调度,按说不应该从“上下文切换”如此 meta 的细节入手。但从我个人角度
    发表于 02-16 14:26

    rt-thread上下文切换函数的意义在哪?

    Cortex-M3内核上下文切换函数rt_hw_context_switch()/ rt_hw_context_switch_interrupt()中有个判断rt_thread_switch_interrupt_flag的地方,不知道意义在哪?
    发表于 03-10 11:28

    中断中的上下文切换详解

    任务上下文切换的诉求。  为什么在中断服务函数中会产生任务上下文切换的诉求?因为中断中可能会进行信号量post之类的动作(这可能会触发此前一直处于pend状态的,且比当前被中断打断的任务优先级更高的任务
    发表于 03-23 17:18

    CPU上下文切换的详细资料讲解

    当UCOS-III转向执行另一项新任务的时候,他保存了当前任务的CPU寄存器到堆栈,并从新任务的堆栈CPU寄存器载入CPU,这个过程叫做上下文切换
    发表于 08-16 17:31 2次下载
    CPU<b class='flag-5'>上下文切换</b>的详细资料讲解

    如何分析Linux CPU上下文切换问题

    在我的上一篇文章:《探讨 Linux CPU 的上下文切换》中,我谈到了 CPU 上下文切换的工作原理。快速回顾一下,CPU 上下文切换是保证 Linux 系统正常运行的核心功能。可分为进程
    的头像 发表于 05-05 20:11 1908次阅读

    Linux技术:什么是cpu上下文切换

    过多的上下文切换会消耗 CPU 的时间来保存和恢复寄存器、程序计数、内核和虚拟内存等数据,从而导致系统性能显着下降。 既然上下文切换对系
    发表于 09-01 09:31 438次阅读
    Linux技术:什么是cpu<b class='flag-5'>上下文切换</b>

    FreeRTOS系列技术文章:上下文切换

    嵌入式实时操作系统(RTOS)中的上下文切换是指保存和恢复任务的状态,以使调度程序能够切换到另一个任务,从而促进多任务处理。
    的头像 发表于 11-21 15:48 1096次阅读