我很好奇如何在Intel x86汇编上编写并发软件。使用线程或带有yielding的协程都很有趣。
我知道在汇编中这样做并不实际,但我只是好奇。
注:保留了原文中的HTML标签。
我知道在汇编中这样做并不实际,但我只是好奇。
注:保留了原文中的HTML标签。
在X86处理器上,多处理器(和多线程)通信是通过APIC(高级可编程中断控制器)http://en.wikipedia.org/wiki/Intel_APIC_Architecture完成的。
当操作系统启动时,只有一个逻辑处理器正在运行操作系统代码,以符合传统的单处理器行为。
操作系统使用APIC向每个其他线程发送“SIPI”(启动互处理器中断)。 每个线程都会唤醒,并更新内存区域,以便主线程知道它有多少处理器可用。 每个线程宣布自己后,进入低功耗、可中断状态。
当操作系统想要在这个逻辑处理器上运行一些东西时,它要求当前正在运行的处理器通过APIC发送一个IPI(互处理器中断)。 任务完成后,逻辑处理器可以返回到低功耗状态,等待下一个中断。