内核堆栈和用户堆栈之间有什么区别?为什么要使用内核堆栈?如果在ISR中声明了局部变量,那么它将被存储在哪里?每个进程都有自己的内核堆栈吗?然后这两个堆栈之间的进程如何协调?
我是操作系统的初学者,我有一个关于操作系统内核的问题。
我习惯于每个用户进程都有一个堆栈、堆、数据和代码的虚拟地址空间的标准概念。我的问题是,当操作系统内核发生上下文切换时,内核中运行的代码是否被视为具有堆栈、堆、数据和代码的进程?
我知道有一个专用的内核堆栈,用户程序无法访问它。它是否位于用户程序地址空间中?
我知道操作系统需要维护一些数据结构才能完成它的工作,比如进程控制块。这些数据结构位于何处?它们是否在用户程序地址空间中?它们是否在内核数据结构的某个专用内存段中?它们是否散布在有空间的物理内存周围?
最后,我看到了一些图表,其中操作系统代码位于用户程序地址空间的顶部。整个操作系统内核都在这里吗?如果没有,操作系统内核的代码还驻留在何处?
谢谢你的帮助!