好文档 - 专业文书写作范文服务资料分享网站

GeekOS操作系统实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

GeekOS操作系统的研究与实现

题 目:系 别:专 业:学生姓名:学 号:指导教师: GeekOS操作系统的研究与实现 计算机科学与工程学院 xxxxx xxxxx xxxxx xxxxx 2011年 6 月 30 日

GeekOS操作系统的研究与实现

一、 实验目的

计算机操作系统是管理计算机系统软件、硬件资源,控制程序运行,改善人机界面,提供各种服务,合理组织计算机工作流程和为用户有效使用计算机提供良好的运行环境的系统软件,它为用户使用计算机提供一个方便、灵活、安全、可靠的工作环境,也是其他应用软件赖以存在的基础。不仅是高校计算机专业学生需要了解它,从事计算机行业的人员也需要深入了解它。

由于目前高校开设的计算机操作系课程中偏重对理论知识的要求,实践环境有限,并偏重注重学生对一些经典算法的实践,学生并没有机会了解、实践操作系统的内部结构和实现技术。GeekOs操作实验是一个用C语言编写开发的操作系统,学生可以在Linux或UNIX环境下对其进行功能扩展。通过本次实验,学生可以深入了解计算机操作系统的概念和作用;理解PC启动原理,深入体会计算机启动过程,包括操作系统的引导、内核程序的导入;进一步了解和参与实践操作系统进程的管理,理解进程的状态的转换、进程的调度等;通过本实验,学生还可以理解存储器分段分页管理机制和文件系统相关的概念和技术。

本次实验目的的具体目的为:熟悉GeekOS的项目编译、调试和运行环境,掌握GeekOS工作过程;熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的用户可执行文件程序装入到内存,建立内核进程并运行的实现技术;扩充GeekOS操作系统内核,使得系统支持用户进程的动态创建和执行。

学生参与到操作系统的开发工作中,实现操作系统的功能改进或再开发,以增加学生对操作系统核心技术的时间,达到理论与实践相结合。 二、 设计环境

GeekOS是一个基于X86架构的PC上运行的微操作系统内核,由美国马理兰大学的教师开发,主要用于操作系统课程设计,目的是使学生能够实际动手参与到一个操作系统的开发工作中。出于教学目的,这个系统内核设计简单,却又兼备实用性,它可以运行在真正的X86 PC硬件平台。作为一个课程设计平台,GeekOS由一个基本的操作系统内核作为基础,提供了操作系统与硬件之间的所有必备接口,实现了系统引导、实模式到保护模式的转换、中断调用及异常处理、基于段式的内存管理、FIFO进程调度算法以及内核进程、基本的输入输出(键盘作为输入设备,显示器作为输出设备),以及一个用于存放用户程序的只读文件系统PFAT。

本实验要求学生使用GeekOS作为操作系统框架,学生可以使用Linux或者UNIX环境对GeekOS其进行扩充,也可以使用Windows下的Cygwin工具进行开发。 三、 项目设计要求

为达到实验目的效果,实验要求针对进程管理等操作系统核心内容进行相应的3项目要求。其项目和要求为:

1. project0

1) 建GeekOs的编译和调试平台,掌握GeekOs的内核进程工作原理;

2) 熟悉键盘操作函数,编程实现一个内核进程。该进程的功能是:接收键盘输入的字符并

显示到屏幕中,当输入Ctrl+D时,结束进程运行。

2. project1

1) 修改/geekos/elf.c文件:在函数Parse_ELF_Executable()中添加代码,分析ELF格式文件

(包括分析得出ELF文件头、程序头,获取可执行文件长度,代码段、数据段等信息),并填充Exe_Format数据结构中的域值。

2) 掌握GeekOs在核心态用户程序的原理,为实现项目2的实现做准备。

3. project2

本项目需要阅读/src/geekos目录中的entry.c、lowlevel.asm、kthread.c、userseg.c,其中在userseg.c中主要关注Destroy_User_Context()和Load_User_Program()两个函数。项目要求为:

1)user.c:完成函数Spawn()和Switch_To_User_Context()。

2)elf.c:完成函数Parse_ELF_Executable(),要求与项目1相同。

3)userseg.c:完成函数Destroy_User_Context()、Load_User_Program()、Copy_From_User()、Copy_To_User()和Switch_To_Address_Space()。

4)kthread.c:完成函数Setup_User_Thread()和Start_User_Thread()。

5)syscall.c:完成函数Sys_Exit()、Sys_PrintString()、Sys_GetKey()、Sys_SetAttr()、S s_GetCursor()、Sys_PutCursor()、Sys_Spawn()、Sys_Wait()和Sys_GetPID()。

