标签: interrupt

CPU如何找到ISR并区分设备

我应该先分享我所知道的一切 - 那就是完全混乱.关于这个主题有几个不同的问题,所以请不要生气:).

1)为了找到ISR,CPU具有中断号.在x86机器(286/386及以上)中,有一个带有ISR的IVT; 每个4字节大小的条目.所以我们需要将中断数乘以4才能找到ISR.所以第一堆问题是 - 我完全混淆了CPU接收中断的机制.为了引发中断,首先设备应该探测IRQ - 然后是什么?中断号在"IRQ"上向CPU传输?我还读过像数据总线上设置ISR地址的设备; 什么呢?覆盖ISR的设备的概念是什么?有人可以告诉我几个CPU轮询中断的示例设备吗?它在哪里找到它们的ISR?

2)如果两个设备共享IRQ(这是非常可能的),它们之间的CPU有何不同?如果两个设备同时引发相同优先级的中断怎么办 我知道会有相同类型和低优先级中断的屏蔽 - 但这种通信是如何在CPU和设备控制器之间发生的?我研究了PIC和APIC在这个问题上的作用,但是无法理解.

谢谢阅读.非常感谢您的回答.

interrupt irq isr apic

10
推荐指数
2
解决办法
1万
查看次数

Ruby - 在中断上隐藏"^ C"

在Ruby中我有以下内容:

# Trap Interrupts
trap("INT") do
    puts "Shutting down..."
    exit
end
Run Code Online (Sandbox Code Playgroud)

当我中断程序时,将打印以下内容(Mac OSX Lion):

^ CShutting down ...

有没有办法^C在Ruby中隐藏?

ruby interrupt

10
推荐指数
1
解决办法
268
查看次数

如何知道linux中特定引脚的中断/ GPIO编号

我正在做一个我需要在Linux中处理中断的项目.

我使用的板是一个ARM9Board由三星(臂11处理器)的基础上S3C6410 MCU和它具有以下的I/O接口:

在此输入图像描述

如图所示,我有外部中断的EINTx引脚和GPIO引脚作为GPIO引脚,我不介意使用其中任何一个,但我没有他们的数字!

对于EINTx引脚:

我打电话的时候

int request_irq(unsigned int irq, void (*handler)(int, struct pt_regs *), 
unsigned long flags, const char *device); 
Run Code Online (Sandbox Code Playgroud)

我需要中断号作为函数的第一个参数传递它,那么如何获得irq数,例如EINT16引脚?

对于GPxx引脚: 与我需要GPIO引脚编号将其传递给这些功能的故事相同

int gpio_request(unsigned gpio, const char *label);
int gpio_direction_input(unsigned gpio);
int gpio_to_irq(unsigned gpio);
Run Code Online (Sandbox Code Playgroud)

即,我如何知道GPP8引脚的GPIO编号?

我搜索了董事会文件和数据表,但它没有包含任何关于如何获得这些数字,任何想法或帮助在哪里看?

linux embedded arm interrupt embedded-linux

10
推荐指数
1
解决办法
2万
查看次数

Windows(或Linux)中的不间断进程?

有没有办法让程序无法中断(一个不间断的程序)?通过这个,我的意思是a process that can't be terminated by any signal, kill command, or any other key combinations在任何系统:Linux,Windows等.

首先,我有兴趣知道它是否可能.如果是,那么可能的范围是什么?

我主要用C,C++和python编写代码; 但我不知道这些编程语言中有任何这样的命令.

是否可以使用汇编语言,以及如何使用?或者使用嵌入式汇编代码(内联汇编)的高级语言c?

我知道有些信号可以捕获,有些信号不像SIGKILL和SIGSTOP.

我记得,当我some viruses couldn't be terminated even from Task Manager.习惯使用Windows-XP时,我想在低级语言中可能有一些解决方案.也许通过重写中断向量表.

我们可以使用TSR(挂钩)编写一个不间断的程序吗?因为TSR只能在重新启动计算机时或者从内存中明确删除TSR时删除.我对么?

我在Google上找不到任何东西.

c hook signal-processing interrupt interrupt-handling

10
推荐指数
1
解决办法
1781
查看次数

Python多处理atexit错误"atexit._run_exitfuncs中的错误"

我试图在Python中运行一个简单的多进程应用程序.主线程产生1到N个进程并等待它们都完成处理.每个进程都运行一个无限循环,因此它们可以在没有用户中断的情况下永远运行,因此我输入了一些代码来处理KeyboardInterrupt:

#!/usr/bin/env python
import sys
import time
from multiprocessing import Process

def main():
    # Set up inputs..

    # Spawn processes
    Proc( 1).start()
    Proc( 2).start()

