glibc 和系统调用

1451阅读 1评论2010-10-10 liubingzhq
分类:LINUX

由chroot引发的思考:kernel和glibc的关系是什么?用不同的kernel会影响glibc的使用?



系统调用最终是要用int 0x80的,将调用号压入eax,参数压入其他一串寄存器中(看有多少个参数了),然后会执行system_call程序(系统初始化时候设置的 set_system_gate(SYSCALL_VECTOR, &system_call);)接下来一系列调整内核栈的操作以及环境的设置后,就会用eax表示的系统调用号为索引,在系统调用跳转表中寻找
系 统调用的处理函数了,fork的就是跳转到sys_fork(),glibc其实就是把这个东西封装了一下。


用户空间程序没有任何理由直接使用内核头文件,仅应使用 glibc、libstdc++ 提供的系统头文件,所谓的“净化”只是为了提供一套稳定的内核头文件给 glibc,使其不必跟着 linux-kernel 的升级而升级,这个读读 glibc 的历史会有帮助。
曾经有一段时间,每当 linux-kernel-header 有变化,libc 就要做相应调整,反过来也一样,这对于维护者来说是噩梦,于是有必要维护一份长时间相对稳定的 linux-kernel-header,具体的过程就是“净化”——删除一切用户空间不需要的信息。
上一篇:glibc 中的malloc
下一篇:内核对模块的处理

文章评论