fork的应用

复习

  • fork状态机复制,包括持有的所有操作系统对象(如文件描述符)
  • execve重置状态机,但继承持有的所有操作系统的对象
  • 例如在fork之前打开一个管道, 然后就可以把一部分计算的输出管道给另外一个进程的输入

文件描述符

1
int open(const char *pathname, int flags);
  • RTFM: O_CLOEXEC : execve时文件描述符不应该被继承; O_APPEND:以追加的方式写该文件
  • 对于数据文件,文件描述符会记住上次访问的位置
  • dup:复制一个文件描述符,进程有两个fd指向同一个文件,并且具有同一个offset

回到fork, 复制,但又没有完全复制

概念上状态机被复制,但实际上复制后内存都共享

  • “Copy on Write”只有被写入的页面才会复制一份
    1. 被复制后,整个地址空间都被标记位”只读”
    2. 操作系统捕获Page Fault后酌情复制页面
    3. 操作系统会维护每个页面的引用计数

fork的应用
http://example.com/2023/08/02/操作系统/jyy操作系统/fork的应用/
作者
LiuZhaocheng
发布于
2023年8月2日
许可协议