全部博文(245)
分类: LINUX
2009-03-27 08:49:00
程序接口: OS专门为用户程序设置的,通常由系统调用组成。是程序取得OS服务的唯一途径。
系统调用:在OS核心设置的一组用于实现系统功能的程序,并将他们提供给程序员调用。程序员在需要OS提供某种服务的时候,可以用系统调用命令,去实现希望的功能,这就是系统调用。通俗地讲,就是请求内核完成一些功能。
与普通调用的区别:运行与不同的系统状态 拥护空间与系统空间
有没使用软中断:系统调用通过使用软中断后切换入系统状态,普通调用没这个过程。
系统调用实现机制: 1 设置系统调用号 2 处理系统调用(这个与8086中的中断向量表类似)
做个实验,增加自己的系统调用
(建议重新下个不同版本的内核)
1 添加原代码
编写系统调用要实现的功能
一般在所下载的新版本的LINUX/KERNEL/下编写
asmlinkage int sys_foo(int x)
…………..
注意:SYS_是系统调用函数标志 其后为函数名
2 连接新的系统调用
在LINJUX/INCLUDE/ASM-I386中的UNISTD。H 不同的版本可能不同 中分配系统调用号
#define _NR_foo (新的系统调用号)
在LINUX/ARCH/I386/KETNEL 中 的ENTRY。S中
.long SYSMBOL_NAME(sys_foo)
3 重新编译内核
make menuconfig // 配置内核 选上EXT3文件支持 有三种方式: make xconfig .make config .
make clean //
make dep //
………….
4 装载内核
将bzImage cp 到/boot
并做必要的修改。
然后就可重起系统并编测试程序。
可以添加两个调用,然后在测试的时候颠倒两个系统调用的系统调用号,观察体会系统调用的过程。