《30天自制操作系统》(【日】川合秀实)读书笔记(第0天)

作为一个立志从事底层安全开发的底层狗,决定先从自己编写一个简单的OS开始,参考书籍《30天自制操作系统》(【日】川合秀实)。

按照这本书做完简单的OS后,预计会观看其它的书籍补充知识,以后慢慢完善我的OS,哈哈哈哈哈!!!

==============================闲扯结束,以下是今天学习的笔记==================================

5 如何开发操作系统

操作系统(OS)一般打开电源开关就会自动执行。这是怎么实现的
呢?一般在Windows上开发的可执行文件(~.exe),都要在操作系统
启动以后,双击一下才能运行。我们这次想要做的可不是这种可执行程
序,而是希望能够做到把含有操作系统的CD-ROM或软盘插入电脑,或
者将操作系统装入硬盘后,只要打开电源开关就能自动运行。
为了开发这样的操作系统,我们准备按照如下的步骤来进行。

也就是说,所谓开发操作系统,就是想办法制作一张“含有操作系统的,能够自动启动的磁盘”。
这里出现的“映像文件”一词,简单地说就是软盘的备份数据。我们想要
把特定的内容写入磁盘可不是拿块磁铁来在磁盘上晃晃就可以的。所以
我们要先做出备份数据,然后将这些备份数据写入磁盘,这样才能做出
符合我们要求的磁盘。

====第一个操作系统怎么出来的呢?

这里希望大家注意的是,开发操作系统时需要利用Windows等其他的操
作系统。这是因为我们要使用文本编辑器或者C编译器,就必须使用操
作系统。既然是这样,那么世界上第一个操作系统又是怎么做出来的
呢?在开发世界上第一个操作系统时,当然还没有任何现成的操作系统
可供利用,因此那时候人们不得不对照着CPU的命令代码表,自己将0
和1排列起来,然后再把这些数据写入磁盘(估计那个时候还没有磁
盘,用的是其他存储设备)。这是一项非常艰巨的工作。所以恐怕最初
的操作系统功能非常有限,做好之后人们再利用它来开发一个稍微像点
样的操作系统,然后再用这个来开发更实用的操作系统……操作系统应
该就是这样一步一步发展过来的。

====

另外,如果C编译器和映像文件制作工具等不一样的话,开发过程中就
会产生一些细微的差别,这很难一一解释,所以笔者就直接把所有的工具都放到附带光盘里了。都是免费软件哦!

光盘文件分享链接:

链接:https://pan.baidu.com/s/18EQZyOYIyfzNXsHlLSDFQQ 提取码:6t1x --来自百度网盘超级会员V3的分享

6 操作系统开发中的困难
现在市面上众多的C编译器都是以开发Windows或Linux上的应用程序为
前提而设计的,几乎从来没有人想过要用它们来开发其他的软件,比如
自己的操作系统。笔者所提供的编译器,也是以Windows版的gcc1为基
础稍加改造而做成的,与gcc几乎没什么不同。或许也有为开发操作系
统而设计的C编译器,不过就算有,恐怕也只有开发操作系统的公司才
会买,所以当然会很贵。这次我们用不了这么高价的软件。

因为这些原因,我们只能靠开发应用程序用的C编译器想方设法编写出
一个操作系统来。这实际上是在硬来,所以当中就会有很多不方便的地
方。
就比如说printf(“hello\n”);吧,这个函数总是出现在C语言教科书的第一
章,但我们现在就连它也无法使用。为什么呢?因为printf这个函数是以操作系统提供的功能为前提编写的,而我们最开始的操作系统可是什么功能都没有。因此,如果我们硬要执行这个函数的话,CPU会发生一
般保护性异常2,直接罢工。刚开始的时候不仅是printf,几乎所有的函
数都无法使用。

