计算机系统软件实验报告
GeekOS操作系统的研究与实现
题 目:GeekOS操作系统的研究与实现 学 院: 计算机科学与工程学院 专 业: 计算机技术 学生姓名:
学 号:
指导教师: 黄 庭 辉
题目类型:?理论研究 ?实验研究 ?工程设计 ?工程技术研究 ?软件开发
2011年 6 月 28 日
计算机系统软件实验报告
——GeekOS操作系统的研究与实现
一.实验目的
通过对一个教学操作系统GEEKOS的编译过程,形成磁盘映射文件,并在Bochs模拟器下模拟启动,来了解操作系统的基本原理和系统的启动过程。同时扩充GeekOS操作系统内核,使得系统能够支持用户级进程的动态创建和执行。
二.实验要求
GEEKOS提供了7个project进行试验,本人选做了project0~project2。 (1)搭建GeekOS的编译和调试平台,掌握GeekOS内核进程工作原理。
(2)了解GEEKOS的使用方法,完成其键盘响应函数,使其对键盘的中断作出响应,并显示
出按下的键值。
(3)完成对可执行文件(ELF)的格式分析,并将分析结果传递到GEEKOS提供的程序装载
器。
(4)在用户模式下建立进程和使用系统调用。 (5)实现进程的调度和同步。
三.实验及其配置
本实验所需资源:VMware ,Red Hat Enterprise Linux 4、Geekos-0.3.0、Bochs 2.2.6、Gedit、Nasm汇编语言编译器等。本实验采用直接在虚拟机上安装Linux进行开发调试
1 GeekOS简介
操作系统是管理系统软,硬件资源,控制程序运行,改善人机界面,提供各种服务,合理组
织计算机工作流程和为用户有效使用计算机提供良好运行环境的系统软件,它为用户使用计算机提供一个方便,灵活,安全,可靠的工作环境,也是其他应用软件赖以存在的基础.操作系统是计算机系统的重要组成部分,操作系统课程是计算机教育的必修课程,作为计算机专业的核心课程,不但高校计算机相关专业的学生必须学习操作系统,从事计算机行业的从业人员也需要深入了解它.
本文介绍GreekOS操作系统是一款在实际硬件上(x86-based PCs)运行的微操作系统内核。GreekOS是一款适合于教学的免费软件,其主要特点是:简单、实用、易懂,便于学生们理解操作系统的设计思想和实现过程。
因为它的使用者主要是教学者和学生,GreekOS是免费软件,并且有许多GeekOS下载站点。
GEEKOS仅仅包含了操作系统最基本的功能,GreekOS的特点如下: 1、中断处理; 2、堆存储分配;
3、静态优选权时序安排的时间片内核线程; 4、关于内核线程同步的互斥和条件变量;
5、基于分割保护的用户模式和一个简单的系统调用接口; 6、对键盘和VGA文本模式显示的设备启动;
目前,除上述所列的之外,还缺少虚拟内存、存储设备驱动和文件系统。在GeekOS中,使用分段机制实现了用户模式任务的内存保护。为了克服在存储设备和文件系统方面的欠缺,GeekOS提供了一个种机制以实现将用户程序编译成直接链接内核的数据对象。这种技术也可以用来实现基于RAM的文件系统。
2 VMware虚拟机 ,Bochs仿真器介绍
VMWare (Virtual Machine ware)是一个“虚拟PC”软件公司.它的产品可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换。而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。安装在VMware操作系统性能上比直接安装在硬盘上的系统低不少,因此,比较适合学习和测试。
Bochs仿真器其实质就是一台虚拟PC机,也就是所谓的“机中机”“Bochs 。for windows”窗口即Bochs仿真器的屏幕,上面有软盘、CDROM、Reset按钮、电源图标等。Bochs 是用 C++ 开发的可移植的 IA-32 (x86) PC 模拟器,几乎可以运行在所有流行的平台上。它包括对 Intel x86 CPU 、通用 I/O 设备和可定制的 BIOS 的模拟。目前, Bochs 可以模拟 386, 486, Pentium Pro 或者 AMD64 CPU ,包括可选的 MMX, SSE, SSE2 和 3DNow 指令。Bochs 的模拟环境中可以运行大部分的操作系统,包括 Linux, Windows 95, DOS, Windows NT 4, FreeBSD, MINIX 等。
Bochs是一个x86硬件平台的模拟器。换句话说,它可以模拟各种硬件的配置。当启动到Bochs时,看起来就好像你在自己的PC上启动了另外一个PC。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。更为有趣的是,甚至可以不使用PC硬件来运行Bochs。事实上,它可以在任何编译运行Bochs的平台上模拟x86硬件。通过改变配置,可以指定使用的CPU(386、486或者586),以及内存大小等。一句话,Bochs是电脑里的“PC”。根据需要,Bochs还可以模拟多台PC,此外,它甚至还有自己的电源按钮。注释行用#开头.
对Bochs的手动配置主要通过Bochsrc.txt文件来实现。可通过该文件的修改来规定启动方式(软盘、硬盘),用来模拟软盘或硬盘的映像文件等。
3 开发环境搭建和Bochs的配置
试验可以分别在Windows环境和Linux环境下交替完成,下面介绍具体的实现方法。
1) 下载并安装VMware虚拟机;
2)在VMware虚拟机上安装linux,操作系统开发工具包里,有nasm软件。选中安装即可。如果安装系统没有安装。可以在以后的添加删除程序里安装,不过要安装盘。和windows安装其他软件类似。安装即可。
3)在VMware虚拟机上的linux环境下对GeekOS源文件进行编译和链接,编译成功后生成fd.img软盘映射文件和hd.img硬盘映射文件; 4) 下载并安装系统仿真工具Bochs;
5)配置Bochs环境配置文件Bochsrc.txt,
6)启动Boch环境,在提示的出现GeekOS的欢迎界面。 7)GeekOS系统编译和仿真成功。
8)开始安装好bochs之后,对bochsrc.txt进行配置,考虑到bochs自带
bochsrc-sample.txt的比较复杂,因此对其进行改写,方便日后阅读。且将该配置文件放在各个项目之下,方便进行修改。以project0为例,该项目的配置文件如下:
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000 megs: 8 boot: a
floppya: 1_44=fd.img, status=inserted log: ./bochs.out
keyboard_serial_delay: 200 floppy_command_delay: 500 vga_update_interval: 300000 ips: 1000000 mouse: enabled=0
private_colormap: enabled=0 i440fxsupport: enabled=0
ata0:enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master:type=disk,mode=flat,path=diskc.img,cylinders=40,heads=8,spt=64
四 项目设计原理
(一) project0的设计
1.设计原理
接受键盘输入的字符并显示到屏幕上,当输入Ctrl+D时,接受进程的运行
2.运行原理
(1) 首先定义GeekOS的键盘处理函数在keyboard.h与keyboard.c两个文件中。在
keyboard.c中定义了F1-F12、Shift、Alt等功能键常量,还定义了一个用于存放键盘扫描码的缓冲区。
(2) 然后进行键盘初始化处理(Init_Keyboard函数在Main中)。
(3) 键盘中断的处理过程是:首先从相应I/O端口读取键盘扫面码,在根据是否按下Shift键,分别在键值表中寻找扫描码对应的按键值,经过处理后将键值放入键盘缓冲区,最后系统进行重新调度进程。
3.项目设计要求
1、搭建GeekOS的编译和调试平台,掌握GeekOS的内核进程工作原理。
2、熟悉键盘操作函数,编程实现一个内核进程。该进程的功能是:接收键盘输入的字符并
显示到屏幕上,当输入ctrl+d时,结束进程的运行。
4.实现步骤
1.编写一个C语言函数,函数功能是:接收键盘输入的按键,并将键值在显示器显示出来,
当输入ctrl+d就退出;
2.在Main函数体内调用Start_Kernel_Thread函数,将步骤1编写的函数地址传递给参数 startFunc,利用Setup_Kernel_Thread函数建立一个待运行的线程。 3.在Linux环境下编译系统得到GeekOS镜像文件。 4.编写一个相应的bochs配置文件。
5.编译GeekOS
进入geekos-0.3.0/src/project0/build目录 执行 make depend 执行 make
成功之后在build 目录下生成fd.img文件。
6.在bochs中运行GeekOS系统显示结果。
启动bochs
在build目录中执行 bochs –f bochsrc
7.运行结果
(项目 0)
8.核心代码
static void Keyboard_Interrupt_Handler(struct Interrupt_State* state) {
uchar_t status, scanCode; unsigned flag = 0; bool release = false, shift; Keycode keycode; Begin_IRQ(state);
status = In_Byte(KB_CMD); IO_Delay();
if ((status & KB_OUTPUT_FULL) != 0) { /*
* Print(\
/* There is a byte available */ scanCode = In_Byte(KB_DATA); IO_Delay();
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库geekos计算机系统软件实验报告在线全文阅读。
相关推荐: