Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1149053
  • 博文数量: 53
  • 博客积分: 1165
  • 博客等级: 下士
  • 技术积分: 1811
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-19 14:56
个人简介

专注于操作系统内核的实现

文章分类
文章存档

2015年(2)

2014年(16)

2013年(18)

2012年(17)

分类: IT业界

2014-01-19 12:36:33

关于LMOS-00.07的架构重大变革

首先LMOS没有死,只是我最近忙于写书,暂停了LMOS的开发,然而在这过程中,又诞生了另一个操作系统——LMOSEM。从名字就能想到这是个嵌入式系统。当然写书之余,没有忘记LMOS。不断的思考、寻找更为先进的算法、机制和模型。

LMOS-00.07将有如下改进:

1.       更先进的内存管理,特别是大块连续内存的分配与释放,可以轻松获取、释放上GB的连续大块内存,我不会像XXXX公司牛吹的大,最后牛都吹炸了,还是什么都不是,到时大家亲自验证。

2.       更先进的驱动模型,我的驱动模型很简单、很奇怪,我采用了“一切皆为内存”的机制。这种机制可能世界上所有的OS都没有用过。

3.       我在原有的代码基础上,重新设计一个全新的架构,这个架构主要加入了子内核的概念。

以上三点,最后一点,即全新的架构,才是我们这次关注的,前面两点,以后再加于介绍。

先看架构图,如下。

上面这个图可以分为如下几层,如下:

1.       用户层,用户应用进程和应用程序相关库。

2.       API层,LMOS内核的API

3.       API接口对象管理层,把相应的API传给相应的子内核,并管理子内核的API对象。

4.       内核层,这里将有许多子内核对象,还有物理内存管理器、中断管理器、初级设备管理、底层接口、子内核管理器。

5.       Hal层,分离硬件相关层。

6.       硬件层,所有的物理硬件。

         除内核层外,其它层相对直观易懂。我们来仔细看看内核层,通过上图和上面的介绍。知道内核层中有:物理内存管理器、中断管理器、初级设备管理、底层接口、子内核管理器、许多子内核对象。下面分别介绍他们。

         1. 物理内存管理器

         内存是所有程序包括内核本身,运行的基础。所以要合理管理使用。而物理内存管理器,就是管理计算机内的所有的物理内存。利用了新的算法,可以高效分配、释放大块连续的内存,并向其它组件开放接口。内核的其它组件要使用内存,直接调用这些接口。例如进程管理组件,需要分配进程描述符,分配进程的栈等……虚拟内存管理组件最终还是要获取物理内存的……而这些仅仅只需要调用物理内存管理器的接口即可。

         2. 中断管理器

         中断虽说是异步事件的通知信号,但是从另一种角度来看的话,它也是运行内核代码的开始入口。中断管理器负责管理所有物理中断,它能准确知道系统内有多少个中断源,只哪个中断源上来了中断,如何开启或者屏蔽它们,并向其它组件开放接口。内核其它组件只要调用其接口就行,例如内核要响应某个中断,只要向中断管理器注册一个回调函即可,当中断产生时中断管理器会自动调用该中断上的回调函数。有时可能要禁止某些中断,也可以使用中断管理器的接口。

         3. 初级设备管理

         操作系统最重要的任务是管理好计算机内各种各样的设备,但是这里的初级设备管理,并不对设备进行任何抽象,只是表明系统内有多少个设备,它们占用的资源,以及设备的热拔插。初级设备管理上层内核其它组件提供接口。例如上层子内核内的设备管理组件可以用这些接口,获取系统内所有的设备及设备所占用的资源情况,从而为这个设备加载设备驱动程序。还可以向它注册回调函数,响应设备的热拔插机制。

         4. 底层接口

         这个非常简单,就是一些共用函数,被所有其它组件使用,例如:自旋锁、信号量、读写寄存器等。

         5. 子内核管理器

         子内核管理器,专门用于管理子内核对象的(子内核对象见下面),每个子内核对象必须要向子内核管理器注册和向API接口对象管理器注册API接口对象,然后子内核管理器调用子内核对象的初始化程序。子内核管理器还可以卸载停用某个子内核对象,当然动态加载也是可行的。

         6. 子内核对象

         我们把传统操作系统内核里的所有组件,进行稍稍改进一下,封装成一个大模块,这个大模块就称为子内核对象。这个子内核对象完全保留传统操作系统内核的功能,只是它不需要管理物理内存,不需要写中断处理代码,只需要调用这些接口和注册回调函数即可。就像上图中LMOS子内核对象一样,它只要实现虚拟内存管理组件即可。它的设备管理组件也不需要扫描物理设备,而是调用初始设备管理器提供的接口。对于编写子内核对象的人,只要明白这些接口就行了。

         基于上面这些想法,不难发现只要把linux内核稍稍改动一下就能以子内核对象的形式加载到LMOS中运行,为上层应用提供服务。也可以同时加载多个不同的子内核对象。当然我们熟悉这些接口后完全可以自己构建一个全新的子内核对象,比如你认为LMOS子内核对象是渣渣,你完全可以用你的子内核替代它。当一个子内核对象出现问题时,我们还可以停用它,这是不是美多了。

         最后,还是那句话,我会以自由、实干、开放、平等的精神,和大家一起把LMOS玩下去,记住我们不是为了商业利益,我们不需要和别人比性能、比安全、比实用、比用户,我们只是出于学习,出于过过瘾的目的,只要不放弃,把一个过过瘾的产物,做好,做强,也是一件伟大的事情。

阅读(5160) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

lmnos2014-06-13 10:26:37

xzongyuan:牛叉,学的好快。什么时候出书阿?

反正今年吧,嘿嘿

回复 | 举报

xzongyuan2014-06-12 13:42:33

牛叉,学的好快。什么时候出书阿?