操作系统课程设计报告
题 目:Geekos 操作系统的研究与实现
院 (系): 计算机与信息安全学院
专 业: 计算机科学与技术
学生姓名:
学 号:
指导教师单位: 计算机与信息安全学院
姓 名: 王慧娇
职 称: 副教授
题目类型:理论研究 实验研究 工程设计 工程技术研究 软件开发
2019 年 3 月 30 日
桂林电子科技大学课程设计(论文)报告用纸
摘 要
GeekOS:是一个基于 X86 架构的 PC 机上运行的微操作系统内
核,由美国马理兰大学的教师开发,是一个用 C 语言开发的操作系
统, GeekOS 主要用于操作系统课程设计,目的是使学生能够实际动
手参与到一个操作系统的开发工作中。学生可以在 Linux 或 Unix 环
境下对其进行功能扩充,且其针对进程、文件系统、存储管理等操作
系统核心内容分别设计了 7 个难度逐渐增加的项目供学生选择 。
- I -
桂林电子科技大学课程设计(论文)报告用纸
目录
目录 ................................................................................................................................................................. II
1 绪论 ............................................................................................................................................................ 1
1.1 GeeKos 操作系统概述 .................................................................................................................. 1
1.2 课程设计的目的与任务 .............................................................................................................. 1
1.2.1 项目设计 0 ................................................................................................................................ 1
1.2.2 项目设计 1 ................................................................................................................................ 2
1.2.3 项目设计 2 ................................................................................................................................ 2
1.2.4 项目设计 3 ................................................................................................................................ 3
2 系统分析 .................................................................................................................................................. 4
2.1 GeeKos 实验项目开发环境的搭建 ........................................................................................... 4
一、vmware 安装 ............................................................................................................................. 4
3 系统设计与实现 .................................................................................................................................... 7
3.1 项目设计流程图和原理 .............................................................................................................. 7
3.1.1 项目设计 0 原理 ...................................................................................................................... 7
3.1.2 项目设计 1 原理 ...................................................................................................................... 7
3.1.3 项目设计 2 原理 ...................................................................................................................... 8
3.1.4 项目设计 3 原理 ...................................................................................................................... 9
3.2 项目设计的具体实现代码(要有详细注释) .................................................................... 11
3.2.1 项目设计 0 具体实现代码 ................................................................................................. 11
3.2.2 项目设计 1 具体实现代码 ................................................................................................. 12
3.2.3 项目设计 2 具体实现代码 ................................................................................................. 13
3.2.4 项目设计 3 具体实现代码 ................................................................................................. 16
4 系统测试及编译运行 ......................................................................................................................... 23
4.1 系统编译运行的结果及分析说明 ........................................................................................... 23
4.1.1project0 ..................................................................................................................................... 23
4.1.2project1 ..................................................................................................................................... 24
4.1.3project2 ..................................................................................................................................... 24
4.1.4project3 ..................................................................................................................................... 25
4.2、遇到问题及解决方法 ............................................................................................................... 27
- II -
桂林电子科技大学课程设计(论文)报告用纸
5、总结 ....................................................................................................................................................... 28
6、参考文献 .............................................................................................................................................. 28
- III -
桂林电子科技大学课程设计(论文)报告用纸 第 1 页 共 28 页
1 绪论
计算机操作系统是管理计算机系统软件、硬件资源、控制程序运
行、改善人机界面、提供各种服务、合理组织计算机工作流程和为用
户有效使用计算提供良好的运行环境的系统软件,它为用户使用计算
机提供一个方便、灵活、安全、可靠的工作环境,也是气体应用软件
赖以存在的基础,不仅是搞笑计算机专业学生需要了解它,从事计算
机行业的人员也需要深入的了解它。
此次课程设计,通过搭建 linux 实验平台,对专门卫操作系统课
程教学而设计的操作系统——Geekos 的项目代码的补充和完善,从
浅到深,由表及里地去理解操作系统的设计思想,理解操作系统的基
本工作原理。
1.1 GeeKos 操作系统概述
GeekOS:是一个基于 X86 架构的 PC 机上运行的微操作系统内
核,由美国马理兰大学的教师开发,是一个用 C 语言开发的操作系
统, GeekOS 主要用于操作系统课程设计,目的是使学生能够实际动
手参与到一个操作系统的开发工作中。学生可以在 Linux 或 Unix 环
境下对其进行功能扩充,且其针对进程、文件系统、存储管理等操作
系统核心内容分别设计了 7 个难度逐渐增加的项目供学生选择
1.2 课程设计的目的与任务
1.2.1 项目设计 0
一、项目设计目的:
熟悉 GeekOS 的项目编译、调试和运行环境,掌握 GeekOS
运行工作过程。
二、项目设计要求:
1、搭建 GeekOS 的编译和调试平台,掌握 GeekOS 的内核
进程工作原理。
2、熟悉键盘操作函数,编程实现一个内核进程。该进程的
- 1 -
桂林电子科技大学课程设计(论文)报告用纸 第 2 页 共 28 页
功能是:接收键盘输入的字符并显示到屏幕上,当输入 ctrl+d 时,结
束进程的运行
1.2.2 项目设计 1
一、项目设计目的
熟悉 ELF 文件格式,了解 GeekOS 系统如何将 ELF 格式的
可执行程序装入到内存,建立内核进程并运行的实现技术。
二、项目设计要求
1、修改/geekos/elf.c 文件:在函数 Parse_ELF_Executable( )
中添加代码,分析 ELF 格式的可执行文件(包括分析得出 ELF 文件
头、程序头,获取可执行文件长度,代码段、数据段等信息),并填充
Exe_Format 数据结构中的域值。
2、在 Linux 环境下编译系统得到 GeekOS 镜像文件。
3、编写一个相应的 bochs 配置文件。
4、在 bochs 中运行 GeekOS 系统显示结果。
1.2.3 项目设计 2
一、项目设计目的
扩充 GeekOS 操作系统内核,使得系统能够支持用户级进程
的动态创建和执行。
二、项目 2 要求用户对以下几个文件进行修改:
1)“src/GeekOS/user.c”文件中的函数 Spawn(),其功能是生成一
个新的用户级进程;
2)“src/GeekOS/user.c”文件中的函数 Switch_To_User_Context(),
调度程序在执行一个新的进程前调用该函数以切换用户地址空间;
3)“src/GeekOS/elf.c”文件中的函数 Parse_ELF_Executable()。
该函数的实现要求和项目 1 相同。
4 )“ src/GeekOS/userseg.c ” 文 件中 主要 是 实 现 一些 为实 现 对
“src/GeekOS/user.c”中高层操作支持的函数。
Destroy_User_Context()函数的功能是释放用户态进程占用
的内存资源。
Load_User_Program()函数的功能通过加载可执行文件镜像
创建新进程的 User_Context 结构。
- 2 -
桂林电子科技大学课程设计(论文)报告用纸 第 3 页 共 28 页
Copy_From_User()和 Copy_To_User()函数的功能是在用
户地址空间和内核地址空间之间复制数据,在分段存储器管理模式下,
只要段有效,调用 memcpy 函数就可以实现这两个函数的功能。
Switch_To_Address_Space()函数的功能是通过将进程的 LDT
装入到 LDT 寄存器来激活用户的地址空间;
5)“src/GeekOS/kthread.c”文件中的 Start_User_Thread 函数和
Setup_User_Thread 函数。
Setup_User_Thread()函数的功能是为进程初始化内核栈,栈
中是为进程首次进入用户态运行时设置处理器状态要使用的数据。
Start_User_Thread ( ) 是 一 个 高 层 操 作 , 该 函 数 使 用
User_Context 对象开始一个新进程。
6)“src/GeekOS/kthread.c”文件中主要是实现用户程序要求内核
进行服务的一些系统调用函数定义。要求用户实现的有 Sys_Exit()
函数、Sys_PrintString()函数、Sys_GetKey()、Sys_SetAttr()、
Sys_GetCursor()、Sys_PutCursor()、Sys_Spawn()函数、Sys_Wait
()函数和 Sys_GetPID( )函数。
7)在 main.c 文件中改写生成第一个用户态进程的函数调用:
Spawn_Init_Process(void) 。
1.2.4 项目设计 3
一、项目设计目的
研究进程调度算法,掌握用信号量实现进程间同步的方法。
为 GeekOS 扩充进程调度算法——基于时间片轮转的进程多级反馈调
度算法,并能用信号量实现进程协作。
二、项目设计要求
(1)实现 src/geekos/syscall.c 文件中的 Sys_SetSchedulingPolicy
系统调用,它的功能是设置系统采用的何种进程调度策略;
(2)实现 src/geekos/syscall.c 文件中的 Sys_GetTimeOfDay 系统
调用,它的功能是获取全局变量 g_numTicks 的值;
(3)实现函数 Change_Scheduling_Policy(),具体实现不同调度算
法的转换。
(4) 实 现 syscall.c 中 信 号 量 有 关 的 四 个 系 统 调 用 :
sys_createsemaphore( )、sys_P( )、sys_V( )和 sys_destroysemaphore( )。
- 3 -
桂林电子科技大学课程设计(论文)报告用纸 第 4 页 共 28 页
2 系统分析
2.1 GeeKos 实验项目开发环境的搭建
一、vmware 安装
打开已经下载好的虚拟机安装包
下一步:接收协议
- 4 -