【发布时间】:2013-11-29 22:01:57
【问题描述】:
我正在尝试在程序集中实现绿色线程/进程。
例如,我得到了这个带有两个循环的 x64 汇编代码(nasm 语法)。它输出很多'a',但我希望它输出'a's和'b's。这当然不是一个真实的例子,只要将两个循环结合起来就可以解决问题。
global main
extern printf
section .text
main:
.t1:
mov eax, 0
mov rdi, a
call printf
jmp .t1
.t2:
mov eax, 0
mov rdi, b
call printf
jmp .t2
section .data
a: db "a", 0
b: db "b", 0
所以我想编写某种调度程序,每隔几微秒将指令指针更改为main.t1 或main.t2,同时保存一些寄存器并更改堆栈指针。
我知道如果这在用户空间是不可能的,那么进程似乎不太可能更改正在运行的程序,因为这会引入一些安全漏洞。如果不能从用户空间完成,是否可以使用内核模块?
【问题讨论】:
标签: assembly x86-64 multitasking green-threads