Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103876
  • 博文数量: 10
  • 博客积分: 1685
  • 博客等级: 上尉
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-13 23:11
文章分类
文章存档

2012年(1)

2010年(1)

2009年(2)

2008年(6)

我的朋友

分类:

2008-12-31 15:42:28

杭电老师编写的ARCHIMEDES(阿基米德)操作系统源码发布
关于《ARCHIMEDES (阿基米德)操作系统》源代码发布的说明
杭州电子科技大学计算机学院 俞岳军(昵称:火光、智慧的火光)
操作系统 ARCHIMEDES,是一款基于INTEL X86系列CPU、工作在386保护模式下、单任务、字符方式的操作系统
 
一.版权申明:
        1.本系统ARCHIMEDES的系统构架和全部源代码是由作者一人实现的
        2.读者可将本系统源码用于学习、交流
        3.如要将本系统的全部或部分算法或源文件引入论文,必须注明来源
        4.如要将本系统的全部或部分算法或源文件或可执行文件用于商业目的,必须注明来源
 
二.和先前操作系统的渊源
        1.本人阅读过UNIX LEVEL SIX (JOHN LIONS)版本的全部源代码
        2.本人阅读过LINUX0.0.1的全部源代码
        3.本人阅读过LINUX2.0.0的大部分源代码
 
三.朋友们的帮助
        1.通过oldlinux 论坛,从赵炯博士那里学到了有关GCC、AS、LD等工具的使用方法
        2.感谢lgj1107朋友,帮我解决了困扰多时的、启动中的一个小问题
        3.感谢谢锦滨朋友,在实现ELF格式文件装入模块时,曾经阅读过他的CNIX中的相关片段
        4.感谢于渊朋友,在实现ELF格式文件装入模块时,曾经阅读过他书中的相关片段
        5.感谢谢煜波朋友,在实现鼠标驱动时,曾经阅读过他写的相关文章
        6.感谢我的同事王大全、张桢老师,在和他们的交流中,不知不觉的增长了知识
 
四.本系统已实现的功能:
        1.显示驱动(字符方式  80 X 25 彩色, 图形方式 VGA 640 X 480 16色)
        2.键盘驱动
        3.硬盘驱动
        4.软盘驱动
        5.串口驱动
        6.鼠标驱动
        7.硬盘上支持类似EXT2的文件系统,但表现得象DOS下的驱动器,有 A:C:D:E:…
        8.软驱上支持FAT12文件系统
        9.用上面的这些功能,构建了自己独立的系统调用
        10.用这些系统调用实现了命令解释SHELL
        11.现在已经实现这些内部命令:DIR、MD、RD、CD、CLS、COPY、DEL、盘符切换(A: C:等等)
        12.已能够支持ELF格式可执行文件
        13.以上这些,已经通过编写应用程序来验证:字符80 X 25 和图形 640 X 480显示模式的流畅切换,鼠标的快速移动…结果是令人满意的
 
五.存在的不足之处:
        1.没有自动读取CMOS设置的功能,因此,目前系统不通用,现在是在杭州电子科技大学计算机组成实验室的那批2001年进的PC机上试验的
        2.硬盘不能太大,否则,目前的命令块方法表示不来的,会出错的。而对大硬盘的命令块方法尚没有研究
        3.在用内部命令进行COPY文件时,曾经出现过错误,没有进一步探索原因,主要的问题就是硬件的资料不足
        4.上了图形VGA模式后,系统会偶然重新启动的,主要的还是因为硬件资料不足的
        5.带参数的内部命令尚不支持
        6.字符显示模式(80 X 25)和图形显示模式(VGA 640 X 480)之间的切换,其内部实现其实是假的,这里是拦截了INT 10H的系统调用,用单步跟踪记录了所有的IN、OUT命令,然后仿真实现显示模式切换的
        7.源程序没有注释,很遗憾,将来会慢慢加上的
        8.不能自动安装