2 电脑的CPU非常优秀,如果接到无视OS保护的指令或不可能执行
的指令时,首先会保存当前状态,中断正在执行的程序,然后调用
事先设定的函数。这种机制称为异常保护功能,比如除法异常、未
定义指令异常、栈异常等。不能归类到任何异常类型中去的异常事
态被称为一般保护异常。这种异常保护功能或许会让老Windows用
户想起那噩梦般的蓝屏画面,但是如果经历过操作系统开发以后,
大家就会觉得这种机制实在是太有用了。

关于这次开发语言的选择,如果非要说出个所以然的话,其实也是
因为C语言还算是很少依赖操作系统功能的语言,基本上只要不用
函数就可以了。如果用C++的话,像new/delete这种基本而重要的运
算符都不能用了,另外对于类的做法也会有很多要求,这样就无法
发挥C++语言的优势了。当然,为了使用这些函数去开发操作系
统,只要我们想办法,还是能够克服种种困难的。但是如果做到这
个份上,我们不禁会想,到底是在用C++做操作系统呢,还是在为
了C++而做操作系统呢。对别的语言而言这个问题会更加突出,所
以这次还是决定使用C语言,希望大家予以理解。

顺便插一句,在开发操作系统时不会受到限制的语言大概就只有汇编语
言3了。还是汇编语言最厉害4(笑)。但是如果本书仅用汇编来编写操
作系统的话,恐怕没几个人会看,所以就算是做事管前不顾后的笔者也
不得不想想后果。

另外,在开发操作系统时,需要用到CPU上的许多控制操作系统的
寄存器5。一般的C编译器都是用于开发应用程序的,所以根本没有
任何操作这些寄存器的命令。另外,C编译器还具有非常优秀的自
动优化功能,但有时候这反而会给我们带来麻烦。

归根到底,为了克服以上这些困难,有些没法用C语言来编写的部分,
我们就只好用汇编语言来写了。这个时候,我们就必须要知道C编译器到底是怎样把程序编译成机器语言的。如果不能够与C编译器保持一致的话,就不能将汇编语言编写的部分与C语言编写的部分很好地衔接起来。这可是在编写普通的C语言程序时所体会不到哦!不过相比之下,
今后的麻烦可比这种好处多得多啊(苦笑)。

同样,如果用C++来编写操作系统,也必须知道C++是如何把程序
编译成机器语言的。当然,C++比C功能更多更强,编译规则也更
复杂,所以解释起来也更麻烦,我们选用C语言也有这一层理由。
总之,如果不理解自己所使用的语言是如何进行编译的,就没法用
这种语言来编写操作系统。

我们具备了这样的知识以后,说不定还会改变对程序设计的看法。以前
也许只想着怎么写出漂亮的源代码来,以后也许就会更注重编译出来的是怎样的机器语言。源代码写得再漂亮,如果不能编译成自己希望的机
器语言,不能正常运行的话,也是毫无意义的。反过来说,即便源代码
写得难看点儿,即便只有特定的C编译器才能编译,但只要能够得到自
己想要的机器语言就没有问题了。虽然不至于说“只要编译出了想要的
机器语言,源代码就成了一张废纸”,但从某种意义上说还真就是这
样。
对于开发操作系统的人而言,源程序无非是用来得到机器语言的“手
段”,而不是目的。浪费太多时间在手段上就是本末倒置了。
对了,还有一点或许会有人担心,所以在这里事先说明一下:虽然操作
系统是用C语言和汇编语言编写的,但并不是用C++编写的应用程序就
无法在这个操作系统上运行。编写应用程序所用的语言,与开发操作系统所使用的语言是没有任何关系的,大家大可不必担心

======给我自己看的提醒===========

从现在开始我们来一点一点地开发操作系统,我们会将每个阶段的进展
情况总结出来,这些中间成果都刻在附带光盘里了,只要简单地复制一
下就能马上运行。关于这些程序,有些需要注意的地方,我们在这里简单说明一下。比如最初出现的程序是“helloos0”,下一个出现的程序是“helloos1”。 即使我们以helloos0为基础,把书中讲解的内容一个不漏地全部做上一遍,也不能保证肯定可以得到后面的helloos1。书中可能偶尔有讲解得很完整的地方,但其实大多部分都讲得不够明确,这主要是因为笔者觉得这些地方不讲那么仔细大家肯定也能明白。

