
川合秀实(Hidemi Kawai)生于1975年,是一位以“轻量化”编程思想见长的“非主流”开发者。2000年因自行开发的OSASK项目而名声大噪。OSASK是一个开源的32位微型操作系统,它并非以Linux等内核为基础,而是完全从零开始开发,在一张软盘的容量下实现了GUI、多任务、多语言等高级特性,启动时间只需1秒。本书的内容可以看成是作者以OSASK为蓝本,教会读者从零开始开发一个操作系统,同时可以让初学者在编写操作系统的过程中,了解操作系统背后更多的知识。
自己编写一个操作系统,是许多程序员的梦想。也许有人曾经挑战过,但因为太难而放弃了。其实你错了,你的失败并不是因为编写操作系统太难,而是因为没有人告诉你那其实是一件很简单的事。那么,你想不想再挑战一次呢?这是一本兼具趣味性、实用性与学习性的书籍。作者从计算机的构造、汇编语言、C语言开始解说,让你在实践中掌握算法。在这本书的指导下,从零编写所有代码,30天后就可以制作出一个具有窗口系统的32位多任务操作系统。本书以课题为主导,边做边玩,抛开晦涩难懂的语言,行文风格十分随性,还充满了各种欢乐的吐槽,适合操作系统爱好者和程序设计人员阅读。
目 录第0天 着手开发之前 11 前言 12 何谓操作系统 33 开发操作系统的各种方法 44 无知则无畏 45 如何开发操作系统 66 操作系统开发中的困难 77 学习本书时的注意事项(重要!) 98 各章内容摘要 11第1天 从计算机结构到汇编程序入门 131 先动手操作 132 究竟做了些什么 193 初次体验汇编程序 224 加工润色 24第2天 汇编语言学习与Makefile入门 281 介绍文本编辑器 282 继续开发 293 先制作启动区 404 Makefile入门 41第3天 进入32位模式并导入C语言 451 制作真正的IPL 452 试错 503 读到18扇区 514 读入10个柱面 525 着手开发操作系统 546 从启动区执行操作系统 557 确认操作系统的执行情况 568 32位模式前期准备 579 开始导入C语言 5910 实现HLT(harib00j) 62第4天 C语言与画面显示的练习 641 用C语言实现内存写入(harib01a) 642 条纹图案(harib01b) 673 挑战指针(harib01c) 694 指针的应用(1)(harib01d) 745 指针的应用(2)(harib01e) 746 色号设定(harib01f) 757 绘制矩形(harib01g) 848 今天的成果(harib01h) 86第5天 结构体、文字显示与GDT/IDT初始化 881 接收启动信息(harib02a) 882 试用结构体(harib02b) 893 试用箭头记号(harib02c) 914 显示字符(harib02d) 915 增加字体(harib02e) 946 显示字符串(harib02f) 967 显示变量值(harib02g) 978 显示鼠标指针(harib02h) 999 GDT与IDT的初始化(harib02i) 101第6天 分割编译与中断处理 1081 分割源文件(harib03a) 1082 整理Makefile(harib03b) 1093 整理头文件(harib03c) 1104 意犹未尽 1125 初始化PIC(harib03d) 1156 中断处理程序的制作(harib03e) 119第7天 FIFO与鼠标控制 1251 获取按键编码(hiarib04a) 1252 加快中断处理(hiarib04b) 1273 制作FIFO缓冲区(hiarib04c) 1304 改善FIFO缓冲区(hiarib04d) 1335 整理FIFO缓冲区(hiarib04e) 1356 总算讲到鼠标了(harib04f) 1387 从鼠标接受数据(harib04g) 141第8天 鼠标控制与32位模式切换 1441 鼠标解读(1)(harib05a) 1442 稍事整理(harib05b) 1463 鼠标解读(2)(harib05c) 1484 移动鼠标指针(harib05d) 1515 通往32位模式之路 153第9天 内存管理 1621 整理源文件(harib06a) 1622 内存容量检查(1)(harib06b) 1633 内存容量检查(2)(harib06c) 1684 挑战内存管理(harib06d) 172第10天 叠加处理 1811 内存管理(续)(harib07a) 1812 叠加处理(harib07b) 1843 提高叠加处理速度(1)(harib07c) 1944 提高叠加处理速度(2)(harib07d) 197第11天 制作窗口 2011 鼠标显示问题(harib08a) 2012 实现画面外的支持(harib08b) 2023 shtctl的指定省略(harib08c) 2034 显示窗口(harib08d) 2065 小实验(harib08e) 2086 高速计数器(harib08f) 2097 消除闪烁(1)(harib08g) 2118 消除闪烁(2)(harib08h) 214第12天 定时器(1) 2201 使用定时器(harib09a) 2202 计量时间(harib09b) 2243 超时功能(harib09c) 2254 设定多个定时器(harib09d) 2285 加快中断处理(1)(harib09e) 2326 加快中断处理(2)(harib09f) 2347 加快中断处理(3)(harib09g) 236第13天 定时器(2) 2401 简化字符串显示(harib10a) 2402 重新调整FIFO缓冲区(1)(harib10b) 2413 测试性能(harib10c~harib10f) 2434 重新调整FIFO缓冲区(2)(harib10g) 2465 加快中断处理(4)(harib10h) 2536 使用“哨兵”简化程序(harib10i) 257第14天 高分辨率及键盘输入 2621 继续测试性能(harib11a~harib11c) 2622 提高分辨率(1)(harib11d) 2663 提高分辨率(2)(harib11e) 2694 键盘输入(1)(harib11f) 2725 键盘输入(2)(harib11g) 2756 追记内容(1)(harib11h) 2777 追记内容(2)(harib11i) 279第15天 多任务(1) 2821 挑战任务切换(harib12a) 2822 任务切换进阶(harib12b) 2893 做个简单的多任务(1)(harib12c) 2914 做个简单的多任务(2)(harib12d) 2935 提高运行速度(harib12e) 2946 测试运行速度(harib12f) 2977 多任务进阶(harib12g) 299第16天 多任务(2) 3041 任务管理自动化(harib13a) 3042 让任务休眠(harib13b) 3083 增加窗口数量(harib13c) 3134 设定任务优先级(1)(harib13d) 3175 设定任务优先级(2)(harib13e) 320第17天 命令行窗口 3291 闲置任务(harib14a) 3292 创建命令行窗口(harib14b) 3313 切换输入窗口(harib14c) 3344 实现字符输入(harib14d) 3375 符号的输入(harib14e) 3416 大写字母与小写字母(harib14f) 3437 对各种锁定键的支持(harib14g) 346第18天 dir命令 3501 控制光标闪烁(1)(harib15a) 3502 控制光标闪烁(2)(harib15b) 3523 对回车键的支持(harib15c) 3554 对窗口滚动的支持(harib15d) 3575 mem命令(harib15e) 3596 cls命令(harib15f) 3637 dir命令(harib15g) 366第19天 应用程序 3711 type命令(harib16a) 3712 type命令改良(harib16b) 3783 对FAT的支持(harib16c) 3824 代码整理(harib16d) 3875 第一个应用程序(harib16e) 387第20天 API 3921 程序整理(harib17a) 3922 显示单个字符的API(1)(harib17b) 3993 显示单个字符的API(2)(harib17c) 4024 结束应用程序(harib17d) 4035 不随操作系统版本而改变的API(harib17e) 4056 为应用程序自由命名(harib17f) 4087 当心寄存器(harib17g) 4108 用API显示字符串(harib17h) 412第21天 保护操作系统 4181 攻克难题——字符串显示API(harib18a) 4182 用C语言编写应用程序(harib18b) 4203 保护操作系统(1)(harib18c) 4244 保护操作系统(2)(harib18d) 4265 对异常的支持(harib18e) 4316 保护操作系统(3)(harib18f) 4347 保护操作系统(4)(harib18g) 435第22天 用C语言编写应用程序 4431 保护操作系统(5)(harib19a) 4432 帮助发现bug(harib19b) 4483 强制结束应用程序(harib19c) 4524 用C语言显示字符串(1)(harib19d) 4555 用C语言显示字符串(2)(harib19e) 4576 显示窗口(harib19f) 4627 在窗口中描绘字符和方块(harib19g) 465第23天 图形处理相关 4681 编写malloc(harib20a) 4682 画点(harib20b) 4723 刷新窗口(harib20c) 4754 画直线(harib20d) 4785 关闭窗口(harib20e) 4836 键盘输入API(harib20f) 4847 用键盘输入来消遣一下(harib20g) 4888 强制结束并关闭窗口(harib20h) 489第24天 窗口操作 4931 窗口切换(1)(harib21a) 4932 窗口切换(2)(harib21b) 4953 移动窗口(harib21c) 4964 用鼠标关闭窗口(harib21d) 4985 将输入切换到应用程序窗口(harib21e) 5006 用鼠标切换输入窗口(harib21f) 5067 定时器API(harib21g) 5078 取消定时器(harib21h) 511第25天 增加命令行窗口 5151 蜂鸣器发声(harib22a) 5152 增加更多的颜色(1)(harib22b) 5183 增加更多的颜色(2)(harib22c) 5204 窗口初始位置(harib22d) 5235 增加命令行窗口(1)(harib22e) 5246 增加命令行窗口(2)(harib22f) 5287 增加命令行窗口(3)(harib22g) 5318 增加命令行窗口(4)(harib22h) 5329 变得更像真正的操作系统(1)(harib22i) 53410 变得更像真正的操作系统(2)(harib22j) 538第26天 为窗口移动提速 5411 提高窗口移动速度(1)(harib23a) 5412 提高窗口移动速度(2)(harib23b) 5433 提高窗口移动速度(3)(harib23c) 5474 提高窗口移动速度(4)(harib23d) 5495 启动时只打开一个命令行窗口(harib23e) 5516 增加更多的命令行窗口(harib23f) 5547 关闭命令行窗口(1)(harib23g) 5558 关闭命令行窗口(2)(harib23h) 5619 start命令(harib23i) 56310 ncst命令(harib23j) 564第27天 LDT与库 5711 先来修复bug(harib24a) 5712 应用程序运行时关闭命令行窗口(harib24b) 5733 保护应用程序(1)(harib24c) 5774 保护应用程序(2)(harib24d) 5805 优化应用程序的大小(harib24e) 5836 库(harib24f) 5877 整理make环境(harib24g) 590第28天 文件操作与文字显示 5981 alloca(1)(harib25a) 5982 alloca(2)(harib25b) 6013 文件操作API(harib25c) 6054 命令行API(harib25d) 6125 日文文字显示(1)(harib25e) 6156 日文文字显示(2)(harib25f) 6247 日文文字显示(3)(harib25g) 629第29天 压缩与简单的应用程序 6351 修复bug(harib26a) 6352 文件压缩(harib26b) 6363 标准函数 6444 非矩形窗口(harib26c) 6475 bball(harib26d) 6486 外星人游戏(harib26e) 651第30天 高级的应用程序 6591 命令行计算器(harib27a) 6592 文本阅览器(harib27b) 6643 MML播放器(harib27c) 6714 图片阅览器(harib27d) 6795 IPL的改良(harib27e) 6836 光盘启动(harib27f) 688第31天 写在开发完成之后 6901 继续开发要靠大家的努力 6902 关于操作系统的大小 6923 操作系统开发的诀窍 6934 分享给他人使用 6945 关于光盘中的软件 6956 关于开源的建议 6967 后记 6988 毕业典礼 7039 附录 704
评论关闭。