陷阱和中断有什么区别?
如果不同系统的术语不同,那么它们在x86上意味着什么?
为什么在catch块中调用Thread.currentThread.interrupt()方法?
在我的主线程中,我有一个while(listening)
调用accept()
我的ServerSocket对象的循环,然后启动一个新的客户端线程,并在接受新客户端时将其添加到Collection.
我还有一个Admin线程,我想用它来发出命令,比如'exit',这将导致所有客户端线程被关闭,自行关闭,并通过转向监听来关闭主线程.
但是,accept()
在while(listening)
循环块中调用,并且似乎没有任何方法可以中断它,因此无法再次检查while条件并且程序无法退出!
有一个更好的方法吗?或者某种方式来中断阻塞方法?
我有一个从a获取对象的类,BlockingQueue
并通过take()
在连续循环中调用来处理它们.在某些时候,我知道不会有更多的对象被添加到队列中.如何中断该take()
方法以阻止其阻塞?
这是处理对象的类:
public class MyObjHandler implements Runnable {
private final BlockingQueue<MyObj> queue;
public class MyObjHandler(BlockingQueue queue) {
this.queue = queue;
}
public void run() {
try {
while (true) {
MyObj obj = queue.take();
// process obj here
// ...
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是使用此类处理对象的方法:
public void testHandler() {
BlockingQueue<MyObj> queue = new ArrayBlockingQueue<MyObj>(100);
MyObjectHandler handler = new MyObjectHandler(queue);
new Thread(handler).start();
// get objects for handler to process …
Run Code Online (Sandbox Code Playgroud) 我想知道任何微处理器中FIQ和IRQ中断系统之间的区别,例如:ARM926EJ.
这是一个简短的问题.在某些时候,我的线程明白它应该自杀.最好的方法是什么:
那么,为什么在第一种情况下我们需要使用currentThread
?是Thread
不是指当前的线程?
据我所知,用户可以拥有一个进程,每个进程都有一个地址空间(包含有效的内存位置,这个进程可以参考).我知道进程可以调用系统调用并将参数传递给它,就像任何其他库函数一样.这似乎表明所有系统调用都是通过共享内存等进入进程地址空间.但也许,这只是一个错觉,因为在高级编程语言中,系统调用看起来像任何其他函数,当进程叫它.
但是,现在让我更进一步,更深入地分析引擎盖下发生的事情.编译器如何编译系统调用?它可能会将进程提供的系统调用名称和参数压入堆栈,然后将汇编指令说成"TRAP"或其他东西 - 基本上是用于调用软件中断的汇编指令.
该TRAP汇编指令由硬件执行,首先将模式位从用户切换到内核,然后将代码指针设置为说明中断服务程序的开始.从这一点开始,ISR在内核模式下执行,从堆栈中获取参数(这是可能的,因为内核可以访问任何内存位置,甚至是用户进程拥有的内存位置)并执行系统调用end放弃CPU,再次切换模式位,用户进程从停止的位置开始.
我的理解是否正确?
附上我理解的粗略图:
compiler-construction operating-system process interrupt system-calls
什么时候应该使用轮询方法什么时候应该使用基于中断的方法?是否存在可以使用两者的情况?
我正在研究英特尔保护模式.我发现Call Gate,Interrupt Gate,Trap Gate几乎是一样的.事实上,除了Call Gate具有参数计数器的字段,并且这3个门具有不同的类型字段,它们在所有其他字段中是相同的.
至于它们的功能,它们都用于将代码控制转移到某些代码段中的某些过程.
我很想知道,因为这3个门都包含跨权限边界调用所需的信息.为什么我们需要3种呢?不是一个就够好吗?
感谢您的时间和回应.
相关问题:何时使用中断门或陷阱门?
今天我想出了这个想法:
不同的目的,不同的门,以及不同的CPU行为细节进行.如IF标志处理.