【问题标题】:Questions about the fork() function in UNIX关于 UNIX 中的 fork() 函数的问题
【发布时间】:2015-01-22 16:47:27
【问题描述】:

我正在编写一个程序来模拟基于 unix 的操作系统来完成一项作业,但我有一些问题。

1) 我读到 UNIX 中尚未准备好执行的新创建进程处于“已创建”状态,而等待分配给处理器的进程处于“就绪”状态。 究竟会发生什么让“创建”的流程“准备好”? 在 fork() 函数中创建时,它的状态是否从“已创建”变为“就绪”?

2) 当 fork() 函数完成创建进程时,它会将进程放入 在 Job 队列中,然后一个长期调度程序选择将哪个进程放入 Ready 队列。它是否正确?因为我在其他地方读到它把进程直接放在就绪队列中,我很困惑。 长期调度程序是如何工作的?它使用什么标准?

【问题讨论】:

    标签: unix process operating-system fork


    【解决方案1】:

    这是针对 FreeBSD 的,尽管 Linux 并没有太大的不同。

    created 状态标志着新进程仍在构建中。 fork 系统调用所做的第一件事是在进程表中分配一个槽,增加最大进程计数器,并分配一个新的进程 ID。然后系统的其余部分将知道这一点,而fork 系统调用会执行其他必要的任务来完成进程的创建(从父进程复制文件描述符、初始化调度程序结构、将进程附加到其父进程等)。完成这项较长的工作后,进程将移至ready 状态。

    我相信 FreeBSD 和 Linux 都没有正式的长期或准入调度程序。一旦准备就绪,Linux 会尝试将子节点置于父节点之前,FreeBSD 只允许进行正常的调度。

    do_fork()http://svn.freebsd.org/base/release/10.1.0/sys/kern/kern_fork.c 并查看http://www.makelinux.net/books/lkd2/ch03lev1sec2

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多