0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

上下文切換與棧寄存器變化

冬至子 ? 來源:BU科研通通 ? 作者:BU科研通通 ? 2023-09-20 15:46 ? 次閱讀

call指令

CPU執(zhí)行call指令時,進(jìn)行兩步操作:

(1)將當(dāng)前的IP或CS和IP壓入棧中;

(2)轉(zhuǎn)移。

即:

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

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

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

16位位移=“標(biāo)號”處的地址-call指令后的第一個字節(jié)的地址

ret和retf指令

ret指令用棧中的數(shù)據(jù),修改IP的內(nèi)容,從而實現(xiàn)近轉(zhuǎn)移;

retf指令用棧中的數(shù)據(jù),修改CS和IP的內(nèi)容,從而實現(xiàn)遠(yuǎn)轉(zhuǎn)移。

CPU執(zhí)行ret指令時,進(jìn)行下面的兩步操作:

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

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

CPU執(zhí)行retf指令時,進(jìn)行下面四步操作:

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

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

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

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

中斷過程的上下文切換:

圖片

在進(jìn)程切換時,一個進(jìn)程存儲在處理器寄存器中的中間數(shù)據(jù)叫做進(jìn)程的上下文。在進(jìn)程未占用處理器時,進(jìn)程的上下文是存儲在進(jìn)程的私有堆棧中的。

圖片

關(guān)于寄存器

64位環(huán)境中用rip rsp rbp表示

32位環(huán)境用eip esp ebp 表示

CS是代碼段寄存器

IP是指令指針寄存器(相當(dāng)于偏移地址)

SS:存放棧的段地址;

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

BP: 基數(shù)指針寄存器BP(base pointer),存儲堆?;刂?。

