首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UNIX中的Panic函数

UNIX中的Panic函数
EN

Stack Overflow用户
提问于 2019-07-30 13:33:48
回答 1查看 136关注 0票数 1

我目前正在尝试从UNIX中获得某些版本的空闲()函数。我有源代码,但我对汇编语言不在行(最近我一直在试图改变)。有人能帮我更好地了解它的工作原理吗?

我试过寻找它,但没有什么有用的东西。我还查阅了“关于UNIX的狮子评论”一书,但没有找到任何解释。

这是函数的源代码,那是是完整源代码的链接。

代码语言:javascript
复制
.globl  _idle
_idle:
    mov PS,-(sp)
    bic $340,PS
    wait
    mov (sp)+,PS
    rts pc
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-30 14:03:57

这是PDP 11/40汇编语言,它在手册中定义。

让我们分道扬镳,一行行:

代码语言:javascript
复制
.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++等效。

因此,它可以有效地保存状态,清除优先级级别位,然后等待中断。一旦中断到达,它就恢复状态并返回工作。

有关PS寄存器内容的定义,请参阅手册中的2.3.2部分处理器状态字。

现在,由于各种原因,wait操作将被中断,其中最重要的是实时时钟中断,因此它会被周期性地唤醒来做更多的工作。

当您查看源代码时,有两个地方调用了idle()例程--一个是从恐慌处理程序中调用的,一个是在无限循环中调用的,另一个是在swtch中调用的,后者在进程之间交换,当它找不到一个可运行的进程进入空闲例程时。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57273019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档