Articles of 中断

如何打断fread电话?

我有以下情况: 有一个线程从一个fread调用设备读取。 只要没有数据从设备发送,此呼叫就会被阻止。 当我停止这个线程时,它仍然挂在这个线程内。 现在我在fread的man页面里面find了以下内容: 错误 在符合Single UNIX Specification的所有系统上,fread()函数设置errno,如下列条件所列: [EINTR]由于接收到信号,读取操作终止,没有数据传输。 这意味着有一种方法可以中断来自不同线程的呼叫。 但我不知道如何。 有人可以告诉我如何发送信号来打断fread电话吗? 我需要发送什么信号? 更新08-10-10 09:25 我还没有得到它的工作。 我用不同的信号尝试了kill()和pthread_kill()。 但似乎没有中断fread()调用。 我所做的唯一工作是杀死整个应用程序,但这不是我想要的。

为什么中断处理程序有睡眠function?

为什么中断处理程序不能进入睡眠状态? 我有同样的问题2意见: – 中断处理程序是不可调度的? 因为它没有task_struct。 如果处理器处于睡眠状态,则系统可能会挂起,因为系统时钟中断被屏蔽,无法调度睡眠进程。 没有得到的是,中断处理程序是可调度的,但是由于优先级较低的系统时钟中断因为较高优先级中断而被屏蔽而不能再次产生。 请给我一个很好的例子。

电平触发中断处理和嵌套中断

[GIC v2更新的问题有3个寄存器ACK,EOIR,DIR] 这是我需要别人澄清和说明以下顺序是正确的最基本的问题。 在下面的曲拱中, [Core] —– [ Interrupt Controller ] –Level Triggered — [Device] 一个。 设备提高水平并通知中断控制器 湾 中断控制器触发中断的核心。 (假设核心的中断被允许) C。 假设中断控制器是GIC(与ARM一起使用)并且有3个寄存器 – 中断禁用(GICC_DIR) – 中断ACK(返回IRQ号),(GICC_IAR) – 中断寄存器结束(GICC_EOIR) 注意:在GICv2实现中,将GICC_CTLR.EOImode设置为1会分离优先级丢弃和中断禁用操作。 参考:3中断处理和优先级(ARM IHI 0048B.b ID072613) 现在需要确认的几点, d。 直到核心没有确认中断获得IRQ,中断保持挂起,并且设备中断线路到中断控制器电平高 即 核心禁止其中断。 核心ACK是否得到IRQ,中断线没有改变。 现在可以有两种情况。 A.核心屏蔽GIC上的特定中断,但在设备上什么都不做,这将清除设备上的中断。 核心启用其中断 B.内核设置GICC_EOImode = 1,并将中断ID写入EOIR。 核心启用其中断 基于(A)或(B) Q1。 中断是否会从中断控制器再次提升到核心? 现在怎么会在这种情况下中断嵌套工作呢?

在python的任意时间捕获用户input

有没有办法发送一个中断到python模块时,用户在控制台中input的东西? 例如,如果我正在运行一个无限的while循环,我可以用一个try /除了KeyboardInterrupt来包围它,然后在except块中做我需要做的事情。 有没有办法用任何input复制这个function? 控制顺序还是标准字符? 编辑:对不起,这是在Linux上

request_irq中的dev_id参数是什么?

在函数声明中 int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long irqflags, const char *devname, void *dev_id); dev_id是一个“in”参数还是一个“out”参数? 我们从哪里得到这个号码?

什么是Linux本地计时器中断?

所有的在标题。 任何链接到良好的文件是受欢迎的。

在IRQ合并之前,NAPI有哪些优势?

众所周知,有两种方法可以避免在高负载networking中出现硬件中断的一些开销,当硬件中断太多时,切换到它们需要很多时间。 程序风格的performance和select方法是非常重要的。 NAPI(新API) – 不使用硬件中断 ,每隔一段时间轮询以太网设备。 Linux内核默认使用中断驱动模式,当进入的数据包stream量超过一定的阈值时,只能切换到轮询模式。 http://en.wikipedia.org/wiki/New_API内核可以定期检查传入networking数据包的到达而不中断 ,从而消除了中断处理的开销。 中断合并 – 使用硬件中断 ,但是如果发生中断,则禁止中断并在一段时间内开始轮询 ,之后轮询终止并且中断被激活。 https://en.wikipedia.org/wiki/Interrupt_coalescing一种技术,其中通常会触发硬件中断的事件被阻止 , 直到一定数量的工作挂起,或超时计时器触发。 两种方法都没有明显的中断成本 – 这对于默认的中断驱动模式是有利的。 但是第二种方法 – 中断合并更合理,因为它: 延迟较less – 一旦包到达,立即尝试立即处理中断,或在最近发生中断时轮询。 对面的NAPI将不会立即处理该帧,而是会等待下一轮的一定时间。 较less的CPU使用率 – 仅在至less有一个数据包已经到达的情况下才开始轮询。 但是,即使帧没有收到,也不是徒劳地进行民意调查,就像做了NAPI一样。 在IRQ合并之前,NAPI有哪些优势?

在信号处理程序中,如何知道程序在哪里中断?

在x86(64位或32位)Linux上 – 例如: void signal_handler(int) { // want to know where the program is interrupted … } int main() { … signal(SIGALRM, signal_handler); alarm(5); … printf(…); <——- at this point, we trigger signal_handler … } 在signal_handler中,我们怎么知道我们在main()的printf中被中断?

简单的中断处理程序:request_irq返回错误代码-22

我正在写一个简单的内核模块,它可以注册一个中断并处理它。 但是,当我尝试通过调用request_irq函数来注册中断时,它将返回错误代码-22: 错误:无法请求IRQ 30 – 代码-22,EIO 5,EINVAL 22 我相信,这个错误代码等于EINVAL(无效的参数) 请告诉我,我做错了什么。 这里是一个模块: #include <linux/init.h> #include <linux/module.h> #include <linux/irq.h> #include <linux/io.h> #include <linux/irqdomain.h> #include <linux/interrupt.h> #include <linux/of.h> #include <linux/of_address.h> #include <asm/exception.h> #include <asm/mach/irq.h> void int068_interrupt(int irq, void *dev_id, struct pt_regs *regs) { printk("Interrupt should be handled there\n"); } static int __init clcdint_init(void) { unsigned int irq; unsigned […]

中断被阻止的读取

我的程序经历了这样一个循环: … while(1){ read(sockfd,buf,sizeof(buf)); … } 读取function在等待input时阻塞,恰好来自套接字。 我想处理SIGINT,基本上告诉它如果正在读取,然后调用任意函数,则停止读取函数。 做这个的最好方式是什么?