Unix中的恐慌功能



我当前正在尝试从UNIX OS工作中获取函数IDLE((的某些版本。我有源代码,但是我对汇编语言不好(我最近一直在尝试更改(。有人可以帮助我更好地了解它的工作原理吗?

我已经尝试搜索它,但是没有什么有用的。我还检查了《狮子对Unix的评论》一书,但我没有找到任何解释。

这是功能的来源,这是完整源代码的链接。

.globl  _idle
_idle:
    mov PS,-(sp)
    bic $340,PS
    wait
    mov (sp)+,PS
    rts pc

好吧,这是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++操作员--spsp++

因此,它有效地保存了状态,清除了优先级级别位,然后等待中断。中断到达后,它将恢复状态并恢复工作。

请参阅手册中的[2.3.2处理器状态词]的部分,以定义PS寄存器的内容。

现在,出于多种原因,wait操作将被中断,其中最重要的是实时时钟中断,因此它会定期唤醒以进行更多工作。

当您查看源时,在两个地方称为idle()例程 - 一个来自恐慌处理程序,无限循环中的一个,而在swtch中的下一个是在过程之间交换的,当它找不到。可运行的过程进入空闲例程。

相关内容

  • 没有找到相关文章

最新更新