我想写一个自己的操作系统,比如Unix或Linux,最起码我需要具备些什么?然后我需要怎么做?:什么都不需要准备,能提出这个问题,充分说明你没有写操作系统的可能
什么都不需要准备,能提出这个问题,充分说明你没有写操作系统的可能性。
Unix和Linux属于大型操作系统,凭个人之力,根本不可能完成。以Linux系统为例,它的版权人林纳斯.托瓦兹(Linux之父)是个天才程序员,没日没夜忙了差不多半年,写出Linux的0.01版,也就是初级版本,你猜源代码有多少?大概有1万行。
Linux0.01版发布后,林纳斯和全球成千上万黑客(和现在喜欢在网上偷鸡摸狗的黑客不同,那时的黑客都是程序员大牛,主要以改进电脑软硬件性能为乐趣)一起修改完善。从1991年0.01版发布,到1994年Linux1.0正式版发布,三年时间,参与的程序员能轻松坐满一个足球场,你猜代码有多少行?一共17万多行。
林纳斯.托瓦兹(Linus Torvalds),Linux系统之父。你的手机、你家的电视机顶盒、你常取款的 ATM上的系统,都是基于 Linux 系统改造而来,没有这个人,就不会有现在的开源软件。
除非你认为自己的编程天赋和勤奋努力程度能碾压上述大牛,那么可以试试以个人之力,写一个Linux级别的操作系统。
更重要的是,当时还是486电脑当道的时代,操作系统远没有今天复杂,那怕是iOS和安卓这样的公司化运作的操作系统项目,也并没有从0写起,而是“踩在前人的肩膀上爬梯子”,iOS的内核是Unix,安卓系统的内核是Linux,苹果公司和谷歌公司在原有系统上“改扩建”,搞成了自己的东西。
肯·汤普森(Kenneth Thompson),C语言前身B语言的作者,Unix的发明人之一,程序员们的祖师爷。
也不是泼冷水,不同的操作系统有不同的应用领域,它是一个复杂的系统工程,只靠一个人的能力是无法实现的,精力能力都有限,需要掌握硬件,软件的知识非常广,例如,工程,通信,网络,个人等等,至今为止没有一个操作系统是一个人来完成的,也许你会破例。
不请自来。
要写操作系统,你需要的是大量基础知识,比如操作系统原理、保护模式、计算机组成原理、处理器架构、汇编语言、链接与装载等等。
具体怎么BOOT启动,怎么跳20号地址线,怎么切换到保护模式之类就不说了,你需要对操作系统有个全面的架构设计,中断怎么响应,进程/线程怎么调度,内存怎么管理……,慢慢地,你会搞出一个操作系统雏形出来了,当然这里是指内核。
等到这差不多了,重头戏来了,你要开发一些驱动程序,没错,那些硬件厂商可不会随便为新的操作系统开发驱动的(或者适配)。什么显卡驱动,什么文件系统(当然是创新的,不是NTFS,也不是EXT4之类),什么网卡驱动……又要拜托你开发了。
好了,经过多年不懈努力,假设你终于完成驱动层了。
系统也跑起来没蓝屏了(假设内核吐核时有蓝屏)。
好的,重头戏又来了,你这个操作系统还没有一个应用软件。比如上面没有Photoshop,没有Chrome,没有QQ……没有任何软件啊,这可怎么办呢?那些软件厂商可不会随便为新的操作系统开发软件的(或者适配),咦,这句话好熟悉的感觉。
对了,这就是所谓的操作系统的“生态”系统,现在,已经不是编程能力的问题了,你面对的,是海量的生态。
1.取个响亮的名字,比如鸿蒙。
2.githab下载linux源码。
3.找个半吊子c coder改ui.
搞定
能问这个问题,就代表你就写不出来了,不是打击你,建议放弃,浪费时间,你先看懂了Linux 内核早期版的源代码后(网上有下载)再谈这个话题。
操作系统也有大有小,有简单有复杂。大的如桌面级的,小的如路由器,单片机。
所以你应该首先知道自己的第一步目标该怎么走了吧?
别看大部头的教科书,那只会让你心态奔溃掉。
先给自己一个小目标:搞定一个单片机或者把你自己的路由器搞定。
汇编会吗?C语言呢?不会的话先从基础语言学起。这个难度不是太高,比较未来你是要搞定操作系统的大神。
那开始从单片机开始吧,自己网上买点基础的开发板,这个也不贵。找些资料,代码也不多。网上买板子,很多资料会附送。
到这一步,你就开始撸吧。实战才是转化脑动力的唯一途径。当你感觉撸的差不多干净了,就开始进入下一阶段吧。我相信经过这场实战,你应该已经干货满满。对未来充满憧憬。少年,向更高级别奋斗吧。
每一阶段,你的朋友圈都会刷新一次。打入更高级别的圈子,与更高级别的大神们共同战斗。
注意爱护自己的头发,它们总有一天会离你而去,因为它们在你那越来越聪明的脑袋上,压力越来越大。
不要在这种问答类平台上混,那只会浪费你的时间,对于未来的男人,或者女人。时间就是生命。
对了,把英语一定要学好。毕竟很多大神和资料都是英语的。
相信自己,从现在开始,别放弃。翻过所有的高山,你会看到最美的风景 >>一位只混到单片机级别就放弃的失败者忠告
想要写一个操作系统的人大部分都是带着兴趣玩,毕竟现在主流的操作系统windows,苹果系统,linux系统属于目前比较常见的系统,其中linux内核属于开源可以看到其全部的代码,很多研究操作系统都是以linux为参考的模型,毕竟开源的代码研究起来也方便,但是对于个人来讲要去写一个操作系统难度可想而知了,曾经有个北京的同事已经工作了十几年主要的精力就是在研究底层,是个疯狂的linux内核研究者只要是是家里没事就会呆在公司加班研究linux内核,有时候一起吃饭讨论研究linux内核的主要在哪块,他讲到其实linux内核已经不是当初设计的样子了,现在的代码的更新速度之快让人发指,在全球范围内真正对于核心内核代码具备修改能力的非常有限,而且已经被国外巨头公司收到自己的公司作为储备资源。
说到linux内核非常的关键代码就是内存管理,这块也是linux内核非常关键的代码,每次和同事一起讲到内存管理他就会两眼放光,曾经有一次公司组织让他给大家讲下linux内核的内存管理,结果一口气讲了3个小时中间没有任何的停歇,讲的大家都快睡着了他还在激情澎湃在讲着,说到内存管理他能一口气讲3天3夜,说到linux代码的贡献者,大部分可能是对一些驱动细节或者测试用例的提交,这些本身的技术含量不是很大但是需要遵守里面的代码规范,一旦不规范连基本的机器检测都通过不了,虽然看起来是开源的社区对于代码规范要求也是极其严格的。
说到每次研究linux内核的心得,最大的快乐在于看懂一行里面核心代码的设计意图,能够看懂linux核心代码的为什么要这么实现就已经代表水平非常不错的人了,倒不是linux内核代码有多深奥,关键需要对于内核的工作原理以及常见的知识有足量的储备,当然如果长期跟踪代码实现的规律可能研究起来就比较顺畅了,如果短时间内想彻底的看明白还是存在非常大的难度的,所以想要研究一个linux内核的代码,建议现在linux内核社区浸泡一段时间,然后了解周围的基本知识,当然首先要具备一定程度的编程能力。
对于操作系统来讲本质还是一个软件产品,但是又有其特殊性属于给别的软件产品提供开发的环境,所以对于硬件资源支配以及用户的行为最贴近的软件系统了,由于用户体验极强所以其开发语言需要在性能上极强,操作系统主要的开发语言有C语言和汇编语言,很多人在网络上喊着C语言已经过时了,这些都是只看到表面的现象,只不过底层的语言不像之前显得那么重要了,但是很多软件系统的底层还是离不开C语言,而且像操作系统这么繁杂的工程C语言也是主力军,可以预见在未来C语言在应用级别的开发在减少,但是对于底层的维护能力还是在加强,大家都跑去开发高级语言了,总得需要有人来维护底层的而且对于维护和修改能力还是非常高,真正掌握高技巧的C语言能力的人还是照样在编程市场拿高薪。
由于操作系统功能太过复杂所以真要想要玩转linux内核建议看一本《linux内核完全剖析基于0.12内核》的书籍,专门抽取了早期的linux内核的版本在逐行讲解的一本书,里面详细的介绍了linux内核主要功能是如何实现的,以及为什么要这么去实现,但是由于历史太过久远不要企图和现在的linux内核做对比,中间优化迭代的版本太多了多的会让你怀疑人生,所以不要企图去了解其中的来龙去脉,还是先从基本的原理入手去解决,对于linux内核需要掌握的知识先从基本的编程语言和常见的操作系统运行的原理开始着手准备,希望能帮到你。
其实没那么复杂,我自己就写过一款Rtos,简单实现任务调度,任务间的通信,全部大概5000行代码,操作系统现在分为微内核和巨内核,像Linux实现了用户区和内核区隔开,内存机制需要Mmu支持,就非常复杂,想鸿蒙就实现了微内核,就做操作系统而言并不像外面人认为那样门槛高,熟悉普遍的操作系统的一些机制就可
恭喜你选择了一个光荣并且艰巨的任务!
如果你纯粹是玩,这比较简单,网上很多教程讲到怎么构建一个操作系统,并且有很多开源的代码可以尝试阅读改写;如果要在实际中应用操作系统,形成一个产品,推向市场,这条路是漫长而艰辛的。
现代计算机系统由一个或者多个处理器、主存、磁盘、打印机、键盘、鼠标、显示器、网络接口以及各种输入输出设备构成的。一般而言,现代计算机系统是一个复杂系统。如果每位程序员都不得不掌握系统的所有细节,那就不可能再编写代码了,所以计算机安装了一层软件,称为操作系统,操作系统既作为机器的扩展,面向用户提供抽象的功能,也管理计算机的软硬件。
计算机的类型,操作系统可以分为大型机操作系统、服务器操作系统、多处理器操作系统、个人计算机操作系统、掌上计算机操作系统、嵌入式操作系统、传感器节点操作系统、实时操作系统、智能卡操作系统等。
如果想要自己开发操作系统,首先要对计算机的硬件结构有大体的掌握,对处理器、存储器、硬盘、I/O设备、总线有比较深刻的理解,熟悉进程、地址空间、文件、输入/输出、保护、SHELL、系统调用等操作系统的基本概念,另外还要掌握数据结构和算法的基本逻辑。当然,懂汇编语言和C语言是必须的。
在掌握这些之后,就可以开发操作系统了。
第一,设计操作系统的目标。即为什么要设计这个操作系统,要解决什么样问题,用在什么地方,要具备什么性能,客户是谁。
第二,功能模块的设计和接口的设计。编写一个操作系统并不容易,从接口开始是最好的起点,除了主要的系统调用接口,还有其他的接口。比如某些程序员需要编写插入到操作系统中的设备驱动程序这样的接口设计。
第三、系统的实现。系统的结构,机制与策略、正交性、命名、绑定的时机、静态与动态的结构都是需要考虑的问题。
第四、还要考虑系统的性能,考虑什么应该优化,空间-时间的权衡,高速缓存、安全性等等。
第五,考虑开发团队的管理与协调。带领团队开发操作系统。
操作系统是大型、复杂和长寿命的程序。LINUX和WINDOWS操作系统的源代码有500万行,相当于16K,1000页厚的一本书,所以要开发一个产品级别的大型操作系统绝非易事。
祝你在学习的路上不断成功,不断努力实现自己的梦想,实现人生价值。
华裔女赌王就此没落,生前让所有 浓情端午粽飘香,青浦邀你“云体 上海:“云端”展现端午节文化内 “甜咸大战”!明星艺人们喜欢什 如何做一个男人喜欢的情人(如何 当你和你同时出现在同一个场景中 如何在昏暗的光线下设置快门速度 教育在生活中的价值是什么? 世上做坏事的人死后会面临什么因 拜登就任总统后的第一步是什么? 同意/不同意:人生最重要的目标 二战后,德国在调和分歧方面做得 亚伯·林肯恨白人吗? 一个编辑能把你的故事毁得有多严 现在的iPhone6还能坚持再用一年 曹操为什么不杀司马懿? 现在买房是不是最便宜的时候,现 我身边的农业银行营业厅关了,AT 欧洲媒体评选CBA最有实力球员, 荣耀play的6+128和荣耀8X的6+128 蚂蚁集团是科技公司还是金融公司 请问机友华为mate30P与华为mate3 听说老詹修剪一次指甲需要5小时 为什么说宝宝“一月睡二月哭三月 戴笠人称戴老板,这个是怎么叫出 没有工作能一次性补缴社保么? 我想知道定向师范生和免费师范生 肺癌引起的咳嗽是怎样的呢? 5000mAh电池的5G手机推荐吗?要 恒大亚冠表现“差强人意”,你觉