【问题标题】:User mode and kernel mode: different program at same time用户模式和内核模式:不同的程序同时进行
【发布时间】:2019-04-29 16:02:07
【问题描述】:

是否有可能一个进程同时在内核模式下运行而另一个在用户模式下运行?

我知道,这不是编码问题,但如果有人知道答案,请指导我。

【问题讨论】:

  • 你为什么认为这会不寻常/被禁止?

标签: unix operating-system kernel usermode user-mode-linux


【解决方案1】:

要让两个进程同时运行,您必须拥有多个 CPU。事实上,当你有多个 CPU 时,在不同 CPU 上运行的内容是非常松散耦合的,你绝对可以让一个进程在一个 CPU 上运行用户代码,而另一个进程运行内核代码(例如,在系统调用中做一些工作)在另一个 CPU 上。

如果您只询问一个 CPU,在这种情况下,您不能同时有两个 运行 进程。但是你可以拥有两个runnable进程,这意味着两个进程都准备好运行但由于只有一个CPU,因此只有一个可以实际运行。其中一个可运行的进程可能处于用户模式 ​​- 例如,考虑一个长时间运行的紧密循环,该循环在其时间配额结束后被抢占。另一个可运行进程可能处于内核模式 - 例如,考虑一个从磁盘执行 read() 系统调用的进程,内核将读取请求发送到磁盘,但读取请求已完成,因此现在该进程已准备好再次运行内核模式并完成 read() 调用。

【讨论】:

  • 也就是说,如果我们只有一个CPU,那么无论是内核态还是用户态都只有一个进程,对吧?
  • “只有一个进程”是模棱两可的。可能有数百个进程,每个进程都可以在用户模式(即在计算中间被抢占)或内核模式(系统调用尚未完成,并使进程进入睡眠状态)处于休眠状态。但当然,在单个 CPU 上,任何时候实际上只有一个进程可以运行
【解决方案2】:

是的,这是可能的。甚至多个进程也可以同时处于内核模式。

只是一个进程不能同时处于两种模式。

【讨论】:

  • 如果一个进程使用线程,是否可以同时在两个进程中?
  • Jack、“线程”和“进程”在大多数意图和目的上,就内核而言是相同的概念,但出于历史原因,有一些特殊例外。两个不同的线程,即使是从同一个进程产生的,也会独立运行,并且独立运行或不运行系统调用(“内核模式”)。
【解决方案3】:

纠正我,但我想内核模式下没有任何进程,只有线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2013-07-05
    • 2011-06-23
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2017-08-04
    相关资源
    最近更新 更多