如何从零开始开发一个操作系统?

哈希安全


操作算是在软件开发里面功能非常齐全难度非常大的一个超级工程,目前国内掌握操纵系统技术的科技公司也是少的可怜,而且不完全是技术层面的东西了,还需要构建生态链,国内的阿里公司在这方面已经做过尝试了,只能讲不是很成功,主要开发出来了需要真的有人去使用,现在无论桌面的操作系统还是移动端的操作系统都有巨无霸存在,而且还是垄断性质般的存在,现在华为手机因为安卓禁止使用服务导致国外的销量下滑,现在华山一条路只能启动一个自主的操作系统的研发,还在华为公司已经做了大量的准备,不至于这么被动,但任重而道远。

回到主题从零开始开发一个操作系统,本身就不是一个人能做的事情。这个工程量巨大,但从学习的角度可以研究一下如何完成一个简化版的linux,记得刚学习C语言的时候基本语法刚学习完的时候,就去学校的图书馆借了一本linux内核深度剖析,觉得自己的C语言基础玩的差不多,结果看了100多页实在是坚持不下去了,所以编程的学习是一个长期积累的过程,只是学了一门编程语言距离真正的编程还得差得远,编程的学习是一个长期积累的过程。

要制作最简单的操作系统需要掌握的基础,C语言,汇编语言以及常见的操作系统常识,真要仔细的描述就不是几百字能够描述清楚地,bootloader加载,内存管理,系统进程调度,中断处理等等这些简单的功能实现可能会比较简单,融合在一起流畅的运行就不是那么简单的事情了,现在网络上很多简单的几十行汇编代码,其实就是让大家找个感觉感受下自己制作个操作系统是什么感觉,真正玩起来需要做的细节太多,都不是一个人能玩的事情。

从工作上讲操作系统的定制主要在嵌入式领域用的比较多,嵌入式领域因为受到硬件的限制,需要对载入的系统进行定制,不需要全套新功能可能涉及到操作系统的定制,这点是有技术含量,现在还是有很多微小的嵌入式系统需要精细化的定制,当然linux内核在有些场景下也需要定制。

对于初学者需要开发一个操作系统的东西,需要储备大量的理论知识,需要对计算机的系统运行原理都需要有所了解,需要的编程语言,汇编,C语言,需要程序的加载以及内存运行管理,中断等等理论有一个深刻的了解,一般做这方面工作的需要经验丰富的老程序员,涉及到底层动作经验占据非常重要的因素。

如果觉得对于linux内核比较感兴趣,可以学习下linux啮合深度剖析,里面对于初级的linux主要框架进行了分解,剖析到了每个功能以及内部的原理实现,对于深入了解操作系统有非常大的好处,学习任何东西首先要掌握一定的理论才能去实践,在不懂得理论的基础上再进行实践是最好的方式。

希望能帮到你。


大学生编程指南


这个问题我只能那么回答你:

如果你会制造芯片,那么系统怎么做都可以。

如果你用别的芯片开发系统,只能向别人买开源指令,不同芯片指令不同。

最后一种第三方面仿真系统,列如在WIN和安卓操作系统制造第二系统。

一个是独立完全属于自己,一个需要授权于人构造上要以他的规则来写系统。最后一个系统中写系统。不知道你想用那种方式做系统!

第一种可以完全按照的意思去规划,同时与芯片设计同步,那么所有指令等都在你手上,各种设计运算规格都是自己的,做起来思维比较清晰不会出现任何杂乱现象,如果你用第二种第三种写系统,等会别人把一些暗码给锁定不告诉你,芯片无法完全释放功能上运算当然大大折扣,同样的配置别人比流畅几十倍,你反而慢的不行。

零开始学习制作系统没有深厚的经验底功,至少5年左右基础学习,因为它包含有串口,无线等。有想法但系统一个人是做不过来的,要团队合作,一个负责设计结构,然后分工写系统,一个写显示,一个写音频,一个写运算,等等!代码至少1万条,每一条代码都有一定的作用!希望你好好努力吧,一个人做不过来,还是老老实实的学习编程小软件小游戏,修改程序之类复制过来在加工利用。


与自然做斗争


只说一下我的看法,不全面,希望有所帮助。

假设是个人想从零开始开发一个操作系统,要注意三点:

  1. 兴趣:一个个人小操作系统很难有商业竞争力,只有依靠个人兴趣来完成

  2. 简单:别想一口吃成胖子,先完成一个极简操作系统就是成功

  3. 坚持:开发过程中,会遇到很多挫折,要能坚持学习和实践下去


操作系统从简单到复杂,差距极大。

如果是个人想从零开始开发一个操作系统,比较现实的是开发一个简单系统。但无论有多简单,都要做好投入大量精力的准备,当然,技术上的收获也会很丰富。


有几个简单操作系统是带有教学性质的,可以学习相关书籍,阅读代码,并尝试自己实现,如:

  • µC/OS:极简单、适用于单片机的实时操作系统(RTOS)

  • Minix:简单的类UNIX操作系统,Linus的灵感和入门教程


其实有很多好项目都是个人或小团队完成的,如Lua语言,Linux系统(早期)。梦想还是要有的,万一实现了呢?


夏冬


学过单片机和汇编,推荐看一本书<30天自制操作系统>,看完就会写了。大致的流程是调用BOIS中断从磁盘的0扇区读取程序加载到内存boot区,CPU就会开始执行,再调用BOIS的显示中断往显存填充数据,就能显示出来。切换到32位保护模式,加上内存分页管理,进程调度管理,一个操作系统的雏形就完成了。当然要商用的话,基本不可能,硬件厂商不会为你的系统开发驱动,那系统也只是个玩具而已。


光明右使8787


在数学领域,0不是起点也不是终点,改革开放以来,我们的拿来主义一度盛行,靠买技术,买产品来模仿日子让我们一度感觉良好,但每一次的全球技术升级我们都要再买人家丢下的技术,我们永远都会落后一代或两代,国家也发现了这个弊端,所以我们在买科技的时候组织专家进行逆向研究,在硬件领域我们有些能和人家齐头并进了,一些能超出,但也遭到打压,操作系统方面国家并没有太重视,因为两大操作系统基本覆盖全球应用的运行,我们即使有操作系统也是国内可以,全球则不灵,因为话语权控制在美国公司手里,但我们有必要去做,毕竟我们国家是最大的全球单一市场,如果所有国内手机都用我们的自有系统,你觉得,他们会不会低头呢,我认为会,因为谁跟钱有仇


万通建材401


从0开始,你心真大。其实没必要,现在有开源的linux/unix类,有aosp,最关键的有应用生态


d238037885


不会从零开始,以当时技术储备为基础。


程杰副研究员


研究一下老前辈是如何成功研发“两弹一星”的,研究透了,没有中国人干不成的事情。当然,首先是当官的必须无腐败。


示范车


编程语言开始吧?


薏米印记


1、一套高水准的操作系统,就是一个社会的缩影,它要兼顾万般需求、兼容各类客户,它的稳定性、多功能性、兼容性、可扩展性这些看似矛盾的要求必须提现在一套软件内,因此首先就要求研制者本身具备对社会万象具备极高的理解力,要见多识广,否则一个社会可能的需要什么你都不清楚,又如何研发出一款可以满足社会各类需求的软件呢?不可能。

但很多社会本身就不发达、文化单一,那么这个社会的需求与见识就必定有限,这就意味着一套成功的操作系统,只能在一个开放多元、高度发达社会、各类文化丰富多彩的社会内才可能被研制出来,因为一套操作系统其实就是一个社会的缩影,没有极为丰富的见识、没有千奇百怪的需求,你如何做出一套可以兼容这个社会99%的需求的产品?这就是常说的“你的见识决定了你的高度”。

2、其次是竞争的压力,即便是在一个发达的社会中,各类需求要素都被你掌握了,但如果没有貌似残酷的竞争,没有巨大的压力,一套成功的系统也不可能被研制出来。

这就像战争一样,没有生与死的压力,你个人的才华与潜能根本就不可能被发挥出来。操作系统也是如此,如果你只是国家出面组织一帮人,关起门来埋头研发,我敢说“十年也只是搞出一个四不像来”,因为根本就没有在市场中被反复的蹂躏、实证和PK过,不可能有好产品。只有在生与死的压力下,才可能出好货。

换言之: 只有在一个纯粹市场经济的环境中才可能竞争出一个好的操作系统。

3、我们知道,天才之火也要靠利益之油来维持,在软件行业特别依靠对知识产权的尊重,必须依靠购买正版软件,让研发的公司有巨大的利益,愿意持续投入,才能让一套操作系统可以数十年的持续改进,维持高水准、高性能、高的兼容性,在一个盗版横生的市场上,是不可能诞生一套高级的操作系统的,因为研发人员早就饿死了。





分享到:


相關文章: