<<APUE>>第八章--fork vfoek pthread_creat 和clone()

真言:读时共享,写时复制,见机行execve

函数 描述
fork fork创造的子进程是父进程的完整副本,复制了父亲进程的资源,包括内存的内容task_struct内容
vfork vfork创建的子进程与父进程共享数据段,而且由vfork()创建的子进程将先于父进程运行
pthread_create pthread_create通常只是创建一个用户线程,对核心是不可见的,由线程库调度。内部调用clone()
clone Linux上创建线程一般使用的是pthread库 实际上linux也给我们提供了创建线程的系统调用,就是clone colne创建的是核心线程

线程分类

你真不会以为线程只有轻量级进程了吧?

优秀博客 :线程分类https://blog.csdn.net/gatieme/article/details/51481863

内核线程:始终运行在内核态

内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间。支持多线程的内核叫做多线程内核(Multi-Threads kernel )。

内核线程只运行在内核态,不受用户态上下文的拖累。

轻量级进程:

轻量级进程(LWP)是建立在内核之上并由内核支持的用户线程,它是内核线程的高度抽象,每一个轻量级进程都与一个特定的内核线程关联。内核线程只能由内核管理并像普通进程一样被调度。

用户线程:

用户线程是完全建立在用户空间的线程库,用户线程的创建、调度、同步和销毁全又库函数在用户空间完成,不需要内核的帮助。因此这种线程是极其低消耗和高效的。

★★do_fork:读时共享★★

do_fork函数 负责处理**cone() fork() vfork()**系统调用

do_fork和辅助函数 copy_process()来创建进程描述符以及子进程执行所需要的的所有内核数据结构

clone():

该函数负责建立新的轻量级进程的堆栈,并且调用对编程者吟唱的 clone系统调用

clone可以让你有选择性的继承父进程的资源

这里的继承 是指新的PCB内部资源 引用旧的PCB内部的资源

clone()通过参数来实现各种资源的指定复制

因为clone 继承了指定pcb的各种资源 所以在读取task_struct的时候 会读取到相同的资源

fork(): 读时共享,写时复制,自主execve

include <unistd.h>
pid_t fork(void)
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值