Greekos操作系统实验——吴孔玲

上传人:公**** 文档编号:504479928 上传时间:2023-09-29 格式:DOC 页数:22 大小:797KB
返回 下载 相关 举报
Greekos操作系统实验——吴孔玲_第1页
第1页 / 共22页
Greekos操作系统实验——吴孔玲_第2页
第2页 / 共22页
Greekos操作系统实验——吴孔玲_第3页
第3页 / 共22页
Greekos操作系统实验——吴孔玲_第4页
第4页 / 共22页
Greekos操作系统实验——吴孔玲_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《Greekos操作系统实验——吴孔玲》由会员分享,可在线阅读,更多相关《Greekos操作系统实验——吴孔玲(22页珍藏版)》请在金锄头文库上搜索。

1、计算机系统实验软件报告题目:Geekos操作系统的研究与实现院 (系): 计算机与控制学院 专 业: 计算机应用技术 学生姓名: 吴孔玲 学 号: 092031130 指导教师: 黄廷辉 2010年06月30日目 录1 GeekOS简介311GeekOS系统源代码结构32 实验环境53 项目实现531 project053.11项目设计目的53.12项目设计要求53.13项目设计原理53.13项目具体实现63.14调试运行结果732 project183.21项目设计目的83.22项目设计要求83.23项目设计原理83.23项目具体实现103.24调试运行结果1033 project2113.

2、31项目设计目的113.32项目设计要求113.33项目设计原理123.23项目具体实现133.24调试运行结果204 遇到问题及解决方法205 学习总结21参考文献211 GeekOS简介GeekOS是一个基于X86架构的PC上运行的微操作系统内核。由美国马理兰大学的教师开发,是一个用C语言开发的操作系统。主要用于操作系统课程设计,目的是使学生能够实际动手参与到一个操作系统的开发工作中。出于教学目的,这个系统内核设计简单,却又兼备实用性,它可以运行在真正的X86 PC硬件平台。作为一个课程设计平台,GeekOS由一个基本的操作系统内核作为基础,提供了操作系统与硬件之间的所有必备接口,实现了系

3、统引导、实模式到保护模式的转换、中断调用及异常处理、基于段式的内存管理,FIFO进程调度算法以及内核进程、基本的输入输出(键盘作为输入设备、显示器作为输出设备),以及一个用于存放用户程序的只读文件系统PFAT。学生可以在Linux或Unix环境下对其进行功能扩充,且其针对进程、文件系统、存储管理等操作系统核心内容分别设计了7个难度逐渐增加的项目供学生选择 11GeekOS系统源代码结构 GeekOS操作系统源文件geekos-0.3.0.zip可以从http:/下载。解压后的GeekOS目录结构如图1-3所示:在doc目录下文件hacking.pdf和index.htm是GeekOS系统的参考

4、文档。Scripts目录下有startProject和removeEmptyConflicts两个脚本文件。GeekOS系统的源文件在src目录下,分为7个项目:Project0, Project1, Project2, Project3, Project4, Project5, Project6。每个项目的文件结构都类似,以Project0为例,结构如图1-4所示:在build文件夹中,包含系统编译后的可执行文件的文件、软盘镜像或是硬盘镜像、makefile项目管理文件。在inculde文件夹中有geekOS和libc两个子目录,在geekOS子目录中有kthread.h,keyboard.

5、h等头文件,在libc中包含有geekOS支持的C语言标准函数string.H头文件。在scripts文件夹是项目编译时要用到的一些脚本文件。Src文件夹中存放系统内核源代码,用户修改geekOS系统时要修改的源代码如main.c都位于这个目录中。在User子目录中一般是用来存放用户的测试文件,在tools子目录中的代码是用来建立PFAT测试文件系统的。2 实验环境1下载并安装VMware-workstation 6.5-7.02建立虚拟机,在VMware-workstation中新建New Virtual Machine,按系统提示安装好ubuntu10.043 安装VMware Tools

6、实现文件共享,4 Bochs-2.3安装和使用3 项目实现31 project03.11项目设计目的熟悉GeekOS的项目编译、调试和运行环境,掌握GeekOS运行工作过程。3.12项目设计要求(1)搭建GeekOS的编译和调试平台,掌握GeekOS的内核进程工作原理。(2)熟悉键盘操作函数,编程实现一个内核进程。该进程的功能是:接受键盘输入的字符并显示到屏幕上,当输入Ctrl+D时,结束进程的运行。3.13项目设计原理项目要求从键盘输入,因此要用到键盘处理函数 。GeekOS的键盘处理函数定义在keyboard.h与keyboard.c 文件中。键盘的初始化是在Main函数中调用Init_K

