linux线程点滴

来源:互联网 发布:美国红脖子 知乎 编辑:程序博客网 时间:2024/06/07 06:03

1、(http://bbs.csdn.net/topics/330224117)

Linux其实是没有线程的概念,所谓的线程不过是一个轻量级的进程

内核线程拥有 进程描述符、PID、进程正文段、核心堆栈
用户进程拥有 进程描述符、PID、进程正文段、核心堆栈 、用户空间的数据段、堆栈、堆
用户线程拥有 进程描述符、PID、进程正文段、核心堆栈,用户空间的堆栈,同父进程共享用户空间的数据段和堆


2、http://bbs.csdn.net/topics/390080474

clone用于创建轻量级进程,即创建的子进程与父进程共用线性地址空间,只是他们的堆栈不同而已(进程ID应该也不同),linux 2.4用户线程就是基于此实现的。
fork创建的子进程与父进程使用的不同的线性地址空间,是完全的进程概念。


3、http://read.newbooks.com.cn/info/199055.html

POSIX thread是用户级线程,但是具体实现是OS决定的;
POSIX是一个标准,符合该标准的,给用户的接口是一样的,比如创建线程:pthread_create函数,但是该函数肯定调用了底层的实现,至于怎么实现的,不同的操作系统是不一样的。windows不知道,Linux下的实现和fork类似,都是调用clone为新进程(线程)准备执行环境,然后等待调度。


4、http://blog.chinaunix.net/uid-27013571-id-3594191.html

对内核线程的虚拟空间总结一下:
1、创建的时候:
父进程是用户进程,则mm和active_mm均共享父进程的,然后内核线程一般调用daemonize适头舖m
父进程是内核线程,则mm和active_mm均为NULL
总之,内核线程的mm = NULL;进程调度的时候以此为依据判断是用户进程还是内核线程。
2、进程调度的时候
如果切换进来的是内核线程,则置active_mm为切换出去的进程的active_mm;
如果切换出去的是内核线程,则置active_mm为NULL。

0 0
原创粉丝点击