总而言之,目前遇到的最大的困难就是硬件资料不充分。
 
六.本系统源代码的目录结构
 1.APP_DIR           应用程序子目录
 2.BOOT_DIR          引导子目录
 3.BUFFER_DIR        缓冲管理子目录
 3.COMMON_DIR        公共管理子目录
 4.EXEC_DIR          可执行文件装入子目录
 5.FD_DIR            软盘驱动子目录
 6.FS_DIR            硬盘文件系统子目录
 7.HD_DIR            硬盘驱动子目录
 8.INCLUDE           头文件子目录
 9.INIT_DIR          系统初始化子目录
 10.INODE_DIR        文件节点相关子目录
 11.KEYBD_DIR        键盘子目录
 12.MEM_DIR          内存管理子目录
 12.MOUSE_DIR        鼠标驱动子目录
 13.MSDOS_DIR        软盘文件系统子目录
 14.RAWFD_DIR        原始读写软盘子目录
 15.SCREEN_DIR       显示子目录
 16.SERIAL_DIR       串口子目录
 17.SHELL_DIR        命令解释子目录
 18.SYSCALL_DIR      系统调用子目录
 19.TIMER_DIR,       定时器子目录
对一般读者来说,BOOT_DIR、INIT_DIR、SYSCALL_DIR、INCLUDE这四个子目录特别有意义。
BOOT_DIR下含有BOOT0、BOOT1、BOOT2
BOOT0、BOOT1主要做正式启动前的预备工作,用单步跟踪的办法,把INT 10H的执行过程记录下来,以便将来实现显示模式切换时做“伪系统调用”
BOOT2是正式的启动模块,把本系统装入内存中去,最后初步进入保护模式,同时把权力提交给HEAD.S
INIT?_DIR下最根本的文件就是HEAD.S和MAIN.C
HEAD.S是本系统的正式的“头”,在这里进行后续的保护模式环境初始化,然后,把控制传给MAIN.C
在MAIN.C里面对各种外部设备进行初始化,设置对应的中断向量,最后把特权级由
0级转成3级,开中断,然后由SHELL也解释执行用户的命令
SYSCALL_DIR下含有所有系统调用的总散转,而各外部设备的驱动程序是分散在各个外部设备的子目录中的
INCLUDE下含有所有用到的头文件读者可以从 BOOT_DIR、INIT_DIR、SYSCALL_DIR、INCLUDE。。。的顺序进行学习
其实,这也是系统启动执行的顺序
 
七.做这个论坛的目的
        本人原来是学地质的,后来改学计算机,一直对计算机很有兴趣,对操作系统很有兴趣,花了很多的时间,终于把它搞个大致明白,自己动手设计了这个386保护模式下的、单任务、字符方式的OS——ARCHIMEDES(阿基米德),实在是好辛苦!
        目前,计算机操作系统的教学,还是象当初AST(塔嫩鲍拇)写MINIX一样的,很困难的,学生学了操作系统这门课程,总感到是在读大段大段的文字,很无味,多数学生并没有从中得到教益。他们也知道操作系统很重要,WINDOWS、LINUX,计算机需要这些系统软件才能跑起来,但如何把这些实际的操作系统和操作系统课程联系起来,显的很困难,
感到似乎是两件不同的事物。
        应该有个实验教学环节,让学生有可阅读学习的操作系统,有自己动手的机会。
        WINDOWS不是个好的学习的对象,它的源代码根本就不公开的,公开了又能怎么样?这个系统太庞大了,学生是学不过来的,要学也只能学点边角。
        UNIX也一样,也是不公开源代码的。
        MINIX呢?本来就是为教学而设计的,但这个系统和实际的操作系统距离太大了,运行效率是很低的。
        LINUX呢?早期的代码是LINUS自己写的,质量比较高,读起来容易些,现在的版本就不太好了,代码质量大大下降,很难阅读,规模又太大,虽然这是个开放源代码的典范,但估计很少人能够从这个开放中受益的。
        所有这一切表明,我们需要有个另外的选择。
        ARCHIMEDES系统就是这样一种选择。
        本人是完全凭着兴趣,写了这个系统。
