我想写一个自己的操作系统,比如Unix或Linux,最起码我需要具备些什么?然后我需要怎么做?

于寒洛


一个操作系统就算早期的XP系统,安装完毕有好几G,换算成代码都不知道有多少字符,估计你一个人光把字符敲出来这辈子都无法完成。更不要说去思考怎么写程序了。


管庆林2


大概翻了一下回答,绝大多数都是些没写过操作系统,估计连操作系统教材都没通读过的扯鸡蛋没用的建议。写个能跑起来的操作系统没那么难。我好多年前就玩过。在这里我给你整点干的。

你需要熟悉x86汇编和C语言就足够了。

C语言至少要有单个程序5000-8000行以上的编程经验,否则你很难驾驭即便是玩具规模的操作系统代码量。汇编需要熟悉保护模式。模式的转换,特权级,分页等等等等。

我当时汇编看的杨季文的《80X86汇编语言程序设计教程》。记得他花了大篇幅讲保护模式的。

然后《操作系统设计与实现》这是必须要看的。但是理论艰深、没有基础的人看之前需要有铺垫,我路子野,没正经上过大学。全靠自学。所以当时看了好些别的书。走了弯路。但是现在是信息时代,知识大爆炸。绝世武功秘籍到处都是。就看你能不能耐住性子克服浮躁习得一身本领。

无意中翻过一本书《一个操作系统的实现》写得相当用心。这本书作为《操作系统设计与实现》的铺垫再好没有了。而且这本书本身就作为这个目的写的。另外推荐《返璞归真UNIX技术内幕》这也是一本好书。主要讲解unix版本6的内核代码,讲得非常到位,觉得值得一看。在你实现你自己的操作系统的过程中应该会遇到的疑问这里基本上都带着讲到了。

有了这三本书在手边实现基本的内存管理,输入输出,进程间通信,简单文件系统应该不会再有什么大问题了。

org 07c00h 开始玩吧!

别把这太当个事儿,写操作系统很大程度就是玩。怎么高兴怎么来。要记住,你在实现过程中可能会遇到的各种问题在好久好久以前都已经被大牛们解决掉了。信息时代,你怕啥啊?就是玩。玩的高兴。


主恩永铭


其实没那么复杂,我自己就写过一款Rtos,简单实现任务调度,任务间的通信,全部大概5000行代码,操作系统现在分为微内核和巨内核,像Linux实现了用户区和内核区隔开,内存机制需要Mmu支持,就非常复杂,想鸿蒙就实现了微内核,就做操作系统而言并不像外面人认为那样门槛高,熟悉普遍的操作系统的一些机制就可


我的名字一直有人


几个人写操作系统?自己的操作系统?一个人写出来的不叫操作系统,对于操作系统的概念你可以借鉴一下《操作系统原理》一书。我们退后100步,假如写出来了,能用来干嘛?能用吗?Windows7 几万人几千万条代码,现在都还在改补丁,在更新,说明还是不足。再退一步,假如可以用,独立?你在现在这个互联网和马上要到来的物联网时代,独立这个词是大忌!


一颗豆芽哇


恭喜你选择了一个光荣并且艰巨的任务!

如果你纯粹是玩,这比较简单,网上很多教程讲到怎么构建一个操作系统,并且有很多开源的代码可以尝试阅读改写;如果要在实际中应用操作系统,形成一个产品,推向市场,这条路是漫长而艰辛的。

现代计算机系统由一个或者多个处理器、主存、磁盘、打印机、键盘、鼠标、显示器、网络接口以及各种输入输出设备构成的。一般而言,现代计算机系统是一个复杂系统。如果每位程序员都不得不掌握系统的所有细节,那就不可能再编写代码了,所以计算机安装了一层软件,称为操作系统,操作系统既作为机器的扩展,面向用户提供抽象的功能,也管理计算机的软硬件。


计算机的类型,操作系统可以分为大型机操作系统、服务器操作系统、多处理器操作系统、个人计算机操作系统、掌上计算机操作系统、嵌入式操作系统、传感器节点操作系统、实时操作系统、智能卡操作系统等。

如果想要自己开发操作系统,首先要对计算机的硬件结构有大体的掌握,对处理器、存储器、硬盘、I/O设备、总线有比较深刻的理解,熟悉进程、地址空间、文件、输入/输出、保护、SHELL、系统调用等操作系统的基本概念,另外还要掌握数据结构和算法的基本逻辑。当然,懂汇编语言和C语言是必须的。

在掌握这些之后,就可以开发操作系统了。


第一,设计操作系统的目标。即为什么要设计这个操作系统,要解决什么样问题,用在什么地方,要具备什么性能,客户是谁。

第二,功能模块的设计和接口的设计。编写一个操作系统并不容易,从接口开始是最好的起点,除了主要的系统调用接口,还有其他的接口。比如某些程序员需要编写插入到操作系统中的设备驱动程序这样的接口设计。

第三、系统的实现。系统的结构,机制与策略、正交性、命名、绑定的时机、静态与动态的结构都是需要考虑的问题。

