1.1工欲善其事,必先利其器。
如果您觉得操作系统已属于很底层的东西,我双手赞成。但是如果您像我之前一样,觉得底层的东西无法用上层高级的东西来构建,现在可以睁大眼睛好好看看下面要介绍的东西了。
首先,操作系统是软件。软件是由编程语言来实现的,即使是编译器本身,它的开发人员都不愿意用底层语言去构建(GCC是用C语言完成的),只有到万不得已的时候才会用汇编语言来写。我们也是一样,能用省事的方法就不要自找麻烦,如果某位大神能直接写机器码,小弟真心恳求与您见上一面,希望您收我为徒,我要当面磕头拜师。不过话又说回来了,直接写机器码也并不是什么明智的做法,毕竟费力不讨好,不过毅力还是值得钦佩的。同学们不要被我虔诚的态度误解为直接写机器码是不可能的事,这个能,必须能,写汇编编译器的同学做的就是这样的事,原则上只要按照IA-32指令格式往二进制文件中写指令,就一定能让cpu理解自己,能够直接同cpu对话了…停,赶紧回来,咱们是来写操作系统的,赶紧进入主题。
1.2我们需要哪些编译器
C语言虽然不是为设计大型软件而生,但其却被用来开发大型软件。
现代操作系统基本上用c语言再结合汇编语言开发的,所以c语言编译器,我们选择的是gcc.而汇编语言编译器,我们选择的是nasm。为什么选择这两个,首先因为它们都是开源软件,其次其强大的功能不亚于同类的商业软件。
1.21世界顶级编译器GCC
秉着简单至上的原则,我们在开发过程中,能用简单的工具就不用复杂的。所以我们的系统,绝大部分是C语言实现的,而且并不需要多么高深的算法及数据结构功底。
另外我们是在linux下开发,所以首先的编译器就是GCC,基本上没有人不了解这个大名鼎鼎的开源编译器了。出于对这个编译器的膜拜,我还是引用wiki上的介绍:
GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器。它是一套以GPL及LGPL许可证所发行的自由软体,也是GNU计划的关键部分,亦是自由的类Unix及苹果电脑Mac OS X 操作系统的标准编译器。 GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的标准。
GCC是由理查德·马修·斯托曼在1985年开始的。他首先扩展一个旧有的编译器,使它能编译C,这个编译器一开始是以Pastel语言所写的。 Pastel是一个不可移植的Pascal语言特殊版,这个编译器也只能编译Pastel语言。为了让自由软体有一个编译器,后来此编译器由斯托曼和Len Tower在1987年[1]以C语言重写[2]并成为GNU专案的编译器。 GCC的建立者由自由软体基金会直接管理[3]。
GCC原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。 GCC很快地扩展,以2011年10月26日释出的4.6.2版为准,可处理的编程语言有:
- 1.Ada(GNAT)
- 2.C(GCC)
- 3.C++(G++)
- 4.Fortran(Fortran 77: G77,Fortran 90: GFORTRAN)
- 5.Java(编译器:GCJ;解释器:GIJ)
- 6.Objective-C(GOBJC)
- 7.Objective-C++
- 8.Go
好啦,介绍结束,看上去GCC老厉害了,居然可以支持这么多语言。不愧是出自理查德·马修·斯托曼(Richard Matthew Stallman)之手,只要学过计算机的同学便对此人无人不知,他到底有多厉害呢,看网友对他的评价:“曾独自一人与一众lisp黑客高手进行比赛……”好了,多说已无益,简单的半句话便彻底表达了此人深厚的计算机功力。
回到正题,Linux系统会自带gcc,如果您的发行版中没有,可以到官网http://gcc.gnu.org/下载。