`
阅读更多
只需30天从零开始编写一个五脏俱全的图形操作系统,肯坚持,你一定能过做到!



内容简介:

    自己编写一个操作系统,是许多程序员的梦想。也许有人曾经挑战过,但因为太难而放弃了。其实你错了,你的失败并不是因为编写操作系统太难,而是因为没有人告诉你那其实是一件很简单的事。那么,你想不想再挑战一次呢?

    这是一本兼具趣味性、实用性与学习性的书籍。作者从计算机的构造、汇编语言、C语言开始解说,让你在实践中掌握算法。在这本书的指导下,从零编写所有代码,30天后就可以制作出一个具有窗口系统的32位多任务操作系统。

    本书以课题为主导,边做边玩,抛开晦涩难懂的语言,行文风格十分随性,还充满了各种欢乐的吐槽,适合操作系统爱好者和程序设计人员阅读。

作者简介:

川合秀实(Hidemi Kawai)
    生于1975年,是一位以“轻量化”编程思想见长的“非主流”开发者。2000年因自行开发的OSASK项目而名声大噪。OSASK是一个开源的32位微型操作系统,它并非以Linux等内核为基础,而是完全从零开始开发,在一张软盘的容量下实现了GUI、多任务、多语言等高级特性,启动时间只需1秒。

    本书的内容可以看成是作者以OSASK为蓝本,教会读者从零开始开发一个操作系统,同时可以让初学者在编写操作系统的过程中,了解操作系统背后更多的知识。

    作者网站:http://hrb.osask.jp/

前  言

    “好想编写一个操作系统呀!”笔者的朋友曾说这是所有程序员都曾经怀揣的一个梦想。说“所有的程序员”可能有点夸张了,不过作为程序员的梦想,它至少也应该能排进前十名吧。

    也许很多人觉得编写操作系统是个天方夜谭,这一定是操作系统业界的一个阴谋(笑)。他们故意让大家相信编写操作系统是一件非常困难的事情,这样就可以高价兜售自己开发的操作系统,而且操作系统的作者还会被顶礼膜拜。那么实际情况又怎么样呢?和别的程序相比,其实编写操作系统并没有那么难,至少笔者的感觉是这样。

    在各位读者之中,也许有人曾经挑战过操作系统的编写,但因为太难而放弃了。拥有这样经历的人也许不会认同笔者的观点。其实你错了,你的失败并不是因为编写操作系统太难,而是因为没有人告诉你那其实是一件很简单的事而已。

    不仅是编写操作系统,任何事都是一样的。如果讲解的人认为它很难,那就不可能把它讲述得通俗易懂,即便是同样的内容,也会讲得无比复杂。这样的讲解,肯定是很难懂的。

    那么,你想不想和笔者一起再挑战一次呢?如果你曾经梦想过编写自己的操作系统,一定会觉得乐在其中的。

    可能有人会说,这本书足足有700多页,怎么会“有趣”和“简单”呢?唔,这么一说笔者也觉得挺心虚的,不过其实也只是长了那么一点点啦。平均下来的话,每天只有大约23页的内容,你看,也没有那么长吧?

    这本书的文风非常轻松,也许你不知不觉中就会读得很快。但是这样的话可能印象不会很深,最好还是能静下心来慢慢地读。书中所展示的程序代码和文字的说明同样重要,因此也希望大家仔细阅读。只要注意这些,理解本书的内容就应该没有问题了。

    在本书中,我们使用C语言和汇编语言来编写操作系统,不过不必担心,你可以在阅读本书的同时来逐步学习关于这些编程语言的知识。本书在这方面写得非常仔细,如果能有人通过本书终于把C语言中的指针给搞懂了,那笔者的目的也就达到了。即便是从这样的水平开始,30天后你也能够编写出一个很棒的操作系统,请大家拭目以待吧!



目    录

第0天  着手开发之前  1

1  前言  1
2  何谓操作系统  3
3  开发操作系统的各种方法  4
4  无知则无畏  4
5  如何开发操作系统  6
6  操作系统开发中的困难  7
7  学习本书时的注意事项(重要!)  9
8  各章内容摘要  11

第1天  从计算机结构到汇编程序入门  13

1  先动手操作  13
2  究竟做了些什么  19
3  初次体验汇编程序  22
4  加工润色  24

第2天  汇编语言学习与Makefile入门  28

1  介绍文本编辑器  28
2  继续开发  29
3  先制作启动区  40
4  Makefile入门  41

第3天  进入32位模式并导入C语言  45

1  制作真正的IPL  45
2  试错  50
3  读到18扇区  51
4  读入10个柱面  52
5  着手开发操作系统  54
6  从启动区执行操作系统  55
7  确认操作系统的执行情况  56
8  32位模式前期准备  57
9  开始导入C语言  59
10  实现HLT(harib00j)  62

第4天  C语言与画面显示的练习  64

1  用C语言实现内存写入(harib01a)  64
2  条纹图案(harib01b)  67
3  挑战指针(harib01c)  69
4  指针的应用(1)(harib01d)  74
5  指针的应用(2)(harib01e)  74
6  色号设定(harib01f)  75
7  绘制矩形(harib01g)  84
8  今天的成果(harib01h)  86

第5天  结构体、文字显示与GDT/IDT初始化  88

1  接收启动信息(harib02a)  88
2  试用结构体(harib02b)  89
3  试用箭头记号(harib02c)  91
4  显示字符(harib02d)  91
5  增加字体(harib02e)  94
6  显示字符串(harib02f)  96
7  显示变量值(harib02g)  97
8  显示鼠标指针(harib02h)  99
9  GDT与IDT的初始化(harib02i)  101

第6天  分割编译与中断处理  108

1  分割源文件(harib03a)  108
2  整理Makefile(harib03b)  109
3  整理头文件(harib03c)  110
4  意犹未尽  112
5  初始化PIC(harib03d)  115
6  中断处理程序的制作(harib03e)  119

第7天  FIFO与鼠标控制  125

1  获取按键编码(hiarib04a)  125
2  加快中断处理(hiarib04b)  127
3  制作FIFO缓冲区(hiarib04c)  130
4  改善FIFO缓冲区(hiarib04d)  133
5  整理FIFO缓冲区(hiarib04e)  135
6  总算讲到鼠标了(harib04f)  138
7  从鼠标接受数据(harib04g)  141

第8天  鼠标控制与32位模式切换  144

1  鼠标解读(1)(harib05a)  144
2  稍事整理(harib05b)  146
3  鼠标解读(2)(harib05c)  148
4  移动鼠标指针(harib05d)  151
5  通往32位模式之路  153

第9天  内存管理  162

1  整理源文件(harib06a)  162
2  内存容量检查(1)(harib06b)  163
3  内存容量检查(2)(harib06c)  168
4  挑战内存管理(harib06d)  172

第10天  叠加处理  181

1  内存管理(续)(harib07a)  181
2  叠加处理(harib07b)  184
3  提高叠加处理速度(1)(harib07c)  194
4  提高叠加处理速度(2)(harib07d)  197

第11天  制作窗口  201

1  鼠标显示问题(harib08a)  201
2  实现画面外的支持(harib08b)  202
3  shtctl的指定省略(harib08c)  203
4  显示窗口(harib08d)  206
5  小实验(harib08e)  208
6  高速计数器(harib08f)  209
7  消除闪烁(1)(harib08g)  211
8  消除闪烁(2)(harib08h)  214

第12天  定时器(1)  220

1  使用定时器(harib09a)  220
2  计量时间(harib09b)  224
3  超时功能(harib09c)  225
4  设定多个定时器(harib09d)  228
5  加快中断处理(1)(harib09e)  232
6  加快中断处理(2)(harib09f)  234
7  加快中断处理(3)(harib09g)  236

第13天  定时器(2)  240

1  简化字符串显示(harib10a)  240
2  重新调整FIFO缓冲区(1)(harib10b)  241
3  测试性能(harib10c~harib10f)  243
4  重新调整FIFO缓冲区(2)(harib10g)  246
5  加快中断处理(4)(harib10h)  253
6  使用“哨兵”简化程序(harib10i)  257

第14天  高分辨率及键盘输入  262

1  继续测试性能(harib11a~harib11c)  262
2  提高分辨率(1)(harib11d)  266
3  提高分辨率(2)(harib11e)  269
4  键盘输入(1)(harib11f)  272
5  键盘输入(2)(harib11g)  275
6  追记内容(1)(harib11h)  277
7  追记内容(2)(harib11i)  279

第15天  多任务(1)  282

1  挑战任务切换(harib12a)  282
2  任务切换进阶(harib12b)  289
3  做个简单的多任务(1)(harib12c)  291
4  做个简单的多任务(2)(harib12d)  293
5  提高运行速度(harib12e)  294
6  测试运行速度(harib12f)  297
7  多任务进阶(harib12g)  299

第16天  多任务(2)  304

1  任务管理自动化(harib13a)  304
2  让任务休眠(harib13b)  308
3  增加窗口数量(harib13c)  313
4  设定任务优先级(1)(harib13d)  317
5  设定任务优先级(2)(harib13e)  320

第17天  命令行窗口  329

1  闲置任务(harib14a)  329
2  创建命令行窗口(harib14b)  331
3  切换输入窗口(harib14c)  334
4  实现字符输入(harib14d)  337
5  符号的输入(harib14e)  341
6  大写字母与小写字母(harib14f)  343
7  对各种锁定键的支持(harib14g)  346

第18天  dir命令  350

1  控制光标闪烁(1)(harib15a)  350
2  控制光标闪烁(2)(harib15b)  352
3  对回车键的支持(harib15c)  355
4  对窗口滚动的支持(harib15d)  357
5  mem命令(harib15e)  359
6  cls命令(harib15f)  363
7  dir命令(harib15g)  366

第19天  应用程序  371

1  type命令(harib16a)  371
2  type命令改良(harib16b)  378
3  对FAT的支持(harib16c)  382
4  代码整理(harib16d)  387
5  第一个应用程序(harib16e)  387

第20天  API  392

1  程序整理(harib17a)  392
2  显示单个字符的API(1)(harib17b)  399
3  显示单个字符的API(2)(harib17c)  402
4  结束应用程序(harib17d)  403
5  不随操作系统版本而改变的API(harib17e)  405
6  为应用程序自由命名(harib17f)  408
7  当心寄存器(harib17g)  410
8  用API显示字符串(harib17h)  412

第21天  保护操作系统  418

1  攻克难题——字符串显示API(harib18a)  418
2  用C语言编写应用程序(harib18b)  420
3  保护操作系统(1)(harib18c)  424
4  保护操作系统(2)(harib18d)  426
5  对异常的支持(harib18e)  431
6  保护操作系统(3)(harib18f)  434
7  保护操作系统(4)(harib18g)  435

第22天  用C语言编写应用程序  443

1  保护操作系统(5)(harib19a)  443
2  帮助发现bug(harib19b)  448
3  强制结束应用程序(harib19c)  452
4  用C语言显示字符串(1)(harib19d)  455
5  用C语言显示字符串(2)(harib19e)  457
6  显示窗口(harib19f)  462
7  在窗口中描绘字符和方块(harib19g)  465

第23天  图形处理相关  468

1  编写malloc(harib20a)  468
2  画点(harib20b)  472
3  刷新窗口(harib20c)  475
4  画直线(harib20d)  478
5  关闭窗口(harib20e)  483
6  键盘输入API(harib20f)  484
7  用键盘输入来消遣一下(harib20g)  488
8  强制结束并关闭窗口(harib20h)  489

第24天  窗口操作  493

1  窗口切换(1)(harib21a)  493
2  窗口切换(2)(harib21b)  495
3  移动窗口(harib21c)  496
4  用鼠标关闭窗口(harib21d)  498
5  将输入切换到应用程序窗口(harib21e)  500
6  用鼠标切换输入窗口(harib21f)  506
7  定时器API(harib21g)  507
8  取消定时器(harib21h)  511

第25天  增加命令行窗口  515

1  蜂鸣器发声(harib22a)  515
2  增加更多的颜色(1)(harib22b)  518
3  增加更多的颜色(2)(harib22c)  520
4  窗口初始位置(harib22d)  523
5  增加命令行窗口(1)(harib22e)  524
6  增加命令行窗口(2)(harib22f)  528
7  增加命令行窗口(3)(harib22g)  531
8  增加命令行窗口(4)(harib22h)  532
9  变得更像真正的操作系统(1)(harib22i)  534
10  变得更像真正的操作系统(2)(harib22j)  538

第26天  为窗口移动提速  541

1  提高窗口移动速度(1)(harib23a)  541
2  提高窗口移动速度(2)(harib23b)  543
3  提高窗口移动速度(3)(harib23c)  547
4  提高窗口移动速度(4)(harib23d)  549
5  启动时只打开一个命令行窗口(harib23e)  551
6  增加更多的命令行窗口(harib23f)  554
7  关闭命令行窗口(1)(harib23g)  555
8  关闭命令行窗口(2)(harib23h)  561
9  start命令(harib23i)  563
10  ncst命令(harib23j)  564

第27天  LDT与库  571

1  先来修复bug(harib24a)  571
2  应用程序运行时关闭命令行窗口(harib24b)  573
3  保护应用程序(1)(harib24c)  577
4  保护应用程序(2)(harib24d)  580
5  优化应用程序的大小(harib24e)  583
6  库(harib24f)  587
7  整理make环境(harib24g)  590

第28天  文件操作与文字显示  598

1  alloca(1)(harib25a)  598
2  alloca(2)(harib25b)  601
3  文件操作API(harib25c)  605
4  命令行API(harib25d)  612
5  日文文字显示(1)(harib25e)  615
6  日文文字显示(2)(harib25f)  624
7  日文文字显示(3)(harib25g)  629

第29天  压缩与简单的应用程序  635

1  修复bug(harib26a)  635
2  文件压缩(harib26b)  636
3  标准函数  644
4  非矩形窗口(harib26c)  647
5  bball(harib26d)  648
6  外星人游戏(harib26e)  651

第30天  高级的应用程序  659

1  命令行计算器(harib27a)  659
2  文本阅览器(harib27b)  664
3  MML播放器(harib27c)  671
4  图片阅览器(harib27d)  679
5  IPL的改良(harib27e)  683
6  光盘启动(harib27f)  688

第31天  写在开发完成之后  690

1  继续开发要靠大家的努力  690
2  关于操作系统的大小  692
3  操作系统开发的诀窍  693
4  分享给他人使用  694
5  关于光盘中的软件  695
6  关于开源的建议  696
7  后记  698
8  毕业典礼  703
9  附录  704


  • 大小: 305.1 KB
分享到:
评论

相关推荐

    苏大计算机872《操作系统概念》第7版课后题答案(含1-12章答案).pdf

    《操作系统概念》第7版是一本标准的计算机操作系统教材,该书介绍了操作系统的基本概念、原理和实践,涵盖进程管理、内存管理、文件系统、安全性等方面。该书的内容系统全面,从操作系统结构、进程管理、CPU调度、...

    《操作系统高分笔记》试读版[归纳].pdf

    1. 操作系统的发展:操作系统的发展可以分为三个阶段:早期操作系统、多用户操作系统和现代操作系统。 2. 操作系统的分类:操作系统可以分为批处理操作系统、分时操作系统和实时操作系统。 操作系统的软硬件运行...

    《操作系统高分笔记》试读版.pdf

    《操作系统高分笔记》试读版详细介绍了操作系统的基础知识,涵盖了概念、特征、功能、发展历程和分类,以及操作系统的运行环境。本笔记主要针对操作系统的重要考点进行解析,适合备考相关考试或者对操作系统感兴趣的...

    深入解析MacOSX+iOS操作系统

    《深入解析MacOSX+iOS操作系统》是一本全面探讨苹果公司两大操作系统——MacOSX和iOS的权威指南。这本书共计700多页,旨在为读者提供详尽且深入的系统知识,帮助读者理解这两个平台的内在工作原理、设计思路以及它们...

    留级跟班试读申请书参考精选.doc

    - 保证书中通常包含两个关键指标:试读期满后的不及格课程学分数累计上限(如30学分或40学分),以及试读学年补考后不及格课程占总学分数的比例(如低于50%)。 4. **试读期间的监管**: - 学校可能要求试读学生...

    玩到极致Android手机让你不一样(目录试读)

    资源名称:玩到极致 Android手机让你不一样(目录试读)书本内容简介: 《玩到极致Android手机让你不一样》主要内容简介:对于刚入手Android(安卓)手机的人来说,这款界面时尚、功能强大的智能手机操作系统,又...

    留级跟班试读申请书参考.doc

    留级跟班试读申请书参考.doc

    软件性能测试与LoadRunner实战试读

    LoadRunner是一款业界广泛使用的性能测试工具,由HP(现为Micro Focus)开发,它能够模拟大量用户并发操作,帮助识别系统在高负载下的性能瓶颈,确保软件系统的稳定性和可靠性。这份文档集合了多个有关LoadRunner的...

    软件小设计试读样章

    - **封装**:将数据和操作这些数据的方法绑定在一起,对外界隐藏内部实现细节。封装可以保护对象的状态不受外部干扰,同时提供了一种控制访问级别的机制。 - **继承**:允许一个类继承另一个类的属性和方法,从而...

    UNIX编程艺术1~3试读

    《UNIX编程艺术》主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一Eric S.Raymond倾力多年写作而成。包括Unix设计者在内的多位领域专家也为...

    读秀试读页下载软件DX_down15,方便好用

    "读秀试读页下载软件DX_down15"是一款专为读秀平台设计的辅助工具,旨在帮助用户更轻松地获取读秀平台上的试读页面内容。读秀是一个大型的在线数字图书馆,拥有丰富的电子书资源,用户可以在线阅读部分章节,但通常...

    asp.net 设计模式样章试读

    - **第三部分**:通过一个完整的案例研究,展示了如何在实际项目中运用各种模式和原则,提供了实际操作的经验。 #### 五、书籍特点 - **实例代码**:所有示例代码均使用C#编写,这有助于读者快速理解概念,并能够...

    Kali Linux系统命令使用手册v2.0试读陆小马功钟浩.pdf

    Kali Linux系统命令使用手册v2.0试读陆小马功钟浩.pdf

    玩转我的Android手机_目录_试读

    资源名称:玩转我的Android手机_目录_试读书本内容简介: 《玩转我的Android手机》内容简介:Android作为移动智能操作系统的杰出代表,具有无比强大的功能可扩展性。如何快速上手Android手机,让其为生活增添绚丽...

    Android移动性能实战试读文章

    在《Android移动性能实战试读文章》中,我们可以探索到Android平台上的应用程序性能优化的关键方面。这篇文章虽然只是试读版,但提供了丰富的信息,旨在帮助开发者提升应用的运行效率、用户体验以及整体性能。以下是...

    游戏设计梦工厂试读样章

    根据提供的文件信息,内容涉及到游戏设计领域的一本重要著作《游戏设计梦工厂试读样章》,并且提到了游戏设计大师陈星汉及其恩师Tracy Fullerton的作品,以及相关的版权信息和出版社信息。以下是对这些信息的详细...

    Java程序设计大学教程试读+课件(PDF)

    以Java语言为载体,通过讨论Java程序设计的一般过程和方法,重点讲述程序设计基础、面向对象程序设计、算法与数据结构、GUI程序设计和Web程序设计的知识,并涉及计算机科学基础、数据和控制、程序设计理论、软件工程...

Global site tag (gtag.js) - Google Analytics