内容简介:
自己编写一个操作系统,是许多程序员的梦想。也许有人曾经挑战过,但因为太难而放弃了。其实你错了,你的失败并不是因为编写操作系统太难,而是因为没有人告诉你那其实是一件很简单的事。那么,你想不想再挑战一次呢?
这是一本兼具趣味性、实用性与学习性的书籍。作者从计算机的构造、汇编语言、C语言开始解说,让你在实践中掌握算法。在这本书的指导下,从零编写所有代码,30天后就可以制作出一个具有窗口系统的32位多任务操作系统。
本书以课题为主导,边做边玩,抛开晦涩难懂的语言,行文风格十分随性,还充满了各种欢乐的吐槽,适合操作系统爱好者和程序设计人员阅读。
作者简介:
川合秀实(Hidemi Kawai)
生于1975年,是一位以“轻量化”编程思想见长的“非主流”开发者。2000年因自行开发的OSASK项目而名声大噪。OSASK是一个开源的32位微型操作系统,它并非以Linux等内核为基础,而是完全从零开始开发,在一张软盘的容量下实现了GUI、多任务、多语言等高级特性,启动时间只需1秒。本书的内容可以看成是作者以OSASK为蓝本,教会读者从零开始开发一个操作系统,同时可以让初学者在编写操作系统的过程中,了解操作系统背后更多的知识。
目录:
目 录
第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 制作真正的IPL45
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天 API392
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
文章试读:“好想编写一个操作系统呀!”笔者的朋友曾说这是所有程序员都曾经怀揣的一个梦想。说“所有的程序员”可能有点夸张了,不过作为程序员的梦想,它至少也应该能排进前十名吧。 也许很多人觉得编写操作系统是个天方夜谭,这一定是操作系统业界的一个阴谋(笑)。他们故意让大家相信编写操作系统是一件非常困难的事情,这样就可以高价兜售自己开发的操作系统,而且操作系统的作者还会被顶礼膜拜。那么实际情况又怎么样呢?和别...
(查看全部试读)