class Proc ( Process ):
    def __init__ ( self, procNum):
        self.id = procNum
        Process.__init__(self)

    def run ( self ):
        doneWork = False

        while True:

            try:
                # Do work...
                time.sleep(1)
                sys.stdout.write('.')

                if doneWork:
                    print "PROC#" + str(self.id) + " Done."
                    break

            except KeyboardInterrupt:
                print "User aborted."
                sys.exit()

# Main Entry
if __name__=="__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

问题是当使用CTRL-C退出时,即使进程似乎立即退出,我也会收到一个额外的错误:

......User aborted.
Error …
Run Code Online (Sandbox Code Playgroud)

python process interrupt atexit

9
推荐指数
1
解决办法
1万
查看次数

帮助在NASM NAS for Assembly中编写TSR程序

我一直在尝试在程序集(16位)中为MS-DOS编写TSR(Terminate-Stay-Resident)程序(一般).我已经阅读了TSR上的维基百科页面以及在DOS中专门使用它的页面(但它似乎是用C语言教学,而不是直接用汇编语言).我查看了一个包含大量DOS中断文档的站点,找到了这个,这个,以及另一个与TSR程序最相关的站点.我无法发布所有链接,因为作为新用户,我在帖子上最多可以有2个超链接.

所以,我尝试在NASM中以实模式平面模型(.COM文件格式)编写(看似)非常简单的TSR程序.这是代码:

[BITS 16]
[ORG 0x0100]

[SECTION .text]

Start:
; Get current interrupt handler for INT 21h
mov AX,3521h                ; DOS function 35h GET INTERRUPT VECTOR for interrupt 21h
int 21h                     ; Call DOS  (Current interrupt handler returned in ES:BX)

mov WORD [v21HandlerSegment],ES     ; Store the current INT 21h handler segment
mov WORD [v21HandlerOffset],BX      ; Store the current INT 21h handler offset

; Write new interrupt handler for INT 21h
mov AX,2521h                ; DOS function 25h …
Run Code Online (Sandbox Code Playgroud)

assembly dos interrupt nasm tsr

9
推荐指数
1
解决办法
4249
查看次数

如何了解Java中的中断?

Thread.interrupt中断这样的调用sleep,joinwait.我想知道它是如何实现的.

我知道Thread.interrupt设置一面旗帜isInterrupted.是否wait只是调查这个标志?我希望它没有.所以我的问题是如何wait"了解"中断.

java multithreading interrupt

9
推荐指数
1
解决办法
145
查看次数

CPU如何空闲(或运行低于100%)?

我首先了解了计算机如何在原始单个存储程序机器方面工作.

现在我正在学习多任务操作系统,日程安排,上下文切换等等.我认为除了一件事之外,我对这一切都有相当好的把握.我一直认为CPU是一种不间断充电的东西.它总是知道接下来要去哪里(程序计数器),并且无限制地进入该指令等.

显然情况并非如此,因为我的台式计算机CPU并非始终以100%运行.那么CPU如何自行关闭或自行关闭,以及操作系统在这方面扮演什么角色?我猜测CPU上有一个输入允许它掉电......如果没有什么可以安排,操作系统可以设置它,但下一个逻辑问题是它如何重新启动?我猜两件事中的任何一件:

  • 它永远不会完全关闭,只是以非常低的频率运行,等待调度程序再次忙碌
  • 它完全关闭但被中断唤醒

我搜索了所有关于这方面的信息并且相当空手而归.任何见解都会非常感激.

hardware cpu operating-system process interrupt

9
推荐指数
1
解决办法
1847
查看次数

什么是重新安排中断(RES)?是什么导致的?如何在Linux内核中处理?

"RES:Rescheduling interrupts"和"LOC:Local timer interrupts"有什么区别?什么责任解​​雇RES中断?LOC是否与处理器中的定时器h/w生成的通用定时器中断相同?

另外,请详细说明在定时器中断和RES中断期间调度器的哪个部分被调用?如何在Linux内核中发生?

提前致谢.

processor timer interrupt scheduler linux-kernel

9
推荐指数
1
解决办法
1万
查看次数

手臂睡眠模式进入和退出差异WFE,WFI

我是ARM架构的新手,我正试图围绕唤醒机制.

首先,我发现很难找到关于此的好消息.ARM的文档似乎非常简洁.

我想要了解的是,当Cortex(尤其是我正在使用的M0)将被唤醒时.

作为参考,我还咨询了以下内容:

WFE指令的文档是:

    3.7.11. WFE
    Wait For Event.
    Syntax
    WFE
    Operation
    If the event register is 0, WFE suspends execution until 
      one of the following events occurs:
    an exception, unless masked by the exception mask registers or the current
      priority level
    an exception enters the Pending state, if SEVONPEND in the 
      System Control Register is set
    a Debug Entry request, if debug is enabled
    an event signaled by a peripheral or another processor in a 
      multiprocessor …
Run Code Online (Sandbox Code Playgroud)

arm interrupt cortex-m

9
推荐指数
1
解决办法
1万
查看次数