操作系统课程设计桂林电子科技大学.docx
- 文档编号:443121
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:24
- 大小:292.68KB
操作系统课程设计桂林电子科技大学.docx
《操作系统课程设计桂林电子科技大学.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计桂林电子科技大学.docx(24页珍藏版)》请在冰豆网上搜索。
操作系统课程设计桂林电子科技大学
《操作系统》
课程设计说明书
题目:
Geekos操作系统的研究与实现
学院:
计算机科学与工程学院
专业:
信息安全
姓名:
学号:
1000360213
指导教师:
黄廷辉
2013年03月20日
目录
1实验目的..................................................................3
2项目设计要求............................................................3
3如何建立开发环境.....................................................4
4项目设计原理.............................................................5
5项目设计的具体实现..................................................9
6系统编译运行的原理及结果.......................................19
7遇到问题及解决方法..................................................21
8课程设计总结.............................................................22
1实验目的
操作系统的课程设计非常又必要,可以使我们通过实验,更加深入得理解和掌握操作系统的基本理论和功能技术,将相对抽象的理论应用于实践,提高分析问题和解决问题的能力,提高编写和开发系统程序的能力。
此次课程设计,通过搭建Linux实验平台,对专门为操作系统课程教学而设计的操作系统——GeekOS的项目代码的补充和完善,从浅到深,由表面到内涵地去理解操作系统的设计思想,理解操作系统内核工作的基本原理。
在完成项目的过程中,通过动手操作,使得我们能够在动手查阅资料、思考排难等探索性活动中进一步理解操作系统的抽象概念,并进一步理解操作系统复杂的结构和工作原理。
以下是各个项目的主要目的:
项目0:
熟悉GeekOS的项目编译、调试和运行环境,掌握GeekOS运行工作过程。
项目1:
熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的用户可执行程序装入到内存,建立内核进程并运行的实现技术。
项目2:
扩充GeekOS操作系统内核,使得系统能够支持用户级进程的动态创建和执行。
2项目设计要求
2.1Project0
(1)搭建GeekOS的编译和调试平台,掌握GeekOS的内核进程工作原理。
(2)熟悉键盘操作函数,编程实现一个内核进程。
该进程的功能是:
接收键盘输入的字符并显示到屏幕上,当输入ctrl+d时,结束进程的运行。
2.2Project1
(3)修改/geekos/elf.c文件:
在函数Parse_ELF_Executable()中添加代码,分析ELF格式的可执行文件(包括分析得出ELF文件头、程序头,获取可执行文件长度,代码段、数据段等信息),并填充Exe_Format数据结构中的域值。
(4)在Linux环境下编译系统得到GeekOS镜像文件。
(5)编写一个相应的bochs配置文件。
(6)在bochs中运行GeekOS系统显示结果。
2.3Project2:
要求用户对以下几个文件进行修改:
(7)“src/GeekOS/user.c”文件中的函数Spawn(),其功能是生成一个新的用户级进程;
(8)“src/GeekOS/user.c”文件中的函数Switch_To_User_Context(),调度程序在执行一个新的进程前调用该函数以切换用户地址空间;
(9)“src/GeekOS/elf.c”文件中的函数Parse_ELF_Executable()。
该函数的实现要求和项目1相同。
(10)“src/GeekOS/userseg.c”文件中主要是实现一些为实现对“src/GeekOS/user.c”中高层操作支持的函数。
(11)“src/GeekOS/kthread.c”文件中的Start_User_Thread函数和Setup_User_Thread函数。
Setup_User_Thread()函数的功能是为进程初始化内核堆栈,堆栈中是为进程首次进入用户态运行时设置处理器状态要使用的数据。
Start_User_Thread()是一个高层操作,该函数使用User_Context对象开始一个新进程。
(12)“src/GeekOS/kthread.c”文件中主要是实现用户程序要求内核进行服务的一些系统调用函数定义。
要求用户实现的有Sys_Exit()函数、Sys_PrintString()函数、Sys_GetKey()、Sys_SetAttr()、Sys_GetCursor()、Sys_PutCursor()、Sys_Spawn()函数、Sys_Wait()函数和Sys_GetPID()函数。
(13)在main.c文件中改写生成第一个用户态进程的函数调用:
Spawn_Init_Process(void)。
3开发环境的建立
3.1开发环境的介绍
(1)Geekos是一个基于X86架构的PC机上运行的微操作系统内核,由美国马理兰大学的教师开发,是一个用C语言开发的操作系统,GeekOS主要用于操作系统课程设计,目的是使学生能够实际动手参与到一个操作系统的开发工作中。
学生可以在Linux或Unix环境下对其进行功能扩充,也可以在windows下使用Cygwin工具进行开发,其主要特点是:
简单、实用、易懂,便于学生们理解操作系统的设计思想和实现过程。
出于教学目的,这个系统内核设计简单,却又兼备实用性,它可以运行在真正的X86PC硬件平台。
(2)VMwareWorkstation
VMwareWorkstation是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试、部署新的应用程序的最佳解决方案。
它可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。
与“多启动”系统相比,VMWare采用了完全不同的概念。
多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。
VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换。
而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。
安装在VMware操作系统性能上比直接安装在硬盘上的系统低不少,因此,比较适合学习和测试。
(3)BochsPC模拟器
GeekOS运行于Windows(或Linux)下的BochsPC模拟器,Bochs是用C++开发的可移植的IA-32(x86)PC模拟器,Bochs仿真器其实质就是一台虚拟PC机,它包括对Intelx86CPU、通用I/O设备和可定制的BIOS的模拟,几乎可以运行在所有流行的平台上。
目前,Bochs可以模拟386,486,PentiumPro或者AMD64CPU。
Bochs的模拟环境中也可以运行大部分的操作系统,包括Linux,Windows95,DOS,WindowsNT4,FreeBSD,MINIX等。
3.2开发环境的构建
(1)下载并安装VMware虚拟机;
(2)在VMware虚拟机上安装CentOS版本的linux操作系统。
(3)在VMware虚拟机上的linux环境下对GeekOS源文件进行编译和链接,编译成功后生成fd.img软盘映射文件和hd.img硬盘映射文件;
(4)下载并安装系统仿真工具Bochs;
(5)在终端打开bochs-2.3-pre3$./configure配置bochs的文件
(6)make工具
无论是在Linux还是在UNIX环境中,make都是一个非常重要的系统开发工具。
利用make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。
make能够按照规则自动完成编译工作,并且可以只对程序员在上次编译后修改过的文件进行编译,减少重复编译的工作量。
它就是字符操作方式下的项目管理工具。
bochs-2.3-pre3$make
bochs-2.3-pre3$makeinstall
(7)配置Bochs环境配置文件Bochsrc.txt:
vgaromimage:
file=$BXSHARE/VGABIOS-lgpl-latest
romimage:
file=$BXSHARE/BIOS-bochs-latest,address=0xf0000
megs:
a
boot:
c
floppya:
1_44=fd.img,status=inserted
#floppya:
1_44=fd_aug.img,status=inserted
log:
./bochs.out
keyboard_serial_delay:
200
floppy_command_delay:
500
vga_update_interval:
300000
ips:
1000000
mouse:
enabled=0
private_colormap:
enabled=0
i440fxsupport:
enabled=0
(8)启动Boch环境,在提示的出现GeekOS的欢迎界面。
(9)GeekOS系统编译和仿真成功。
4项目设计原理
4.1Project0
利用bochs模拟计算机执行一个操作系统软件。
其中BIOS-bochs-lastest文件模拟bochs硬件的BIOS。
VGABIOS-lgpl-lastest文件模拟bochs显示系统的BIOS。
bochsrc.txt描述模拟器硬件配置的配置。
利用GeekOS提供的键盘处理函数keyboard.h与keyboard.c等进行键盘常用功能的模拟。
其中,在keyboard.c里面提供了一个功用函数KeycodeWait_For_Key(void),循环等待一个键盘事件,然后返回一个16位的数据Keycode型的,在keyboard.h里定义了所有的键盘代码。
Read_Key(Keycode*keycode)函数可以处理队列键盘按键,可以保存到队列中并输出。
4.2Project1
ELF(Executableandlinkingformat)文件是UNIX系统实验室作为应用程序二进制接口而开发的可执行文件,是x86Linux系统下的一种常用目标文件(objectfile)格式。
ELF文件格式如下表1。
表1ELF目标文件格式
连接程序视图
执行程序视图
ELF头部
ELF头部
程序头部表(可选)
程序头部表
节区1
段1
...
节区n
段2
...
...
...
节区头部表
节区头部表(可选)
ELF文件在磁盘中的映象和在内存中的执行程序镜像的对应关系如下图:
图1ELF文件和内存中的可执行文件镜像
内核进程的创建流程如下图:
图2内核进程流程图
Parse_ELF_Excutable函数的定义为:
int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 桂林 电子科技大学