内容介绍
《30天自制操作系统》是*本兼具趣味性、实用性与学习性的操作系统图书。作者从计算机的构造、汇编语言、C语言开始解说,让读者在实践中掌握算法。在这本书的指导下,从零编写所有代码,30天后*可以制作出*个具有窗口系统的32位多任务操作系。 《30天自制操作系统》适合操作系统爱好者和程序设计人员阅读。
作者介绍
川合秀实(Hidemi Kawai),生于*975年,是*位以"轻量化"编程思想见长的"非主流"开 发者。2000年因自行开发的OSASK项目而名声大噪。OSASK是*个开源的32位微型操作系统,它并非以Linux等内核为基础,而是完*从零开始开发,在*张软盘的容量下实现了GUI、多任务、多语言等* 级*性,启动时间只需*秒。本书的内容可以看成是作者以OSASK为蓝本,教会读者从零开始开发*个操作系统,同时可以让初*在编写操作系统的过程中,了解操作系统背后更多的知识。
目录
目 录
第0天 着手开发之前 *
* 前言 *
2 何谓操作系统 3
3 开发操作系统的各种方法 4
4 *知则*畏 4
5 如何开发操作系统 6
6 操作系统开发中的困难 7
7 学习本书时的注意事项(重要!) 9
8 各章内容摘要 **
第 *天 从计算机结构到汇编程序入门 *3
* 先动手操作 *3
2 做了些什么 *9
3 初次体验汇编程序 22
4 加工润色 24
第 2天 汇编语言学习与Makefile入门 28
* 介绍文本编辑器 28
2 继续开发 29
3 先制作启动区 40
4 Makefile入门 4*
第3天 进入32位模式并导入C语言 45
* 制作真正的IPL 45
2 试错 50
3 读到*8扇区 5*
4 读入*0个柱面 52
5 着手开发操作系统 54
6 从启动区执行操作系统 55
7 确认操作系统的执行情况 56
8 32位模式前期准备 57
9 开始导入C语言 59
*0 实现HLT(harib00j) 62
第4天 C语言与画面显示的练习 64
* 用C语言实现内存写入(harib0*a) 64
2 条纹图案(harib0*b) 67
3 挑战指针(harib0*c) 69
4 指针的应用(*)(harib0*d) 74
5 指针的应用(2)(harib0*e) 74
6 色号设定(harib0*f) 75
7 绘制矩形(harib0*g) 84
8 今 天的成果(harib0*h) 86
第5天 结构体、文字显示与GDT/IDT初始化 88
* 接收启动信息(harib02a) 88
2 试用结构体(harib02b) 89
3 试用箭头记号(harib02c) 9*
4 显示字符(harib02d) 9*
5 增加字体(harib02e) 94
6 显示字符串(harib02f) 96
7 显示变量值(harib02g) 97
8 显示鼠标指针(harib02h) 99
9 GDT与IDT的初始化(harib02i) *0*
第6天 分割编译与中断处理 *08
* 分割源文件(harib03a) *08
2 整理Makefile(harib03b) *09
3 整理头文件(harib03c) **0
4 意犹未尽 **2
5 初始化PIC(harib03d) **5
6 中断处理程序的制作(harib03e) **9
第7天 FIFO与鼠标控制 *25
* 获取按键编码(hiarib04a) *25
2 加快中断处理(hiarib04b) *27
3 制作FIFO缓冲区(hiarib04c) *30
4 *FIFO缓冲区(hiarib04d) *33
5 整理FIFO缓冲区(hiarib04e) *35
6 总算讲到鼠标了(harib04f) *38
7 从鼠标接受数据(harib04g) *4*
第8天 鼠标控制与32位模式切换 *44
* 鼠标解读(*)(harib05 a) *44
2 稍事整理(harib05b) *46
3 鼠标解读(2)(harib05c) *48
4 移动鼠标指针(harib05d) *5*
5 通往32位模式之路 *53
第9天 内存管理 *62
* 整理源文件(harib06a) *62
2 内存容量检查(*)(harib06b) *63
3 内存容量检查(2)(harib06c) *68
4 挑战内存管理(harib06d) *72
第 *0天 叠加处理 *8*
* 内存管理(续)(harib07a) *8*
2 叠加处理(harib07b) *84
3 提*叠加处理速度(*)(harib07c) *94
4 提*叠加处理速度(2)(harib07d) *97
第 **天 制作窗口 20*
* 鼠标显示问题(harib08a) 20*
2 实现画面外的支持(harib08b) 202
3 shtctl的*省略(harib08c) 203
4 显示窗口(harib08d) 206
5 小实验(harib08e) 208
6 *速计数器(harib08f) 209
7 *闪烁(*)(harib08g) 2**
8 *闪烁(2)(harib08h) 2*4
第 *2天 定时器(*) 220
* 使用定时器(harib09a) 220
2 计量时间(harib09b) 224
3 *时功能(harib09c) 225
4 设定多个定时器(harib09d) 228
5 加快中断处理(*)(harib09e) 232
6 加快中断处理(2)(harib09f) 234
7 加快中断处理(3)(harib09g) 236
第 *3天 定时器(2) 240
* 简化字符串显示(harib*0a) 240
2 重新调整FIFO缓冲区(*)(harib*0b) 24*
3 测试性能(harib*0c~harib*0f) 243
4 重新调整FIFO缓冲区(2)(harib*0g) 246
5 加快中断处理(4)(harib*0h) 253
6 使用“哨兵”简化程序(harib*0i) 257
第 *4天 *分辨率及键盘输入 262
* 继续测试性能(harib**a~harib**c) 262
2 提*分辨率(*)(harib**d) 266
3 提*分辨率(2)(harib**e) 269
4 键盘输入(*)(harib**f) 272
5 键盘输入(2)(harib**g) 275
6 追记内容(*)(harib**h) 277
7 追记内容(2)(harib**i) 279
第 *5天 多任务(*) 282
* 挑战任务切换(harib*2a) 282
2 任务切换进*(harib*2b) 289
3 做个简单的多任务(*)(harib*2c) 29*
4 做个简单的多任务(2)(harib*2d) 293
5 提*运行速度(harib*2e) 294
6 测试运行速度(harib*2f) 297
7 多任务进*(harib*2g) 299
第 *6天 多任务(2) 304
* 任务管理自动化(harib*3a) 304
2 让任务休眠(harib*3b) 308
3 增加窗口数量(harib*3c) 3*3
4 设定任务*先级(*)(harib*3d) 3*7
5 设定任务*先级(2)(harib*3e) 320
第 *7天 命令行窗口 329
* 闲置任务(harib*4a) 329
2 *建命令行窗口(harib*4b) 33*
3 切换输入窗口(harib*4c) 334
4 实现字符输入(harib*4d) 337
5 符号的输入(harib*4e) 34*
6 大写字母与小写字母(harib*4f) 343
7 对各种锁定键的支持(harib*4g) 346
第 *8天 dir命令 350
* 控制光标闪烁(*)(harib*5 a) 350
2 控制光标闪烁(2)(harib*5b) 352
3 对回车键的支持(harib*5c) 355
4 对窗口滚动的支持(harib*5d) 357
5 mem命令(harib*5e) 359
6 cls命令(harib*5f) 363
7 dir命令(harib*5g) 366
第 *9天 应用程序 37*
* type命令(harib*6a) 37*
2 type命令改良(harib*6b) 378
3 对FAT的支持(harib*6c) 382
4 代码整理(harib*6d) 387
5 第 *个应用程序(harib*6e) 387
第 20天 API 392
* 程序整理(harib*7a) 392
2 显示单个字符的API(*)(harib*7b) 399
3 显示单个字符的API(2)(harib*7c) 402
4 结束应用程序(harib*7d) 403
5 *随操作系统版本而改变的API(harib*7e) 405
6 为应用程序自由命名(harib*7f) 408
7 当心寄存器(harib*7g) 4*0
8 用API显示字符串(harib*7h) 4*2
第 2*天 *护操作系统 4*8
* 攻克难题——字符串显示API(harib*8a) 4*8
2 用C语言编写应用程序(harib*8b) 420
3 *护操作系统(*)(harib*8c) 424
4 *护操作系统(2)(harib*8d) 426
5 对异常的支持(harib*8e) 43*
6 *护操作系统(3)(harib*8f) 434
7 *护操作系统(4)(harib*8g) 435
第 22天 用C语言编写应用程序 443
* *护操作系统(5)(harib*9a) 443
2 帮助发现bug(harib*9b) 448
3 强制结束应用程序(harib*9c) 452
4 用C语言显示字符串(*)(harib*9d) 455
5 用C语言显示字符串(2)(harib*9e) 457
6 显示窗口(harib*9f) 462
7 在窗口中描绘字符和方块(harib*9g) 465
第 23天 图形处理相关 468
* 编写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
* 窗口切换(*)(harib2*a) 493
2 窗口切换(2)(harib2*b) 495
3 移动窗口(harib2*c) 496
4 用鼠标关闭窗口(harib2*d) 498
5 将输入切换到应用程序窗口(harib2*e) 500
6 用鼠标切换输入窗口(harib2*f) 506
7 定时器API(harib2*g) 507
8 取消定时器(harib2*h) 5**
第 25天 增加命令行窗口 5*5
* 蜂鸣器发声(harib22a) 5*5
2 增加更多的颜色(*)(harib22b) 5*8
3 增加更多的颜色(2)(harib22c) 520
4 窗口初始位置(harib22d) 523
5 增加命令行窗口(*)(harib22e) 524
6 增加命令行窗口(2)(harib22f) 528
7 增加命令行窗口(3)(harib22g) 53*
8 增加命令行窗口(4)(harib22h) 532
9 变得更像真正的操作系统(*)(harib22i) 534
*0 变得更像真正的操作系统(2)(harib22j) 538
第 26天 为窗口移动提速 54*
* 提*窗口移动速度(*)(harib23a) 54*
2 提*窗口移动速度(2)(harib23b) 543
3 提*窗口移动速度(3)(harib23c) 547
4 提*窗口移动速度(4)(harib23d) 549
5 启动时只打开*个命令行窗口(harib23e) 55*
6 增加更多的命令行窗口(harib23f) 554
7 关闭命令行窗口(*)(harib23g) 555
8 关闭命令行窗口(2)(harib23h) 56*
9 start命令(harib23i) 563
*0 ncst命令(harib23j) 564
第 27天 LDT与库 57*
* 先来修复bug(harib24a) 57*
2 应用程序运行时关闭命令行窗口(harib24b) 573
3 *护应用程序(*)(harib24c) 577
4 *护应用程序(2)(harib24d) 580
5 *化应用程序的大小(harib24e) 583
6 库(harib24f) 587
7 整理make环境(harib24g) 590
第 28天 文件操作与文字显示 598
* alloca(*)(harib25 a) 598
2 alloca(2)(harib25b) 60*
3 文件操作API(harib25c) 605
4 命令行API(harib25d) 6*2
5 日文文字显示(*)(harib25e) 6*5
6 日文文字显示(2)(harib25f) 624
7 日文文字显示(3)(harib25g) 629
第 29天 压缩与简单的应用程序 635
* 修复bug(harib26a) 635
2 文件压缩(harib26b) 636
3 标准函数 644
4 非矩形窗口(harib26c) 647
5 bball(harib26d) 648
6 外星人游戏(harib26e) 65*
第30天 * 级的应用程序 659
* 命令行计算器(harib27a) 659
2 文本阅览器(harib27b) 664
3 MML播放器(harib27c) 67*
4 图片阅览器(harib27d) 679
5 IPL的改良(harib27e) 683
6 光盘启动(harib27f) 688
第3*天 写在开发完成之后 690
* 继续开发要靠大家的努力 690
2 关于操作系统的大小 692
3 操作系统开发的诀窍 693
4 分享给他人使用 694
5 关于光盘中的软件 695
6 关于开源的建议 696
7 后记 698
8 毕业典礼 703
9 附录 704