Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux ISR的堆栈在哪里_Linux_Operating System_Linux Kernel - Fatal编程技术网

Linux ISR的堆栈在哪里

Linux ISR的堆栈在哪里,linux,operating-system,linux-kernel,Linux,Operating System,Linux Kernel,我知道linux进程有两个独立的堆栈——一个在用户空间,另一个在内核空间。但是ISR使用的堆栈在哪里?它是否与进程的内核空间堆栈共享?在以前,ISR通常使用当前进程的堆栈提供服务。因此,当中断发生时,当前执行进程将把它的所有数据保存在它的内核或用户空间堆栈上,并开始使用它自己的内核堆栈执行适当的ISR函数。 但随着ISR堆栈的引入,所有与ISR相关的处理都是使用一个名为ISR堆栈的单独堆栈来完成的。ISR堆栈位于内核空间,因为只有内核线程可以执行中断的ISR处理程序。 用户空间不知道也不关心中断

我知道linux进程有两个独立的堆栈——一个在用户空间,另一个在内核空间。但是ISR使用的堆栈在哪里?它是否与进程的内核空间堆栈共享?

在以前,ISR通常使用当前进程的堆栈提供服务。因此,当中断发生时,当前执行进程将把它的所有数据保存在它的内核或用户空间堆栈上,并开始使用它自己的内核堆栈执行适当的ISR函数。
但随着ISR堆栈的引入,所有与ISR相关的处理都是使用一个名为ISR堆栈的单独堆栈来完成的。ISR堆栈位于内核空间,因为只有内核线程可以执行中断的ISR处理程序。
用户空间不知道也不关心中断是在当前进程的内核堆栈中提供还是在单独的ISR堆栈中提供。由于中断是每个cpu发生的,因此ISR堆栈必须是每个cpu

回答您最初的问题:若ISR堆栈存在,那个么它和进程内核堆栈完全不同。否则,进程内核堆栈将用于处理中断


ISR堆栈的存在也取决于体系结构。

为什么要问这个问题?从应用程序的角度来看,与内核交互的唯一方法是通过系统调用,因此内核堆栈不可访问(因此应用程序“不存在”)。从内核模块的角度来看,您不关心用户空间堆栈(只关心调度程序),这取决于体系结构。