6)main.c:改写Spawn_Init_Process(void),改写时将“/c/shell.exe”作为可执行文件传递给Spawn函数的program参数,创建第一个用户态进程,然后由它来创建其它进程。 四、 项目设计原理

1. project0

Cygwin是一个在Windows平台上运行的UNIX模拟环境,是Cygnus Solution公司开发的自由软件。Cygwin把gcc、gdb、gas等开发工具进行改进,使它们能生成并解释Win32目标文件,然后写了一个共享库,把Win32中没有的UNIX风格的调用封装在里面,把封装的工具源代码与共享库连接在一起,皆可以使用类UNIX主机上的交叉编译器来生成Windows平台上运行的工具集。因此,可以使用Windows上的Cygwin作为开发环境。

要创建开发环境,也可以使用Linux作为GeekOS开发调试环境,可以使用Red Hat 7.0以上的Linux版本。而安装Linux平台可以直接安装Linux操作系统到主机上,也可以先在Windows上安装VMware虚拟机,在通过在VMware虚拟机安装Linux操作系统。

拥有可以编译GeekOS的操作环境,还需要一个可以调试GeekOS的PC虚拟机,由于目前GeekOS只能支持在Bochs虚拟机上运行,因此,需要安装Bochs。

项目0中,要求实现接收键盘输入的字符并显示到屏幕中的内核进程。而键盘设备驱动程序提供了一系列的高级接口来使用键盘。键盘事件的逻辑关系为:用户按键引发键盘中断,根据是否按下Shift键,分别在键值表中寻找扫描码对应的按键值,经过处理后将键值放入键盘缓冲区s_queue中,最后通知系统重新调度进程。若用户进程需要从键盘输入信息,可调用Wait_For_Key()函数,该函数首先检查键盘缓冲区是否有按键。如果有,就读取一个键码,如果此时键盘缓冲区中没有按键,就将进程放入键盘事件等待队列s_waitQueue,由于按键触发了键盘中断,键盘中断处理函数Keyboard_Interrupt_Handler就会读取用户按键,将低级键扫描码转换为含ASCII字符的高级代码,并刷新键盘缓冲区,最后唤醒等待按键的进程继续运行。

2. project1

项目2要求熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的用户可执行文件程序装入到内存,并建立内核进程并运行的实现技术。

ELF(Executable and linking format)文件是UNIX系统实验室作为应用程序二进制接口而开发的可执行文件,是x86 Linux系统下的一种常用目标文件(object file)格式。ELF文件格式如下表1。

表1 ELF目标文件格式

连接程序视图 ELF 头部 执行程序视图 ELF 头部 程序头部表(可选) 节区1 程序头部表 段 1 ... 节区 n 段 2 ... ... 节区头部表 ... 节区头部表(可选)

ELF文件在磁盘中的映象和在内存中的执行程序镜像的对应关系如下图:

Data offset Code offset ELF文件镜像Code size Data size 内存中执行镜像图1 ELF文件和内存中的可执行文件镜像

内核进程的创建流程如下图:

ELF headerData section headerCode section headerCode Data Code Data Stack (4096)

图2 内核进程流程图

Parse_ELF_Excutable函数的定义为:

int Parse_ELF_Executable(char *exeFileData,ulong_t exeFileLength,truct Exe_Format *exeFormat)

参数:exeFileData——已装入内存的可执行文件所占用空间的起始地址 exeFileLength——可执行文件长度

exeFormat——保存分析得到的elf文件信息的结构体指针根据ELF文件格式,用户可以从exeFileData指向的内容中得到ELF文件头,继续分析可以得到程序头,程序代码段等信息。

3. project2

进程是在计算机系统引入多道程序设计技术后,为描述和控制系统内部各程序运行而引入的一个概念。后来为提高程序运行的并行度和系统的执行效率,又引进了线程的概念。而GeekOS的线程实质上是进程,GeekOS的内核只提供核心级进程,但可以开发扩展使之支持核心级进程和用户级进程。 ⅰ、GeekOS进程状态及转化

在操作系统中,可以多个任务可以共享CPU,但一个进程在整个生命周期中有时候能占有CPU,有时候并不能占用CPU。GeekOS系统中,进程在一个生命周期中分为3中不同的状态。即当前运行态、准备运行态和等待状态。其住哪个台之间的转化如图3所示

GeekOS操作系统实验报告

GeekOS操作系统的研究与实现题目:系别:专业:学生姓名:学号:指导教师:GeekOS操作系统的研究与实现计算机科学与工程学院xxxxxxxxxxxxxxx
推荐度:
点击下载文档文档为doc格式
9vick76jaa3h0qq02ukg7f1wl0k4bu0151f
领取福利

微信扫码领取福利

微信扫码分享