Greekos操作系统实验.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:20 大小:1.2MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Greekos操作系统实验.doc

Greekos操作系统实验.doc

预览

免费试读已结束,剩余 10 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

计算机系统实验软件报告题目:GeekOS操作系统的研究与实现院(系):研究生学院专业:计算机应用技术学生姓名:李敏学号:092031137指导教师:黄廷辉√题目类型:理论研究实验研究工程设计工程技术研究软件开发2010年7月2日目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc265692136"1实验目的PAGEREF_Toc265692136\h4HYPERLINK\l"_Toc265692137"2项目设计要求PAGEREF_Toc265692137\h4HYPERLINK\l"_Toc265692138"3如何建立开发环境PAGEREF_Toc265692138\h5HYPERLINK\l"_Toc265692139"4项目设计原理PAGEREF_Toc265692139\h5HYPERLINK\l"_Toc265692140"5项目设计的具体实现(编写的代码)PAGEREF_Toc265692140\h9HYPERLINK\l"_Toc265692141"6系统编译运行的原理及结果PAGEREF_Toc265692141\h19HYPERLINK\l"_Toc265692142"7遇到问题及解决方法PAGEREF_Toc265692142\h21HYPERLINK\l"_Toc265692143"8实验总结PAGEREF_Toc265692143\h211实验目的项目0:熟悉GeekOS的项目编译、调试和运行环境,掌握GeekOS运行工作过程。项目1:熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的用户可执行程序装入到内存,建立内核进程并运行的实现技术。项目2:扩充GeekOS操作系统内核,使得系统能够支持用户级进程的动态创建和执行。2项目设计要求项目0:(1)搭建GeekOS的编译和调试平台,掌握GeekOS的内核进程工作原理。(2)熟悉键盘操作函数,编程实现一个内核进程。该进程的功能是:接收键盘输入的字符并显示到屏幕上,当输入Ctrl+D时,结束进程的运行。项目1:(1)修改/geekos/elf.c文件:在函数Parse_ELF_Executable()中添加代码,分析ELF格式的可执行文件(包括分析得出ELF文件头、程序头,获取可执行文件长度,代码段、数据段等信息),并填充Exe_Format数据结构中的域值。(2)掌握GeekOS在核心态运行用户程序的原理,为项目2的实现做准备。项目2:开始本项目前需要阅读/src/geekos目录中的以下程序:(1)Entry.c:用户程序外壳,用户程序的入口地址就在这里,此文件在编译时与用户程序一起编译。(2)Lowlevel.asm:其中HandleInterrupt是中断处理的总调度程序,该函数根据传递的中断向量查找并调用相关的中断处理程序,并实现调度进程的选择。Switch_To_Thread函数用于实现进程的切换。(3)Kthread.c:内核进程有关函数以及进程调度算法都在此实现。(4)Userseg.c:其中要关注的函数有Destroy_User_Context()函数功能是释放User_Context空间,Detach_User_Context()调用该函数。Load_User_Program()函数功能是对用户进程的User_Context结构初始化,并对用户态进程的初始化,Spawn()函数中调用该函数。阅读完毕并对系统有一定的了解后就可以开始编写扩充部分的代码,本项目要求用户对/src/geekos/中的文件进行以下修改:(1)user.c:完成函数Spawn(),其功能是生成一个新的用户级进程;还有函数Switch_To_User_Context(),功能是调度程序在执行一个新的进程前调用该函数以切换用户地址空间。(2)elf.c:完成函数Parse_ELF_Executable(),要求与项目1相同。(3)userseg.c:完成函数Destroy_User_Context(),释放用户态进程占用的内存资源;函数Load_User_Program()的功能是通过加载可执行文件镜像创建新进程的User_Context结构;Copy_From_User()和Copy_To_User()函数的功能是在用户地址空间和内核地址空间之间复制数据;Switch_To_Address_Space()函数的功能是通过将进程的LDT装入到LDT寄存器来激活用户的地址空