一.GeekOS操作系统概论
1.1教学操作系统
(1)针对RISC结构MIPS处理器
操作系统:Nachos、OS/161
(2)针对CISC结构Intel IA-32 (or x86)通用处理
操作系统:MINIX、GeekOS
我们用到的是:GeekOS
1)GeekOS:是一个基于X86架构的PC机上运行的微操作系统内核
2)是一个用C语言开发的操作系统,可以在Linux或Unix环境下对其进行功能扩充
3)其针对进程、文件系统、存储管理等操作系统核心内容分别设计了7个难度逐渐增加的项目供学生选择
4)GeekOS内核设计简单,却又兼备实用性,它可以运行在真正的X86 PC硬件平台
GeekOS操作系统源文件geekos-0.3.0.zip可以从http://geekos.sourceforge.net下载。
或者直接下载本篇文章上面附的压缩包
1.2 GeekOS的项目(我们要做的项目0~5)
项目0:项目0要求实现一个内核进程,功能是实现从键盘接收按键,并在屏幕上显示。主要是熟悉GeekOS的编译、运行过程,了解计算机系统的启动原理。
项目1:项目要求熟悉ELF文件格式,并编写代码对ELF文件进行分析,并将分析传送给加载器。主要让学生熟悉可执行链接文件(ELF文件)的结构,并学会加载和运行可执行文件。
项目2:要求学生实现对用户态进程的支持。在项目2实现之前,GeekOS一直使用内核进程。对用户态进程执行的支持包括用户态进程结构的初始化、用户进程空间的初始化、用户进程切换和用户程序导入等。该项目中,存储分配依然使用分段分配方式。实现项目2后,用户就可以使用GeekOS提供的命令行解释器Shell运行一些命令来执行PFAT文件系统内的用户测试程序。
项目3:要求学生改进GeekOS的调度程序,实现基于4级反馈队列的调度算法,并实现信号量,支持进程间通信。
项目4:要求学生实现分页虚存管理,以替代在项目1和项目2中采用的分段存储管理。实现分页虚存管理后。系统在内存不够的情况下就可以将部分页调到硬盘,以释放内存实现虚拟存储技术。
项目5:要求实现GOSFS文件系统。由于GeekOS使用了虚拟文件系统,可以加载不同的文件系统,而系统默认加载的是PFAT只读文件系统。在这个项目中,需要实现一个多级目录的、可读写的文件系统。
1.3GeekOS系统源代码结构
GeekOS操作系统源文件geekos-0.3.0.zip可以从http://geekos.sourceforge.net下载。
点开src:
点开任何一个project:
二. GeekOS实验项目开发环境的搭建
(1) 下载并安装 VMware虚拟机;(下面是我踩到坑时参考的一些文章)
最新超详细VMware虚拟机安装完整教程 - 付宗乐 - 博客园 (cnblogs.com)
VMware下载安装教程(超详细)-CSDN博客
安装vm虚拟机 Failed to install the hcmon driver 解决方法 - 知乎 (zhihu.com)
VMware安装时出现 “您无权输入许可证密钥,请使用系统管理员账户重试”解决方案_你无权输入许可证密钥,请启用管理员-CSDN博客
如果还是解决不了的话只能去橙色软件找人帮忙安装了
(2)在 VMware虚拟机上安装 linux;
VMware虚拟机安装Linux教程(超详细)_vmware安装linux虚拟机-CSDN博客
(3)在 VMware虚拟机上的 linux 环境下对 GeekOS源文件进行编译和链接,编译成功后生成 fd.img 软盘映射文件和 hd.img 硬盘映射文件;
(4) 下载并安装系统仿真工具 Bochs; Bochs x86 PC emulator download | SourceForge.net
(5)配置 Bochs 环境配置文件 Bochsrc.txt;
(6)启动 Boch 环境,在提示中出现 GeekOS的欢迎界面;
(7)GeekOS系统编译和仿真成功。
(8) 开 始 安 装 好 bochs 之 后 , 对 bochsrc.txt 进 行 配 置 , 考 虑 到 bochs 自 带bochsrc-sample.txt 的比较复杂,因此对其进行改写,方便日后阅读。且将该配置文件放在各个项目之下,方便进行修改。Bochs使用配置文件中的信息来寻找使用的磁盘镜像文件,运行环境配置以及其他一些模拟器的配置信息。以project0为例,该项目的配置文件如下:
megs: 8
//megs用于设置模拟系统的内存,这里使用的是8MB。
boot: a
//引导盘镜像文件, boot用来定义模拟机器中踊跃引导启动的驱动器,可以为软盘硬盘或CDROM,这里使用虚拟软盘A来进行引导系统。
floppya: 1_44=fd.img, status=inserted
// floppya和floppyb分别表示第一个软驱和第二个软驱,如果需要从一个软盘上来引导系统则floppya就需要指向一个可引导的磁盘。
log: ./bochs.out
// log用于记录日志信息。
#Project 1以后的项目还需要ata串口驱动器,需要加上:
ata0-master: type=disk, path=diskc.img, mode=flat, cylinders=40, heads=8, spt=64
//ata0用于启动模拟系统中的ATA通道,对于每个通道必须指明两个IO基地址和一个中断请求号.