笔者说这些主要就是想要告诉大家,不仅要看书里的内容,更要好好看
程序。有时候书上写得很含糊,读起来晦涩难懂,但一看程序马上就明
白了。本书的主角不是正文内容,而是附录中的程序。正文仅仅是介绍
程序是如何做出来的。
所以说从这个意义上讲,与其说这是“一本附带光盘的书”,倒不如说这
是“一张附带一本大厚书的光盘”(笑)。

在引用本书程序时,只有一点需要注意,那就是大家开发的操作系统的名字。因为它已经不是笔者所开发的操作系统了,所以请适当地改个名字,以免让人误解,仅此一点请务必留意。不管程序的内部是多么相像,它都是大家自己负责发布的另外一个不同的操作系统。给它起个响亮的名字吧。

=========

==========本书内容介绍============

第一周(第1天 ~ 第7天)
一开始首先要考虑怎么来写一个“只要一通电就能运行的程序”。这部分
用C语言写起来有些困难,所以主要还是用汇编语言来写。
这步完成之后,下一步就要写一个从磁盘读取操作系统的程序。这时即
便打开电脑电源,它也不会自动地将操作系统全部都读进来,它只能读
取磁盘上最开始的512字节的内容,所以我们要编写剩余部分的载入程
序。这个程序也要用汇编语言编写。
一旦完成了这一步,以后的程序就可以用C语言来编写了。我们就尽快
使用C语言来学习开发显示画面的程序。同时,我们也能慢慢熟悉C语
言语法。这个时候我们好像在做自己想做的事,但事实上我们还没有自
由操纵C语言。
接下来,为了实现“移动鼠标”这一雄心,我们要对CPU进行细致的设
定,并掌握中断处理程序的写法。从全书总体看来,这一部分是水平相
当高的部分,笔者也觉得放在这里有些不妥,但从本书条理上讲,这些
内容必须放在这里,所以只好请大家忍耐一下了。在这里,CPU的规格
以及电脑复杂的规格都会给我们带来各种各样的麻烦。而且开发语言既
有C语言,又有汇编语言,这又给我们造成了更大的混乱。这个时候我
们一点儿也不会觉得这是在做自己想做的事,怎么看都像是在“受人摆
布”。
渡过这个痛苦的时期,第一周就该结束了。


第二周(第8天 ~ 第14天)

丰的。这时我们已经基本掌握了C语言的语法,连汇编语言的水平也能
达到本书的要求了。
所以现在我们就可以着手开发像样的操作系统了。但是这一次我们又要
为算法头痛了。即使掌握了编程语言的语法,如果不懂得好的算法的
话,也还是不能开发出来自己想要的操作系统。所以这一周我们就边学
习算法边慢慢地开发操作系统。不过到了这一阶段,我们就能感觉到基
本上不会再受技术问题限制了。


第三周(第15天 ~ 第21天)
现在我们的技术已经相当厉害了,可以随心所欲地开发自己的操作系统
了。首先是要支持多任务,然后是开发命令行窗口,之后就可以着手开
发应用程序了。到本周结束时,就算还不够完备,我们也能拿出一个可
以称之为操作系统的软件了。


第四周(第22天 ~ 第28天)
在这个阶段,我们可以尽情地给操作系统增加各种各样的功能,同时还
可以开发出大量像模像样的应用程序来。这个阶段我们已经能做得很好
了,这可能也是我们最高兴的时期。这部分要讲解的内容很少,笔者也
不用再煞费苦心地去写那些文字说明了,可以把精力都集中在编程上
(笑)。对了,说起文字才想起来,正好在这个时期可以让我们的操作
系统显示文字了。


免费赠送两天(第29天 ~ 第30天)
剩下的两天用来润色加工。这两天我们来做一些之前没来得及做,但做
起来既简单又有趣的内容。

=================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值