pthread中线程是怎么创建的(2)---glibc到内核
在glibc中线程创建是这个文件种来定义的:nptl/pthread_create.c
创建过程为,pthread_create 调用__pthread_create_2_0, __pthread_create_2_0调用__pthread_create_2_1, 或者pthread_create直接调用__pthread_create_2_1,在由__pthread_create_2_1调用create_thread来创建。
在create_thread中,首先是设置了很多内核clone的标志,因为对内核来说每次创建都是创建一个内核级的线程或是内核级进程。
pthread中线程是怎么创建的(1)---glibc中的别名机制symver(symbol version)
那天看了看glibc的线程相关的代码之后,又想看看线程的创建过程,今天趁着程序还在跑的功夫看了看glibc和内核代码,简单过了一下,也顺便记录下。 glibc种线程创建是这个文件种来定义的:nptl/pthread_create.c
我们平时使用的时候一般是include pthread.h文件就可以使用pthread_create来创建线程了,但是在这个pthread_create.c文件中居然是直接找不到pthread_create函数的定义的,找到的只是:
线程种的gettid和pthread_self区别
这几天写程序老是使用thread来做,所以自己封装了一个threadbase的类来做简单的测试使用,但是在写的过程种发现又两个获取线程id的函数:pthread_self和gettid,那这两个函数有什么区别呢?
看gettid的man,这样写道:
debian testing+gnome3+ibus+kernel3.08
debian的6.0出来之后,一直就心很痒,又加之之前刚刚从同事那里买了个笔记本,所以老婆把她的本就给我用了,虽然配置是有点底,但是安装debian我想肯定没有问题的,在g+上看到debian的testing中已经加入了gnome3了,所以更想试试了,但是没有想到道路事这么的曲折,我这两周花了好多时间,终于在今晚搞定了。
内核又拒绝挂载fat32的磁盘了,报codepage cp437 not found
前几天从新编译了内核,是应为升级了内核后vbox不能用了,所以又从新编译了内核,并且安装编译了vbox的内核模块,但是也出了问题,在每次shutdown的时候机器总是无法断点,磁盘灯不再亮,说明磁盘也不写了,只是一个锁灯在不断的闪,看了messages总的日志看到这样两句:
NF_HOOK点自ipv4中的插入
net/ipv4/af_inet.c文件中对ipv4的协议进行了初始化, fs_initcall(inet_init);
在inet_init中进行了ipv4相关的协议进行了初始化:tcp,udp,icmp等处理方法的注册,arp,ip,tcp,udp等协议处理流程的建立,proc文件系统中相关文件的建立等处理,这个在之前就分析过了,现在主要分析的呢是,在ip协议处理流程中NF_HOOK是如何插入的,对这个流程的分析可以比较清楚的看到linux对ipv4的一个处理流程,对特殊ip的处理,对路由包的处理等等。
netfilter在IPV4中的5个HOOK
之前就知道在内核中netfilter的工作原理是:在协议流程中加入hook函数,从而达到对协议流中的数据进行抓取,今天对IPV4中的这几个点在内核中找了下,终于定位了。先在这里分析一下,还需要分析,数据包在内核中是如何路由的!!!哈呵呵
Linux虚拟网卡
昨天研究了下利用虚拟网卡实现两个机器利用一个物理网卡连接外网的内核源码和设置,其实利用虚拟网卡上网的例子在上学 的时候就做过类似的实验,一般可以在一个机器A的一个网卡上配置一个外网ip一个内网ip,另一个内部机器B只配置内网ip,让后B的网关设置为A的内网ip,在A机器上启用netfilter的NAT功能,再启用A机器的路由转发功能,就可以实现B由A上外网的功能了!就如下面这个图。