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

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

原文地址:https://www.cnblogs.com/raina/p/11526824.html

时间: 2024-10-30 00:48:59

Bran的内核开发教程(bkerndev)-01 介绍的相关文章

Bran的内核开发教程(bkerndev)-07 中断描述符表(IDT)

中断描述符表(IDT) ??中断描述符表(IDT)用于告诉处理器调用哪个中断服务程序(ISR)来处理异常或汇编中的"int"指令.每当设备完成请求并需要服务事, 中断请求也会调用IDT条目.异常和ISR将在下一节进行详细的说明. ??每一项IDT都与GDT相似, 两者都有一个基地址, 一个访问标志, 而且都长64bits.这两类描述符表最主要的区别在于这些字段的含义: 在IDT中的基地址是中断时应调用的ISR的地址.IDT也没有边界(limit), 而是需要一个指定的段, 该段与给定的

Bran的内核开发教程(bkerndev)-03 内核初步

内核初步 ??在这节教程, 我们将深入研究一些汇编程序, 学习创建链接脚本的基础知识以及使用它的原因.最后, 我们将学习如何使用batch(批处理)文件自动汇编.编译和链接这个最基本的受保护模式下的内核.本教程假定你已经安装了NASM和GCC, 并且了解一点点x86汇编语言. 内核入口 ??内核的入口点是当引导程序(bootloader)调用内核时最先执行的代码段.这段代码一直以来几乎都是使用汇编编写的, 因为有些工作如设置新的栈, 加载新的GDT.IDT或寄存器, 你简单地使用C语言根本没法做

微信开放平台公众号第三方平台开发 教程一 平台介绍

微信现在火,火的如火如荼,给我们这些第三方的开发者带来了不少机会,相信现在有不少人在基于微信的公众平台在做二次开发,接下来会一系列的文章来介绍微信的另一种开发模式- 基于微信开发平台的公众号第三方平台开发,从基本的注册开始介绍,一步一步到所有的接口开发,并且针对与微信的开放平台的第三方平台的所有的接口我已经全部封装成了java的SDK,并且完全免费和开发,供所有开发者使用. 什么是公众号第三方平台,与现有的公众平台有什么区别? 官方介绍:公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行

微信开放平台 公众号第三方平台开发 教程一 平台介绍

微信现在火,火的如火如荼,给我们这些第三方的开发者带来了不少机会,我相信现在有不少人在基于微信的公众平台在做二次开发,我将会写一系列的文章,来介绍微信的另一种开发模式- 基于微信开发平台的公众号第三方平台开发,从基本的注册开始介绍,一步一步到所有的接口开发,并且针对与微信的开放平台的第三方平台的所有的接口我已经全部封装成了.net的SDK,并且完全免费和开发,供所有开发者使用. 什么是公众号第三方平台,与现有的公众平台有什么区别? 官方介绍:公众号第三方平台的开放,是为了让公众号运营者,在面向垂

Bran的内核开发指南_中文版

http://www.cnblogs.com/liloke/archive/2011/12/21/2296004.html 最近在看<orange’s>一书,有点想自己写一个轻量级OS的想法,设计和架构上会参照orang’s和Linux 0.11 kernel. 这个网站,上面的资料对于我这样的新手无疑是一份宝贵的财富啊.它详细介绍了内核程序必不可少的几大模块,并且对于每一个模块都有一些代码示例.看着文章代码,边做边学,真是一件愉快的事情 本来还想翻译成中文献给大家,不过google了一下,已

【小程序】基于.NET CORE2.1 的 微信开放平台 第三方平台开发 教程一 平台介绍

微信第三方平台概述 公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,开放给所有通过开发者资质认证后的开发者使用. 详细说明请访问 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318292&lang= 这里啰嗦

Autopard教程系列- 01 介绍

Autopard 是一个针对车载电脑开发的UI.她有如下特性: 1.可以灵活扩充的插件系统 2.基于XML描述的UI 3.基于LUA脚本控制的逻辑 4.OpenGL加速的GUI渲染,内置动画支持 5.支持控件绑定到数据 6.自带了常用的显示控件 7.自带基于VLC的音频及视频播放 8.良好的可扩展性,用户可以自定义车辆状态属性 9.基于C++的实现,较少的资源占用及较快的启动速度 10.跨平台能力(正在开发中)

微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台

原文:微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行业需求时,可以一键登录授权给第三方的公众号运营平台,通过第三方开发者提供的公众号第三

微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码

教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码 由于最近比较忙,这个教程没有连续上,我会尽量连载.书节上回,上次我介绍了代公众号调用接口的方法和SDK的使用.不少朋友也都加了QQ群(2489462