操作系统课程设计

  • 格式:doc
  • 大小:675.00 KB
  • 文档页数:25

下载文档原格式

  / 63
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书

学院:计算机科学与工程学院

专业:计算机科学与技术

姓名:杨天驹

学号: 07

指导教师:黄廷辉

2012年 3 月 5 日

操作系统课程设计报告

GeekOS操作系统的研究与实现

(项目0-------项目2)

一、实验目的:

熟悉GeekOS项目编译运行环境、核态进程的实现、用户态进程的实现、进程调度策略和算法实现、分页存储管理的实现和文件系统的实现等。

二、项目设计要求:

GeekOS设计项目0:

1.搭建GeekOS的编译和调试平台,掌握GeekOS的内核进程工作原理。

2.熟悉键盘操作函数,编程实现一个内核进程。该进程的功能是:接受键盘

输入的字符并显示到屏幕上,当输入Ctrl+D时,结束进程的运行。GeekOS设计项目1:

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

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

2.掌握GeekOS在核心态运行用户程序的原理,为项目2的实现做准备。GeekOS设计项目2:

本项目要求用户对以下几个文件进行修改:

1.src/GeekOS/文件中的函数Spawn(),其功能是生成一个新的用户级进程。

2.src/GeekOS/文件中的函数Switch_To_User_Context(),调度程序在执行

一个新的进程前调用该函数以切换用户地址空间。

3.src/GeekOS/文件中的函数Parse_ELF_Executable()。该函数的实现要求

和项目1相同。

4.src/GeekOS/文件中主要是实现一些为实现对src/GeekOS/中高层操作支

持的函数。(1)Destroy_User_Context()函数的功能是释放用户态进程占用的内存资源。

(2)Load_User_Program()函数的功能是通过加载可执行文件镜像创建新进程的User_Context结构。

(3)Copy_From_User()和Copy_To_User()函数的功能是在用户地址空间和内核地址空间之间复制函数,在分段存储器管理模式下,只要段有效,调用memcpy函数就可以实现这两个函数的功能。

(4)Switch_To_Address_Space()函数的功能是通过将进程的LDT装入到LDT寄存器来激活用户的地址空间。

5. src/GeekOS/文件中的Start_User_Thread函数和Setup_User_Thread函数。

(1)Setup_User_Thread()函数的功能是为进程初始化内核堆栈,堆栈中是为进程首次进入用户态运行时设置处理器状态要使用的数据。

(2)Start_User_Thread()是一个高层操作,该函数使用User_Context 对象开始一个新进程

6. src/GeekOS/文件中主要是实现用户程序要求内核进行服务的一些系统调

用函数定义。要求用户实现的有Sys_Exit()函数、Sys_PrintString()函数、Sys_GetKey()、Sys_SetAttr()、Sys_Getcursor()、Sys_PutCursor()函数、Sys_Wait()函数和Sys_GetPID()函数。这些函数在文件中有详细的注释,按照提示用户可以很好实现它们的功能。

最后,需要在文件中改写生成第一个用户态进程的函数调用:Spawn_Init_Process(void)。需要注意的是:作为与用户沟通的界面,GeekOS 提供了一个简单的Shell,保存在PFAT文件系统内,所以GeekOS系统启动后,应启动shell程序/c/运行,所以需要将/c/作为可执行文件传递给Spawn 函数的program参数,创建第一个用户态进程,然后由它来创建其他进程。添加代码运行成功后,GeekOS就可以挂载shell,并能运行测试文件和。

三、如何建立开发环境:

(一)利用linux安装盘安装了版本的linux操作系统环境;

(二)联网后通过系统里的更新管理器更新了系统,并安装了语言包和必要的驱动。

(三)在ubuntu软件中心下载安装了NASM汇编器、Bochs PC模拟器以及bochs-x插件(保证环境下的bochs正常运行)。

四、项目设计原理:

Make工作原理:

在默认的方式下,只要输入make命令就可以工作。具体的处理过程如下:

(1)make会在当前目录下找文件名为“Makefile”或“makefile”的文件。

(2)如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,

它会找到“edit”这个文件,并把这个文件作为最终的目标文件。

(3)如果edit文件不存在,或是edit所依赖的后面的.o文件的修改时间要

比edit这个文件新,那么,就会执行后面所定义的命令来生成edit这

个文件。

(4)如果edit所依赖的.o文件也不存在,那么make会在当前文件中找目标

为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件(这有点

像一个堆栈的过程)。

(5)如果指定的C文件和H文件是存在的, make会生成.o文件,然后再用.o

文件生成make的最终任务,也就是链接生成执行文件edit。

GeekOS的makefile文件功能:

(1)指定GeekOS如何被编译,哪些源文件被编译,哪些用户程序被编译等等。通常不同项目的编译仅仅需要修改这一部分。

(2)定义了编译GeekOS要用到的工具程序。

(3)指定规则:描述系统如何编译源程序。

(4)指定系统编译生成的指定文件。

GeekOS项目的开发流程:

1.开始一个GeekOS项目,第一步是添加相应的代码。

2.在Linux下利用make命令编译系统,生成系统镜像文件。