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. 1.Ada(GNAT)
  2. 2.C(GCC)
  3. 3.C++(G++)
  4. 4.Fortran(Fortran 77: G77,Fortran 90: GFORTRAN)
  5. 5.Java(编译器:GCJ;解释器:GIJ)
  6. 6.Objective-C(GOBJC)
  7. 7.Objective-C++
  8. 8.Go

好啦,介绍结束,看上去GCC老厉害了,居然可以支持这么多语言。不愧是出自理查德·马修·斯托曼(Richard Matthew Stallman)之手,只要学过计算机的同学便对此人无人不知,他到底有多厉害呢,看网友对他的评价:“曾独自一人与一众lisp黑客高手进行比赛……”好了,多说已无益,简单的半句话便彻底表达了此人深厚的计算机功力。

回到正题,Linux系统会自带gcc,如果您的发行版中没有,可以到官网http://gcc.gnu.org/下载。

一步步编写操作系统 1 部署工作环境 1相关推荐

  1. 一步步编写操作系统 2 部署工作环境 2

    1.22汇编语言编译器新贵,NASM "新"是相对于旧来说的,老的汇编器MASM和TASM已经过时了,从名称上可以看出字母n是在m之后,其功能必然有所超越才会被大家接受. 请用一句 ...

  2. 一步步编写操作系统3 部署工作环境 3

    盗梦空间般的开发环境,虚拟机中再装个虚拟机. 很多同学电脑的系统都是windows,个别的是mac os,还有的同学用的是linux.做为一名Linux粉丝,我的开发环境必然建立在Linux平台下.那 ...

  3. 一步步编写操作系统 71 直接操作显卡,编写自己的打印函数71-74

    一直以来,我们在往屏幕上输出文本时,要么利用bios中断,要么利用系统调用,这些都是依赖别人的方法.咱们还用过一个稍微有点独立的方法,就是直接写显存,但这貌似又没什么含量.如今我们要写一个打印函数了, ...

  4. 一步步编写操作系统 69 汇编语言和c语言共同协作 70

    由于有了上一节的铺垫,本节的内容相对较少,这里给大家准备了两个小文件来实例演示汇编语言和c语言相互调用. 会两种不同语言的人,只是掌握了同一件事物的两种表达方式.人在学习一种新语言时,潜意识里是建立了 ...

  5. 一步步编写操作系统 62 函数调用约定

    由于我们要将c语言和汇编语言结合编程啦,所以一定会存在汇编代码和c代码相互调用的问题,有些事情还是要提前交待给大家的,本节就是要给大家说下函数调用规约中的那些事儿. 函数调用约定是什么? 调用约定,c ...

  6. 一步步编写操作系统 10 cpu的实模式

    cpu的实模式 由于mbr在实模式下工作--什么?什么是实模式?这时候有同学打断了我.我心想,这下好办了--哈哈,没有啦,开个玩笑而已.我们这里所说的实模式其实就是8086 cpu的工作环境.工作方式 ...

  7. 操作系统真象还原第1章:部署工作环境

    前言 关于自制操作系统,一开始本来是想利用极客时间的操作系统实战45讲来的(为了能够更快完成),然而当自己真正去学的时候才发现这些视频还是比较坑的,最起码对于我来说,首先是代码注释很少,函数,变量命名 ...

  8. 一步步编写操作系统 58 门、调用门与RPL序 3

    接前文: 并不是任何当前特权级都可以使用门结构, 在使用门结构之前,处理器要例行公事做特权级检查,参与检查的不只是CPL和DPL,还有RPL,为了说清楚这个检查过程,咱们得先介绍下RPL. RPL,即 ...

  9. 一步步编写操作系统 53 任务状态段TSS介绍

    操作系统是利用PCB来维护所有任务的,包括进程和线程,但cpu提供的是TSS,linux系统可没用它,因为效率太低.但是还是要了解下TSS才清楚操作系统中某些操作的原因. 本节中所讲的特权级与它有着密 ...

最新文章

  1. CVPR2020 | 反传统的无监督人脸旋转方案:旋转-渲染
  2. 【转】Monkey测试5-运行中停止monkey
  3. C++ Exercises(十八)
  4. Redis常用数据结构和操作
  5. 时间和空间复杂度概述【Java _demo版】
  6. SAP Cloud for Customer(C4C)前台显示的数据是如何从后台读取的
  7. windows 7在工作组模式下管理 Hyper-V
  8. 二、bootstrap4基础(flex布局)
  9. mysql+delete删除空行,删除空行 linux
  10. 类的实例属性和类属性的区别
  11. 2021 测试工作年终总结
  12. 浏览器设置(除了页面百分比之外,还有“字体大小”)
  13. 【Python函数优化】
  14. python与开源gis_Python与开源GIS:数据处理、空间分析与地图制图
  15. 蓝桥杯 ALGO-45 算法训练 调和数列问题
  16. 【C语言】动态内存开辟的使用『malloc』
  17. PCB的埋孔、盲孔、通孔
  18. 【MM小贴士】关于MR21修改物料价格与账期的关系
  19. 新库上线 | CnOpenData·IFR工业机器人数据
  20. 因子IC、IR信息系数和信息比率的介绍

热门文章

  1. Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析
  2. Ubuntu下gcc多版本共存和版本切换
  3. Fragment销毁时replace和add两个方法的区别
  4. STL中 map 和 multimap
  5. bash中将字符串split成数组的方法
  6. LFS,编译自己的Linux系统 - 前言
  7. 请问如何让Dundas chart for asp.net控件产生的临时图片文件减少一些?
  8. 推荐系统——GBDT+LR
  9. 打架程序_学生打架不知道怎么处理?一般程序了解下,对你或许有帮助
  10. netlify支持php吗,hexo netlify 搭建简易博客