Linux2.6对新型CPU快速系统调用的支持
http://tech.ddvip.com 2006年11月20日 社区交流
本文详细介绍Linux2.6对新型CPU快速系统调用的支持
通过内核在启动时进行这样的设置,在每个进程的进程空间中,都能访问到内核所映射的这个代码页面,当然这个页面对于应用程序来说是只读的。我们通过新版的ldd工具查看任意一个可执行程序,可以看到下面的结果:
[root@test]# file dynamic dynamic: ELF 32-bit LSB executable,
Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5,
dynamically linked (uses shared libs), not stripped
[root@test]# ldd dynamic linux-gate.so.1 =>
(0xffffe000) libc.so.6 => /lib/tls/libc.so.6
(0x4002c000) /lib/ld-linux.so.2 =>
/lib/ld-linux.so.2 (0x40000000)这个所谓的 "linux-gate.so.1" 的内容就是内核映射的代码,系统中其实并不存在这样一个链接库文件,它的名字是由ldd自己起的,而在老版本的 ldd中,虽然能够检测到这段代码,但是由于没有命名而且在系统中找不到对应链接库文件,所以会有一些显示上的问题。
由用户态经库函数进入内核态
为了配合内核使用新的系统调用方式,glibc 中要做一定的修改。新的 glibc-2.3.2(及其以后版本中)中已经包含了这个改动,在 glibc 源代码的 sysdeps/unix/sysv/linux/i386/sysdep.h 文件中,处理系统调用的宏 INTERNAL_SYSCALL 在不同的编译选项下有不同的结果。在打开支持 sysenter/sysexit 指令的选项 I386_USE_SYSENTER 下,系统调用会有两种方式,在静态链接(编译时加上 -static 选项)情况下,采用 "call *_dl_sysinfo" 指令;在动态链接情况下,采用 "call *%gs:0x10" 指令。这两种情况由 glibc 库采用哪种方法链接,实际上最终都相当于调用某个固定地址的代码。下面我们通过一个小小的程序,配合 gdb 来验证。
责编:豆豆技术应用
正在加载评论...
- Linux/Unix 新闻
- Linux/Unix 入门
- Linux/Unix 命令
- Linux/Unix 安装
- Linux 嵌入式系统
- Linux/Unix 编程
- Linux/Unix 管理
- Linux/Unix 桌面
- Linux/Unix 内核
- Linux/Unix 软件
- SCO Unix
- NetBSD
- OpenBSD
- Redhat/Fedora Linux
- 手机
- Linux/Unix find 搜索命令
- Linux/Unix vi 命令
- Linux/Unix kde 桌面环境
- Linux/Unix GNOME 桌面环境
- Linux/Unix Make 命令
- Linux/Unix crontab 命令
- Linux/Unix ext3 文件系统
- Linux/Unix 文件系统详解
- Linux/Unix ADSL 拨号设置
- Linux/Unix GRUB 配置及应用
- Linux/Unix nfs配置
- Linux/Unix 硬件信息查看及管理
- Linux/Unix 优化
- Linux/Unix 交换分区Swap管理及应用
- Linux/Unix 用户管理
- Linux/Unix Ramdisk
- Linux/Unix 密码恢复管理
- Linux/Unix 文件删除恢复
- Linux/Unix fdisk分区
- Linux/Unix lvs负载均衡管理
- Linux/Unix root用户
- Linux/Unix 集群
- Linux/Unix 日志
- 更多Linux/Unix专题……