linux系统调用

系统调用作为用户进程和硬件的中间层,
提供了抽象接口(比如读写文件不用管文件系统,磁盘类型)
保护系统,对访问进行裁决,避免不正确不安全的访问
对比异常/陷入,系统调用是内核唯一的合法入口
程序员和api打交道,api可通过0,1,多个系统调用实现功能,当然api可以提供统一接口,在不同操作系统上不同实现
系统调用号,分配后不变更,即便删除系统调用,对此号的调用有一默认实现
内核代表应用程序在内核空间执行系统调用。
通过int $0x80指令触发128号软中断,触发异常,进入128号异常处理程序(即系统调用处理程序)
陷入内核前系统调用号和参数要先放好,eax寄存器放系统调用号,参数不超过5个放寄存器,超过寄存器放指针指向所有参数地址,返回值也放eax寄存器
参数验证:系统调用验证你传的pid,文件描述符等参数,验证指针:指针是否指向用户空间(不能读取内核数据),是否在进程地址空间内(不能读取其他进程数据),是否符合访问限制(不能读取不可读的内存区域)
系统调用在进程上下文内,current宏有效,可休眠可抢占(内核抢占),系统调用需可重入(内核抢占后其他进程也发起此系统调用)
long open(const char *filename,int flags,int mode) 可通过下面宏来调用
_syscall3(long,open,const char *,filename,int, flags,int,mode) 3代表3个参数
用户要不依赖C库,通过库函数调用,要不用上面的宏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值