弄懂linux文件,这一篇就够了。

1.为何要学习linux文件系列?

· 学习操作系统是进入中高级程序员的必经之路,而linux作为最广泛使用的开源操作系统,是我们学习的最好实例。而文件则是我们了解操作系统的第一步。
· 前几天,我定位了一个故障,系统没插sd卡没插却当做有sd卡使用,结果存东西把flash写爆了。我简单用 df 和 du 2个命令就定位了故障,要解决就要在sd卡插上前删掉误增加的文件内容,因为挂载了文件系统之后原先的路径将被覆盖,系统将识别它为一个挂载点,除非卸载这个文件系统,否则你将看不到这个文件夹了。操作系统的知识就存在我们的工作中,如果你懂,你就能快速解决。

2.文件系列总结

· 本片是linux文件系列的总结篇,整个系列从应用层,glibc到内核,最后到yaffs如何写flash,正如第一篇文章说的那样,穿透了整个内核。
最终来看,文件作为linux所有资源的呈现方式,非常精简。
· 应用层看起来,一切都是文件,都要通过读写来操作,但是到了内核就要把这些不同的文件类型分开处理了。设备文件 和 socket文件只是一个标识,是作为系统运行资源的接口,因此进入内核之后就区分开了,socket文件甚至在应用层就已经不像文件里,open甚至已经被socket这个调用给替代了。应用层的各个介绍请看我的第一篇;
第一篇:为何linux一切皆文件
在这里插入图片描述· 如果把操作系统看做一个球,最外层的表皮就是系统调用了,调用系统调用有2种方式,一种是shell,一种是C库,我们介绍的C库用的就是glibc。glibc内容繁多,我的第二篇就通过层层搜索,找到了系统调用如何和内核衔接起来。

第二篇:系统调用如何进入内核层次,深入glibc寻找open函数真实实现。

· 进入内核之后,驱动文件通过操作函数的不同,和普通文件做了区分。
最后剩下的就是真正的文件,这些文件都被抽象为了inode对象来管理,要想操作文件,必须先open,open函数要做的就是层层搜索目录,找到文件所在的目录,才能找到对应的inode。搜寻的各个细节见我的第三篇;

第三篇:系统调用的内核实现,一文讲透open函数内核真实实现。

· inode作为文件的接口,并不会直接存到介质上,而是要通过文件系统,我们用yaffs2这个嵌入式领域用的比较多的系统作为例子,介绍了文件系统是如何和内核融合成一体的,这里有一个注册的接口给所有文件系统使用。文件系统注册之后,操作系统就知道了这个文件系统了。我们就能调用mount来挂载它。而文件系统其它信息和操作,都存放在superblock结构中。对于文件系统的基本原理,第四篇做了详细介绍。

第四篇:文件系统原理 和 VFS架构

· yaffs是针对nand flash这种存储介质的,而flash存储容易出现错误,因此每个page多了一块oob区,主要用来校验错误,但是yaffs在oob区存放了ecc,还存放了部分的文件属性。yaffs用obj作为文件存储对象对应于linux的inode,而yaffs文件系统是如何处理文件读写和写入flash的,第五篇做了详细介绍。

第五篇:yaffs2的Linux架构

最后,如果对yaffs文件系统如何实现空间回收,碎片整理有兴趣,可以看这一篇源码解析。

番外篇:yaffs2源代码分析(最新版)

3.总结和展望

· 这个系列在这大半年的时间里耗费了大量的空余时间,虽然自己仍有些不满意的地方,但是也算是基本写完了吧。后续要关注提高质量和效率。
· 后续我会继续穿透系列,逐步开展地址,进程等系列文章,欢迎老铁们的关注。

------------------如果有所收获的话,请帮忙点个赞吧!

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