1、 操作系统操作系统 课程设计说明书课程设计说明书 题题 目:目: GeekosGeekos 操作系统的研究与实现操作系统的研究与实现 学学 院:院: 计算机科学与工程学院计算机科学与工程学院 专专 业业: 信息安全信息安全 姓姓 名名: 学学 号号: 指导教师:指导教师: 2013 年年 03 月月 20 日日 目 录 1 实验目的实验目的 3 2 项目设计要求项目设计要求3 3 如何建立开发环境如何建立开发环境.4 4 项目设计原理项目设计原理.5 5 项目设计的具体实现项目设计的具体实现9 6 系统编译运行的原理及结果系统编译运行的原理及结果.19 7 遇到问题及解决方法遇到问题及解决方法
2、21 8 课程设计总结课程设计总结.2222 1 1 实验目的实验目的 操作系统的课程设计非常又必要,可以使我们通过实验,更加深入得理解 和掌握操作系统的基本理论和功能技术,将相对抽象的理论应用于实践,提高分 析问题和解决问题的能力,提高编写和开发系统程序的能力。 此次课程设计, 通过搭建 Linux 实验平台,对专门为操作系统课程教学而设计的操作系统 GeekOS 的项目代码的补充和完善,从浅到深,由表面到内涵地去理解操作系统 的设计思想,理解操作系统内核工作的基本原理。在完成项目的过程中,通过动 手操作,使得我们能够在动手查阅资料、思考排难等探索性活动中进一步理解操 作系统的抽象概念,并进
3、一步理解操作系统复杂的结构和工作原理。以下是各个 项目的主要目的: 项目 0:熟悉 GeekOS 的项目编译、调试和运行环境,掌握 GeekOS 运行工作 过程。 项目 1:熟悉 ELF 文件格式,了解 GeekOS 系统如何将 ELF 格式的用户可执 行程序装入到内存,建立内核进程并运行的实现技术。 项目 2: 扩充 GeekOS 操作系统内核, 使得系统能够支持用户级进程的动态 创建和执行。 2 2 项目设计要求项目设计要求 2.1 Project02.1 Project0 (1)搭建 GeekOS 的编译和调试平台,掌握 GeekOS 的内核进程工作原理。 (2)熟悉键盘操作函数,编程实
4、现一个内核进程。该进程的功能是:接收 键盘输入的字符并显示到屏幕上,当输入 ctrl+d 时,结束进程的运行。 2.2 Project12.2 Project1 (3)修改/geekos/elf.c 文件:在函数 Parse_ELF_Executable( )中添加代 码,分析 ELF 格式的可执行文件(包括分析得出 ELF 文件头、程序头,获取可执 行文件长度,代码段、数据段等信息) ,并填充 Exe_Format 数据结构中的域值。 (4)在 Linux 环境下编译系统得到 GeekOS 镜像文件。 (5)编写一个相应的 bochs 配置文件。 (6)在 bochs 中运行 GeekOS
5、系统显示结果。 2.3 Project22.3 Project2:要求用户对以下几个文件进行修改:要求用户对以下几个文件进行修改: (7)“src/GeekOS/user.c”文件中的函数 Spawn() ,其功能是生成一个新 的用户级进程; (8)“src/GeekOS/user.c”文件中的函数 Switch_To_User_Context() , 调度程序在执行一个新的进程前调用该函数以切换用户地址空间; (9)“src/GeekOS/elf.c”文件中的函数 Parse_ELF_Executable() 。该函 数的实现要求和项目 1 相同。 (10)“ src/GeekOS/user
6、seg.c ” 文 件 中 主 要 是 实 现 一 些 为 实 现 对 “src/GeekOS/user.c”中高层操作支持的函数。 (11)“src/GeekOS/kthread.c” 文件中的 Start_User_Thread 函数和 Setup_User_Thread 函数。Setup_User_Thread()函数的功能是为进程初始化 内核堆栈,堆栈中是为进程首次进入用户态运行时设置处理器状态要使用的数 据。Start_User_Thread()是一个高层操作,该函数使用 User_Context 对象开 始一个新进程。 (12)“src/GeekOS/kthread.c”文件中主要是实现用户程序要求内核进 行服务的一些系统调用函数定义。要求用户实现的有 Sys_Exit()函数、 Sys_PrintString()函数、Sys_GetKey() 、Sys_SetAttr() 、