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。

概述

  本教程的旨在向读者展示如何搭建起内核的基础,包括:

  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

本人英语水平一般,专业水平也不高,错误怕会很多,欢迎指正。不接受批评哈,本来就是写给自己看到 :)

posted @ 2019-09-16 13:16  Raina_RLN  阅读(...)  评论(... 编辑 收藏