进程处理.
用户希望一个运行的进程组织另一个程序的执行作为它的操作的一部分时,步骤:
第一步:运行的进程取得或产生要执行的命令
第二步:运行的进程执行fork()系统调用.它启动一个新进程,使原来进程的拷贝,并且与原来的进程并发的执行.原来的进程称为父进程,新进程称为子进程
第三步:现在的子进程执行exec()调用.它去掉子进程的用户数据段并且将要运行的在命令文件中的用户数据段代替它们.
出现问题:首先,用父进程的完整复制品来创建子进程,仅仅是为了立即去掉它并用新程序代替它是否是一种浪费 其次,当子进程正在执行时,父进程又在干什么
linux()以一种非常有效的方式实现的它的fork()系统调用.事实上,linux并没有复制进程的完整拷贝,它只用两组指针,每个进程对应一组,全部只想同一实际的数据段.虽然父进程和子进程是
一对独立的进程,但只要两个进程仅仅从数据段读数据而不写任何新值,就不会发生问题.当两个进程之一企图将数据写道数据段之一时,能发现它,并且按需要对数据段的这一区域进行复制
这一技术被称为在写时复制(copy on write).
从原则上讲,由任何一个进程写的任何的区域将得到复制,是的两个进程都有他们自己的这些区域的副本.如果子进程立即执行exec()调用,则在执行exec()调用之前只有少量的共享数据段
被复制,因而大量节省了时间和资源