这是个工作在386保护模式下的、单任务、字符界面的操作系统,象是DOS的保护模式版本。实际上作者就是以DOS为模板来设计这套系统的。
        有的朋友希望以最现代的、最流行的操作系统的源代码作为学习的对象,认为这样学了
马上能用。这个想法是不妥当的,实际上最新的操作系统往往太庞大、太复杂了,一般的人是无法一下子拿下的,这个门槛太高,你是不容易跳过去的,反倒是影响了自己的信心。
        有人迷信多任务系统,但正如AST所说,操作系统的难度不在进程管理、内存管理上,
其难度主要是在设备管理和文件管理上面。
        对一般的新学者,找个简单一些的,容易上手的目标系统是最合适的。让自己不断的能有收获、能有进展,自己的学习尽头就越大。
        ARCHIMEDES系统简单,将来加上全套中文注释,配套的图例,阅读起来就会相对容易的多。学生可以对ARCHIMEDES源代码学习为主线条,把过去学过的课程联系起来:C语言、数据结构、汇编语言、计算机组成、接口通讯、编译原理、操作系统原理、计算机体系结构。还可以主动的去学习一些学校一般不开设的课程:386保护模式编程,计算机实用外设(显卡接口、硬盘接口、软驱接口、键盘接口、鼠标接口、串口接口、中断控制器8259、DMA控制器8237等等),这样一来学生很快就对计算机系统有了一个整体的认识了。
        本人做这个论坛,还有个私下的想法:
        通过这个论坛的运作,把那些对计算机低层操作有浓厚兴趣的学生啊、外面的程序设计员啊,团结起来,群策群力,一起来研究发展系统软件。
        特别欢迎对数学、计算机、英语有天赋的人才,一起来研究。
        本人在编写这个系统的过程中,最大的苦恼就是硬件资料的缺乏,本人的英文不太好,只好看中文资料,看LINUX源代码,拼命的挖掘,写小程序进行测试,有时候真是苦恼。有精通英语的人才的加盟,问题就简单多了,英文网站上的资料是很丰富的,实在没有办法,可以给厂商直接写信。
        可以团结起来,把ARCHIMEDES的各个部分完善,显示驱动、键盘驱动、鼠标驱动、
硬盘驱动、软盘驱动、串口驱动,都不同程度上存在着不足之处,根本的原因就是缺乏原始的硬件资料,许多地方不得不用 while(1) 来应付出错处理。
        把386保护模式下的指令系统彻底搞定、把协处理器彻底搞定、把MMX彻底搞定、把
各类显卡的工作机理彻底搞定、把硬盘彻底搞定、把软驱彻底搞定、把键盘彻底搞定、把鼠标彻底搞定、把串口彻底搞定、把网卡TCP/IP彻底搞定。
        那个感觉一定很好!
        这个时候,可以把TCP/IP协议栈融合进ARCHIMEDES中去,可以在ARCHIMEDES上实现高分辨率图形显示模式。
        可以在上面研究图形学算法,因为这是一个单任务OS,在掌握了对智能显卡的控制后,
跑的复杂图形程序肯定会比当前的OS快的,毫无疑问的,这可以充分发挥计算机的性能。

        把计算机的外部设备接口啊、386指令系统摸透了,我们就可以研究多任务、图形方式的操作系统,就是另一种WINDOWS。
        还可以把PC机上的操作系统实现方式,应用到嵌入式系统上去,不是做“移植”,而是做对应CPU类型的“重新编写的OS”,这个效果估计会比移植的OS好很多的。
       
        面对急速发展的世界,感到压力重重。
        我们要运用自己的最高智慧,使出浑身的解数,拿出全套的本领,来从事研究工作。
        否则,真是不可想象
阅读(1698) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~