7、eyboard进行的,Init_Keyboard主要功能是设置初始状态下存放键盘扫描码的缓冲区,并为键盘中断设置处理函数。而键盘中断处理过程是:首先从相应的I/O端口读取键盘扫描码,根据是否按下Shift键,分别在键值表中寻找扫描码对应的按键值,经过处理后将键值放入键盘缓冲区,最后通知系统重新调度进程。若用户进程需要从键盘输入信息,可调用Wait_For_Key()函数,进程调用该函数后,会阻塞进入按键操作的等待队列,直到按键操作结束,进程才会被唤醒。Start_Kernel_Thread函数主要功能就是建立一个内核线程。本项目主要要求设计一个函数对键盘的中断进行响应。这主要通过使用Geeko

8、s提供的键盘响应函数Wait_For_Key()进行键盘中断的响应及返回键值。该函数首先检查键盘缓冲区是否有按键,如果有,就读取一个键码,如果此时键盘缓冲区中没有按键,就将线程放入键盘事件等待队列。于是可分两步完成:1 编写函数,函数功能是:接受键盘输入的按键,并将键值显示到显示器,当输入Ctrl+D退出。2 在Main函数体内调用Start_User_Thread函数,将编写的函数地址传递给startFunc,建立一个内核进程。3.13项目具体实现编写的函数static void keyin(void) Keycode keycode;Print(n-Wait for your input,

9、Ctrl+d to exit-n);while(1)keycode=Wait_For_Key(); /读取键盘按键状态if(!( (keycode & 0x0100) | (keycode & 0x8000) ) /处理非特殊按键的按下事件 int asciiCode = keycode & 0x03ff; /低8位为Ascii码if( (keycode & 0x4000)=0x4000 & asciiCode=d) /按下Ctrl键Print(n-Bye-n);Exit(1); elsePrint(%c,(asciiCode=r) ? n : asciiCode); 在mian函数中编写:S

10、tart_Kernel_Thread(keyin,0,PRIORITY_NORMAL,false);将编写的函数传入,生成内核进程。3.14调试运行结果进入/os/ project0/build目录执行 make depend执行 make成功之后在build 目录下生成fd.img文件。启动bochs在build目录中执行bochs f bochsrc成功后,运行结果:32 project13.21项目设计目的熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的用户可执行程序装入内存,建立内核进程并运行的实现技术。3.22项目设计要求(1)修改/geekos/elf.c文件:在函数Pa

11、rse_ELF_Executable()中添加代码,分析ELF格式的可执行文件(包括分析得出ELF文件头、程序头,获取可执行文件长度,代码段、数据段等信息),并填充Exe_Format数据结构的域值。(2)掌握GeekOS在核心态运行用户程序的原理,为项目2的实现做准备。3.23项目设计原理ELF是UNIX系统实验室作为应用程序二进制接口而开发和发布的。有两个平行视图。连接程序视图 执行程序视图 ELF 头部ELF 头部 程序头部表(可选) 程序头部表 节区1 段 1 . 节区 n 段 2 . . . 节区头部表 节区头部表(可选) GeekOS中的用户程序全部在系统的编译阶段完成编译和连接,

12、形成可执行文件,用户可执行文件保存在PFAT文件系统中。本项目要完成的就是在系统启动后,从PFAT文件系统将可执行文件装入内存,建立进程并运行得到相应的输出。在磁盘中的ELF文件的映像和在内存中执行程序镜像间的对应关系如下图所示而此过程主要由Spawner函数实现,其主要经过简要概述为:先调用Read_Fully函数将文件读入内存,后调用Parse_ELF_Executable函数分析ELF文件,最后调用Spawn_Program函数将可执行程序的代码段和数据段等装入内存,此后便可以开始运行一个内核级进程了。如下图所示:在本项目中,我们要完成Parse_ELF_Executable函数,此函数

13、的作用为根据ELF文件格式,从exeFileData指向的内容中得到ELF文件头,继续分析可得到程序头和程序代码段等信息。3.23项目具体实现int Parse_ELF_Executable(char *exeFileData, ulong_t exeFileLength,struct Exe_Format *exeFormat)/TODO(Parse an ELF executable image);elfHeader *eh = (elfHeader*)exeFileData; programHeader *ph=(programHeader *)(exeFileData+eh-phoff

14、);int i;for(i=0;iphnum;i+)exeFormat-segmentList i.offsetInFile=ph-offset;exeFormat-segmentList i.lengthInFile=ph-fileSize;exeFormat-segmentList i.startAddress=ph-vaddr;exeFormat-segmentList i.sizeInMemory=ph-memSize;exeFormat-segmentList i.protFlags=ph-flags; ph+;exeFormat-numSegments=eh-phnum;exeFormat-entryAddr=eh-entry;return 0; 3.24调试运行结果进入/os/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号