具体描述
自己编写一个操作系统,是许多程序员的梦想。也许有人曾经挑战过,但因为太难而放弃了。其实你错了,你的失败并不是因为编写操作系统太难,而是因为没有人告诉你那其实是一件很简单的事。那么,你想不想再挑战一次呢?
这是一本兼具趣味性、实用性与学习性的书籍。作者从计算机的构造、汇编语言、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 制作真正的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
· · · · · · (收起)
读后感
本来是抱着了解操作系统内部机制以及能DIY一个自己的操作系统的心思来买这本书的,不过看了五六天之后才知道不太符合我的第一个要求,甚至连第二个要求也不符合,不知道怎么说总觉得这样的系统,总是感觉跟linux,windows这些有点差距,好像完全不是一个风格的,但是在学习此书...
一本相当不错的书,如果动手作一边能够对操作系统的理解有着相当的提升。 为了方便各位朋友对系统的改进与学习,我在github 开设关于此书的项目。 https://github.com/Tassandar/OSASK 如果有兴趣可以对其fork并修改,或者仅仅是对其中的代码进行阅读也是很好的事情。 下面...
自己DIY操作系统真的很有意思,本书虽然没有很深入的讲,但已给出的确实很有趣,算是物有所值。 一口气读完了(大略的看看),感觉呢,这本书就是用来玩的,学东西可以再找本其他的书进行深入探索,接下来就是实践了。
该书中有很多值得学习的地方,尤其是一些底层的东西,平常学习编程的时候,没有太多的机会接触这方面的东西。比如,文件的读取、磁盘的操作等等。当然,这些知识都比较零散,但是可以将它们当作进行系统地学习前的一个了解的过程。书中作者的操作系统只有30K,当然无法实现...
用户评价
说实话,我对《30天自制操作系统》这本书最初的期待,仅仅是想了解一下操作系统是怎么工作的,但它带给我的惊喜,远远超出了这个范畴。作者在书中展现了一种将复杂问题简单化的艺术,他用一种近乎“游戏化”的方式,引导读者一步步构建一个完整的操作系统。从最开始的“Hello, World!”,到后面的图形界面,每一步都像是在解锁新的游戏关卡,让人欲罢不能。这本书的逻辑非常严谨,每一个概念的引入都有其必然性,并且前后呼应,形成了一个有机的整体。我尤其欣赏作者在讲解一些高级概念时,并没有直接给出最终答案,而是通过引导性的提问,鼓励读者自己去思考和探索。比如在讲到多任务处理时,作者并没有直接给出调度算法,而是先抛出“如何让多个程序同时运行”的问题,然后引导读者一步步思考解决方案。这种“授人以鱼不如授人以渔”的教学方式,极大地提升了我的自主学习能力。读完这本书,我不仅对操作系统有了更深的理解,更重要的是,我学会了如何去学习一个复杂的计算机科学领域。
《30天自制操作系统》这本书,让我重新认识了“学习”这件事。它打破了我对技术学习的固有认知,将原本枯燥的理论知识,转化为一次充满探索和乐趣的旅程。作者的写作风格非常独特,他善于将宏大的技术概念,拆解成一个个小巧而精致的模块,然后用一种极其直观和易懂的方式呈现出来。我尤其欣赏他在讲解操作系统内核时,那种抽丝剥茧的细致。从最底层的硬件交互,到上层的应用程序接口,每一个环节都处理得恰到好处,不会让人感到信息过载,也不会让人觉得过于肤浅。书中提供的代码示例,质量非常高,而且都有详细的注释,让我能够轻松地理解每一行代码的作用。更重要的是,这本书培养了我一种“动手实践”的学习习惯。我发现,只有亲手去实现,才能真正理解那些抽象的概念。通过这本书,我不仅学习到了操作系统开发的知识,更重要的是,我培养了一种独立思考、勇于探索的精神,这对于我今后的学习和工作都将受益匪浅。
这本书简直是给我打开了一扇新世界的大门!一直以来,我总觉得操作系统离我太遥远,是那些高深莫测的技术大神们的专属领域。但《30天自制操作系统》这本书,用一种极其亲切且循序渐进的方式,让我这个“小白”也能窥探到操作系统的核心奥秘。它不像市面上一些技术书籍那样,上来就堆砌一堆晦涩难懂的术语,而是从最基本、最直观的概念讲起,比如“什么是程序”,“计算机如何执行指令”等等。然后,它会一步步引导你构建自己的小小世界,从最简单的引导扇代码,到内存管理,再到进程调度,每一步都伴随着清晰的图示和详尽的代码讲解。我尤其喜欢作者在讲解每个概念时,都会用一些生动的比喻,让我这种非科班出身的人也能瞬间领悟。而且,它并没有只停留在理论层面,而是鼓励你去动手实践,提供了一系列可以跟随操作的例子,让你在敲击键盘的过程中,真实地感受到代码如何转化为实际的功能。这对于我来说,是一种前所未有的学习体验,让我从一个被动接受知识的学习者,变成了一个主动探索者。这本书的价值,远不止于“学到”多少知识,更在于它激发了我对底层技术的好奇心和学习的热情。
我带着一种“挑战极限”的心态翻开了《30天自制操作系统》,原本以为这会是一场艰难的苦役,但没想到,它竟然如此引人入胜!作者的叙事风格非常有感染力,仿佛在讲述一个精彩的探险故事,而不是枯燥的技术教程。他巧妙地将操作系统的复杂机制,比如中断处理、文件系统、设备驱动,拆解成一个个小的、可管理的部分,然后逐个击破。书中并没有回避那些“硬骨头”,而是用一种“兵来将挡,水来土掩”的姿态,一步步带领读者攻克难关。我印象特别深刻的是关于内存管理的章节,作者用了一个非常形象的比喻,将内存比作一个巨大的仓库,而操作系统就像一个高效的管理员,负责分配和回收“货物”。这种讲解方式,让我不再对抽象的内存地址感到畏惧,而是能理解其背后的逻辑和重要性。而且,这本书的排版也非常用心,代码块清晰明了,关键概念也用醒目的方式标注出来,阅读起来非常流畅。我发现,随着阅读的深入,我不再是单纯地“看”书,而是开始“思考”,开始尝试自己去修改代码,去预测结果。这种主动思考和解决问题的过程,让学习变得异常充实和有成就感。
这本书简直是一次沉浸式的学习体验!《30天自制操作系统》不仅仅是一本技术书籍,更像是一本“编程游记”,作者将自己制作操作系统的过程,以一种非常生动有趣的方式呈现出来。他没有那种居高临下的说教感,而是像一个经验丰富的伙伴,分享他的心得和遇到的挑战。书中对于一些关键的技术细节,比如中断向量表、页表管理等,作者都进行了非常细致的讲解,并且提供了可以直接运行的代码示例。我最喜欢的一点是,书中鼓励读者犯错,并且提供了如何调试和解决错误的方法。这让我不再害怕写出有bug的代码,而是把它看作是学习过程中的一部分。每次我按照书中的指导完成了某个功能,那种成就感简直无法用语言来形容。我发现,这本书不仅让我掌握了操作系统开发的理论知识,更重要的是,它培养了我独立解决问题的能力和对底层技术的自信心。我不再是那个只知道调用API的“码农”,而是开始理解代码背后的运行逻辑,开始能够“看懂”程序的灵魂。
看完实体书再评价~~~在书店翻了下:有点啰嗦,对于我来说,重点不多。
毕业设计用了这个,也算是偷懒吧,但我也自认为不算偷懒,毕竟我话了很多时间去弄懂书上讲的东西。忘了说了,本书非常适合苦于找不到合适项目的计算机本科生利用课余时间实践,有很详细的指导哟~
其实不怎么样。
因为这本书毕业设计成了优秀.....
看过一点点...