开发一个电脑如何开发操作系统统需要多少资金?

苹果怎么装windows系统需要多少钱_百度知道
苹果怎么装windows系统需要多少钱
  可以自行安装,方法如下:  1、点击底部的launcher。  2、点击其他,打开boot camp助理。  3、勾选前面两个勾。  4、浏览到windows系统镜像,并插入U盘(大于4G)。  5、U盘刻录完成后再次打开boot camp助理,勾选第三个。  6、划分区域,至少20G空间,如果打算长期使用的,至少需要60G空间。  7、系统会自动引导进入U盘,在选择分区时点击驱动器选项。  8、选中bootcamp分区,点击格式化。  9、点击安装,等待文件复制完毕,即可使用windows系统。
其他类似问题
为您推荐:
提问者采纳
购买了苹果的笔记本,很多人想要安装Windows操作系统,然而Mac系统的和Windows系统硬盘分区方式不同,早些时间想在苹果电脑安装Windows那是谁也无能为力的,自从苹果公司采取了因特尔处理器,逐步改变了“特立独行”的态度,缉订光寡叱干癸吮含经自己开发的Bootcamp软件就可以用来安装Windows,并且目前只有bootcamp这个软件,才能在Mac下安装Windows双系统。安装完成之后,就是Mac和Windows双系统了。本人安装时手机拍摄留下几张图片,仅供参考:1.进入Mac系统后,找到“实用工具”,点击boot camp,即可进入bootcamp2.将Windows的安装光盘插入光驱(只要光盘里面有Windows原版镜像即可)3.接下来就是按照Windows系统的安装方法安装即可。4.安装完毕后进入Windows,将Mac OS盘(买电脑自带)插入光驱,安装Bootcamp(如果Windows7,则需要Bootcamp3.1版本,Bootcamp安装时应该从低级版本向高级版本安装,此软件可自行下载,下载地址)安装注意:
1.安装Windows时需要将BOOTCAMP盘格式化,(bootcamp盘符名称是刚才在mac下分区时自动创建的),其他盘切记不要随便删除或格式化,否则会出大乱子。
2.按照以上步骤装完后,只有两个可见分区(不考虑自动生成的隐藏分区)。
3.Bootcamp软件只能管理两个分区,如果在Windows下,用分区软件将bootcamp盘分区,则进入Mac系统后bootcamp软件无法使用,所以在Mac系统下无法切换系统,也无法调整分区。但是重启时开机“长按”option键,可以切换操作系统,因此可以在Windows下分区。
4.Windows下的分区在Mac下只能读,不能写入。重装注意:
1.如果事先你的电脑已经存在双系统了,想要重装Windows,则非常简单,将Windows光盘放入光驱,重启,“长按”“C”键,即可从光盘启动,然后将Windows安装到Bootcamp盘即可。
2.重装Windows,可以将Windows原版镜像解压到优盘或移动硬盘,双击setup安装;也可用光盘安装,与普通电脑基本上无区别。
3.重装Mac OS,只需将自带的Mac OS光盘放入光驱,重启,“长按”“C”键,即可从光盘启动,按照提示步骤操作,非常简单。装完后进入Mac,即可重新调整分区。 -------------以上步骤完全是实际操作所得,只要有耐心,苹果电脑安装系统也很简单。
来自团队:
其他3条回答
苹果装windows系统只能使用双系统。外面请人装的话一般50一次。也有20--100不等的。
苹果笔记本MacBook安装Win7双系统教:
苹果笔记本MacBook因其时尚的外观设计和优美的系统界面深受大家的喜爱,不过对于新购买mac本本的朋友来说,使用macOS可能还不是很习惯,所以很多朋友都选择在MacBook上安装WinXP或者Win7双系统,毕竟MacOS上的软件和游戏太少。本文即MacBook安装Windows 7系统的图文教程,Mac安装Winxp同样可参照以下教程。以下我们就教各位如何利用苹果系统自带的Boot Camp来安装Win7。
MacBook安装Win7双系统教程步骤一:使用Boot Camp 分割磁盘
在10.6 Snow Leopard中,内建好了Boot Camp这套软件。在Finder下点选 前往&&工具工具
点选工具程序资料夹中的Boot Cmap 助理
点选打开之后,就...
可以自己下载windows的iso安装,然后购买一个密钥激活,一半700-800元,到电脑维修店里一半30-50元,非正版,有推广软件,最好自己装正版,哪怕不买秘钥用激活软件,自己用着舒服!(如自己不会分区那就只好到电脑维修店里或售后弄了
windows系统的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁写一个操作系统内核有多难?大概的内容、步骤是什么?
链接中人有说到“一个好一点儿的计算机硕士毕业的学生。写一个操作系统的内核绝对是应该办到而且肯定可以办到的事儿。”是这样的吗?如果真的要去写一个操作系统的内核,大概可以分成几个任务?大概是怎么做的呢?(可以请用只懂计算机基本原理,懂一点点硬件和一点点软件的人能看懂的水平解释)
按投票排序
更新更新下第二版的代码地址:第二版在硬件机制上没有增加多少东西(简单的忙等待的IDE驱动,简单的键盘驱动),主要是策略上和代码上做了一点点优化,参考了Linux内核的一些命名和代码(比如2.6内核的伙伴算法简化后添加进来)。--------------------------------------------
厚脸皮推荐自己基于《JamesM's kernel development tutorials》写的中文文档,如果你只有基本的C语言和汇编基础以及一点点操作系统理论的话,这是起点很低的入门读物了。项目地址:PDF 文档以及对应的 Latex 源文件(那会只是刚开始学着用Latex,不规范的地方请见谅)也在git仓库里一并提供(可以免费复制传播,请不要用于商业用途)。git仓库里甚至按照章节的形式提供了每章节结束后代码的样子(文档里不是全部代码都贴),以供参考。懒得下载可以看在线版:
在线版是markdown格式转换的,遗憾的是markdown格式的源文件被我搞丢了。。补充一下文档目录:项目概述和开发环境配置计算机启动过程、GRUB 以及 multiboot 标准裸机上运行的 Hello OS Kernel字符模式下的显卡驱动相关库函数和调试打印函数添加全局段描述符表添加中断描述符表完成中断请求和定时器中断物理内存管理的实现虚拟内存管理的实现内核堆管理的实现内核线程的创建与切换接下来如何继续学习------------------------------------------
这个东西很难被称为“内核”,甚至说它是“玩具内核”都是缪赞了。这只是一个看起来能运行的原理示范性质的小程序。不过不可否认,按照文档来,你可以写出一个看起来挺好玩的东西并学到一些基础知识。
虽然一个真正的内核很难很复杂,但是一个简单的Demo并不是遥不可及。即使有兴趣,学习的过程中也需要乐趣和不断获得的成就感,不是吗?
祝你玩的愉快~
不是太难,关键还是需要兴趣,如果你真的想刨根问底,没什么能挡住你。最基本的有几个部分:1 bootloader, 你是用个现成的grub还是自己写,很多人就倒在这一步了。2 内存管理3 进程管理4 中断和系统调用5 文件系统, 当然可以折腾的很多,但最好还是先把这些弄出来,才可称之为一个操作系统。资料都有,你可以参考: 。xv6的代码也不错,文档齐全,在GitHub无数个人在折腾自己的操作系统,。 可以参考,只是有很多部分其实可以不用汇编写了。James的那个教程还是入门最好的。你要做的就是准备好时间,做,看,做,看...
来回答。折腾了半个学期 + 4个人能搞出来,还带了一个基本的 GUI。光在 GUI 里显示鼠标就直播 coding 了 7 个小时……
一般计算机的本科生(大一的会点C语言,有点耐心,3个月)就可以了。。。有一本日本人写的书叫《30天自制操作系统》一步一步带你写出一个操作系统内核(可以写到光盘上,从光盘启动,第一节就叫你如何实现一个“hello,world”),一般计算机的本科生(就是会一点点C语言的那种理工科生),有点耐心的话,每天2~3小时,三个月基本能够看完,跟着撸出一个操作系统内核。根本不需要什么硕士水平。不需要前面说的各种文档。事实上作者的目标甚至是中学生也能看得懂,感觉基本做到了(最后也就几十k的代码)。写完之后会很有成就感。我的第一本计算机厚书就是《30天自制操作系统》。写出来有什么鼠标键盘输入,汉字显示(书中是日文显示,由于日文中有汉字,所以其实可以算汉字显示),多进程(多任务),段页式内存管理,各种驱动,定时器,文件系统(读硬盘,文件目录和内容读取等),窗口,音乐播放,内核保护,api,小游戏,图片播放,应有尽有。。。如果大学能够跟着写完,绝对,毕业面试的时候能吹嘘一下。。。当然里面的c语言编译器不是自己写的(编译器工作量真不小)。。。我当初就是看不惯国内那些书在那里装比,没有真正的拿得出手的科研成果,然后在那里装比的各种著作。然后人家这本,哈哈,真的就能够跟着撸出一个操作系统内核,而且,绝对是效率不错,结构可以的东西。。。而且人家通俗易懂,很有诚意,比起那些复制粘贴强行装B的书不知道要强多少倍。。。跟着做完内核保护和api的话,还能加深理解。
我的意思是,你完全可以自己快乐地把一个操作系统内核给读懂,在半参与的状态下做出来,玩一玩,不用一开始就想的那么高深和神圣。。最后跟着一起写api,玩游戏,理论+实践,轻松+愉快。。以后如果有兴趣可以去读linux的东西,去搞点其他的。。。愉快的成长
而不是一本厚书接着一本厚书地啃,啃了半年也看不到一个hello,world和桌面,最后感叹一句放弃。那样很无趣,很苦逼。----------------------------------------------------补充分割线------------------------------------------------------本书的某些代码的确不算完美,有些地方甚至比较幼稚,作者为了照顾初学者,会故意不用某些高级的成熟的开发技巧。。。这是本书的缺点,也是本书的优点。因为本书的定位就是那些没啥基础却又好学的新手。最后如果你在读那本书,请一定要看第18页,不要去买软盘(我当初就TM没细看,去买了软盘还有软盘读盘的那种古董级别的东西,结果看到第18页吐血了,葵花宝典:第一页:“欲练此功 必先自宫”,某人狠下心,咔,第二页“若不自宫,也能成功”,连想艹都不能)。。。----------------------------------------------------补充分割线------------------------------------------------------我的文章受众是普普通通的计算机专业的本科生(我也是计算机本科生毕业)(各位研究生大大们,见谅)。。。希望哪怕有一个人能够通过这本书,开始写一点代码。我读大学的时候见过太多人,张口闭口比尔盖茨,扎克伯格,却不知他们的偶像还写过不少代码。。。他们没事情会去看“烫烫烫,屯屯屯”的由来,也不愿意去写几行C语言代码。他们会去看各种Linux的花边故事,也不愿意自己看看操作系统的基本结构。。。学校里也是,你还没弄个网站就有一堆教授跟你说:三大框架,并发优化,仿佛一开始弄,就要弄到标准,弄到一个水平。。。我只希望,有人能够去踏踏实实地去看点书,去写点代码,而不是看了知乎的“写一个操作系统内核有多难”之后,记住几个名词然后回去吹牛,我希望,他们能够自己开始动手去看,去跟着写,去发现,去收获。
借这个问题,正好把自己以前走过的总结下。zero to one大学的时候,一心热血,想着写个自己的简单操作系统,刚开始也是一脸茫然,首先接触的也是这份文档《JamesM's kernel development tutorials》,对着作者的blog,特别有意思,很多概念都不是很清楚,慢慢查,在学习完之后,对操作系统简单的有了轮廓,bootload, GDT IDT, 内存管理,文件系统等等。microkernel vs monolithic随后认识了有一种更新的理念(当然现在不新了,对当时对我),微内核,发现内核OS,原来还能有另一种(非Linux宏内核的)设计,我们看的很多教程,多少天写操作系统,包括前面的JamesM's kernel development tutorials,都是类unix实现,本质上设计的思路和框架都类似。微内核则是把很多原来集成到kernel的模块,通过IPC的方式,变成一个个services跑在用户模式下面,这样大大增强了可扩展性和内核的稳定性。这块精妙的设计,当我后来看到 erlang中的actor 模型的时候,想到就是microkernel的设计,如此相似。这块精妙的设计,当我后来看到 erlang中的actor 模型的时候,想到就是microkernel的设计,如此相似。在接触Linux的时候,曾经看到的有关Linus和Minix作者关于微内核和宏内核的争论,让我首先接触到Minix,但是水平不够,读起来比较吃力。后来发现了FreeNOS,用C++写的基于微内核的操作系统,通过学习这个项目,又对操作系统,软件设计,设计模式等等大开脑洞。FreeNOS这是一个用C++实现的微内核的操作系统,各种宏内核中的服务作为一个独立的services在微内核中,基于消息的通信方式,这点其实跟Mac内核中的mach那部分机制相似。除了是一个操作系统的实现,另外从中也能很好的学习到OOP的设计方式,整个代码风格特别好,完全基于面相对象,还有一些常见的设计模式,在接触了这个开源项目之后,才了解,代码风格,注释,doxygen,scons,设计模式。不仅涵盖了所有的操作系统的设计,学习,更接地气的包括了各种优美设计。Exokernel微内核新一代的微内核,MIT出品。Exokernel微内核的核心观点是:只要内核还提供对系统资源的抽象,就不能实现性能的最大优化 -- 内核应该支持一个最小的、高度优化的原语集,而不是提供对系统资源的抽象。从这个观点上来说,IPC也是一个太高级的抽象因而不能达到最高的性能。Exokernel微内核的核心是支持一个高度优化的原语名叫保护控制转移(protected control transfer, PCT)。PCT是一个不带参数的跨地址空间的过程调用,其功能类似于一个硬件中断。在PCT的基础上,可以实现高级的IPC抽象如RPC。在MIPS R3000处理器上,一个基于PCT的RPC实现了仅10us的开销,而在同一硬件上运行的Mach RPC为95us。对磁盘的处理,跟微内核的比较坚持成长,更多的不在于结果,关乎过程。共勉~
现在不少人都在通过自己写内核来学习操作系统,网上还有专门的课程(),按照这个课程,几个月就可以完成一个功能还算完备的内核.但是这些人可以自己用几个月的时间写个内核,建立在当下相关资料特别丰富,而且虚拟机调试特别方便的基础上的.用bochs(虽然我自己从来都没有整好过),qemu,可以轻松进行汇编级调试,qemu还可以利用gdb remote debug来进行源码级调试.但是倒退到Linus那个时代,一个人写内核的,绝对是绝顶高手,因为当初没有什么相关资料,大概就几本书可以参考,MINIX那本,UNIX内核设计与实现等.而且调试非常不便,只能靠自己把代码写对,非常非常的不容易.
写个玩具内核不难,固然学习与理解需要花费比较长的时间,但总体而言本科硕士的知识面已经足够了。关于内容和大体步骤,当时写了一点东西,如果感兴趣可以作为参考:写个玩玩还是挺超值的,对得起上学没处打发的时间。ps:
Linus 可比一般的喷子脑残之流凭他们可怜的想象力所沾到的影子牛逼多了。
我很想回答这个问题。 我是一个高中生,自初中开始就想做一个操作系统,并付诸于行动。 我们制作的操作系统 鬼鸟操作系统,使用自己实现的 探索者操作系统内核,已经完成了基本的功能,外加一个不错的图形用户界面。
上面这个图就是我们操作系统在VMware虚拟机里面的运行截图。 其实说来做操作系统,你需要首先掌握一些基本功,我在初中的时候已经学习了x86的汇编语言,在高中的时候,在正式做系统内核前,我完成了两三次每次2-3000行的汇编技术验证代码,对汇编语言,函数思维,很多设备的特性和诸如参数传递这类众多小技术细节都有了较为详细的理解。 上面这个图就是我们操作系统在VMware虚拟机里面的运行截图。 其实说来做操作系统,你需要首先掌握一些基本功,我在初中的时候已经学习了x86的汇编语言,在高中的时候,在正式做系统内核前,我完成了两三次每次2-3000行的汇编技术验证代码,对汇编语言,函数思维,很多设备的特性和诸如参数传递这类众多小技术细节都有了较为详细的理解。类似这样的基本功必不可少,我可以用汇编实现整套操作系统,但是考虑到可移植性,后续维护,我们到后期还是用了汇编和C混编的方案。除此之外,因为操作系统运行环境和应用程序运行环境着实不同,这些基本功对于我们进行操作系统设计,调试都是极其重要的。除此之外,毕竟操作系统是个大工程,在做这个东西的时候,我们力量小,这时就需要我们有聪明的开发策略。打个比方,现在商业级操作系统的文件系统部分所占代码量可能就已经超越众多小型操作系统总代码量了,个人或者小团体开发的操作系统,真的不能过多关注单一的功能,人家的东西是按商业化考虑的,你就按照实现的角度考虑就行了,哪怕你的一些做法功能不会像人家那么好,一些优化算法不如人家那么有效,但是到真正的需要你考虑其效能问题的时候,你们的操作系统已经非常大了,那时候进行商业性的设计,比现在的更方便。做操作系统,最关键的是,要在大的功能上均有所实现,在人少力量弱的情况下,小功能不要追求完整。只要能够支撑下个功能的实现就行了。例如,实现内核模块动态链接功能,至少需要在文件系统方面实现文件读取,能读取文件才能支持后面对elf格式分析,重定位等一堆功能实现。但是这并不意味着你需要在百忙中追求文件系统中长文件名的读取这类只有用户才介意的功能。操作系统包含的功能面多,对于我们而言,不可能一开始就学完所需要的各个知识,各种标准规范协议,实际上大多数情况下,你需要边学习,边借鉴,边设计,边研发。在这个情况下,你需要清晰的知道自己需要完成哪些功能,对于这些功能,你要有清晰的了解,然后以这些功能实现为主线,博览群书,看看民间的方案,linux和Windows的方案,然后再设计自己的方案。我接触过的很多人,边看30天自制操作系统边做,或者Orangs 一个操作系统的实现
,哪怕是一些更加专业的书籍,也会有一些不足和局限,如果对自己做的功能不了解,只能深陷于这些书的坑。就说这么多吧,我的qq ,个人网站,时间不早了,还有80多天就高考了,希望这篇文章能给大家说明一些事情。还有,对于985 211院校,凭着操作系统参加自主招生容不容易一本线录取?稍后这个文章会被复制到知乎其他文章中。
尽管上面很多人说写一个操作系统内核是比较简单地事情,但是,如果你只有一点点软件和一点点硬件基础,那么我可以放心地告诉你,这绝对不是一件很简单的事。除非你指的操作系统就是一个稍微能控制一下资源或者稍微能运行几个进程的简单东西而已。在写操作系统之前,你就清晰地明白操作系统是要干什么用的。操作系统对应用程序提供了硬件层面的抽象;负责管理包括CPU,内存,磁盘,IO等硬件资源,以及进程表,文件打开表,页表等软件资源;负责提供应用程序可用的API和系统调用;负责保护硬件资源和软件资源的访问安全和隔离性;以及提供多用户支持等等功能。那么在写一个操作系统之前,你就得保证你所写的操作系统满足必须满足的要求:鲁棒性,可扩展性,高效性,丰富性,安全性。先不说后几条要求,仅仅鲁棒性一点要求,都能把一个程序员折腾很久(呃,我这个菜鸟程序猿就被折腾了很久)。当你明白了理论上的代码要求,你可以开始琢磨写一个简单的操作系统内核。至于你说要分为那几步。我的拙见是,在你动手写之前,你又必须给自己一个规划,这个规划就是:从实模式到保护模式一步一步的推进,从微内核到单内核的推进,从实验到简易实用的推进…当你开始写实模式的操作系统内核时,你得要会一下这些必须知道的知识:(哪怕一点点)操作系统启动原理,也就是bootloader的作用,包括魔数,MBR等等Intel 汇编或者AT&T 汇编或者嵌入汇编。这里面需要使用到int中断,简单的算术操作指令,跳转指令,开关中断指令(你只需要知道一点点,完全不用看intel手稿)DS,ES,SS,BS,SI,DI,AX,BX等等寄存器的使用和工作原理,这是实模式下唯一需要了解的一点点微机原理知识。信号量,消息同步以及中断屏蔽的知识。这一部分会让你更加清楚地了解到Linux单内核的NB之处。系统调用,进程切换,内存分配,磁盘访问布局,文件系统。系统调用包括read,write,fork,exec,wait,exit这些最基本的系统调用(甚至不用去看dup,dup2,wait2等等暂时无用的),进程切换了解pcb管理,内存就了解最简单的分配方式,文件系统就是inode节点结构(甚至不需要考虑超级块等等)。当你进步到保护模式的时候,你就得额外学习其他的知识了,这些知识包括但不限于:地址转换的概念,段页的概念,页表访问,MMU,TLB等原理。什么是内核模式,什么是用户模式,ring0~3是怎么具体保证的的EAX,EBX,ECX等等通用寄存器以及控制寄存器,GDT,LDT的概念更高级的内存分配模式,例如slab或者懒惰伙伴分配等等。更高级文件系统,ext3,ext4等等。当你又从微内核进步到单内核的时候,你需要考虑:微内核中一些模块如进程分配服务,内存分配服务,文件管理服务,设备驱动服务如何集成到内核,哪些可以集成到内核,哪些不能。自旋锁,信号量,消息同步的有什么区别,如何避免死锁。单内核的系统调用和微内核系统调用的区别等等。当你从实验进步到简易实用(只是简易而已,暂时还不包括网络资源管理,这一部分涉及到TCP/IP协议栈,更加复杂)的时候,你需要考虑:操作系统效率以及安全性问题,这里面涉及到进程调度,内存管理算法,磁盘调度算法等等方面。系统调用的丰富性问题,是不是支持大部分的系统调用。基本应用程序的支持性问题,例如shell,cat,wc,cd,ls这些简单的总要支持。POSIX标准的支持问题,能不能支持编译运行一些原始版本的程序。总而言之,对我这样一个刚刚研一的不是研究系统架构的人来说,写一个操作系统内核也并不是一个非常简单的事情(尽管我们在大二的时候就已经写过了)。我仍然需要花很多的时间查资料,看文章,向我的一直奋战在一线的参与Linux以及KVM内核维护的可爱的bash老师(他在我们的学校bbs上的ID叫bash)请教,我仍然能够从中学习到很多很多以前没有学习到的知识。所以,写一个操作系统并没有很多人说的那么简单,当然这样的说法有点冒犯了上面一些说比较简单的大神们^-^,还请包涵,毕竟我代表的是平均智商,哈哈。当然如果我自己的一点点粗浅的理解能够帮助到lz,那就比较好啦…
这个不难。写个小内核的,仅有有限的任务调度功能的操作系统,读完CS专业大学三年级的课程即可。目标平台可以是真实的,也可以运行在Windows Console下。这种操作系统有很多,比如ucOS,rex,FREERTOS,等等。最初程序员们都是纸带机啥的上面写点0和1。后来写写汇编,都是针对硬件直接编程。也不区分什么内核应用什么的,都是一个线串下来。硬件遵循摩尔定律发展了一阵儿之后一根筋的程序里面就得弄一大堆中断响应。也就是说程序执行的过程中,需要让CPU停下来干别的更重要的事儿的情况多了起来。慢慢的程序结构复杂了起来,人们觉得需要做点基础工作让写代码的时候不必关注多中断调度啥的。还有就是一次要干的事儿多了,几个事儿不能光靠外部中断进行切换,得让它们有个内在的秩序。于是就有了任务调度。再后来大家觉得光有任务调度的代码还不够。最好内存管理也能简单点。还有存储设备,一个劲儿的对一个块读完了擦,擦完了写,特定的块会挂掉。诸如此类的需求不断出现。于是就有了内存管理和设备驱动。慢慢的发展下来大家觉得这部分代码是非常重要的。要区别于它们所服务的代码。就有了内核和应用的区分。早期的应用和内核是在一起编译的,后来有了可执行文件这样的设计,就可以分开了。上面的例子可能不够准确。大家轻拍。回到正题。操作系统是为了解决计算机科学技术发展中遇到的实际问题。分几个步骤,要看题主想解决几个问题,也就是有什么样的目标。
一两句说不清!说到可操作性,去看于渊的书《自己动手写操作系统》《Orange'S:一个操作系统的实现》。
我认为,某些专业的合格硕士生建造一个
时代的汽车也并不难。但是我不知道这么做有什么实际意义。我还看到有人说:「初学者千万不要看 Linux 代码」「可能一辈子都看不完」。这是最最误导初学者的言论。学汽车难道不去看真正的发动机,去看 Karl Benz 的古董?去看标准模型做的玩具?一个 Audi 的 TFSI 发动机的细节,研究十年不一定能穷尽。但是那不意味着这台发动机的知识是不分层次的。组织合理的话,你在这台发动机上花的实践可以和得到的知识成正比。另一件值得注意的事情是,软件在构建过程中的样子,未必就是最终 deliver 的样子。和建筑一样,软件在构建过程中也要搭脚手架。很多代码是构建过程中不得不用但是 deliver 之前又不得不删除或者 disable 的。刚刚开始写程序,甚至写过几年 app 的人,都不见得知道如何去运用这种 scaffold code。OS 内核恰恰是需要 scaffold code 非常多的领域。我认为,随着软件系统越来越复杂,真的没有必要每一代人都重复体验如何构建某个领域的 scaffold code。初学者更应该从成型的软件中学习知识。题外话:拿 Linus 开涮的人我都绕着走 —— 当经理的肯定不是好鸟,做技术的早晚摔跟头。
仅用有无独创的内核,这个标准来评价一个程序员,是比较片面的。如果题主的目的是为了兴趣,那么有不少教程可以读一读,例如于渊的《自己动手编写操作系统》就是我入门时看的…然而大部分书只能带你入门,之后要学东西靠得是实验和读手册(例如Intel IA-32 Software Developer Manual)如果题主更多的是为了积攒经验方便以后工作,则只需要稍微了解系统原理,多注重如何使用现有API。因为人们对这类经验看中的是你学没学会一种思想,能不能知道商用系统中怎么利用,很少有需要你自己重造轮子的。要记住的是,一般没人会只因为你做了一个操作系统就给你工作。这也是我忘了操作系统只是兴趣后,才体验到的教训…希望能帮上一些人的忙…感谢邀请
想听实话吗?玩具内核中学生受过训练都能写.写代码,的确是世界上最简单的事.写操作系统内核,甚至连高等数学都不需要会,也没有特别难的算法和数据结构,算是最简单的一类程序,仅仅比脚本复杂一点./////////////////////////////////////////分割线//////////////////////////////有人要说了:答主你这么强行xx真的好吗?真的好.下面总结下写一个操作系统内核需要具备的知识:\t1.(知乎这个居然不能加制表符,我手动\t了,你们就当成有制表符看吧吧)一门能操作底层的编程语言,汇编的一点基础必须有(至少得知道代码段数据段栈段这类的,还有函数调用的约定,如果你用C内嵌汇编的话),C语言最好熟练掌握.如果要编写的平台上有成型的C++编译器,也可以利用.但没有new基本上类是废的,就当成有构造函数的结构体就行了....\t2.计算机组成原理的理解.这个只要知道点汇编基础基本上都能有.\t3.操作系统原理的理解,包括操作系统内核的几大功能,还有一些操作系统中用到的数据结构.\t4.程序调试经验.\t5.耐心.////////////////////////////////////////分割线////////////////////////////需求:既然是玩具内核,那就应该忽略一些仅仅靠时间堆砌就能完成的部分.因此文件系统就没必要实现了.嵌入式环境是一个比较理想的环境.要实现基本的任务按优先级调度和优先级内部轮转调度,内存动态分配回收,消息机制,锁机制等等.如果感兴趣可以研究保护模式,分页机制,不过嵌入式环境没这个条件.保护模式的精髓就在于利用分页寄存器实现了地址空间变换,提供了内核空间和用户态空间两套地址空间.那么怎么规划开发流程呢?我的思路是:(可供参考不一定最好)首先要实现高可扩展性,就必须先动态分配和回收内存.因此先造个malloc和free.声明一个大数组,让你的malloc()在这个数组里分配空间给各个进程以供使用.这块内存里构造出内存控制块结构,记录内存的分配和回收情况.这个可以参考UnixV6.然后,要构造出抽象的各个概念的管理结构.进程要被操作系统接管,因此进程控制块(TaskControlBlock,TCB)是一个重要结构.里面至少要记录进程的一些基本信息(已用时间,优先级,资源列表,函数指针,栈区空间等).消息结构也很必要.可以实现简单的邮槽机制,进程接收消息构造成先进先出的队列比较符合一般的思维习惯.定时器结构,里面放一个函数指针之类的,这都是可以的.中断管理块,如果你考虑未来这方面的深入的话.如果你想做的复杂一些,加上一点文件系统和输出之类的,那就还得加上文件控制块结构,并且接触更底层的操作,用中断直接控制处理器与外设交互.这个有资料可以查,但我没实现过.然后就是一些关键的函数.因为C没有类,结构体刚构造出来的时候是一团乱糟糟的东西在里面.因此上面的各个结构都需要有"构造函数".有了malloc,要new也不难.然后就是控制各种结构的行为.比如进程的调度需要上调度器锁,寄存器压栈,栈区空间的切换,寄存器弹栈,优先级更改,时间片计数,卸调度器锁等等操作.这个自由度比较大,有一定发挥的空间.比如可以做成实时操作系统,类似uC_OS2,也可以做成类似linux那种,有个prio和一个nice值在里面,有个红黑树之类的.不过一般嵌入式空间不允许你这么折腾...然后还有定时器调度,进程的启动与终止资源回收之类的.反正有了malloc和free,,这些都是时间问题.为了保证可移植性,最好把和CPU相关的代码单独拿出来放到一个头文件里去.对了,前面忘了说了,这些结构和函数摆放的顺序也是有讲究的,然后呢,不同的编译器对宏的支持和一些细节的语法要求也不太一样,不同的工作环境栈区增长方向不一定一样,这个都得试一试.其实写操作系统真不算难的,这种玩具内核连个复杂点的数据结构都没有.写数据库起码还得有个B树呢,写浏览器还有个http协议,图形,html读取的问题在里面,写编译器有文法分析什么的,相比之下操作系统内核真心不算难了.///////////////////////////////////////最后一个分割线//////////////////////////////////当然了,你要是不做玩具内核,而是做真正能用的商业内核,那可难了.这种难度主要是软件工程方面的.上千万行的代码需要许多人分工协作,开发用的东西比较底层,debug也不是很方便.因此难度很高.有了内核还不算,还要有优良的生态系统.因此与其从头写一个,不如用现成的linux内核,成熟稳定.连嵌入式平台都有用Linux的.
严格来讲,我们上OS课的每个人都写过。不知道你有没有做过jos lab,那个就是要自己写一个内核(虽然是在既定框架下)。要是急于写出来的话,去看《30天自制操作系统》,跟着敲代码就好。
难度在 没有时间
有人推荐《自己动手编写操作系统》,不过我还是喜欢赵炯的《Linux内核完全注释》,用的是linux-0.11的源码。
写内核*除硬件驱动之外*的部分是不难的。写硬件驱动是both of kernel and mind panic
写个操作系统不难(许多人在写操作系统,国内也有一些人再写)。有本叫做《30天自制操作系统》的书,用汇编和C语言 一个月内写出一个操作系统,这个操作系统包含:图形界面多任务汉字显示文件压缩听音乐看图片玩游戏...我照着做了一个星期,发现对制作操作系统没有什么兴趣,因为很多时候都是在查BIOS手册;不过这本书本身倒是满有趣的,作者的写的浅显易懂,语言很油墨,我有时候看了笑到肚子疼。--------如果搜索 微型操作系统,还可以发现许多操作系统。--------Linus的牛叉之处,不仅仅是他的技术,就编程技术而言,Linus是个高手,但是还不是当今世界上一流高手。有很多人能够写出优秀的操作系统,能够坚持做下去的就没多少了。Linus的领导能力也是独一无二的,做一帮性格怪异、遍布世界的编程天才的“首领”,不是每个人都能做到的;Linus讨厌冠冕堂皇“办公室文化”,他经常说脏话,还毫不留情地骂自己的“队友”,但不得不承认,他粗鲁的言语确实很有道理;反而现在很多人满口大道理、各种花言巧语,实际上却什么都没说,或者说的都是谎言;
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 c语言开发操作系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信