第四、还要考虑系统的性能,考虑什么应该优化,空间-时间的权衡,高速缓存、安全性等等。

第五,考虑开发团队的管理与协调。带领团队开发操作系统。

操作系统是大型、复杂和长寿命的程序。LINUX和WINDOWS操作系统的源代码有500万行,相当于16K,1000页厚的一本书,所以要开发一个产品级别的大型操作系统绝非易事。

祝你在学习的路上不断成功,不断努力实现自己的梦想,实现人生价值。


石家庄陀螺科技


你起码得是个教授,你得会设计io,阻塞,非阻塞,单路复用,得分情况,你得懂内存和cpu交互,你要设计内存模型,如何做到多用户,多任务,多线程,你得懂网络,那些底层协议得自己搞,至于代码,只是工具,你用什么都可以,但是你要想有点竞争力,那你只用用接近底层的汇编和c,我们码农平时研究的什么数据结构算法设计模式,你得当吃饭随便用,你有这水平么


杀死那个青白江人


你问问李纳斯脱袜子,他就写了一个内核,其他周边的程序都是开源组织贡献出来的,是全世界开源爱好的结晶。

你要写操作系统,是要在冯诺依曼结构上写呢,还是推倒了,重新设计计算机,不过量子计算机出来后,很有可能颠覆原来的设计,那微软的windows就开始落寞了,linux以及前生都将会变革,不过想要打倒它们你必须有产品,有超前的设计,就是一个字“快”,处理速度比现在快个几十亿亿亿亿循环,被,人们才会接受你的产品,才能颠覆他们。

把计算机的结构重新设计出来,然而这只是第一步,第二步找材料,材料对于产品研发至关重要,比如说导电性能,磁场性能,耐高温,等等,地球上没有的话只能等,天上掉馅儿饼了,哪天掉个陨石什么的,

硬件都设计好了后,开始研发语言,因为你的计算机重新设计了,所以编程语言也需要重新定义,C语言已经算最好的了,你可以设计出D语言,E语言,要比C或者汇编快更多,特性更强。

语言设计出来后,就开始设计操作系统了,操作系统就是虚拟在硬件的一个入口,协调各个硬件沟通交流,把结果返回过来。

第四步完事后一个完整的产品就设计出来了,但你要把眼光放高点,因为你的产品不是卖给别人,不是让它普及,是要打出地球,打太空仗,你要把计算机送到太空去,多多益善,因为计算能力超前,光速也不在话下,所以你可以通过量子,让时空扭曲,轻而易举到另一个星球,这样的话发现下一个文明也就是轻而易举的事了,你要记住,等你找到适合人类居住的新环境不要忘了我,路我已经给你铺好了,孩子快动手吧。


fleeing_alone


不请自来。

要写操作系统,你需要的是大量基础知识,比如操作系统原理、保护模式、计算机组成原理、处理器架构、汇编语言、链接与装载等等。

具体怎么BOOT启动,怎么跳20号地址线,怎么切换到保护模式之类就不说了,你需要对操作系统有个全面的架构设计,中断怎么响应,进程/线程怎么调度,内存怎么管理……,慢慢地,你会搞出一个操作系统雏形出来了,当然这里是指内核。

等到这差不多了,重头戏来了,你要开发一些驱动程序,没错,那些硬件厂商可不会随便为新的操作系统开发驱动的(或者适配)。什么显卡驱动,什么文件系统(当然是创新的,不是NTFS,也不是EXT4之类),什么网卡驱动……又要拜托你开发了。

好了,经过多年不懈努力,假设你终于完成驱动层了。

系统也跑起来没蓝屏了(假设内核吐核时有蓝屏)。

好的,重头戏又来了,你这个操作系统还没有一个应用软件。比如上面没有Photoshop,没有Chrome,没有QQ……没有任何软件啊,这可怎么办呢?那些软件厂商可不会随便为新的操作系统开发软件的(或者适配),咦,这句话好熟悉的感觉。

对了,这就是所谓的操作系统的“生态”系统,现在,已经不是编程能力的问题了,你面对的,是海量的生态。


超级码农冲呀


1.取个响亮的名字,比如鸿蒙。

2.githab下载linux源码。

3.找个半吊子c coder改ui.

搞定


普罗米修斯啊


既然你想写,那你必须先要买一支水笔,哦对了,至少得买两支,一支黑色的,用于写,另外一支红色的,用于改,因为估计你在写的过程中难免会出错。然后你还得买一些白纸,俗话说白纸黑字嘛,50张估计不够用,至少你得买100张,写操作系统毕竟是大工程,多买几张也不算浪费,A4、B5两种规格都可以,B5的便宜一些,但是可写的字少啊,A4的贵一些但能写更多的字,这要看你的预算有多少了,你家要是有矿,大可不必纠结,直接买A4就可以了。但是Unix和Linux你就别写了,因为已经有人写了,但也没有关系你可以写Unix-2或Linux-2,将来你写完以后发布时,可以这样说:我的操作系统的最大特点就是“2”。


分享到:


相關文章: