linux初级修炼——文件调用内部机制

一,系统调用结构

从上图可知,系统系统课分为3层,第一层为app软件层,第二层为glibc库,第三层位内核层,第一,二层为用户空间,第三层为内核空间,当app调用open/read等函数时,会触发异常,在触发异常时,会保留异常的原因,然后内核会去处理异常。

app层使用系统函数——>glibc层触发异常:设置原因和触发SWI或SVC中断标识符——>分辨原因与调用处理函数。

ABI

ABI 是编译器和链接器遵守的一组规则,以让编译后的程序可以正常工作。

OABI:将中断原因嵌入到中断标识符中,使用SWI进行触发中断;

ABI:把中断原因存储到R7寄存器中,也使用SWI进行触发中断;

EABI:嵌入式触发中断,使用SVC进行触发,把触发原因存储到R8中;

注:内核的ABI要与APP的ABI相同。

进程文件

我们可以使用ps查看文件进程号,在使用cd /proc/“进程号”/fd 打开进程,在使用ls -l进行查看程序文件,查看结果如上图,进程文件0是存储输入数据,scanf()的数据就是存储到这里,文件1是输出数据,printf()数据存放在这里,文件2是存储错误信息,文件3是文件句柄,指的是应用程序本身,每个进程都有自己“文件句柄的空间”。

内核处理函数(大致理解)

当我们运行do_sys_open()程序时 :

1,获取未使用的文件句柄,就是上述进程文件的3号

2,打开文件,得到file结构体,在结构体中,存储了程序相关参数,如 f_pos是打开文件读取指定位置。

3,记录当前进程,会创建一个task_strult结构体,里面嵌套一个files,在嵌套一个fdt,在在嵌套一个fd数组,fd里面每一位代表一个进程文件,每个文件中存在一个file的变量,层层嵌套。

2024/5/16,冲冲冲

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值