我有一个关于 Linux 的深度工作的问题。
假设一个多线程进程正在 CPU 中执行。在这种情况下,我们将有一个正在 CPU 上执行的线程。在更广泛的情况下,我们会将属于进程的相应页面加载到 RAM 中以供执行。
假设线程进行系统调用。我对这之后的工作有点不清楚。中断将产生一个调用。我的一个问题是谁来接听这个电话?
假设系统有 m:n 个用户级线程到内核级线程的映射,我假设相应的内核级线程会响应这个调用。
因此内核将查找中断向量表并获取需要执行的例程。我的下一个问题是执行中断时将使用哪个堆栈?是内核线程的堆栈还是用户级线程的堆栈?(我假设它将是内核线程的堆栈。)
回到程序流程,假设操作是使用fopen
. 我的下一个问题是如何从 ISR 跳转到系统调用?或者我们的 ISR 是否映射到系统调用?
同样在更广泛的情况下,当内核线程正在执行时,我假设 RAM 上的“OS 区域”将用于容纳正在执行系统调用的页面。
再次从不同的角度看它(希望你还和我在一起)最后我假设相应的内核线程正在由 CPU 调度程序处理,其中在上下文切换中会发生从用户级线程到相应的内核级线程当fopen
系统调用被应答时。
我做了很多假设,如果有人能够消除疑虑或至少引导我朝着正确的方向前进,那将是非常棒的。