高考考试网
当前位置: 首页 高考资讯

自己写操作系统难吗(教你设计一个简单的系统)

时间:2023-08-04 作者: 小编 阅读量: 2 栏目名: 高考资讯

LMOS的雏形至此诞生。经过我这几年的独立开发,现在LMOS已经发布了8个测试版本。理论基础是要补充的,但相对来说,实践更为重要。接着进行夺权,从固件程序的手中抢过计算机并进行初始化,其中包含初始化CPU、内存、中断、显示等。然后,开始建设中枢的各级部门,它们分别是内存管理部门、进程管理部门、I/O管理部门、文件管理部门、通信管理部门。

先来介绍一下我自己。我是Intel 傲腾项目开发者之一,也是《深度探索嵌入式操作系统》这本书的作者。

我曾经为Intel做过内核层面的开发工作,也对Linux、BSD、SunOS等开源操作系统,还有Windows的NT内核很熟悉。这十几年来,我一直专注于操作系统内核研发。

LMOS(基于x86平台支持多进程、多CPU、虚拟化等技术的全64位操作系统内核)跟LMOSEM(基于ARM处理器平台的嵌入式操作系统内核)是我独立开发的两套全新的操作系统内核,它们的代码规模都达到了数十万行,并且现在仍在更新。

当时是基于兴趣和学习的目的开始了这两套操作系统,在这个过程中,我遇到了各种各样的技术问题,解决了诸多疑难杂症,总结了大量的开发操作系统的方法和经验。非常希望能在这个专栏与你一起交流。

每个工程师都有必要学好操作系统吗?

经常会有同学问我这样一些问题:我是一个做应用层开发的工程师,有必要学习操作系统吗?我的日常工作中,好像用不到什么深奥的操作系统内核知识,而且大学时已经学过了操作系统课程,还有必要再学吗?

对于这些问题,我的答案当然是“有必要”。至于理由么,请听我慢慢为你道来。

你是否也跟我一样,曾经在一个数千万行代码的大项目中茫然失措?一次次徘徊在内存为什么会泄漏、服务进程为什么会dang掉、文件为什么打不开等一系列“基础”问题的漩涡中?

你是否惊叹于Nginx的高并发性?是不是感觉Golang的垃圾回收器真的很垃圾?除了这样的感叹,你也许还好奇过这样一些问题:MySQL的I/O性能还能不能再提升?网络服务为什么会掉线?Redis中经典的Reactor设计模式靠什么技术支撑?Node.js 的 I/O 模型长什么模样……

如果你也追问过上面的这些问题,那这会儿我也差不多可以给充满求知欲的你指一条“明路”了。这些都将在后面的学习中,找到答案。

为什么说操作系统很重要?

首先我们都知道,操作系统是所有软件的基础,所有上层软件都要依赖于操作系统提供的各种机制,才能运行。

而我在工作中也认识了很多技术大牛,根据我的观察,他们的基本功往往十分扎实,这对他们的架构视野、技术成长都十分有帮助。

如果你是后端工程师,在做高性能服务端编程的时候,内存、进程、线程、I/O相关的知识就会经常用到。还有,在做一些前端层面的性能调优时,操作系统相关的一些知识更是必不可少。

除了Web开发,做高性能计算超级计算机的时候,操作系统内核相关的开发能力也至关重要。其实,即使单纯的操作系统内核相关的开发能力,对于工程师来说也是绕不过的基本功。

对于运维、测试同学,你要维护和测试的任何产品,其实是基于操作系统的。比如给服务配置多大的内存、多大的缓存空间?怎样根据操作系统给出的信息,判断服务器的问题出现在哪里。随着你对操作系统的深入理解和掌握,你才能透过现象看本质,排查监控思路也会更开阔。

除了工作,操作系统离我们的生活也并不遥远,甚至可以说是息息相关。要知道,操作系统其实不仅仅局限于手机和电脑,你的智能手表、机顶盒、路由器,甚至各种家电中都运行着各种各样的操作系统。

可以说,操作系统作为计算机的灵魂,眼前的工作、日常的生活,甚至这个行业未来的“诗与远方”都离不开它。

操作系统很难,我能学得会么?

但即使是大学时期就学过操作系统的同学,也可能会感觉学得云里雾里。更别说非科班的一些人,难度更甚,甚至高不可攀。那为什么我这么有信心,给你讲好操作系统这门课呢?这还要从我自己的学习经历说起。

跟许多人一样,我看的第一本C教程就是那本“老谭C”。看了之后,除了能写出那个家喻户晓的“hello world”程序,其它什么也干不了。接着我又开始折腾C++、Java,结果如出一辙,还是只能写个“hello world”程序。

还好我有互联网,它让我发现了数据结构与算法,经过一番学习,后来我总算可以写一些小功能的软件了,但或许那根本就称不上功能。既然如此,我就继续折腾,继续学习微机原理、汇编语言这些内容。

最后我终于发现,操作系统才是我最想写的软件。我像着了魔一样,一切操作系统、硬件层相关的书籍都找来看。

有了这么多的“输入”,我就想啊,既然是写操作系统,为什么不能把这些想法用代码实现出来,放在真正的计算机上验证一下呢?

LMOS的雏形至此诞生。从第一行引导代码开始,一次又一次代码重构,一次又一次地面对莫名的死机而绝望,倒逼我不断改进,最终才有了现在的LMOS。因为一个人从零开始,独立开发操作系统这种行为有点疯狂,我索性就用LMOS(liberty,madness,operating,system)来命名了我的操作系统。

经过我这几年的独立开发,现在LMOS已经发布了8个测试版本。先后从32位单CPU架构发展到64位多CPU架构,现在的LMOS已经是多进程、多线程、多CPU、支持虚拟内存的x86_64体系下的全64位操作系统内核,代码量已经有10万多行了

后来,我又没忍住自己的好奇心,写了个嵌入式操作系统——LMOSEM。由于有了先前的功底,加上ARM体系很简单,所以我再学习和实现嵌入式操作系统时,就感觉驾轻就熟了。

经过跋山涉水,我再回头来看,很容易就发现了为什么操作系统很难学。

操作系统需要你有大量的知识储备,但是现在大多的课程、学习资料,往往都是根据目前已有的一些操作系统,做局部解读。所以,我们学的时候,前后的知识是无法串联在一起的。结果就会越看越迷惑,不去查吧,看不懂,再去搜索又加重了学习负担,最后只能遗憾放弃。

那怎样学习操作系统才是最高效的呢?理论基础是要补充的,但相对来说,实践更为重要。我认为,千里之行还得始于足下。

所以,通过这个专栏,我会带你从无到有实现一个自己的操作系统。

我会使用大量的插图代码和风趣幽默的段子,来帮助你更好地理解操作系统内核的本质。同时在介绍每个内核组件实现时,都会先给你说明白为什么,带着你基于设计理解去动手实现;然后,再给你详细描述Linux内核对应的实现,做前后对比。这样既能让你边学边练,又能帮你从“上帝视角”审视Linux内核。

我们课程怎么安排的?

操作系统作为计算机王国的权力中枢,我们的课程就是讲解如何实现它。

为此,我们将从了解计算机王国的资源开始,如CPU、MMU、内存和Cache。其次要为这个权力中枢设计基本法,即各种同步机制,如信号量与自旋锁。接着进行夺权,从固件程序的手中抢过计算机并进行初始化,其中包含初始化CPU、内存、中断、显示等。

然后,开始建设中枢的各级部门,它们分别是内存管理部门、进程管理部门、I/O管理部门、文件管理部门、通信管理部门。最后将这些部门组合在一起,就形成了计算机王国的权力中枢——操作系统。

我们的课程就是按照上述逻辑,依次为你讲解这些部门的实现过程和细节。每节课都配有可以工作的代码,让你能跟着课程一步步实现。你也可以直接使用我提供的代码一步步调试,直到最终实现一个基于x86平台的64位多进程的操作系统——Cosmos

你能获得什么?

走这样一条“明路”,一步一个脚印,最终你会到达这样一个目的地:拥有一个属于自己的操作系统内核,同时收获对Linux内核更深入的理解。

学完这门课,你会明显提升操作系统架构设计能力,并且可以学会系统级别的软件编程技巧。我相信,这对你拓展技术深度和广度是大有裨益的。之后你在日常开发中遇到问题的时候,就可以尝试用更多维度的能力去解决问题了。

同时,由于操作系统内核是有核心竞争力的高技术含量软件,这能给你职业生涯的成长带来长远的帮助。如今,在任何一家中大型互联网公司都使用大量的Linux服务器。

操作系统相关的内容,已经成为你涨薪、晋升的必考项,比如 Linux 内核相关的技术,中断、I/O、网络、多线程、并发、性能、内存管理、系统稳定性、文件系统、容器和虚拟化等等,这些核心知识都来源于操作系统。

而跳出个人,从大局观出发的话,计算机系统作为20世纪以来人类最伟大的发明之一,已经深入人们生活的方方面面,而计算机作为国家级战略基础软件,却受制于人,这关系到整个国家的信息安全,也关系到互联网信息行业以及其它相关基础行业的前途和未来。

而要改变这一困局,就要从培养技术人才开始。对于我们工程师来说,树高叶茂,系于根深,只有不断升级自己的认知,才能让你的技术之路行稳致远。

下面,我给出一个简化的操作系统知识体系图,也是后面课程涉及到的所有知识点。尽管图中只是最简短的一些词汇,但随着课程的展开,你会发现图中的每一小块,都犹如一片汪洋。

现在让我们一起带着好奇,带着梦想,向星辰大海进发!

    推荐阅读
  • 陈乔恩演过的电视剧(最后一部你看过吗?)

    陈乔恩演过的电视剧《偏偏喜欢你》由制作方精心打造,阵容豪华,题材新颖,立意阳光健康。由于冒名萧晗,名义上的未婚夫项昊对她不停刁难。而项昊的死对头,好学生沈文涛却对她一见钟情。《佳期如梦》上榜“2010年第二季度国内上星电视剧收视率八强”。陈乔恩饰演的尤佳期一家小广告公司的经理,善良、能干、坚韧、孤勇。陈乔恩饰演猪九妹,女,二十三岁。

  • 烟雨江湖丹青怎么画 烟雨江湖丹青怎么画山水画

    在烟雨江湖中,玩家可以习得丹青这一技能,该技能可以让玩家作画,那具体画法是什么呢?烟雨江湖丹青怎么画在烟雨江湖游戏中,丹青是指绘画,用毛笔蘸水、墨、彩作画于绢或纸上。烟雨江湖背景设定介绍玩家扮演一个初入江湖的毛头小子,逐步成长为江湖大侠的故事,玩家会面临一项又一项不同寻常的任务,在完成任务的过程中不断成长,还会获得各种古神兵利刃,练就绝世武功,结交到各种性格的江湖人物。

  • 国学典籍里的好名字(国学典籍里的好名字精选)

    仙江、瑾幽、沛以、清蓝、曦香自趣、夜瑛、卓缘、慧邑、怡慧,下面我们就来说一说关于国学典籍里的好名字?我们一起去了解并探讨一下这个问题吧!国学典籍里的好名字仙江、瑾幽、沛以、清蓝、曦香自趣、夜瑛、卓缘、慧邑、怡慧茜尔、枫芍、菲霄、慧凌、柏忆寻紫、羽任、若菡、翠燕、洁娟蓝曦、芷迎、露真、莺香、任怀平萱、双婉、芬佩、瑾可、桑盈宁婵、媛舒、南卓、亦怜、裳婧

  • 最火的炸酱面馆(大连最受欢迎的拌粉店)

    人气高环境也不错其实这家拌粉店从开业到现在已经有好几年时间了,虽说还不如那些老店的名气高,但是生意一直都相当红火,在大连已经遍地开花,总有一家在你周围。菜品丰富在菜品种类这方面,这家拌粉店那可是相当丰富,不过要说人气最高的招牌菜是什么,那当然还得是这个牛肉拌粉了。

  • 各种经典湘菜家常制作方法介绍(湘菜家常做法)

    各种经典湘菜家常制作方法介绍剁椒鱼头。材料:鱼头700g、葱1段、姜1块、蒜1头、剁椒2大匙、盐1茶匙、黑胡椒1茶匙、蒸鱼豉油1汤匙、鸡精1/2茶匙。做法:鱼头加盐搓洗干净,冲掉盐水,撒胡椒粉1茶匙,蒸鱼豉油腌渍十分钟。剁椒加蒜剁碎、葱姜切丝垫盘底。油烧热,放入剁椒蒜蓉煸炒一下,调入鸡精备用。鱼头铺上剁椒,水烧开,蒸10分钟。油烧热,浇在鱼上,撒葱花装饰即可。辅料:盐2g、蒸鱼豉油20g、味素2g、拉油50g。

  • 2022漳州龙文小升初回籍生登记条件 2021年漳州龙文区小升初招生

    2.请用黑色水笔填写《2022年龙文区初中一年级回籍生招生登记表》,一式两份,并由小学毕业学校审核、盖章。

  • 贺知章的诗贺知章古诗三首原文及翻译(贺知章简介)

    贺知章的诗贺知章古诗三首原文及翻译《咏柳》原文:碧玉妆成一树高,万条垂下绿丝绦。我的乡音虽未改变,但鬓角的毛发却已经疏落。只有门前那在春风吹拂下泛起一圈一圈涟漪的镜湖的碧水,还是旧时模样。历任国子四门博士,太常博士,礼部侍郎,加集贤院学士,太子宾客兼秘书监。天宝三年因为不满奸相李林甫专权而返乡,隐居镜湖。长于七绝,其写景之作,清新隽永,诗味浓郁。

  • 惊蛰节气的重要意义(二十四节气惊蛰的重要意义)

    惊蛰节气的重要意义惊蛰,是二十四节气中的第三个节气。斗指丁,太阳到达黄经345°,于公历3月5-6日交节。惊蛰,为干支历卯月的起始;卯,仲春之月,卦在震位,万物出乎震,乃生发之象。时至惊蛰,阳气上升、气温回暖、春雷乍动、雨水增多,万物生机盎然。在二十四节气之中,惊蛰反映的是自然生物受节律变化影响而出现萌发生长的现象,它是古代农耕文化对于自然节令的反映。

  • 社区获得性肺炎的分级诊疗(关于社区获得性肺炎的诊治)

    即使存在诊断延迟的风险,但胸部X线正侧位片因其在CAP诊断中的现场诊断准确率可达到65%,成为近年来CAP诊断的新金标准。如果流感病毒检测为阳性,建议结合抗流感治疗。总而言之,快速诊断可尽快控制患者病程,及时进行早期对症治疗和病因治疗,改善临床结果,降低CAP患者病死率。

  • 晨跑的说说朋友圈(早上晨跑的心情说说)

    跑步是一项坚持的运动,一个人跑的时候更能锻炼自己的意志!跑步是克服慵懒的良药。夜跑是坚持晨跑才是挑战耸拉着脑袋静静看人家起步。脚伤后的第一次晨跑。可以预见,这条路会变成附近最美的一条绿廊。锻炼身体,享受健康生活;户外运动,呼吸新鲜空气;生命在于运动,快乐来自天然。一个人跑步,正是一个人品味孤单,品味生命的时刻。晨跑5km,每次晨跑完拉伸最爽,顺便YY自己是晨跑的小公主,和外面那些妖艳贱货不一样。