0  热身运动

0.1         前言

开发操作系统是很多程序员的终极梦想,但是很多人认为这是不可能的,其实,只要有爱,什么事都能办到(但超能力这种事情的话估计只有学园都市[1]了吧)。

操作系统的编写的确是不容易的,但是一步一个脚印,终究会换来成功。

什么操作系统是天方夜谭啊等等说法,其实是错误的。我们凭一己之力,虽然不一定做得出Windows这种动辄几GB的操作系统,也不一定能像Linux那样跨多平台,甚至不支持网络、音频设备,但是一定能有自己的用武之地,正如“天生我才必有用”。

我们的操作系统只求精简易用,而不求庞大复杂,毕竟我编写操作系统也是为了学习。好了,废话不多说(其实你还在讲呢),现在动工吧!

0.2         什么是操作系统

既然是编写操作系统,那必然需要先知道什么是操作系统。

虽然大家每天接触操作系统,但是很少有人能够给出个恰当的定义。操作系统(Operating System),是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分,负责管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本任务。

操作系统的种类很多,各种设备安装的操作系统可从简单到复杂,可从手机的嵌入式操作系统到超级计算机的大型操作系统。目前流行的计算机作系统主要有Linux、MacOS X、Windows等,除了Windows等少数操作系统,大部分操作系统都为类Unix[2]操作系统。

历史上,还有MS-DOS这种古老的操作系统。但这种操作系统不具备现代操作系统的很多优点。我们既然做了,何不做好呢,是吧。

0.3         开发操作系统的语言选择

我们首先必须选择我们使用的语言。我的选择很简单,汇编和C语言搞定一切。为这么使用这两种语言是有原因的,首先,我们是要与机器打交道,操作系统与平台架构直接相关,汇编是必须的。其次,太高级的语言会封装非常多的东西,不仅增加文件大小而且还会影响性能。所以,本书要求读者有汇编和C语言基础。

另外,需要注意的是,我们开发的系统基于X86/64[3],苹果电脑[4]的各位只能使用虚拟机来开发书中所讲的一切了,看,谁说苹果电脑好了(笑)。

0.4         开发环境

我们使用GCC[5]和NASM[6]来编译我们的操作系统。因此,我们需要首先配置我们的开发环境。对了,还需要一个虚拟机用来调试和运行。我们可以选择Bochs[7]作为调试的虚拟机。我们还需要安装的是一个快速的虚拟机来执行我们的操作系统。对于这种虚拟机,我们可以用QEMU,VMware,Virtual PC或者Hyper-V。

现在我们知道哪些工具是必要的了,那我们一起动手安装吧。

对于Linux用户,只要使用方便的apt-get工具即可,在终端中输入

sudo apt-getinstall build-essential nasm vgabios bochs bochs-x bximage qemu qemu-system

这里的build-essential包括了make和gcc,所以回车就可以安装所有上述的工具及QEMU。

在Windows下就稍微麻烦了一点,你没法输入命令安装了,只能怪微软不给力了吧(笑)。要注意的是GCC是在Linux下的软件,所以你必须安装一个Linux模拟器,比如Cygwin。

图0.4.1  Cygwin下的bash

在安装Cygwin时,记得选择安装nasm, gcc和make是会自动安装的(如果不装nasm就是上图一样的下场哦,笑),所以最好将Devel目录的全部安装。然后你需要下载安装Bochs以及一个速度较快的虚拟机用于调试。对了,如果要使用64位的话,不要忘记安装Cygwin中的mingw64开发工具。

对了,最后别忘了准备自己喜欢的源代码编辑器,Linux下可以使用gedit[8],Windows下笔者推荐使用Notepad++,它支持极大多数语法高亮。当然,如果你喜欢用VisualStudio或者记事本,那也是没问题的。

0.5         工具的使用

图0.5.1  Bochs的启动界面

Bochs的使用曾经非常复杂,不过现在(如上图),已经支持GUI化的配置了,简单易用,不用再写什么配置文件了,万岁!Bochs不仅有强大的模拟能力,而且还支持调试,在命令行窗口你甚至可以看见一些重要指令的执行状况以及出错在哪里。所以,Bochs在手,天下我有!

