- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《GeekOS操作系统》
课程设计说明书
题 目: GeekOS操作系统的研究与实验
学 院: 计算机科学与工程学院
专 业: 信息安全
姓 名:
学 号:
指导教师:
2015年 06月 12 日
目 录
1 GeekOS简介 1
1.1 GeekOS 系统源代码结构 1
2 课程设计环境 2
3 项目0的设计实现 3
3.1项目设计目的 3
3.2 项目设计要求 3
3.3 项目实现原理 3
3.4 项目实现过程 3
3.5 运行结果 5
4项目1的设计实现 6
4.1项目设计目的 6
4.2 项目设计要求 6
4.3项目实现原理 6
4.4项目实现过程 8
4.5 运行结果 9
5 项目2的设计实现 10
5.1项目设计目的 10
5.2项目设计目的 10
5.3项目实现原理 11
5.4项目实现过程 13
5.5运行结果 23
6 遇到问题及解决方法 23
7 课程设计总结 24
1 GeekOS简介
GeekOS是一个基于X86架构的PC上运行的微操作系统内核,由美国马理兰大学的教师开发,主要用于操作系统课程设计,目的是使学生能够实际动手参与到一个操作系统的开发工作中。出于教学目的,这个系统内核设计简单,却又兼备实用性,它可以运行在真正的X86 PC硬件平台。作为一个课程设计平台,GeekOS由一个基本的操作系统内核作为基础,提供了操作系统与硬件之间的所有必备接口,实现了系统引导,实模式到保护模式的转换,中断调用及异常处理,基于段式的内存管理,FIFO进程调度算法以及内核进程,基本的输入输出(键盘作为输入设备,显示器作为输出设备),以及一个用于存放用户程序的只读文件系统PFATLinux或Unix环境下对其进行功能扩充,且其针对进程、文件系统、存储管理等操作系统核心内容分别设计了7个难度逐渐增加的项目供学生选择 。
1.1 GeekOS 系统源代码结构
GeekOS操作系统源文件geekos-0.3.0.zip可以从下载。
图 1.1 GeekOS系统主目录
在doc目录里的文件hacking.pdf和index.htm是GeekOS系统的参考文档。Scripts目录下有startProject和removeEmptyConflicts两个脚本文件。GeekOS系统的源文件在src目录下,分为7个项目:Project0到Project7。在build文件夹中,包含系统编译后的可执行文件的文件、软盘镜像或是硬盘镜像、makefile项目管理文件。在include文件夹中有GeekOS和libc两个子目录,在GeekOS子目录中有kthread.h、keyboard.h等文件。
图 1.2 项目文件结构图
2 课程设计环境
1. 虚拟机软件:VMware Workstation 10.0。
2. 虚拟系统:linux系统 CentOS 6.0。
3. NASM汇编器。
4. GNU gcc编译器。
5. GNU gdb调试器。
6. Sourse Insight:程序编辑器和代码浏览器。
7. Bochs:GeekOS运行于Windows(或Linux)下的Bochs PC模拟器,Bochs 是用 C++ 开发的可移植的 IA-32 (x86) PC 模拟器,它包括对 Intel x86 CPU 、通用 I/O 设备和可定制的 BIOS 的模拟,几乎可以运行在所有流行的平台上。在本次课设中使用的是bochs 2.6。
图 2.1 课设环境
3 项目0的设计实现
3.1项目设计目的
熟悉GeekOS的项目编译、调试和运行环境,掌握GeekOS运行工作过程。
3.2 项目设计要求
1.搭建GeekOS的编译和调试平台,掌握GeekOS的内核进程工作原理。
2.熟悉键盘操作函数,编程实现一个内核进程。该进程的功能是:接收键盘输入的字符并显示到屏幕上,当输入ctrl+d时,结束进程的运行。
3.3 项目实现原理
项目0主要要求设计一个函数对键盘的中断进行响应。这主要通过使用GeekOS提供的键盘响应函数Wait_Kernel_Thread进行键盘中断的响应和返回键值。该函数首先检查键盘缓冲区是否有按键,如果有,就读取一个键码,如果此时键盘缓冲区没有键值,就将线程放入键盘事件等待队列。于是可分为两步完成:
1.编写函数EchoCount,函输功能是:接受键盘输入的按键,并将键值显示在显示器,当输入Ctrl+D退出。
文档评论(0)