Tow*_*wer 12 concurrency assembly intel
我很想知道如何编写Intel x86程序集上的并发软件.带有屈服的线程或协同程序都很有趣.
我意识到这在组装中不切实际,但我只是好奇.
jan*_*neb 10
如果你在谈论用户空间,就像你在例如C中所做的那样.也就是说,你用适当的参数调用pthread_create()(或者操作系统上的"创建新线程"API)(包括地址)新线程的"主要"功能)然后关闭你.
如果你在谈论没有操作系统帮助你的裸机级别,那么你将为你的新线程的堆栈分配一块内存(来自你之前写的内存分配器),设置一个周期性的计时器滴答,它运行(您之前编写的)调度程序代码,用于保存寄存器内容并在您的线程堆栈之间切换等.
至于如何使用ASM而不是C?好吧,除了更多的汗水和眼泪,基本相同.
小智 9
在X86处理器上,多处理器(和多线程)通信通过APIC(高级可编程中断控制器)http://en.wikipedia.org/wiki/Intel_APIC_Architecture完成.
当OS启动时,只有一个逻辑处理器正在运行OS代码,以确认传统的单处理器行为.
操作系统使用APIC向每个其他线程发送"SIPI"(启动处理器间中断).
每个线程都会唤醒,并更新一个内存区域,以便主线程知道它必须处理多少个处理器.
在每个线程宣布自己之后,它进入低功耗,可中断状态.
当OS想要在该逻辑处理器上运行某些东西时,它当前正在运行的处理器通过APIC发送IPI(InterProcessor Interrupt).
任务完成后,逻辑处理器可以返回低功耗状态,等待下一个中断.