30天自制操作系統.(川合秀實)

>>>  文章華國詩禮傳家—精彩書評選  >>> 簡體     傳統

自己編寫一個操作系統,是許多程序員的夢想。也許有人曾經挑戰過,但因為太難而放棄了。其實你錯了,你的失敗并不是因為編寫操作系統太難,而是因為沒有人告訴你那其實是一件很簡單的事。那么,你想不想再挑戰一次呢?

這是一本兼具趣味性、實用性與學習性的書籍。作者從計算機的構造、匯編語言、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


2022-12-08 19:06:52

[新一篇] 1948天地玄黃

[舊一篇] 30部必讀的投資學經典
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表