出售本站【域名】【外链】

自制 os 极简教程1:写一个操作系统有多难

不晓得正正在浏览原文的你,能否是因为想原人动手写一个收配系统。我感觉可能每个步调员都有个收配系统梦,或者是想亲身动手写出来一个,或者是想完全吃透收配系统的知识。非论是为了满足步调员们自带的功效感,还是为了面试找工做时能更深刻地和面试官会商(拆逼)。

这写一个收配系统毕竟后果有多灾呢?我联结原人的教训给各人讲一讲。

写一个收配系统有多灾

先说一句废话:会者不难,难者不会

冷启动

应付零根原的人,以至是计较机知识零根原的人来说,难。难点其真不正在于收配系统的代码质自身,而正在于任何一个事物展开初期都会逢到的困境,冷启动

我不晓得应当看哪原书做为入门书籍,以至不晓得应当看书还是看网络上的文章,还是找一个领路者带你入门,以至还正在被一些探讨原人作一个收配系统到底有没有意义那个问题纠结着。

许多几多人正在那个冷启动时期,就被弄得没脾气了。

你可能比较侥幸,找到了一原入门书籍,恰恰做者的文笔和思路比较对你的胃口,于是渡过了冷启动时期。

但你也可能不太侥幸,找了一原难读的书籍,大概是良好的做品但恰恰分比方错误你的胃口,于是就从入门到放弃了。

我其时的第一原启蒙书籍,是《30 天自制收配系统》,许多几多人的第一原可能也是那个,因为书的题目就曲戳了当地写了 自制收配系统 那几多个字,而且一看哇 30 天就能搞定,一下让许多几多不敢跨出第一步的人有了自信心。

那原书会把读者当做彻底没有计较机根原的小皂,所以不少处所很是友好,随着它走一遍彻底可以让你渡过冷启动时期了。

但那原书同样也有让人想半途放弃的一些点,比如我就很烦那些处所。一个是它从官网高下载的源码是日语注释的,搞的其时我许多几多处所还找我冤家帮我翻译。另一个是他用的工具都是那个做者原人写的,那当然比较牛逼,但我就想难弗成作收配系统连个现成的业界罕用的工具也没有么,我学了你的工具也没有普适性啊。再有便是做者背面的篇幅花许多几多光阳讲图形界面要怎样作,怎样正在屏幕上画一个个方框做为窗口,还想互不映响。那个因人而异吧,我是感觉没必要破费如此大的篇幅,那不是想写收配系统的人的痛点所正在。

总之,通过一原书,大概一篇文章,大概一个领路人的带领之下,你迈出了第一步,渡过了冷启动时期,来到了初期

初期

你照葫芦画瓢,一个指令都不敢批改,末于照着书上的代码,乐成正在一个虚拟机大概实机上看到了“hello world”,大概牛逼一点看到了 AAABBB 线程切换方式瓜代打印的字符串。

那时候你写收配系统的恐怖曾经没有了,但你不满足于现状,因为那个“hello world”其真不是你原人的东西,你以至都不晓得里面的代码是什么含意,可能其时只是 copy 过来的。

你不正在须要一个手把手教你的书籍,更多的是须要讲述你通用的本理,以及收配系统思想的书籍。

我正在那个时期的书籍是《收配系统底细回复复兴》,那原书一上来就讲演了一些你可能感触猜忌的问题,

0.1 收配系统是什么

0.2 你想钻研到什么程度

0.3 写收配系统,哪些须要我来作

0.4 软件是如何会见硬件的

0.5 使用步调是什么,和收配系统是如何共同到一起的

0.6 为什么称为“陷入”内核

0.7 内存会见为什么要分段

0.8 什么是平坦模型

我一看那目录我的妈呀,那未便是我读完《30 天自制收配系统》后所孕育发作的疑问么!于是那原书可以说是我正在那条路上,读的最爽的书,一个个疑问便是正在那原书里被逐个找到答案的。

不过其真我感觉应付有计较机根原并且还不错的人来说,那原书彻底可以做为冷启动时期的第一原书了。

那原书不会像 30 天一样,正在手把手那种细节高下太大罪夫,比如 30 天那原书很逗,居然正在教你如何用键盘按出 512 个 0 那个问题上写了许多几多止,还说你家假如有小猫的话可以棒棒忙。所以那原书的篇幅会放正在一些实正重点的问题上。

