![](/themes/lewen/images/android.png)
请安装我们的客户端
更新超快的免费小说APP
![](/themes/lewen/images/apple.png)
添加到主屏幕
请点击,然后点击“添加到主屏幕”
第182章 操作系统计划(下)
许毅并不打算编写基于linux核心代码的操作系统,因为他认为,虽然linux遵循gpl开源协议,但实际上是存在隐蔽的知识产权陷阱的。实际上,linux的原作者linustorvalds始终都没有放弃对核心程序版权的要求,也就是说,只要linus愿意,他可以在任何时间收回linux的开放协议,将其重新变为独家的专利。或者,他完全有自由随时修正软件的许可证条款,将一些限制写入协议中,事实上linus将linux转向gpl协议也经历了这样一个过程。这里,很明显地存在一个非常重要的问题――如果有朝一日,linus将操作系统的内核重新封闭起来,那基于那个核心的所有软件产业都得摔上一个大跟头。
这并不是危言耸听,仔细分析,linux核心的一部分被判定存在侵权的可能性的确存在。事实上,linux的代码侵权具有多种潜在的可能性,而且linux的开发机制和代码审核流程并不像自从问世起就遭受版权问题磨练的freebsd等开放源代码操作系统那样严谨。
自己动手,丰衣足食,最可靠的还是自己编写。
许毅知道自己一个人的能力有限,所以他要做的工作,主要是一个引导作用。就如同linus一样,挑一个头,让大家一起参与到这个项目中来。不过目前到底有多少国人在研究这个,许毅也不清楚,不过总体估计,人数应该不会太多,而且,大多数人应该还处于一个非常低的水平,很多技术并没有掌握。他在网络上搜索了一下相关网站,中文方面几乎没有任何一个有关这类信息的网站,只有一个汇编网站稍微提到了一下这方面的资料。这也就意味着,并不是许毅现在提出这样一个项目,大家立刻就能参与到这个计划中来,更为重要的是,还兼任着一个教学的目的,培养大家的兴趣,让大家通过研究相关代码,增长这方面的知识。
和苏兰一起将波士顿玩了个遍之后,许毅再次安静了下来,他觉得这件事应该着手进行了,不能再拖。
许毅并不指望刚开始就能编出一个超越linux或者www.piaotian.comux系统下有一整套可以用来进行操作系统开发的工具,非常方便。许毅首先用汇编写了一个bootloader程序。这个小程序很重要,正如其名,boot即启动的意思,loader意为装载器,linux下的bootloader是grub或lilo,windows则是一个名为ntldr的程序。这个程序的作用是用来把操作系统内核的二进制代码从磁盘复制到内存中(只有在内存中才能得到执行),还用来设置一些系统初始化的信息。因为许毅打算编写的操作系统是32位的,所以它还有一个功能――将系统从16为的实模式跳转进入32为的保护模式。(电脑刚启动的时候是16为的,被称为实模式rm)
电脑刚启动的时候,程序的指针ip是指向bios程序的,所以首先执行的是bios系统(这是一个固化在flash芯片中的小程序),它负责监测系统的所有资源,并把状态,如内存大小、硬盘有多少等等,存入内存中指定的位置,在bios的最后,它会检查所有可以启动的磁盘设备,如果找到要启动的磁盘(bios中的启动顺序)的第0磁道,第一个扇区的511和512字节写着0x55和0xaa数据(可启动标志),bios就会将该扇区的512字节内容复制进内存的0x7c00处,并跳转到该处执行。这也就是为什么所有磁盘(包括软盘和硬盘)的第0磁道的第一扇区为启动扇区的原因,如果该扇区出现了物理损坏,那么这个磁盘将永远无法作为启动盘使用。
简单说来,bootloader程序的作用就是充当中间联络人,将操作系统“请”到内存当中去执行。
由于许毅用的编译器是gcc,而gcc并不能直接生成16为的代码,所以许毅只能用汇编语言来编写这个bootloader了,等机器进入32位的保护模式之后,许毅再用c语言来开发其他内核代码。
实际上,有了这个程序,就能够将系统启动了。可以在里面直接通过中断来操作显卡,例如直接往显存地址中移进去一个字母“b”,显示器中就会打印出这个字母,这相当于是一个最为简单的操作系统了,只不过这个操作系统能够完成的功能非常简单,只是在显示器中显示一个字母b而已。但是,这个就已经可以在裸机上成功运行... -->>
本章未完,点击下一页继续阅读