假设一个5级流水线架构(IF =指令获取,ID =指令解码,EX =执行,MEM =存储器访问,WB =寄存器写回).有4条指令必须执行.
(这些样本说明不准确,但我相信这一点会被理解)
在第五个时钟周期,这些指令将在管道中,如下所示.
添加a,b,c [IF ID EX MEM WB]
添加a,b,d [IF ID EX MEM]
添加a,b,e [IF ID EX]
添加a,b,f [IF ID]
现在,如果发生硬件中断,这些指令会发生什么.只有在执行流水线中的所有指令后才能处理中断吗?是否会以不同的方式处理软件中断和异常?
在内核2.6.11.5中,除零异常处理程序设置为:
set_trap_gate(0,÷_error);
Run Code Online (Sandbox Code Playgroud)
根据"了解Linux内核",用户模式进程无法访问英特尔陷阱门.但是用户模式进程很可能也会生成一个divide_error.那么为什么Linux以这种方式实现呢?
[编辑]我认为问题仍然是开放的,因为set_trap_gate()将IDT条目的DPL值设置为0,这意味着只有CPL = 0(读取内核)代码才能执行它,因此我不清楚如何从该处理程序调用此处理程序用户模式:
#include<stdio.h>
int main(void)
{
int a = 0;
int b = 1;
b = b/a;
return b;
}
Run Code Online (Sandbox Code Playgroud)
这是编译的gcc div0.c.输出./a.out是:
浮点异常(核心转储)
因此看起来这不是由0陷阱代码划分处理的.
我经常在C++面试问题中看到以下术语:
我不确定这些术语之间的区别是什么.有人可以提供清晰简洁的解释吗?
编辑:上下文问题是:" 当你删除指针两次时会发生什么? "但是知道这些术语之间的差异对我来说比对答案更重要.
在学习操作系统概念时,我看到了术语陷阱指令。“执行 TRAP 指令以从用户模式切换到内核模式。” 我无法理解陷阱指令的作用。
我学习linux编程有一段时间了,我知道signal&system call是完全不同的概念。
据我理解,system call是内核向外部提供的接口,signal是一种让进程从内核或其他进程接收信息的机制。他们对我来说是一种逆向过程。
我理解正确吗?
这两个概念之间有更深或更简单的关系吗?
这似乎是一个愚蠢的问题,但有时我会将它们混合在一起,我需要仔细思考以区分它们。我试图得到一个简单的意见来帮助我理解它们之间的关系和区别。
陷阱和中断之间的区别似乎很明显:陷阱是对内核的软件调用(例如通过异常),而中断与硬件(磁盘、I/O 和外设)相关。鼠标和键盘等设备...)(在此处了解有关差异的更多信息)。
知道了这一点,按 Control + C 结束进程应该属于什么类别?它是一个软件调用的调用,因此是一个陷阱,因为它可以从 Shell 等执行,还是一个中断,因为它是 CPU 从键盘接收的信号?或者中断完全在用户域之外,这意味着它是硬件在用户无法达到的级别上与 CPU 交互?
谢谢你!
我只想知道它们之间的基本区别.
我在某些地方发现TRAP本质上也被称为软件中断,或类似异常.
另外软件中断和异常之间的基本区别是什么.
软件中断可以由INT指令生成,但TRAP只能通过除零等特定场景生成?是对的吗?
请为此查询提供合适的答案,其中包括s/w中断陷阱和异常.
embedded microcontroller interrupt interrupt-handling interrupted-exception