GeekOS教学操作系统概论.doc
文本预览下载声明
GeekOS教学操作系统概论
1.1 引言
操作系统管理控制它为用户使用计算机提供一个方便灵活安全可靠的工作环境是其他应用软件赖以存在的基础计算机操作系统课程是理论性和实践性都较强的课程,具有概念多、抽象、涉及面广的特点UNIX或Linux环境,用C语言编程但
操作系统存在的缺点也是不容忽视的:这些操作系统结构庞大复杂,学生短时间很难,而且操作系统几乎已经实现了所有功能,不需要学生设计或实现一些子系统Intel IA-32(或X86)通用处理器的。这样分类是因为:处理器是操作系统运行的硬件环境中最重要的部分。
针对RISC结构MIPS处理器的教学操作系统有Nachos(Not Another Completely Heuristic Operating System)和OS/161。其中Nachos是建立在软件模拟的虚拟机之上的教学操作系统,采用MIPS R2/3000的指令集,能模拟主存、中断、网络以及磁盘系统等所必须的硬件系统,美国加州大学伯克利Minix和GeekOS是针对CISC结构的Intel IA-32 (或X86)通用处理器的。其中,Minix是Andrew S. Tanenbaum(AST)开发的目前主要有1.5 版和2.0 版两个版本在使用。Minix系统是免费的,可以从许多FTP 上下载Minix是一个包括了虚拟内存文件系统设备驱动程序网络和用户程序的比较完整的操作系统由两万多行代码组成对于教学有点过于庞大和复杂而且它已经实现了操作系统的全部基本功能没有留下合适的练习让学生自己完成Intel IA-32 (或X86)通用处理器,所以选用针对该结构的教学操作系统是比较合适的,我们选用GeekOS作为操作系统课程设计平台主要原因还有:它是一个用C语言开发的操作系统,学生可以在Linux或UNIX环境下对其进行功能扩充,也可以在Windows下使用Cygwin工具进行开发,且其针对进程、文件系统、存储管理等操作系统核心内容分别设计了7个难度逐渐增加的项目供教师选择。我们将在后面的章节中详细为大家介绍GeekOS教学操作系统。
1.2 GeekOS教学操作系统
1.2.1 GeekOS概述
GeekOS是一个基于X86架构的PC上运行的微操作系统内核,由美国马理兰大学的教师开发,主要用于操作系统课程设计,目的是使学生能够实际动手参与到一个操作系统的开发工作中。出于教学目的,这个系统内核设计简单,却又兼备实用性,它可以运行在真正的X86 PC硬件平台。作为一个课程设计平台,GeekOS由一个基本的操作系统内核作为基础,提供了操作系统与硬件之间的所有必备接口,实现了系统引导、实模式到保护模式的转换、中断调用及异常处理、基于段式的内存管理、FIFO进程调度算法以及内核进程、基本的输入输出(键盘作为输入设备,显示器作为输出设备),以及一个用于存放用户程序的只读文件系统PFAT。
1.2.2 GeekOS的存储器管理
GeekOS内核有两种存储器分配方式,分页分配方式和堆分配方式。
1.分页分配方式
系统中所有存储器都分成大小相等的块,称作页。在X86系统中,页的大小是4KB。若在GeekOS中增加了支持虚拟存储器的功能,页也可以是虚拟存储空间的存储单元。在不支持虚存的系统中,页也可以看作是一个固定大小的存储块,页的分配和回收用函数Alloc_Page()和Free_Page(),这两个函数的定义在头文件geekos/mem.h中。在GeekOS中每一页都是一个Page结构:
struct Page {
unsigned flags; /* 页状态 */
DEFINE_LINK(Page_List, Page); /* Page_List页链表指针*/
int clock;
ulong_t vaddr; /* 页映射到的用户空间虚拟地址 */
pte_t *entry; /* 指向页表中本页的页表项*/
};
其中DEFINE_LINK是在list.h文件中的宏定义,定义了指向链表节点的指针。GeekOS使用宏定义链表结构及操作,具体代码请参考list.h文件。系统全局页链表struct Page_List g_pageList记录内存所有页的Page结构,其中flags标记为PAGE_AVAIL的页为空闲页,s_freeList记录系统所有的空闲页。
2.堆分配方式
堆分配提供不同大小存储块的分配,使用函数Malloc()和Free()进行存储块的分配和回收。
3.系统初始化内存布局
系统初始化时由Init_Mem函数将系统内存划分为内核空间、可用空间等若干部分,如图1-1所示:其中内存空洞是系统设计时留作其他功能使用的,属保留区域。内核堆是一块
显示全部