我目前正在尝试从UNIX中获得某些版本的空闲()函数。我有源代码,但我对汇编语言不在行(最近我一直在试图改变)。有人能帮我更好地了解它的工作原理吗?
我试过寻找它,但没有什么有用的东西。我还查阅了“关于UNIX的狮子评论”一书,但没有找到任何解释。
这是函数的源代码,那是是完整源代码的链接。
.globl _idle
_idle:
mov PS,-(sp)
bic $340,PS
wait
mov (sp)+,PS
rts pc发布于 2019-07-30 14:03:57
这是PDP 11/40汇编语言,它在手册中定义。
让我们分道扬镳,一行行:
.globl _idle # define a global symbol called idle
_idle: # this is the label for the global symbol
mov PS,-(sp) # push processor state onto stack
bic $340,PS # clear priority level bits - effectively enable all interrupts
wait # wait for an interrupt
mov (sp)+,PS # pop processor state from stack
rts pc # return from function
-(sp)和(sp)+应被理解为与C/C++运算符--sp和sp++等效。
因此,它可以有效地保存状态,清除优先级级别位,然后等待中断。一旦中断到达,它就恢复状态并返回工作。
有关PS寄存器内容的定义,请参阅手册中的2.3.2部分处理器状态字。
现在,由于各种原因,wait操作将被中断,其中最重要的是实时时钟中断,因此它会被周期性地唤醒来做更多的工作。
当您查看源代码时,有两个地方调用了idle()例程--一个是从恐慌处理程序中调用的,一个是在无限循环中调用的,另一个是在swtch中调用的,后者在进程之间交换,当它找不到一个可运行的进程进入空闲例程时。
https://stackoverflow.com/questions/57273019
复制相似问题