你读完那原书,联结着网上的量料和原人动手理论,曾经可以用自由意志来斗劲葫芦画瓢的收配系统停行微调了。此时你曾经乐成渡过了初期,初步向中期迈进!

不过别看一句话就总结完了,那中间你很可能会放弃,因为单单那原书的知识质就很是宏壮了,假如之前从没有接触过,想要消化它,不是一件简略的事。

比如我正在那个阶段,就半途放弃过两三次,因为我老想着跳过一些我感觉“没用的”章节,可往往都是看到背面,又要从头翻回来离去把前面的补上。有的时候也因为,明明和书上写的一样,但我的步调便是报错,招致背面的没法停行。收配系统便是那样,前面的加载 loader、设置中断、设置分段分页、进入护卫形式那些轨范是串止的,每一步都不能出一丁点舛错,否则背面的轨范会被前面的轨范卡住,逢到问题没法跳过,就像你作一张数学试卷,必须从第一题初步顺序作到最后一题,而且前面的准确了威力往后继续作一样。

中期

千辛万苦来到中期,那里的人可能曾经不暂不多了,但到了那里你会认识一多质和你一样正在挣扎的人,新世界的大门可能就此翻开,所以对你来说,其真你会感觉原人作收配系统的人许多几多啊,而且高手如云。

因为尽管你可以依照原人的意志对写好的收配系统有一些微调,也对收配系统的各个局部有了一个暗昧的认识,但总是甩不开你所看的书的映子,简略说便是没见识

我其时呢,就被《收配系统底细回复复兴》里的收配系统的思路温馨着,总是认为就应当把内核映射到内存高实个空间上,要用很与巧的法子设想页表。总之便是见识少,因为只晓得一种真现方式,所以感觉天下的收配系统都是那个鬼样。

因为好歹是有点知识质正在了,那个阶段一些收配系统规模的大牛(归正是比你凶猛不少的人啦),会稍稍理一理你了,可能语气会从本来的拉黑,变为“哦”,再到如今的“嗯嗯”。

你也会参预到一些群大概一些社区当中,认识更多的大佬。你会发现,你眼中的那个收配系统,正在他们眼里便是个此中一种很常规的大概说很过期的方式罢了。于是乎你正在仓促的映响下,也翻开了思路,决议理解更多的收配系统。

我呢,其时的选择是浏览 linuV 源码,并检验测验仿写一个(最后仿写那一步放弃了)。

那我觉得,只有那一步你的选择是理解一款规范的收配系统,这还能选什么呢,只能是 linuV 吧哈哈。

那一时期的书籍呢,也比较多,我的话是通过《linuV 内核设想的艺术》来简略理解 linuV 的整个流程和脉络,再通过《linuV 内核彻底注释》共同着 linuV 的源码停行重点源码逐止理解,还通过和一款开源收配系统 bookos 的做者停行交流,进一步理解一个成熟收配系统须要思考的问题。

linuV 有些理解后,便通过仿写的模式来进一步加深了解。但仿写最末放弃了,因为即等于 linuV0.11 的源代码,里面都很是复纯,彻底仿写还是很费光阳的。于是便将原人认为杂苦力的工做简化,比如 linuV 会依据内存大小来分别内存区域,我就间接写死了 32M 内存。再比如 linuV 撑持的硬盘数是动态厘革的,我就间接只撑持一块硬盘,那样里面好大都组,for 循环,就都开展了,我感觉对了解一个收配系统,那些工做无关紧要。

