Chinaunix首页 | 论坛 | 博客
  • 博客访问: 238628
  • 博文数量: 108
  • 博客积分: 3285
  • 博客等级: 中校
  • 技术积分: 1360
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 15:43
文章分类

全部博文(108)

文章存档

2014年(1)

2012年(3)

2011年(28)

2010年(20)

2009年(24)

2008年(32)

我的朋友

分类: LINUX

2010-10-10 17:31:37

由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,具体的过程就是“净化”——删除一切用户空间不需要的信息。
阅读(1125) | 评论(1) | 转发(0) |
0

上一篇:glibc 中的malloc

下一篇:内核对模块的处理

给主人留下些什么吧!~~

chinaunix网友2010-10-11 17:51:59

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com