学习日记之内核与文件系统之间的关系

内核与文件系统是啥关系?

这个问题的出现时源自于我在思考一个可执行文件是如何被操作系统知道,并且运行的呢?

比如我编译出一个可执行文件test,可以在操作系统下直接运行,但是他怎么就认识我这个可执行文件,怎么就知道我代码在哪。

后来我学了文件系统之后,又看了内核和操作系统,我才有一点拙见。
在文件系统的眼中,任何的文件都是透明的,它是不是可执行文件,是哪种属性的,只读还是可读写,长度,大小,偏移量,如果是可执行文件,Linux下为ELF文件,它的结构就跟普通文件不一样,有个头部,后面接着数据段,堆栈段,代码段,和汇编代码一样,其实就是二进制流吧,这其中每个段的偏移,基地址,文件系统都知道,因为你编译出来的文件就是在文件系统环境下编译出来的,如果你想让文件系统识别你的可执行文件,你就得让它知道test的所有信息。

现在在文件系统下,可执行文件的各个段都知道了,就变成系统调用了(应该是这样,进内核里执行了),内核级别的操作,比如修改寄存器,修改PC指针,修改堆栈指针SP,修改状态寄存器,虽然这些是汇编代码,但C语言可以嵌入汇编的,具体怎么从C语言转到汇编运行我不清楚,但是如果我执行这个test,那么test的代码段肯定是要复制到CPU里的,然后操作系统创建一个进程,把这个进程的信息填充为test的信息,代码和数据,然后就相当于操作系统增加了一个进程,就是你的可执行文件test,多进程多线程的概念先不谈,现在就是能知道了,无论什么文件,你也许看不到它的文件类型, 但文件系统一定知道,并且知道它能干什么,比如可以运行啦,是个设备文件啦你可以操作设备,是个链接文件啦,还是个普通文件啦,等等。

现在又有一个问题,我从网络或者串口接收到一个文件,我存下来了,它原来是个可执行文件,现在传到我这里,是个普通文件了,我怎么办?

在Linux下,我给他添加可执行的属性,然后我执行它,如果它真的是个可执行文件,那么它的格式一定符合我文件系统里认识的那种格式,然后我通过我自己的格式去读去执行它,一定可以执行,如果不是,那对不起,你不是可执行文件,最起码在我这文件系统里不算,那你就是个普通二进制流文件,啥也不是。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值