我为Linux内核写了个文件系统

146 阅读8分钟

哈喽,我是子牙老师。又又又做出新东西了:为Linux内核写了个文件系统,Linux内核可正常识别

你可能想问:你写的文件系统Linux能用吗?当然可以!怎么用呢?mount呀

mount成功后,你在目录mnt做的一切操作,都是使用我写的文件系统aayafs。不过所有的操作都要你去实现,哪些呢?几个核心operations需要填充,填充好后注册进入内核,就可以用了

比如我来做几个我已经实现的操作看看

我还实现了文件的读写

读文件报了个错,应该是功能没有实现完整。因为读文件需要操作很多很多数据结构,各种数据结构中的属性。又没有人教这个,也没有书跟视频,只能借助ChatGPT一点一点调试

我写的这个文件系统是nodev,就是不需要硬盘,所有的数据都保存在内存中,已经写完了。后续有空准备写一个需要设备的文件系统,比如给硬盘写一个文件系统,参考EXT文件系统结构及算法,写一个。

据说玩文件系统跟硬盘数据恢复很赚钱,有木有懂行的,科普一下

如果你想学习如何为Linux内核写一个文件系统,或者你想透彻得看到VFS、EXT的源码,可以加班主任微信【jvm-anan】,备注【手写文件系统】,后面开课,班主任会第一时间通知你

因为我是研究计算机基础学科的,比如操作系统、Linux内核、Java虚拟机、文件系统、网络协议栈……所以我每次分享我的研究成果,总有人问:你做这些有什么意义呢?正好借助AI把这个写出来,我也有点思考,就一起分享了

这只是我的判断,不一定就是正确答案,但是时间会证明一切。我判断错了,我做的一切都会被时代淘汰。我判断对了,我做的一切都是提前布局,我就算踩中了风口,我的梦想就得以实现

以下,enjoy

我的思考

把这个文件系统写出来后,我就在想:以前我为什么写不出来,今天怎么就能写出来了?我觉得有两个核心条件成熟了!

一、AI的出现。在没有AI的时候,你根本不知道如何动手做这个事,第一步应该做什么,第二步应该做什么……现在有了AI,你就可以问它:如何给Linux内核写一个文件系统,顺着它给的答案,不断的提问,慢慢就能得到答案

你有没有发现,AI你也可以用,但是你还是写不出来这个文件系统,你觉得原因是什么?(这里没有鄙视链,只是单纯举例,内心脆弱的boy别瞎想,没有人瞧不起你,你是最棒的!)

其一,你不具备基于Linux内核写文件系统的认知。因为你对Linux内核、文件系统、Linux内核中文件系统是如何工作的……你没有这层认知。所以你知道未来的核心竞争力是什么吗?不是写代码的能力,是看懂AI生成的代码的能力,这是其一。如何看懂?懂那个技术才能看懂!所以AI的到来,不学习还是不行。或者可以说,AI的出现,会变得更卷!比谁的学习速度更快、比谁的技术深度更深、比谁的技术广度更广

其二,ChatGPT给你的答案,你没有环境去运行。你不知道这个代码如何在Linux内核中运行、如何单步调试Linux内核中的文件系统代码、如何通过增删改查目录或文件来测试你写的文件系统……我觉得这是AI时代程序员的第二个核心能力:有能力构建一切代码的运行环境,去运行、单步调试AI给你生成的代码

总结说,第二个条件就是我的认知达到了这个水平!我写过操作系统:x86单核操作系统、x64多核操作系统,能够搭建单步调试Linux内核环境,对Linux内核的内存、进程、系统调用、网络、文件系统等核心子系统非常熟悉、知道如何在Linux内核中写驱动写文件系统及单步调试方向,我基于Linux内核写过发行版,我就可以无障碍的在用户层实现各种shell命令去测试我写的文件系统

我的判断

