小型微内核操作系统内核模型设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 引言
微内核操作系统的开发是基于LINUX系统平台的,而不是基础window平台的,具体原因就设计到LINUX作为操作系统相对于其它操作系统的优点和特点,比如多任务、多平台、开源、GNU软件的支持、费用低等。基于种种优点,使得LINUX方面的技术发展非常迅速,也更全面,由于它是开源的,我们可以免费在网上下载到最新的和需要的版本软件,同时也可以把自己的成果在网上发布,供大家分享,出现什么问题或者有什么好的建议,我们还可以交流,就是在这样的趋势下,LINUX朝着更好的方向发展,我们的个人能力也在不断的提高。
2. 需求分析
小型微内核操作系统模型的设计与实现主要是为了LINUX内核编程方面的爱好者提供了一个学习和交流的设计模型。在这个模型上,我们可以看到内核平台模型的模块结构,应用的语法等。微内核操作系统模型提供的模块包括操作系统引导模块、屏幕显示控制模块、键盘输入模块、TTY控制模块、中断与陷阱模块。
2.1 操作系统引导模块
我们知道仅仅是写一个启动扇区并将其放入软盘镜像的合适位置。由于启动扇区 512 字节的大小限制,我们仅仅能写入像打印一个字符串这样的非常简单的程序,这也太小了,很显然的是我们要利用其它的扇区,将程序保存在其它扇区,运行前将其加载到内存后再跳转过去执行。要把程序存储到软盘上,可能最直接最容易理解的存储方式就是顺序存储,可能这样需要的工作量最小,在启动时操作系统仅仅需要序列地将可执行代码拷贝到内存中来继续运行。可是经过简单的思考我就可以发现这样做有几个缺陷:1. 软盘中仅能存储操作系统程序,无法存储其它内容;2. 我们必须使用二进制拷贝方式来制作软盘镜像,修改系统麻烦。
引入文件系统可以让我们在一张软盘上存储不同的文件,并提供文件管理功能,可以让我们避免上述的两个缺点。在使用某种文件系统对软盘格式化之后,我们可以像普通软盘一样使用它来存储多个文件和目录,为了使用软盘上的文件,我给启动扇区的代码加上寻找文件和加载执行文件功能,让启动扇区将系统控制权转移给软盘上的某个文件,这样突破启动扇区 512 字节大小的限制。
有了FAT12文件系统的相关知识之后,我们就可以跨越512字节的限制,就可以从文件系统总加载文件并执行了。
2.2 键盘输入模块
键盘输入模块:主要就是实现操作系统的键盘输入功能。
敲击键盘有两个方面的含义:动作和内容。动作可以分解成三类:按下、保持按住的状态以及放开;内容则是键盘上不同的键,字母键还是数字键,回车键还是箭头键。所以根据敲击动作产生的编码,8048既要反映“哪个”按键产生了动作,还要反映产生了“什么”动作。
敲击键盘产生的编码被称为扫描码(Scan Code),它分为Make Code 和Break Code两类。当一个键被按下或者保持住按下的状态时,就会产生Make Code,当键弹起时,产生Break Code。出了Pause键之外,每一个按键都对应一个Make Code和一个Break Code。
对于输入和输出缓冲区,可以通过in和out指令来进行相应的读取操作。也就是一个in al,0x60指令就可以读取扫描码,我们还要建立一个缓冲区,用来放置中断程序收到的扫描码。
typedef struct s_kb {
char* p_head; /* 指向缓冲区中下一个空闲位置 */
char* p_tail; /* 指向键盘任务应处理的字节 */
int count; /* 缓冲区中共有多少字节 */
char buf[KB_IN_BYTES]; /* 缓冲区 */
}KB_INPUT;
2.3 屏幕显示控制模块
屏幕显示控制模块:把我在程序中要在屏幕上输出的内容正确显示出来,并且按照我在程序中设置好的格式输出。另外当我在键盘中输入不同的字符的时候,屏幕能够立即响应并能正确顺序显示我的出入。当屏幕内容充满之后,屏幕还能自动向下滚动,以能够显示并能控制我当前是输入。
2.4 TTY控制模块
不同的TTY对应的输入设备是同一个键盘,但是输出却好比在不同的显示器上。在TTY中执行一个循环,这个循环将轮训每一个TTY,处理它的事件,包括从键盘缓冲区读取数据,显示字符等内容。如图2-1
图2-1 TTY任务示意图
基于TTY多任务的考虑,我新建了两个结构体,分别表示TTY和CONSOLE,从TTY缓冲区中取出键值,然后用 out_char 显示在对应的CONSOLE中。
2.5 中断与陷阱模块
中断通常在程序执行时因为硬件而随即发生,它们通常用来处理处理器外部的事件,比如外围设别的请求,而异常则通常在处理器执行指令过程中检测到错误时发生,比如遇到零除的情况。我知道如何
小型微内核操作系统内核模型设计与实现
陈云龙
(南京晓庄学院 计算机科学与技术系,江苏 南京 211171)
摘要:微内核操作系统模型为操作系统教学提供了基本功能和应用需求,同时也是学习操作系统模型的基础。为实现微内核模型特设计了一个运行在VMWARE虚拟机上的微内核结构的小型操作系统模型,简单描述了键盘输入模块、屏幕显示模块、中断模块和TTY控制模块等的设计与实现。本系统模型的设计与实现将有利于从微观上观察操作系统的行为特征,更好地学习、理解和实践微内核机制。
关键词:VMWARE;微内核;模型;GNU;AT&T
中图分类号:TP302.1 文献标识码:A 文章编号:1003-9767(2011)05-0080-02
(下转第82页)
新和删除等相关操作。但注册用户的权限除系统管理员外也只可以对自己管辖范围的档案进行删改等操作。
2.2 系统的功能特点
该系统有三个特点:一是系统操作简单。由于该系统是完全控件式页面布局结构,企业档案的录入工作变得更加简单。很多选项都可以通过鼠标点击完成,此外跟踪提示信息还可以使用户掌握操作情况。二是系统功能完善。企业常见的涉及档案管理的新建、浏览、删除、修改、查询等所有方面,都可以完全实现及时管理的要求。三是系统方便移植。企业可以针对不同业务和部门,稍加修改后形成适合本部门特点的网站式档案管理系统。
3. 系统的数据库存储层设计
数据库存储层设计的主要工作是建立数据库表结构和相关的存储过程。
第一步是建立一个全局数据库,接着建立访问用户,最后建立数据库表。
存储过程安装在两个Oracle 包中:分别是RND (产生随机数)和DAGL_LOGIC (业务逻辑层函数)。
4. 系统的业务逻辑层设计
业务逻辑层设计分为两部分:一是对系统实体类的定义,二是对存储过程的封装。
系统实体类定义的设计思路如下:
按每一张数据库表建立一个相应的实体类,一个实体集合类和一个数据库访问类,命名方法为:
数据库名称 DAGL_XX_XXX 实体类名称 CDAGL_XX_XXXObj 实体集合类名称 CDAGL_XX_XXXObjs 数据库访问类 CDAGL_XX_XXXAccess 它们彼此之间的关系如图2所示:
5. 界面处理层设计
界面处理层的设计主要针对系统的外观和功能分布。根据模块化的设计思想可以将界面层分部分处理:
界面框架结构:包括用户登录信息和系统菜单区、功能菜单区和功能操作区。
图2 业务逻辑层关系
公用控件:包括日期选择控件、用户控件、列表控件。
WebForm 类:在系统中占有绝大多数内容,实现系统中的大部分功能。
系统中为数据库中的每一张表都生成了四个页面。分别为:Insert .Aspx ——编辑数据记录页面List .Aspx ——列表页面Serach .Aspx ——系统搜索页面Detail .Aspx ——根据需求产生报表页面客户端脚本客户端ActiveX 控件客户端图片静态的HTML 页面
通过以上步骤,我们就可以设计开发出适合企业的档案管理系统,实现企业档案的动态管理,提高企业的工作效率。
参考文献:
[1]《 完全入门》.重庆出版社,2008
[2]《 技术内幕》.王文龙 刘湘宁译.人民邮电出版社,2007[3] 张丽军. 档案管理系统的设计与实现[D]天津大学, 2006[4] 章立民著.《用实例学 》.电子工业出版社.2004
在磁盘上寻找一个文件,但是不知道如何将磁盘上内容读取到内存中去,我之前写的启动扇区不需要自己写代码来读取,是因为它每次都被加载到内存的固定位置,计算机在发现可启动标识 0xaa55 的时候自动就会做加载工作。但如果我们想自己从软盘上读取文件的时候,就需要使用到底层 BIOS 系统提供的磁盘读取功能了。这里,我们主要用到 BIOS 13h 号中断。
3. 结束语
文中设计并实现了一个基于VMware Workstation 虚拟机的微内核结构的操作系统. 该系统在保持简化性的前提下展现了一个真实操作系统的工作原理与机制,并且保持了一定的可扩展性。
参考文献:
[1]《Linux 内核完全注释》 赵炯编著 机械工业出版社,2005
[2]《Linux 0.01内核分析与操作系统设计》卢军 编著 清华大学出版社,2004
[3]《Operating systems: Design and Implementation 》 Tanenbaum,A.S. 等著 清华大学出版社,2006
[4]《操作系统—内核与设计原理》 魏迎梅等译 电子工业出版社,2003
[5]《80X86汇编语语程序设计》杨季文等 编著 清华大学出版社,1999
[6]《自己动手写操作系统》于渊 编著电子工业出版社,2005
(上接第80页)