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

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

文章分类
文章存档

2015年(2)

2014年(16)

2013年(18)

2012年(17)

分类: LINUX

2012-09-22 10:45:13

      操作系统大家可能很陌生,也可能不陌生。不陌生的原因是现在几乎每个人每天都在和操作系统打交道,不是和计算机上的操作系统打交道,就是和手机的操作系统打交道。陌生的原因是,大家可能被她那华丽的用户界面遮住了双眼,以至于看不到她
那神秘的身形。可是这个神秘的她究竟在幕后操控着什么,干了些什么坏事、什么好事,她好像掌控着计算机的一切。谁也逃不掉,包括使用计算机的我们,除非你不使用计算机。于是我就带着一份好奇,认真的研究了她,并亲自用代码实现了一个真正
可以在x86物理机器上正常运转的内核。并且具备现代意义操作系统的大部分特性。大家可能觉得我很傻,是的,我自己也这样认为的,不仅傻而且有些“神经”。因为现在软件的主题是,高层框架及应用。很少有人去研究这些底层核心的基础软件。
但是有两点不管大家认不认同,我是认同的,第一如果没有基础软件,什么框架,什么应用都是空谈。第二我如果去搞框架、应用,那么我将永远无法知道这些底层的细节。
      关于我的LMOS,还是从我的操作系统梦开始说起。

关于我的操作系统梦
      这个梦想发源于2008年初, 那时候我刚刚接触C语言,因为我喜欢计算机编程。我像很多人一样,在我的计算机上写了这样一个程序:

点击(此处)折叠或打开

  1. int main()
  2. {
  3.     printf(“hello world!”);
  4.     return 0;
  5. }

       我想这个程序很多人都写过,当我编译运行时,计算机屏幕上出现了hello world!。说实话我当时并没有大多数人第一次成功运行时的惊喜,相反给我一种奇怪的感觉,显然这个程序完成输出hello world!功能的主要函数是printf()。可是这个函数哪儿来的,在我的程序中从来没有实现过。我当时就奇怪啊,最后我通过Google知道了答案,这是个库函数,它最终会调用操作系统的。这个答案顿时让我的心情一落千丈,甚至很伤心,因为在我的想像中,我的代码应该是能控制计算机所有的行为
的。不过还好,我知道了我的计算机里存在着操作系统,就是它在控制着我们的计算机。接着,我又Google了C语言的历史,因为我想知道我学了它究竟能干点什么。于是我发现了UNIX,咦,UNIX是何物,平日周围玩计算机的朋友们嘴里都叨唠着什么
windows 2000啦、windows xp啊。进一步Google才发现UNIX是一个非常伟大的操作系统,并且还让我知道了,开发C语言那两位科学家开发C语言就为了写UNIX系统。啊!这个答案让我的心情畅快了不少,也正是这个答案,在我的心中埋下这样的
一个梦。

关于我的操作系统
       我在经过了三年的学习之后,先后学习C,x86汇编,数据结构,编译原理,操作系统理论以及硬件体系结构方面的资料后,我的操作系统旅程开始了……最初只是为了满足一下自己的求知欲,好奇心,只是为了过过瘾。后来我就想为什么不把自己过瘾的成果拿出来分享呢,想到这里我废弃了我写了三个月所有的代码。从安全、稳定、性能、及可扩展性和可维护性方面进行了全面的考虑和全新的设计。确切的说这不是一个完整的操作系统,只是一个操作系统内核。我给这个刚刚起步的内核起了个名字即LMOS,L,liberty也,为什么不是free这是有原因的……我是一个向往自由自主的人,当然是精神上的自由,比如让别人的代码控制我的计算机我就不开心了……M,madness也,我觉得吧,一个人写操作系统内核确实让人感觉是一件很疯狂的事,但就算疯狂我也觉得自豪。这也可能是我自我感觉良好吧。
       LMOS内核有什么特性呢,大家首先看看总框架图吧,别人说一图解千言。

  
       首先简单说一下LMOS内核的特性,LMOS内核包括了进程管理、内存管理、文件管理和IO管理将来可能会加入电源管理。由于它只是个内核,所以暂时没有考虑用户操作接口,应用软件编程接口,等我完善了驱动程序框架后,我会对外公开应用
软件编程接口,和驱动程序编写接口。
进程管理
       下面我们就来说说LMOS内核的进程管理器的特性,大家先请看图:

  
       进程的提出要回到上世界50年代,它是个非常重要的概念,是操作系统内核实现多任务的重要机制,是对一个运行时程序的资源集合的抽象。我曾天真的想提出一种全新的机制,但是我没有想出比这更好的了。每个程序要运行LMOS都为此程
序创建一个进程,在这个进程内部LMOS会创建一个默认的线程。当然一个进程可以有更多的线程,是的,LMOS是一个多进程多线程的内核,事实上LMOS的CPU调度器,调度的基本单元是线程而非进程。至于为什么要提供多线程的机制,请大家
看看相关文档。大家伙儿,大可以这样认为操作系统内核对进程线程的管理,就是对计算机的CPU进行管理。LMOS内核最多支持8线程的CPU,为什么不是8核、8颗,这是有区别的,因为现在一颗CPU可以有多个核心每个核心又可以有多个线程,一
搬是一核有两个线程,前提是该CPU核支持多线程。当然一个CPU核至少可以运行一个线程。更多细节请参阅intel超线程技术和SMP规范。如果大家觉LMOS支持8线程的CPU少了的话,可以和我交流,我只需要改变这个宏#define LMOS_CPU_MAX_NRS 8 就行了。至于调度算法嘛,采用的是动态优先级的算法,这个以后我以后会改进的。
内存管理  
       每个现代意义的操作系统内核都必须对内存进行高效的管理,内存是所有软件包括内核运行时不可缺少的资源。一个内存管理器是否高效健壮,将直接影响整个操作系统的效能和安全。大家先看看内存管理器的框架图吧:

 
        LMOS内核是一个基于intel x86平台的全32位内核,所以最多支持不超过4GB的物理内存。将来我可能会开发64位的内核。LMOS内核的物理内存管理是基于CPU分页机制的,CPU的MMU部件通过页表把CPU的虚拟地址映射成物理地址的。但是
