C++ 如何在x86程序集中将当前线程的堆栈指针更改为新线程
我正在尝试创建用户级线程库。我有一个函数叫做C++ 如何在x86程序集中将当前线程的堆栈指针更改为新线程,c++,c,multithreading,assembly,x86,C++,C,Multithreading,Assembly,X86,我正在尝试创建用户级线程库。我有一个函数叫做 void switch\u thread(tcb*currSp,tcb*newSp)在C中实现。tcb*currSp,tcb*newSp是当前线程和新线程的堆栈指针切换线程功能应在x86程序集中实现。 我的问题是如何在x86程序集中将堆栈指针当前线程更改为新线程 .text .global switch_thread switch_thread: mov 0x4(%esp), %eax #current thre
void switch\u thread(tcb*currSp,tcb*newSp)
在C中实现。tcb*currSp
,tcb*newSp
是当前线程和新线程的堆栈指针<代码>切换线程功能应在x86程序集中实现。
我的问题是如何在x86程序集中将堆栈指针当前线程更改为新线程
.text
.global switch_thread
switch_thread:
mov 0x4(%esp), %eax #current thread
mov 0x8(%esp), %ecx #new thread
//no idea how to implement rest of it.
中的函数正是这样做的,这是您特别想要的。此功能在GLIBC中实现,可以在internet上的各个位置找到
随意查看程序集,它基本上恢复浮点上下文,然后恢复所有其他寄存器。修改esp很简单。其他一切都很难。您需要帮助修改esp吗?看起来你已经知道怎么做了。或者你想在其他方面得到帮助吗?给我一个关于实现其余部分的提示。这里不是这样的。具体问题也是如此。@rcgldr:典型的想法是使用“阻塞”库函数作为非阻塞系统调用的包装器。还要注意,“进程内的线程优先级”可以工作,但“系统内的线程优先级”没有内核就不能工作。最后,为了在多个CPU下保持正常的行为,您需要将N个内核线程映射到M个用户线程,这最终是一个巨大的痛苦。既然您说这是一个学校项目:项目规则允许向外界寻求帮助吗?(想必你至少要相信在你的写作中有任何外部帮助。)设法使用longjmp来进行实际的堆栈切换。我重申,堆栈切换是您遇到的最小问题。