另外一个重要的内容是Make的使用。Make是GNU开发的用于快速编译源代码的工具,你可以理解为批处理。关于Make的使用,笔者不想多讲,因为Make的语法够讲一本书呢。但是如果Makefile(Make工具的文件格式)发生重大变化时笔者会贴上来的。

##################################

# Makefile for Norlit OS #

##################################

# Commands and flags

ASM    =nasm

ASMFLAGS   =

# Booter

BOOTER     =boot/boot.bin

# All Phony Targets

.PHONY : everythingfinal clean realclean all image

# Default starting position

everything :$(BOOTER)

all : realclean everything

final : all clean

clean :

rm -f$(BOOTER)

realclean :

rm -f$(BOOTER)

image: everything

cp boot/boot.bin nl.img

$(BOOTER): boot/boot.asm

$(ASM)$(ASMFLAGS) -o $@ $<

代码0.5.1仅包含引导扇区的Makefile(chapter1/a/Makefile)

上面的代码即为仅包含引导扇区编译代码的Makefile,很复杂吧[9]?其实主要的就是赋值语句(请准许我这么叫)和标签(请允许我这么叫)。上面蓝色的表示变量的取值(如BOOTER=boot/boot.bin),之后可以用$(变量名)来引用这个变量。后面加冒号变量名(如everything)的表示子程序。如果文件名后加冒号(如$(BOOTER):)那么下一行表示需要该文件时的做法,后面的文件名表示该文件需要的文件(boot/boot.asm)。容我叽里呱啦就此带过,毕竟我不是研究Makefile的。如果感兴趣的读者可以去自己百度一下(Google it)来学习一下。

对了,我的Makefile是基于我的Windows开发环境的,Linux下的读者只能自己改一下了,对不住了。我将Cygwin提取了一部分,并加以64位支持,放在tools文件夹内,读者可以自行拿去用。注意,gcc默认为64位,大家最好加上-m32和-m64显示指定编译位数。

关于虚拟机的话题,我在此假设大家已经会用了,如果不会的话(比如说你听了我的谗言下载了QEMU的话),那就只能Google it了(笑)。(必应表示不公平!)

其实QEMU的使用很简单,如果软盘镜像名为nl.img,只要

Qemu –fdanl.img

就可以从nl.img启动了。至于VMware和Virtual PC这种大众级别虚拟机,就靠读者自己去捉摸了。

顺便一提,上面的Makefile的语法高亮是Notepad++的功能,很不错吧。

接下来的过程中,我将会使用Windows+Cygwin来进行整个程序的开发,在这里提一下以免引起不必要的误会。不过,Linux下的朋友不用担心,毕竟Cygwin就是Windows下的模拟Linux嘛。


[1]地名,出自镰池和马的轻小说《魔法禁书目录》,主要特色是培养超能力者。

[2]包括Linux、Mac OS X、Minix等,以及手机上的Android、iOS

[3]大部分的内容与X86有关,但也会对64位架构有所涉及

[4]这里指的是非Intel处理器的苹果电脑

[5] The GNU Compiler Collection, 最常用的编译器之一,自由软件,详见官方网站gcc.gnu.org

[6] The Netwide Assembler, 著名汇编器之一,使用方便的语法,自由软件,详见官方网站www.nasm.us

[7] X86 PC模拟器,以跨平台著称,完全模拟计算机底层架构,不同于一般虚拟机软件。自由软件,详见官方网站sourceforge.net/projects/bochs/。在之后的内容中会介绍Bochs的用法。

[8]同下面的“Notepad++”都是著名文本编辑器,支持语法高亮,详见projects.gnome.org/gedit和notepad-plus-plus.org

[9]当然这段话只是为不懂得Makefile的初学者准备的,如果你已经会了,请跳过这段。