SP,BP一般與段寄存器SS 聯(lián)用,以確定堆棧寄存器中某一單元的地址。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19049

    瀏覽量

    228549
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5275

    瀏覽量

    119689
  • 串口中斷
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    13828
收藏 人收藏

    評論

    相關(guān)推薦

    編寫一個任務(wù)調(diào)度程序,在上下文切換后遇到了一些問題求解

    \"rfe\" 不會在 A[11] 寄存器中設(shè)置新的返回地址。 當(dāng)任務(wù)函數(shù)以\"ret16\" 結(jié)束時,μC 將在陷阱中運(yùn)行。 我在上下文切換的準(zhǔn)備過程中錯過了什么? 在上下文切換/\"rfe\" 之后,A[11] 的正確行為是
    發(fā)表于 05-22 07:50

    關(guān)于進(jìn)程上下文、中斷上下文及原子上下文的一些概念理解

    調(diào)用,用戶空間的應(yīng)用程序就會進(jìn)入內(nèi)核空間,由內(nèi)核代表該進(jìn)程運(yùn)行于內(nèi)核空間,這就涉及到上下文切換,用戶空間和內(nèi)核空間具有不同的 地址映射,通用或?qū)S玫?b class='flag-5'>寄存器組,而用戶空間的進(jìn)程要傳遞很多變量、參數(shù)給內(nèi)核
    發(fā)表于 09-06 09:58

    BT堆棧上下文切換

    100ms就會產(chǎn)生一個上下文切換。上下文切換每秒似乎有點高。我想我真的不能抱怨10個開關(guān),但是有什么東西嗎?在BT協(xié)議中真的需要這個嗎?不能處理中斷驅(qū)動嗎?(這是BT是可連接的,但既沒有連接,也沒有
    發(fā)表于 12-17 16:30

    上下文切換簡介

    處理系統(tǒng)中,CPU需要處理所有程序的操作,當(dāng)用戶來回切換它們時,需要記錄這些程序執(zhí)行到哪里。上下文切換就是這樣一個過程,他允許CPU記錄并恢復(fù)各種正在運(yùn)行程序的狀態(tài),使它能夠完成切換操作。
    發(fā)表于 08-06 08:08

    上下文切換的情況發(fā)生

    處理系統(tǒng)中,CPU需要處理所有程序的操作,當(dāng)用戶來回切換它們時,需要記錄這些程序執(zhí)行到哪里。上下文切換就是這樣一個過程,他允許CPU記錄并恢復(fù)各種正在運(yùn)行程序的狀態(tài),使它能夠完成切換操作。
    發(fā)表于 08-07 08:38

    ucos上下文該怎么切換?

    有兩個問題請教一下大神!??!-->1在ucos中的上下文切換時發(fā)生在pendSV異常中,代碼見下:PendSV_Handler CPSIDI; Prevent interruption
    發(fā)表于 08-26 03:21

    基于cortex-m3的rt-thread系統(tǒng)如何實現(xiàn)線程上下文切換

    rt_interrupt_from_thread變量設(shè)置為空。線程上下文切換是,上下文保存在各個線程的空間中, 這里我們只需要在PendSV中手動保存和恢復(fù)r4-r11寄存器,因為其
    發(fā)表于 05-05 15:00

    Cortex-M4在線程上下文切換中的優(yōu)化

    cortex-m4相對比cortex-m3,在線程上下文切換中,主要增加了FPU寄存器,總共需要保存34個寄存器,合計136byte。因此原來在cortex-m3上面運(yùn)行的程序在cortex-m4f
    發(fā)表于 08-05 10:58

    討論ARM mbed OS(RTX) 的上下文切換

    1. 墊話從本文開始,正式進(jìn)入對調(diào)度實現(xiàn)細(xì)節(jié)及底層的探討。本文討論 ARM mbed OS(RTX) 的上下文切換。解構(gòu)調(diào)度,按說不應(yīng)該從“上下文切換”如此 meta 的細(xì)節(jié)入手。但從我個人角度
    發(fā)表于 02-16 14:26

    rt-thread上下文切換函數(shù)的意義在哪?

    Cortex-M3內(nèi)核上下文切換函數(shù)rt_hw_context_switch()/ rt_hw_context_switch_interrupt()中有個判斷rt_thread_switch_interrupt_flag的地方,不知道意義在哪?
    發(fā)表于 03-10 11:28

    中斷中的上下文切換詳解

    任務(wù)上下文切換的訴求?! 槭裁丛谥袛喾?wù)函數(shù)中會產(chǎn)生任務(wù)上下文切換的訴求?因為中斷中可能會進(jìn)行信號量post之類的動作(這可能會觸發(fā)此前一直處于pend狀態(tài)的,且比當(dāng)前被中斷打斷的任務(wù)優(yōu)先級更高的任務(wù)
    發(fā)表于 03-23 17:18

    CPU上下文切換的詳細(xì)資料講解

    當(dāng)UCOS-III轉(zhuǎn)向執(zhí)行另一項新任務(wù)的時候,他保存了當(dāng)前任務(wù)的CPU寄存器到堆棧,并從新任務(wù)的堆棧CPU寄存器載入CPU,這個過程叫做上下文切換
    發(fā)表于 08-16 17:31 ?2次下載
    CPU<b class='flag-5'>上下文切換</b>的詳細(xì)資料講解

    如何分析Linux CPU上下文切換問題

    在我的上一篇文章:《探討 Linux CPU 的上下文切換》中,我談到了 CPU 上下文切換的工作原理。快速回顧一下,CPU 上下文切換是保證 Linux 系統(tǒng)正常運(yùn)行的核心功能??煞譃檫M(jìn)程
    的頭像 發(fā)表于 05-05 20:11 ?1879次閱讀

    Linux技術(shù):什么是cpu上下文切換

    過多的上下文切換會消耗 CPU 的時間來保存和恢復(fù)寄存器、程序計數(shù)、內(nèi)核和虛擬內(nèi)存等數(shù)據(jù),從而導(dǎo)致系統(tǒng)性能顯著下降。 既然上下文切換對系
    發(fā)表于 09-01 09:31 ?400次閱讀
    Linux技術(shù):什么是cpu<b class='flag-5'>上下文切換</b>

    FreeRTOS系列技術(shù)文章:上下文切換

    嵌入式實時操作系統(tǒng)(RTOS)中的上下文切換是指保存和恢復(fù)任務(wù)的狀態(tài),以使調(diào)度程序能夠切換到另一個任務(wù),從而促進(jìn)多任務(wù)處理。
    的頭像 發(fā)表于 11-21 15:48 ?1049次閱讀