1

当用户进程执行系统调用时,会调用内核进程。现在这不会导致上下文切换吗?由于内核进程不同于用户进程。或者我说内核例程(由系统调用调用)和用户进程属于同一个进程是错误的吗?

4

1 回答 1

2

“当用户进程执行系统调用时,会调用内核进程”——实际上,内核代码会被调用。任何系统调用都将不可避免地导致保护上下文的变化——一个环循环。这有多深取决于通话。如果调用到达 ring 0,那里的内核代码可以访问所有用户和内核线程,因此那里的内核代码通常不能被描述为“进程”——具有内存管理/安全上下文的东西保护。通常,往返于 ring 0 的 ring-cycle 需要 2000+ cpu-cycles(德国歌剧除外,它需要三天)。无论系统调用是否导致线程上下文切换和/或进程上下文切换,都绝对需要这种开销。

在系统调用导致更改正在运行的线程集的情况下,将产生线程上下文切换的额外开销,特别是如果更改需要抢占另一个处理器上运行的线程时。

如果任何新运行的线程与被抢占的线程属于不同的进程,则进程上下文切换的开销更大。

于 2012-02-02T00:11:59.520 回答