【发布时间】:2012-02-24 15:49:47
【问题描述】:
当用户进程执行系统调用时,会调用内核进程。现在这个 NOT 如何导致上下文切换?由于内核进程 不同于用户进程。或者我说内核例程(由系统调用调用)和用户进程属于同一个进程是错误的吗?
【问题讨论】:
标签: operating-system context-switch kernel-mode
当用户进程执行系统调用时,会调用内核进程。现在这个 NOT 如何导致上下文切换?由于内核进程 不同于用户进程。或者我说内核例程(由系统调用调用)和用户进程属于同一个进程是错误的吗?
【问题讨论】:
标签: operating-system context-switch kernel-mode
'当用户进程执行系统调用时,会调用内核进程'——实际上,内核代码会被调用。任何系统调用都将不可避免地导致保护上下文的变化——一个环循环。这有多深取决于通话。如果调用到达 ring 0,那里的内核代码可以访问所有用户和内核线程,因此那里的内核代码通常不能被描述为“进程”——具有内存管理/安全上下文的东西保护。通常,往返于 ring 0 的 ring-cycle 需要 2000+ cpu-cycles(德国歌剧除外,它需要三天)。无论系统调用是否导致线程上下文切换和/或进程上下文切换,这种开销都是绝对需要的。
在系统调用导致更改运行线程集的情况下,线程上下文切换会产生额外开销,尤其是在更改需要抢占另一个处理器上运行的线程时。
如果任何新运行的线程与被抢占的线程属于不同的进程,则进程上下文切换的开销更大。
【讨论】: