没有合适的资源?快使用搜索试试~ 我知道了~
实现一个简单的操作系统
资源推荐
资源详情
资源评论
开篇词-为什么要学写⼀个操作系统?开篇词-为什么要学写⼀个操作系统?
你好,我是彭东,⽹名LMOS,欢迎加⼊我的专栏,跟我⼀起开启操作系统的修炼之路。
先来介绍⼀下我⾃⼰。我是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个测试版本8个测试版本。先后从32位单CPU架构发展到64位多CPU
架构,现在的LMOS已经是多进程、多线程、多CPU、⽀持虚拟内存的x86_64体系下的全64位操作系统内
核,代码量已经有10万多⾏了10万多⾏了。
后来,我⼜没忍住⾃⼰的好奇⼼,写了个嵌⼊式操作系统⸺LMOSEM。由于有了先前的功底,加上ARM体
系很简单,所以我再学习和实现嵌⼊式操作系统时,就感觉驾轻就熟了。
经过跋⼭涉⽔,我再回头来看,很容易就发现了为什么操作系统很难学。
操作系统需要你有⼤量的知识储备,但是现在⼤多的课程、学习资料,往往都是根据⽬前已有的⼀些操作系
统,做局部解读。所以,我们学的时候,前后的知识是⽆法串联在⼀起的。结果就会越看越迷惑,不去查
吧,看不懂,再去搜索⼜加重了学习负担,最后只能遗憾放弃。
那怎样学习操作系统才是最⾼效的呢?理论基础是要补充的,但相对来说,实践更为重要。我认为,千⾥之
⾏还得始于⾜下。
所以,通过这个专栏,我会带你从⽆到有实现⼀个⾃⼰的操作系统。
我会使⽤⼤量的插图代码和⻛趣幽默的段⼦,来帮助你更好地理解操作系统内核的本质。同时在介绍每个内
核组件实现时,都会先给你说明⽩为什么,带着你基于设计理解去动⼿实现;然后,再给你详细描述Linux
内核对应的实现,做前后对⽐。这样既能让你边学边练,⼜能帮你从“上帝视⻆”审视Linux内核。
我们课程怎么安排的?我们课程怎么安排的?
操作系统作为计算机王国的权⼒中枢,我们的课程就是讲解如何实现它。
为此,我们将从了解计算机王国的资源开始,如CPU、MMU、内存和Cache。其次要为这个权⼒中枢设计
基本法,即各种同步机制,如信号量与⾃旋锁。接着进⾏夺权,从固件程序的⼿中抢过计算机并进⾏初始
化,其中包含初始化CPU、内存、中断、显⽰等。
然后,开始建设中枢的各级部⻔,它们分别是内存管理部⻔、进程管理部⻔、I/O管理部⻔、⽂件管理部
⻔、通信管理部⻔。最后将这些部⻔组合在⼀起,就形成了计算机王国的权⼒中枢⸺操作系统。
我们的课程就是按照上述逻辑,依次为你讲解这些部⻔的实现过程和细节。每节课都配有可以⼯作的代码,
让你能跟着课程⼀步步实现。你也可以直接使⽤我提供的代码⼀步步调试,直到最终实现⼀个基于x86平台
的64位多进程的操作系统⸺CosmosCosmos。
你能获得什么?你能获得什么?
⾛这样⼀条“明路”,⼀步⼀个脚印,最终你会到达这样⼀个⽬的地:拥有⼀个属于⾃⼰的操作系统内核,
同时收获对Linux内核更深⼊的理解。
学完这⻔课,你会明显提升操作系统架构设计能⼒,并且可以学会系统级别的软件编程技巧。我相信,这对
你拓展技术深度和⼴度是⼤有裨益的。之后你在⽇常开发中遇到问题的时候,就可以尝试⽤更多维度的能⼒
去解决问题了。
同时,由于操作系统内核是有核⼼竞争⼒的⾼技术含量软件,这能给你职业⽣涯的成⻓带来⻓远的帮助。如
今,在任何⼀家中⼤型互联⽹公司都使⽤⼤量的Linux服务器。
操作系统相关的内容,已经成为你涨薪、晋升的必考项,⽐如Linux内核相关的技术,中断、I/O、⽹络、
多线程、并发、性能、内存管理、系统稳定性、⽂件系统、容器和虚拟化等等,这些核⼼知识都来源于操作
系统。
⽽跳出个⼈,从⼤局观出发的话,计算机系统作为20世纪以来⼈类最伟⼤的发明之⼀,已经深⼊⼈们⽣活的
⽅⽅⾯⾯,⽽计算机作为国家级战略基础软件,却受制于⼈,这关系到整个国家的信息安全,也关系到互联
⽹信息⾏业以及其它相关基础⾏业的前途和未来。
⽽要改变这⼀困局,就要从培养技术⼈才开始。对于我们⼯程师来说,树⾼叶茂,系于根深,只有不断升级
⾃⼰的认知,才能让你的技术之路⾏稳致远。
下⾯,我给出⼀个简化的操作系统知识体系图,也是后⾯课程涉及到的所有知识点。尽管图中只是最简短的
⼀些词汇,但随着课程的展开,你会发现图中的每⼀⼩块,都犹如⼀⽚汪洋。
剩余593页未读,继续阅读
资源评论
AlgoOy
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- tensorflow-gpu-2.5.0-cp39-cp39-manylinux2010-x86-64.whl
- tensorflow-gpu-2.5.2-cp39-cp39-manylinux2010-x86-64.whl
- 内含方正小标宋简体、仿宋-Gb2312、黑体、楷体、宋体,五个公文常用字体
- 记忆卡牌游戏源码及可运行文件
- 利用wps的js宏编写的一键格式修改辅助工具
- 基于matlab实现训练RBF网络的,但用的算法是梯度下降法,算法仍然是自己写的.rar
- 基于matlab实现小波分析改造后,可以分析脑电数据的程序,出现32个导联每个通道的功率谱.rar
- 基于matlab实现物体的应力和应变DIC-通过识别一系列图像的变形得到物体的应力和应变
- 基于matlab实现文档+程序NSGA-II多目标优化的matlab代码.rar
- 基于matlab实现文档+程序 多目标优化,NSGA2算法实现.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功