摘 要: 微内核操作系统模型为操作系统教学提供了基本功能和应用需求, 同时也是学习操作系统模型的基础。为实现微内核模型特设计了一个运行在VMWARE虚拟机上的微内核结构的小型操作系统模型,简单描述了键盘输入模块、屏幕显示模块、中断模块和TTY控制模块等的设计与实现。本系统模型的设计与实现将有利于从微观上观察操作系统的行为特征, 更好地学习、理解和实践微内核机制。
关键词:VMWARE; 微内核; 模型; GNU; AT&T
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《自己动手写操作系统》于渊 编著电子工业出版社,2005