操作系统练习题.docVIP

  • 23
  • 0
  • 约9.56千字
  • 约 27页
  • 2021-11-22 发布于浙江
  • 举报
四十一、在UNIX系统中运行下面程序,最多可产生多少个进程?画出进程家族树。P249 main() { fork(); fork(); fork(); } [分析及相关知识] 系统调用fork的功能是创建一个新进程,新进程运行与其创建者一样的程序,新创建的进程称为子进程,调用fork的进程称为父进程,父子进程都从fork调用后的那条语句开始执行。 当程序执行时,若所有进程都能成功地执行系统调用fork,则会产生最多数目的进程。为了描述方便起见,将开始执行时的进程称为A进程,此时程序计数器PC,指向第一个fork调用。 main() { fork(); /* ←PC,进程A*/ fork(): fork(); } 当进程A成功地执行完第一个fork调用时,它创建了一个子进程,将此子进程称 为进程B。此时,进程A、B的程序计数器PC指向第二个fork调用,进程A派生 了1个子孙进程. main() { fork(): fork(); /* ←PC,进程A*/ fork(); } main() { fork(); fork(); /* ←PC,进程B*/ fork(); } 当进程A、B成功地执行完第二个fork调用时,它们分别创建了一个子进程,将 这些子进程分别称为进程C、D.此时,进程A、B、C、D的程序计数器PC指向第 三个fork调用,进程A派生了3个子孙进程。 main() { fork(); fork(); fork(); /* ←PC,进程A*/ } main() { fork(); fork(); fork(); /* ←PC,进程B*/ } main() { fork(); fork(); fork(); /* ←PC,进程C*/ ) main() { fork(); fork(); fork(); /* ←PC,进程D*/ ) 当进程A、B、C、D成功地执行完第三个fork调用时,它们分别创建了一个子进 程,将这些子进程分别称为进程E、F、C、H.此时,进程A、B、C、D、E、F、G、 H的程序计数器PC指向程序结束处,进程A派生了7个子孙进程。 main() { fork(); fork(); fork(); } /* ←PC,进程A*/ main() { fork(); fork(); fork(); ) /* ←PC,进程B*/ main() { fork(); fork(): fork(); } /* ←PC,进程C*/ main() { fork(); fork(); fork(); } /* ←PC,进程D*/ main() { fork(); fork(); fork(): } /* ←PC,进程E*/ main() { fork(); fork(); fork(); } /* ←PC,进程F*/ main() { fork(); fork(); fork(); ) /* ←PC,进程G*/ main() { fork(); fork(); fork(); }

文档评论(0)

1亿VIP精品文档

相关文档