【问题标题】:Operating system inside内部操作系统
【发布时间】:2012-05-14 22:26:08
【问题描述】:

我有三个问题让我很疑惑:

  1. 如果程序中的一个线程调用fork(),新进程是否 复制所有线程,还是新进程是单线程的?

  2. 如果一个线程调用exec(),将参数中指定的程序 要exec() 替换整个进程,包括所有线程?

  3. 系统调用是抢占式的吗?例如是否可以在系统调用中间调度进程?

【问题讨论】:

  • 您能否澄清问题 3 的含义?单个执行上下文总是会按顺序执行,那么您到底想到了什么?
  • @Alex:是的,我知道这一点,但我不确定 OP 想知道什么。她在询问“安排流程”。我认为一些澄清将有助于获得一些有用的答案。

标签: c unix operating-system system-calls


【解决方案1】:

对于exec,来自man execve

execve() 期间,除了调用线程之外的所有线程都被销毁。

来自man fork

子进程是使用单个线程创建的——调用fork()

【讨论】:

    【解决方案2】:

    W.r.t. #3:是的,您可以调用系统调用,直接或间接使另一个线程准备好运行。如果该线程的优先级高于当前线程,并且系统设计为在那个时候调度它,它就可以这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2016-07-12
      • 2014-04-21
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多