进程创建的几种方式

进程创建的几种方式

1.fork

fork用于创建子进程,系统调用函数:pid_t fork(void) 返回值是当前进程的pid

调用fork的进程我们称为父进程(父进程的返回值是0)

fork原理:

当一个进程调用fork,操作系统会为该进程创建一个几乎一模一样的新进程。当fork完成时,两个进程的内存、寄存器、程序计数器等状态都完全一致,但它们是完全独立的两个进程,拥有不同的PID和虚拟内存空间,在fork完成后它们会各种独立地执行,互不干扰。fork中还有写时拷贝的机制,一开始两个进程的地址空间先不进行拷贝,使用共享内存实现,当其中一个进程发生了写操作,会重新复制一份。

CopyOnWrite原理:

CopyOnWrite是基于共享内存实现的。操作系统的虚拟内存是基于页表实现的,页表项中有一个R/W权限位:

  • R/W–位1是读/写(Read/Write)标志。如果等于1,表示页面可以被读、写或执行。如果为0,表示页面只读或可执行。当处理器运行在超级用户特权级(级别0、1或2)时,则R/W位不起作用。页目录项中的R/W位对其所映射的所有页面起作用。

所以,fork用R/W权限位来实现以只读的方式共享一段物理内存。当父进程或子进程对该区域进行修改时,就会触发缺页异常,不过该异常是是由于违反权限导致的。在触发缺页异常后,CPU会将控制流传递给操作系统预先设置的缺页异常处理函数do_page_fault。在该函数中操作系统会发现当前的缺页异常是由于进程写

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值