Bran的內核開發教程(bkerndev)-01 介紹

介紹

  內核開發不是件容易的事,這是對一個程序員編程能力的考驗。開發內核其實就是開發一個可以與硬件交互和管理硬件的軟件。內核也是一個操做系統的核心,是管理硬件資源的邏輯。程序員

  處理器或是CPU是內核須要管理的最重要的系統資源之一。內核對其的管理體如今:給特定操做分配時間,並容許在另外一個調度事件發生時中斷任務或進程。也就是多任務處理(multitasking)。多任務處理的實現方式有:算法

  • 協做式多任務處理(cooperative multitasking):當程序自身想要放棄處理下一個可執行進程或任務的時間時,將調用「yield」函數主動放棄時間片。
  • 搶佔式多任務處理(preemptive multitasking):使用系統定時器來中斷當前進程切換到新的進程。這種強制切換形式,更好地保證了進程能夠獲得一段運行時間。

目前有幾種調度算法用於尋找下一個要運行的進程,其中最簡單的是輪循調度(Round Robin),你只須要在列表中獲取下一個進程,而後選擇該進程運行。複雜的調度涉及優先級,那些優先級高的任務比優先級低的任務容許分派到更多運行時間。更爲複雜的是實時調度(Real-time scheduler),用來保證某個進程至少運行必定數量的定時器時間。實時系統的計算正確性不單單取決於計算的邏輯正確性,還卻決於產生結果的時間。若是未知足系統的時間約束,則認爲系統失效,也可認爲沒有獲得正確的計算結果。編程

  系統的另外一個重要的資源顯然是內存(Memory)。有時候內存資源甚至比CPU時間資源更加珍貴,由於內存是有限的,而CPU時間確不是。你能夠將你的內核設計成內存高效,但會犧牲大量CPU。你也能夠設計成CPU高效,使用內存存儲緩存和緩衝區來記住經常使用項而不是查找它們。最好的固然是二者兼顧:爭取最佳的內存使用,同時保留CPU時間。緩存

  還有一個內核須要管理的資源是硬件資源,包括:函數

  • 終端請求(IRQ):鍵盤、硬盤等硬件設備發送的特殊信號,用來告訴CPU我已經準備好數據了,你能夠執行某個例程來處理它。
  • 直接存儲器訪問(DMA)通道:DMA通道容許設備鎖定存儲器總線並在須要的時候將數據直接傳輸到系統存儲器中,而不中止處理器的執行。支持DMA的設備能夠在不打擾CPU的狀況下傳輸數據,再經過IRQ中斷告訴CPU數據傳輸完完成,很好地提升了系統的性能。聲卡和以太卡就是使用這種方式。
  • 尋址:好比內存實際上是I/O總線端口下的一個地址。設備可使用I/O端口被配置或讀寫數據。設備可使用的I/O端口有不少,一般使用8路或16路I/O。

概述

  本教程的旨在向讀者展現如何搭建起內核的基礎,包括:oop

  1. 配置開發環境
  2. 基礎知識:GRUB引導程序設置
  3. 連接到其餘文件並調用main()
  4. 屏幕輸出
  5. 設置自定義全局描述符表(GDT)
  6. 設置自定義中斷描述符表(IDT)
  7. 設置中斷服務程序(ISR)處理中斷和IRQs
  8. 重映射可編程中斷控制器(PIC)到新的IDT條目
  9. 安裝和維護IRQ
  10. 管理可編程間隔定時器/系統時鐘(PIT)
  11. 管理鍵盤IRQ和鍵盤數據
  12. ... ...其餘的你來定!

原文連接:Bran's Kernel Development A tutorial on writing kernels Version 1.0 (Feb 6th, 2005) http://www.osdever.net/bkerndev/Docs/title.htm性能

本人英語水平通常,專業水平也不高,錯誤怕會不少,歡迎指正。不接受批評哈,原本就是寫給本身看到 :)操作系統

相關文章
相關標籤/搜索