logo资料库

操作系统课设报告 桂林电子科技大学.doc

第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
资料共26页,剩余部分请下载后查看
1 GeekOS简介
1.1 GeekOS 系统源代码结构
2 课程设计环境
3 项目0的设计实现
3.1项目设计目的
3.2 项目设计要求
3.3 项目实现原理
3.4 项目实现过程
3.5 运行结果
4项目1的设计实现
4.1项目设计目的
4.2 项目设计要求
4.3项目实现原理
4.4项目实现过程
4.5 运行结果
5 项目2的设计实现
5.1项目设计目的
5.2项目设计目的
5.3项目实现原理
5.4项目实现过程
5.5运行结果
6 遇到问题及解决方法
7 课程设计总结
桂林电子科技大学综合设计说明书用纸 《操作系统》 课程设计说明书 题 学 专 姓 学 目: GeekOS 操作系统的研究与实验 院: 计算机科学与工程学院 信息安全 业: 名: 号: 指导教师: 黄廷辉 2013 年 03 月 24 日
桂林电子科技大学综合设计说明书用纸 目 录 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 页 1 GeekOS 简介 GeekOS 是一个基于 X86 架构的 PC 上运行的微操作系统内核,由美国马理兰大学的教师 开发,主要用于操作系统课程设计,目的是使学生能够实际动手参与到一个操作系统的开发 工作中。出于教学目的,这个系统内核设计简单,却又兼备实用性,它可以运行在真正的 X86 PC 硬件平台。作为一个课程设计平台,GeekOS 由一个基本的操作系统内核作为基础,提 供了操作系统与硬件之间的所有必备接口,实现了系统引导,实模式到保护模式的转换,中断 调用及异常处理,基于段式的内存管理,FIFO 进程调度算法以及内核进程,基本的输入输出 (键盘作为输入设备,显示器作为输出设备),以及一个用于存放用户程序的只读文件系统 PFAT。 学生可以在 Linux 或 Unix 环境下对其进行功能扩充,且其针对进程、文件系统、存储 管理等操作系统核心内容分别设计了 7 个难度逐渐增加的项目供学生选择 。 1.1 GeekOS 系统源代码结构 GeekOS 操作系统源文件 geekos-0.3.0.zip 可以从 http://geekos.sourceforge.net 下 载。 图 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 等文件。
桂林电子科技大学综合设计说明书用纸 第 2 页 图 1.2 项目文件结构图 2 课程设计环境 1. 虚拟机软件:VMware Workstation 7.0。 2. 虚拟系统:linux 系统 CentOS 5.5。 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 页 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 退出。 2.在 Main 函数体内调用 Start_Kernel_Thread 函数,将编写的函数地址传递给 startFunc, 建立一个内核进程。 3.4 项目实现过程 1.添加代码 (1)在 Main 函数中编写一个函数,函数功能是:接收键盘输入的按键,并将键值显示 到显示器的函数,当输入 Ctrl+D 就退出。 void project0() {Print("To Exit hit Ctrl + d.\n"); Keycode keycode; while(1) { if( Read_Key(&keycode) ) {//读取键盘按键状态 if(!( (keycode KEY_RELEASE_FLAG)) ) & KEY_SPECIAL_FLAG) || (keycode & { //只处理非特殊按键的按下事件 int asciiCode = keycode & 0xff; //低 8 位为 Ascii 码 if( (keycode & KEY_CTRL_FLAG)==KEY_CTRL_FLAG && asciiCode=='d') {//按下 Ctrl 键 Print("\n---------BYE!--------\n"); Exit(1); }else{
桂林电子科技大学综合设计说明书用纸 第 4 页 Print("%c",(asciiCode=='\r') ? '\n' : keycode); } } } } }//放在 main 函数之前 (2) 在 Main 函数体内调用 Start_Kernel_Thread 函数,将步骤 1 编写的函数地址传递给 参数 startFunc,建立一个内核级进程。 void Main(struct Boot_Info* bootInfo) { } //TODO("Start a kernel thread to echo pressed keys and print counts"); struct Kernel_Thread *thread; thread = Start_Kernel_Thread(&project0,0,PRIORITY_NORMAL,false); 2.编译 GeekOS 项目 project0 (1)shell>># cd /…/geekos-0.3.0/src/project0/build (2)shell>># make depend 生成 depend.mak 文件。 图 3.1 make depend 执行过程 (3)shell>># make 成功之后在 build 目录下生成 fd.img 文件。
桂林电子科技大学综合设计说明书用纸 第 5 页 图 3.2 make 执行过程 3.配置启动 Bochs (1)创建 bochs 配置文件 shell>># gedit bochsrc (2)在编辑器中输入一下配置内容 gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0 romimage:file=$BXSHARE/BIOS-bochs-latest megs: 8 boot: a floppya:1_44=fd.img, status=inserted log: ./bochs.out (3)保存,直接退出 gedit 3.5 运行结果 (1)启动 bochs shell>># bochs - bochsrc (2)选择 begin simulation (3)结果:
桂林电子科技大学综合设计说明书用纸 第 6 页 图 3.3 项目 0 运行结果 4 项目 1 的设计实现 4.1 项目设计目的 熟悉 ELF 文件格式,了解 GeekOS 系统如何将 ELF 格式的可执行程序装入到内存,建立内核进程并 运行的实现技术。 4.2 项目设计要求 1.修改/geekos/elf.c 文件:在函数 Parse_ELF_Executable( )中添加代码,分析 ELF 格式 的可执行文件(包括分析得出 ELF 文件头、程序头,获取可执行文件长度,代码段、数据段 等信息),并填充 Exe_Format 数据结构中的域值。 2.在 Linux 环境下编译系统得到 GeekOS 镜像文件。 3.编写一个相应的 bochs 配置文件。 4.在 bochs 中运行 GeekOS 系统显示结果。 4.3 项目实现原理 1.ELF 文件格式。 连接程序视图 ELF 头部 程序头部表(可选) 节区 1 … 执行程序视图 ELF 头部 程序头部表 段 1
分享到:
收藏