30天自制操作系统

30天自制操作系统

下载地址 https://pan.baidu.com/s/1VkNiKw3OmH4DQmwIX8qECA

扫码下面二维码关注公众号回复 100024获取分享码

image.png

本书目录结构如下:

第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

你可能感兴趣的:(操作系统,c,硬件)