进程创建的几种方式

进程创建的几种方式

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。在该函数中操作系统会发现当前的缺页异常是由于进程写

你可能感兴趣的:(操作系统,操作系统,linux,多线程)