Norlit OS —— 自制操作系统 第0章 热身运动相关推荐

  1. Norlit OS —— 自制操作系统 第5章 中断处理

    5  中断处理 5.1         Interrupt! 在正式开始之前,笔者想说的是笔者把之前的打印函数用汇编写了一遍放在lib.asm里,居然bin文件的大小小了2KB!看来GCC在优化还是没 ...

  2. 30天自制操作系统——第0天

    文章目录 前言 汇编基础简要介绍:

  3. 华为鸿蒙os电脑系统,华为鸿蒙操作系统2.0版支持的设备清单流出

    2020年9月10日,在华为开发者大会上,华为Harmony OS(鸿蒙操作系统)2.0版本正式发布,并确认会在年底面向开发者推出适配智能手机的Beta(公共测试)版. 关于鸿蒙操作系统,非数码圈的朋 ...

  4. 华为公布鸿蒙2.0内测清单,华为鸿蒙操作系统2.0版支持的设备清单流出,荣耀30s...

    速来围观:华为鸿蒙操作系统2.0版支持的设备清单流出 万物云联网 15小时前 华为消费者商务软件事业部总裁王成禄博士透露,用于移动版Harmony OS(鸿蒙操作系统) 2.0的开发工作进展顺利,研发 ...

  5. 华为鸿蒙系统荣耀30s,华为鸿蒙操作系统2.0版支持的设备清单流出,荣耀30s

    速来围观:华为鸿蒙操作系统2.0版支持的设备清单流出 万物云联网 15小时前 华为消费者商务软件事业部总裁王成禄博士透露,用于移动版Harmony OS(鸿蒙操作系统) 2.0的开发工作进展顺利,研发 ...

  6. 华为鸿蒙系统清单,【AVW分享】华为鸿蒙操作系统2.0版支持的设备清单流出!

    [分享交流] [AVW分享]华为鸿蒙操作系统2.0版支持的设备清单流出! 487164 电梯直达 BH8AVW 花粉版主 发表于 2020-11-14 01:02:11 来自:HUAWEI Mate ...

  7. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

    <30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...

  8. 操作系统源代码_计算机自制操作系统(八):仿生DOS操作系统源代码

    一.真机运行 我们已经完成了仿生DOS操作系统的制作,并在上一章的末尾给大家在虚拟机上做了演示.今天,我们要将该操作系统在真机上启动运行,是不是非常期待自己做出的第一款比较有意义的操作系统? 在&qu ...

  9. 《30天自制操作系统》从入门到放弃

    前言 以下均是废话,大部分来自摘抄,只是记录本人放弃的过程!!!切记是摘抄!!! 相关资料在:https://download.csdn.net/download/wxkhturfun/2253304 ...

最新文章

  1. linux匿名页 文件页,文件页和匿名页
  2. Linux下的分区工具
  3. Robust Principal Component Analysis?(PCP)
  4. edgesForExtendedLayout ios7新特性
  5. java在线支付---06,07,08_在线支付_编写将数据提交给易宝支付的JSP页面,集成和测试向易宝发送支付请求,实现浏览器自动向易宝发送支付请求
  6. ffmpeg 转换VC工具已经可以生成工程文件
  7. 关于@Autowired的使用:推荐使用构造函数进行注入
  8. .netframework迁移到.netcore方法
  9. mybatis generator 使用文档
  10. 确定目标 目标确定的七大原则
  11. 懂点excel作图, 怎么让pyechart作的图更具“职场范“呢?丨pyechart工作作图模板
  12. 世界名牌大学课件下载地址
  13. div 设置a4大小_A4纸网页打印 html网页页面的宽度设置成多少
  14. 双十一必备销售看板:附完整模板素材
  15. 全球计算机科学排行榜,最新全球计算机科学排名:清华力压CMU,人工智能第一!北大排第四...
  16. 基于单片机火灾监测报警系统设计-毕设资料
  17. 【论文笔记】A Unified Approach for Tracking UAVs in Infrared
  18. 音频增强工具:DeskFX Plus Mac
  19. 【PTA】2022年蓝桥杯及天梯赛赛前训练(C++练习)
  20. QQ群的一“亲切”菜单

热门文章

  1. Qt获取当前系统时间和时间戳及其之间转换
  2. GCC版本对C++的支持情况
  3. migo初始化库存 s4_【S4 MM】S4中继续使用MB系统事务代码
  4. linux网络检查常用命令
  5. 20200615 碎碎念
  6. 1.JAVASE 语言简述
  7. 幼儿教师个人简历模板范文
  8. 互联网人炫富有多野!
  9. 2018中国大学生程序设计竞赛 - 网络选拔赛
  10. zxx学习日报1110