linux学习笔记(四)系统调用

系统调用

与内核通信

POSIX : IEEE标准
C库:
系统调用:系统内核层面使用,应用层需要syscall

系统调用

asmlinkage 限定词 通知编译器仅从栈中提取该函数参数

系统调用号

系统通过调用号来进行系统调用,在编译的时候已经确定
系统调用表,例如x86-64就在 arch/i386/kernel/syscall_64.c

系统调用处理

应用程序通过软中断方式通知内核,通过一个异常导致系统切换到内核

实现系统调用

参数验证

指针必须保证:
内存区域属于用户空间
在进程的地址空间里
读写可执行等权限要说明
使用copy_to_user() 和copy_from_user()来进行内核用户层交换数据,它们的参数类似memcpy
使用capable() 来判断是否有权限,

系统调用注册

用户空间访问系统调用

_syscalln() n为0~6,代表需要传递的参数个数
例如open 进行系统调用: _syscall3(long,open,const char*,filename,int,flags,int,mode);原型:long open(const char* filename,int flags,int mode);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章