文章目录
1 创建新进程
- 在Linux系统中,进程或线程通过fork、vfork、clone等系统调用创建,其均由do_fork()函数实现。
1.1 用户进程创建函数
fork (分叉)
- 用来创建子进程,子进程和父进程均有独立的进程地址空间。(写时复制技术)
vfork
- 用于创建子进程后立即调用execve以装载新程序;为避免复制物理页面,父进程会睡眠等待子进程退出。
- 由于fork 采用写时复制,vfork失去速度优势,逐步被废弃。
clone (克隆)
- 主要用于pthread 库创建线程。
1.2 内核线程创建函数
- 运行在内核地址空间的进程,内核线程没有独立的进程地址空间(即用户虚拟地址空间),task_struct 数据结构mm指针被设置为NULL。
- 所有内核线程都是共享内核地址空间。
- 常见的内核线程有页面回收线程kswapd等。 <