没有合适的资源?快使用搜索试试~ 我知道了~
GeekOS操作系统实验报告.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 196 浏览量
2022-07-14
06:27:03
上传
评论
收藏 393KB PDF 举报
温馨提示
试读
19页
GeekOS操作系统实验报告.pdf
资源推荐
资源详情
资源评论
GeekOS 操作系统的研究与实现
题 目: GeekOS 操作系统的研究与实现
系 别: 计算机科学与工程学院
专 业: xxxxx
学生姓名 : xxxxx
学 号: xxxxx
指导教师: xxxxx
2011 年 6 月 30 日
GeekOS 操作系统的研究与实现
一、 实验目的
计算机操作系统是管理计算机系统软件、 硬件资源,控制程序运行,改善人机界面,提
供各种服务, 合理组织计算机工作流程和为用户有效使用计算机提供良好的运行环境的系统
软件,它为用户使用计算机提供一个方便、灵活、安全、可靠的工作环境,也是其他应用软
件赖以存在的基础。 不仅是高校计算机专业学生需要了解它, 从事计算机行业的人员也需要
深入了解它。
由于目前高校开设的计算机操作系课程中偏重对理论知识的要求, 实践环境有限, 并偏
重注重学生对一些经典算法的实践, 学生并没有机会了解、 实践操作系统的内部结构和实现
技术。 GeekOs 操作实验是一个用 C 语言编写开发的操作系统,学生可以在 Linux 或 UNIX
环境下对其进行功能扩展。 通过本次实验, 学生可以深入了解计算机操作系统的概念和作用;
理解 PC 启动原理,深入体会计算机启动过程,包括操作系统的引导、内核程序的导入;进
一步了解和参与实践操作系统进程的管理, 理解进程的状态的转换、 进程的调度等; 通过本
实验,学生还可以理解存储器分段分页管理机制和文件系统相关的概念和技术。
本次实验目的的具体目的为: 熟悉 GeekOS 的项目编译、 调试和运行环境, 掌握 GeekOS
工作过程;熟悉 ELF 文件格式,了解 GeekOS 系统如何将 ELF 格式的用户可执行文件程序
装入到内存,建立内核进程并运行的实现技术;扩充 GeekOS 操作系统内核,使得系统支持
用户进程的动态创建和执行。
学生参与到操作系统的开发工作中, 实现操作系统的功能改进或再开发, 以增加学生对
操作系统核心技术的时间,达到理论与实践相结合。
二、 设计环境
GeekOS 是一个基于 X86 架构的 PC 上运行的微操作系统内核,由美国马理兰大学的教
师开发, 主要用于操作系统课程设计, 目的是使学生能够实际动手参与到一个操作系统的开
发工作中。 出于教学目的,这个系统内核设计简单,却又兼备实用性, 它可以运行在真正的
X86 PC 硬件平台。作为一个课程设计平台, GeekOS 由一个基本的操作系统内核作为基础,
提供了操作系统与硬件之间的所有必备接口,实现了系统引导、实模式到保护模式的转换、
中断调用及异常处理、基于段式的内存管理、 FIFO 进程调度算法以及内核进程、基本的输
入输出 (键盘作为输入设备 ,显示器作为输出设备 ),以及一个用于存放用户程序的只读文件系
统 PFAT。
本实验要求学生使用 GeekOS 作为操作系统框架, 学生可以使用 Linux 或者 UNIX 环境
对 GeekOS 其进行扩充,也可以使用 Windows 下的 Cygwin 工具进行开发。
三、 项目设计要求
为达到实验目的效果, 实验要求针对进程管理等操作系统核心内容进行相应的 3 项目要
求。其项目和要求为:
1. project0
1) 建 GeekOs 的编译和调试平台,掌握 GeekOs 的内核进程工作原理;
2) 熟悉键盘操作函数,编程实现一个内核进程。该进程的功能是:接收键盘输入的字符并
显示到屏幕中,当输入 Ctrl+D 时,结束进程运行。
2. project1
1) 修改 /geekos/elf.c 文件:在函数 Parse_ELF_Executable()中添加代码,分析 ELF 格式文件
(包括分析得出 ELF 文件头、程序头, 获取可执行文件长度, 代码段、数据段等信息) ,
并填充 Exe_Format 数据结构中的域值。
2) 掌握 GeekOs 在核心态用户程序的原理,为实现项目 2 的实现做准备。
3. project2
本项目需要阅读 /src/geekos 目录中的 entry.c、lowlevel.asm 、 kthread.c、userseg.c,其中
在 userseg.c中主要关注 Destroy_User_Context() 和 Load_User_Program() 两个函数。项目要求
为:
1)user.c:完成函数 Spawn()和 Switch_To_User_Context() 。
2)elf.c :完成函数 Parse_ELF_Executable() ,要求与项目 1 相同。
3)userseg.c:完成函数 Destroy_User_Context() 、Load_User_Program() 、Copy_From_User() 、
Copy_To_User() 和 Switch_To_Address_Space() 。
4)kthread.c:完成函数 Setup_User_Thread()和 Start_User_Thread()。
5) syscall.c : 完 成 函 数 Sys_Exit() 、 Sys_PrintString() 、 Sys_GetKey() 、 Sys_SetAttr() 、 S
s_GetCursor()、Sys_PutCursor()、 Sys_Spawn()、Sys_Wait()和 Sys_GetPID() 。
6)main.c:改写 Spawn_Init_Process(void) ,改写时将 ― /c/shell.exe ‖作为可执行文件传递给
Spawn 函数的 program 参数,创建第一个用户态进程,然后由它来创建其它进程。
四、 项目设计原理
1. project0
Cygwin 是一个在 Windows 平台上运行的 UNIX 模拟环境, 是 Cygnus Solution 公司开发
的自由软件。 Cygwin 把 gcc、 gdb、gas 等开发工具进行改进,使它们能生成并解释 Win32
目标文件,然后写了一个共享库,把 Win32 中没有的 UNIX 风格的调用封装在里面,把封
装的工具源代码与共享库连接在一起,皆可以使用类 UNIX 主机上的交叉编译器来生成
Windows 平台上运行的工具集。因此,可以使用 Windows 上的 Cygwin 作为开发环境。
要创建开发环境, 也可以使用 Linux 作为 GeekOS 开发调试环境, 可以使用 Red Hat 7.0
以上的 Linux 版本。而安装 Linux 平台可以直接安装 Linux 操作系统到主机上,也可以先在
Windows 上安装 VMware 虚拟机,在通过在 VMware 虚拟机安装 Linux 操作系统。
拥有可以编译 GeekOS 的操作环境,还需要一个可以调试 GeekOS 的 PC 虚拟机,由于
目前 GeekOS 只能支持在 Bochs 虚拟机上运行,因此,需要安装 Bochs。
项目 0 中,要求实现接收键盘输入的字符并显示到屏幕中的内核进程。 而键盘设备驱动
程序提供了一系列的高级接口来使用键盘。 键盘事件的逻辑关系为: 用户按键引发键盘中断,
根据是否按下 Shift 键,分别在键值表中寻找扫描码对应的按键值,经过处理后将键值放入
键盘缓冲区 s_queue 中,最后通知系统重新调度进程。若用户进程需要从键盘输入信息,可
调用 Wait_For_Key() 函数 ,该函数首先检查键盘缓冲区是否有按键。如果有,就读取一个键
码,如果此时键盘缓冲区中没有按键,就将进程放入键盘事件等待队列 s_waitQueue,由于
按键触发了键盘中断,键盘中断处理函数 Keyboard_Interrupt_Handler 就会读取用户按键,
将低级键扫描码转换为含 ASCII 字符的高级代码,并刷新键盘缓冲区,最后唤醒等待按键
的进程继续运行。
2. project1
项目 2 要求熟悉 ELF 文件格式,了解 GeekOS 系统如何将 ELF 格式的用户可执行文件
程序装入到内存,并建立内核进程并运行的实现技术。
ELF( Executable and linking format )文件是 UNIX 系统实验室作为应用程序二进制接口
而开发的可执行文件,是 x86 Linux 系统下的一种常用目标文件 (object file) 格式。 ELF 文件
格式如下表 1。
表 1 ELF 目标文件格式
连接程序视图 执行程序视图
ELF 头部 ELF 头部
程序头部表(可选) 程序头部表
节区 1
段 1
...
节区 n
段 2
...
... ...
节区头部表 节区头部表(可选)
ELF 文件在磁盘中的映象和在内存中的执行程序镜像的对应关系如下图:
ELF header
Code
Data section
header
Code section
header
Data
Code offset
Data offset
Data size
Code size
Code
Data
Stack (4096)
ELF 文件镜像
内存中执行镜像
图 1 ELF 文件和内存中的可执行文件镜像
内核进程的创建流程如下图:
剩余18页未读,继续阅读
资源评论
ll17770603473
- 粉丝: 0
- 资源: 6万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功