加入收藏 | 设为首页 | 会员中心 | 我要投稿 好传媒网 (https://www.haochuanmei.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

线程切换的问题

发布时间:2022-12-16 14:32:07 所属栏目:Unix 来源:未知
导读: 假设有2个线程:A和B。开始时A一直运行,并且进入内核,运行在内核态。经过一段时间以后,发生线程切换unix线程切换,并且在这段时间之内,A一直运行在内核态。当切换至B时,我的理解是需要

假设有2个线程:A和B。开始时A一直运行,并且进入内核,运行在内核态。经过一段时间以后,发生线程切换unix线程切换,并且在这段时间之内,A一直运行在内核态。当切换至B时,我的理解是需要将当前EAX,EIP等寄存器的值保存到A的系统堆栈中,以备A再次被调度运行时使用。

奇怪的是好像没有发现在线程切换时保存了这些寄存器的值。很困惑,难道运行在内核态时不需要用到EAX,EIP这些寄存器?望各位指点一下。

|

1、A和B除非在clone是指定共享内存,否则线程切换必须保存上下文环境

2、switch宏中有保存上下文,Lz没有找对地方

#define?switch_to(prev,?next,?last)?
asm?volatile(SAVE_CONTEXT......)
#define?SAVE_CONTEXT????"pushf?;?pushq?%%rbp?;?movq?%%rsi,%%rbpnt"

3、上下文切换是和系统调度分不开的,是在schedule函数中间接调用的,

而schedule函数不只在一个地方调用比如进程或线程阻塞或退出主动让出CPU、时间片用完在时钟中断调用、新进程或线程产生,而新线程的优先级高于当前线程也会调用。

|

上下文切换:

在Linux操作系统中,上下文是指处理器运行代码的寄存器环境,上下文切换必然进行寄存器保存和恢复。每个线程都处于各自的线程上下文环境、每个中断都处于各自的中断上下文环境。线程调度引发的是线程与线程之间的上下文切换,中断可能引发线程到中断之间的上下文切换,也可能引发中断到中断之间的上下文切换。

线程与线程上下文件切换的核心为:宏switch_to和例程__switch_to(),包括了将寄存器esp保存到thread.esp中,并加载新的值。

(编辑:好传媒网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章