intel x86 CPU 必须先经过分段在才能分页,实际上我的LMOS内核采用的是平面分段模型,这就轻松的绕过CPU的段机制,直接应用分页机制。这算是把CPU忽悠了一把。事实上有了分页,分段是多余的。intel这么做是为了兼容,为了兼容又何
只一此,比如那丑陋的A20地址线、那排的乱七八糟的段描述符。最让我沮丧的就是那个TSS任务状态段。LMOS内存管理算法是采用SUN公司(我是个怀旧的人)提出的伙伴系统算法。这个操作系统理论书籍上也有介绍。非常优秀的算法,linux
内核也是采用这种算法,说到这里,本人郑重申明:我的LMOS内核没有抄袭任何开源操作系统的一行代码,甚至一个字符。
IO管理
       IO实际上是一个非常重要的,我很难想像一操作系统不能处理IO,它还能叫操作系统吗。别看操作系统理论书籍上花大量的篇幅讲解进程,IO只是很少一部分,当你实际去实现一个可以运转的操作系统的时候,相信我你一定会发现,实现IO
的代码量比实现进程代码量,多出不只一个数量级。大家同样先看图:

  
       想要对计算机中令人眼花缭乱的IO设备进行标准一致的管理,就需要层层抽象。因为每个IO设备的特性都不一样,它们的功能、速度、存在的形式、以及对操作它们的方式都千差万别。搞那么多抽象层,当然不是无聊,就是为了在不同的层中屏
蔽它们各自的差异。暂时也没可以什么新特性可以向大家介绍,因为IO框架还待完善。
文件管理
        LMOS内核的文件系统是一个基于B*树的数据结构的,我还在开发之中没有完成不过我一定会完善它的,请大家试目以待。有图为证:


关于我的操作系统开发使用的工具链
       LMOS内核开发大概有10%的纯汇编代码,5%的嵌入式汇编代码,85%的C语言代码,总共4万多行。纯汇编代码是用NASM编译的,因为我不喜欢GAS的汇编语法,有时常常出错,C语言代码是用GNU的GCC,链接工具也是GNU的LD。感谢这些优秀的工具,没有它们我的LMOS内核也只能是代码。GCC编译器确实很强大,代码优化也算好,提供了许多扩展特性,还有它的后端支持许多CPU,这个世界很难在找出这么优秀的编译器了。一开始我想开发一种全新的编程语言,它应该包括C的所有特性,但是比C还更接近于硬件,然后用这种语言去实现我的LMOS。后来我父亲说你神经病啊,是啊一个人写系统内核已经很疯狂了。
关于LMOS是否开源
       首先我开发操作系统内核,一是出于一种求知欲,怀揣着好奇,秉着对计算机的热爱。二是我是一个脑瘫患者,无法向正常人一样生活、工作。整日在家除了用计算机上上网,就喜欢捣鼓计算机了。读书不多,由于身体原因只念到初中。好了说正经
的,开源这事儿,等我代码比较成熟之后我会考虑的,不是现在,代码太烂我怕高手们会笑话。
关于LMOS的维护
       我会平均每个月更新一次,不断的完善,不断的加入新的特性,直到可以实际应用为止,目前还不能完成任何功能,LMOS只能初始化并启动计算机,shell进程只能简单响应用户键盘输入,不能做任何事情。但是我说过,我一定会不断的完善LMOS,
直到可以使用。还望大家给予支持和关注。
        LMOS会在2012.10.1放出二进制文件和虚拟硬盘镜像和大家见面!!
阅读(20187) | 评论(33) | 转发(3) |
1

上一篇:没有了

下一篇:关于LMOS内核的架构

给主人留下些什么吧!~~

leon_yu2012-09-24 11:16:45

你不仅不是废人,而且是比很多人优秀的才子。我搞软件四五了,让我写系统我也搞出来。
但是我觉得呢,技术知识混饭吃的,能换钱才有意义,因为我们都是凡人,不是要成为科学家。所以学些有经济效益的会更好。

GFree_Wind2012-09-24 11:11:24

无论这个软件有多么简陋,多么难用,但是只要它的名字叫做“操作系统”,就带上了一个光环。
任何一个可以独立写出操作系统,并且明白原理的人,都是下过苦功夫的人。
佩服!

lmnos2012-09-24 10:21:29

Jiker4836: 真的很厉害,我听说有一个清华本硕博搞科研的博士也是有着想做操作系统的梦想,但是一直都没有做成。你真的很厉害,我很期待你的源代码。.....
谢谢,我会考虑的,还是希望您在十.一下载我的硬盘映像或者二进制文件,虽然没任何功能,但可以先识一下它是个什么玩意儿

Jiker48362012-09-24 09:45:53

真的很厉害,我听说有一个清华本硕博搞科研的博士也是有着想做操作系统的梦想,但是一直都没有做成。你真的很厉害,我很期待你的源代码。

lmnos2012-09-24 09:25:58

leon_yu: 牛人啊,敬佩!!!
另:要是你说的你个人情况属实的话,建议你玩玩应用层啊,像IOS,android都是可以来钱的。不去公司上班,自己搞底层,难有经济收入啊。.....
你说对,我的很多朋友也是这么说,可我的情况是,我不能去上班,这些东西都是我自学的,书也只念到初中,从我描述中你应该感觉到了,其实我是个废人……