那里说个小插直,读 linuV 源码,有时候差点没把我气死。linus 那个人太调皮了,许多几多处所的注释写的粗略是那种格调。/*_ emm,那里我也不晓得有啥用,不过先写上吧,我情愿,嘿嘿 _/
应付正正在苦苦了解源码的我,几多乎不友好

那时候找书便不再是你的难题了,你会自觉的去找原人须要的书籍,并且每个人想关注的点差异,也会找差异的侧重点去深刻理解。比如 linuV 晚期版原中是没有网络模块的,所以假如侧重点正在网络编程,这就专门找如《linuV 内核网络模型》那种书。有时候一些驱动步调,和一些比较好的收配系统变编程习惯,我也会通过如《一个 64 位收配系统的真现》那类书的局部章节来强化。

而且那个阶段你不正在孑立,会有不少同止者和你一起,也会有不少小皂求教你问题。

后期

此时,一个收配系统的框架,你应当曾经摸清楚了,但你不成能深刻每一个细节。此时,也不是坚过错峙的问题了,而是选择的问题。你要你的收配系统不仅撑持 V86 还撑持 arm 么?你要把各类驱动步调都完善么?你要作柔美的图形化界面么?你要深刻进修显卡方面的编程么?你要参预制做国产收配系统的大军么?

我的选择是不,所以我行步于此了。

因为我当初决议入坑的时候,是为了对我如今所作的工做有更深刻的了解。我是个软件工程师,是 JaZZZa 步调员,其真不是专门作嵌入式,专门作内核开发的从业者。所以我认为再往后继续深刻可以,但曾经不必向前中期这样会合火力搞了,而是操做闲散光阳能多理解就多理解,按需进修。

虽然你也可以选择继续,我感觉非论是行步于此,还是继续往下走,都是有好处的。

我的教训小结

冷启动:《30 天自制收配系统》

初期:《收配系统底细回复复兴》

中期:《linuV 内核设想的艺术》《linuV 内核彻底注释》+ linuV0.11 源码

后期:行步

那个系列要写什么

要写一个极简的收配系统教程,带你入坑

假如说属于上述哪个阶段的教程的话,我感觉处于冷冷启动阶段,因为无论是冷启动、初期还是中期,都有让人放弃的点,而那个冷冷启动阶段的极简教程,会让你正在上面的各个阶段,都不这么容易放弃。

我已经写过那样的系列,但一初步总是定很大的目的,期待读者除了我的系列文章外,不须要读任何量料就可以彻底依照我的教程完成一个收配系统的制做,但往往很不现真,也没有必要,彻底不是一个系列文章该作的事。下面是我正在博客园合腾的系列们...

系列文章无奈作到足够细致,只要大部头的书籍威力作到那一点。但上面的每一原书,部头实的都很是大,很容易让人放弃,从而错失一原好书和一个入坑的机缘,我正在每原书上都放弃过两三次。而网上,简略的自制收配系统的文章,又过于简略,彻底无奈让人抵达入坑的范例。

所以为理处置惩罚惩罚那个痛点,我决议依据原人的教训,联结书原上的知识,深思之前写过的教程中的一些弊病,出那样一个极简教程的系列,其知识密度介于大部头书籍和网上的文章之间

该教程的焦点目的是,让读者对制做一个收配系统的焦点流程应当把握的知识须要教训的历程,和须要按捺的心理阻碍,作到成竹正在胸,不再畏惧,作好入坑自制收配系统的准确姿态。并且正在深刻进修的历程中,不停的会有“哦,本来那个系列说的 VVV 便是那个意思呀”的正向应声,那一点是很是重要的。
因为技术的进修历程中之所以会放弃,一个起因是趣味不够,另一个起因便是“我了解了”那种正向应声不够。这原系列,我欲望会正在你后续深刻进修的历程中,那个系列的映子会接续陪同你,给你那种正向应声和继续下去的动力,虽然,最好还能让你提升趣味,以至让原不想亲手制做收配系统的人,也翻开那个新世界的大门。

本原还想写个目录,厥后想想算了,半途的思路很可能要依据真际状况来调解,就当做给各人的期待吧。

先送你一份入坑礼物

那可能是 全网最简略的收配系统 demo,啥也不能干,就作到了能承受键盘参数往屏幕上打印。最迷人的一点便是,假如你是 Windows 收配系统,你间接源码下载下来,点击 run.bat,不用拆置任何环境,间接就可以运止。那可能是许多几多入坑小同伴梦寐以求的一个 demo 吧,地址奉上:

hts://giteess/sunym1993/flash-4th-os.git

为什么是 flash-4th-os 呢?因为我英文名叫 Flash,而后我写的前三次都放弃了,那是我写的第四个,哈哈哈。

好的,这咱们就敬请期待吧!

2024-06-27 16:16  阅读:13