因为AI的存在,AI的不断强大,使用AI我学会了很多我以前不会的技术,我得出这样的判断:你想研究的任何技术,你只要能构建出测试代码的环境,理论上来说,你就可以学会任何技术。

迄今为止,很多技术,比如手写x64多核操作系统、手写docker、手写Linux发行版,我都是这样学会的!

当然,AI生成的代码,你如果完全不懂那个技术,也看不懂,那出现一点点问题你就不知道怎么做。有的技术,你能找到免费的书跟视频,有的你找不到。你想学没地方学的技术,曾经也是我想学没地方学的,我自己研究后全部做成了课程!

如果你想精通C语言,当然,市面上有很多资料,但是大部分都偏基础,写来写去都是什么学生管理系统等枯燥的小demo……如果你想用C语言写点特别的东西,推荐你学习我的任一课程《手写JVM》《手写操作系统》《手写docker》《手写Linux发行版》。学完你就知道运行C语言的环境如何搭建,会遇到哪些问题,如何去解决……

如果你想精通汇编,搭建运行汇编的测试环境,单步调试汇编代码,推荐你学习我的任一课程《手写操作系统》《纯汇编写操作系统》

走到今天,我觉得计算机行业最核心要学的技术:C语言、unix环境编程、unix网络编程。如果你想轻松愉快的学会《unix环境编程》与《unix网络编程》,推荐你学习我的《手写Linux发行版》,自己给自己写的Linux系统实现一切shell命令,扩展你写的Linux系统的能力,是不是想想都激动不已!

如果你想研究Java语言的底层实现原理,你想知道如何编译hotspot源码、单步调试hotspot源码比如面向对象是如何实现的、Java线程是如何实现的、GC算法是如何实现的、执行引擎是如何实现的……推荐你学习我的课程《手写JVM》,课程中还会教你编译hotspot源码及单步调试技巧

如果你想透彻理解《操作系统导论》+《计算机组成原理》,搭建手写操作系统的环境,推荐你学习我的课程《手写操作系统》,借助AI,你也能写出你自己的操作系统

如果你想知道Linux内核的一切,编译Linux内核源码,搭建单步调试Linux内核源码的环境,甚至在Linux内核中开发驱动程序或者文件系统,推荐你学习我的课程《实战Linux内核》。如何你想彻彻底底看懂Linux内核源码,推荐你学习我的课程《手写Linux内核之memblock》

如果你想知道一个Linux系统是如何写出来的,搭建基于Linux内核写操作系统的环境,推荐你学习我的课程《手写Linux发行版》,你就可以借助AI写一个自己的Linux系统!

如果你想知道docker及一切容器化技术的底层实现原理,搭建开发容器化技术的测试环境,借助AI写出一个自己的docker,推荐你学习我的课程《手写docker》

当然,还有很多很多技术,市场上是空白的,也是我感兴趣想去做的,只是还需要时间。如果你对计算机硬核技术感兴趣,欢迎关注我的公众号【硬核子牙】

你可能想问:我不学这些我也能完成工作啊,我为什么要学这些?你这个思维还是AI没有出现时的思维,学的一切都要为了升职加薪。但是AI时代,得用竞争思维去看待学习,别人在卷,你不卷,你就会被淘汰。AI时代,工作能力不够,得学那些工作中需要的。工作能力够用,得学那些能增强你竞争力的。我做的所有课程,都是为了在AI时代让你遥遥领先!

我说的不论你信不信,我都真诚的建议看文章的你:一、做自己能做的,去学习那些能让你变得更强的技术,不要去纠结于工作中能不能用上、能不能让你升职加薪,能让你变强就一定是对的。二、争取机会拿到一个行业高维度的实战经验,比如Java圈,高并发场景实战经验、大数据场景实战经验,也是一种稀缺的核心竞争力!

我觉得未来,各行各业,因为AI提升了效率,人员会压缩到很小规模,只有那些行业TOP级别、公司TOP级别的人才能留下来!我希望我是错的…

对了,咨询课程找美丽的班主任