
2011操作系统课程设计.ppt
24页n教学操作系统教学操作系统有两大类,一类是针对 RISC结构MIPS处理器的,另外一类是 针对CISC结构的the Intel IA-32 (or x86)通用处理器的这样分类是因为:处理器是操作系统 运行的硬件环境中最重要的部分 第1章 GeekOS教学操作系 统概论 一、针对RISC结构MIPS处理器的教 学操作系统nNachos(Not Another Completely Heuristic Operating System)是建立在软件模拟的虚拟 机之上的教学操作系统,采用MIPS R2/3000的指 令集,能模拟主存、中断、网络以及磁盘系统等所 必须的硬件系统,美国加州大学伯克利分校多次采 用该操作系统作为课程设计平台nOS/161是运行在与操作系统无关的system/161 模拟器上的,操作系统代码是MIPS对应的机器代 码n无论是Nachos还是OS/161,若学生使用Windows或 Linux 开发环境的话,都需要使用交叉编译器才能 把代码编译成MIPS相应的机器代码二、针对针对CISC结构的Intel IA- 32 (or x86)通用处理器的教学操作 系统 nMINIX:是Andrew S. Tanenbaum( AST)于1987年开发的,目前主要有1.5 版和2.0 版两个版本在使用。
MINIX 系统 是免费的,可以从许多FTP 上下载, MINIX是一个包括了虚拟内存管理、文件 系统、设备驱动程序、网络和用户态程序 等的比较完整的操作系统,由两万多行代 码组成n对于教学有点过于庞大和复杂,而且由于 它已经实现了操作系统的全部基本功能, 没有留下合适的练习让学生自己完成 nGeekOS:是一个基于X86架构的PC机上运行的 微操作系统内核,由美国马理兰大学的教师开发 ,是一个用C语言开发的操作系统, GeekOS主 要用于操作系统课程设计,目的是使学生能够实 际动手参与到一个操作系统的开发工作中学生 可以在Linux或Unix环境下对其进行功能扩充, 也可以在windows下使用Cygwin工具进行开发 ,且其针对进程、文件系统、存储管理等操作系 统核心内容分别设计了7个难度逐渐增加的项目 供教师选择 n出于教学目的,这个系统内核设计简单,却又兼 备实用性,它可以运行在真正的X86 PC硬件平 台 三、GeekOS系统源代码结构 nGeekOS操作系统源文件geekos-0.3.0.zip可 以从下 载1.GeekOS系统源代码结构 2、GeekOS的设计项目 项目0:项目0要求实现一个内核进程,功能是实现 从键盘接收一个按键,并在屏幕上显示。
主要是让学 生熟悉GeekOS的编译、运行过程,了解计算机系统 的启动原理项目1:项目要求学生熟悉ELF文件格式,并编写代 码对ELF文件进行分析,并将分析传送给加载器主 要让学生熟悉可执行链接文件(ELF文件)的结构, 并学会加载和运行可执行文件项目2:要求学生实现对用户态进程的支持在项目2 实现之前,GeekOS一直使用内核进程对用户态进 程执行的支持包括用户态进程结构的初始化、用户进 程空间的初始化、用户进程切换和用户程序导入等 该项目中,存储分配依然使用分段分配方式实现项 目2后,用户就可以使用GeekOS提供的命令行解释器 Shell运行一些命令来执行PFAT文件系统内的用户测 试程序项目3:要求学生改进GeekOS的调度程序,实现基于 4级反馈队列的调度算法(初始GeekOS系统仅提供了 FIFO进程调度算法),并实现信号量,支持进程间通 信GeekOS的设计项目 项目4:要求学生实现分页虚存管理,以替代在项目1和 项目2中采用的分段存储管理实现分页虚存管理后系 统在内存不够的情况下就可以将部分页调到硬盘,以释放 内存实现虚拟存储技术项目5:要求实现GOSFS文件系统由于GeekOS使用了 虚拟文件系统,可以加载不同的文件系统,而系统默认加 载的是PFAT只读文件系统。
在这个项目中,需要实现一 个多极目录的、可读写的文件系统项目6:要求为文件系统增加访问控制列表,并使用匿名 半双工管道实现进程间通信GeekOS的设计项目一、GeekOS系统开发调试环境n在Windows下使用Cygwin模拟Linux的开发环境 ;n在PC机上直接安装Linux进行开发调试;n在虚拟机上安装Linux进行开发调试 ;建议使用后两种环境进行项目开发,会减少许多 不必要的困难, Linux最好使用red hat 9.0版本第2章 课程设计环境 Bochs/GeekOSGeekOS编译环境计算机硬件Windows操作系统VMware (硬件模拟器)Linux操作系统GeekOS计算机硬件Windows操作系统BOCHS(硬件模拟器)GeekOSGeekOS运行环境计算机硬件Linux操作系统BOCHS(硬件模拟器)GeekOS计算机硬件Linux操作系统GeekOS二、GeekOS开发的工具软件 nGNU gcc编译器:用来编译C语言程序代码(Linux系统自动安装)nNASM汇编器:用来编译汇编语言程序代码(Linux系统不会自动安装,在安装时需要选取)nGNU gdb调试器:用来查找程序代码错误(Linux系统自动安装)nBochs PC模拟器:用来运行GeekOS系统(在Linux系统或windows系统中需要下载软件独立安装 )nSource Insight : 程序编辑器和代码浏览器(在windows系统中需要下载软件独立安装)nGeekOS运行于Windows(或Linux)下的Bochs PC模拟器,Bochs 是用 C++ 开发的可移植的 IA-32 (x86) PC 模拟器,它包括对 Intel x86 CPU 、通用 I/O 设备和可定制的 BIOS 的模 拟,几乎可以运行在所有流行的平台上。
目前 , Bochs 可以模拟 386, 486, Pentium Pro 或 者 AMD64 CPU Bochs 的模拟环境中也可 以运行大部分的操作系统,包括 Linux, Windows 95, DOS, Windows NT 4, FreeBSD, MINIX 等 Bochs 由 Kevin Lawton 创建, 此项目当前仍由他维护 三、Bochs PC 模拟器 1、Bochs安装和使用nbochs有Linux和Windows等不同环境的软件 安装包,用户根据操作系统平台下载相应的 版本如果用户选择在Cygwin中开发调试则 选择Windows版本下载在Windows系统下 安装Bochs非常简单,直接运行安装软件,按 提示操作就可完成在Linux系统中需先解压 软件包,然后再配置编译生成系统文件n推荐使用的Bochs 版本是2.0以上,版本2.1.1 可以很好的运行GeekOSn为了模拟一台计算机执行一个操作系统软件 ,bochs需要几个文件来代替PC机硬件的不同 部分:nbochs—模拟器程序本身nBIOS-bochs-lastest—模拟bochs硬件的BIOSnVGABIOS-lgpl-lastest—模拟bochs显示系统的 BIOS。
nbochsrc.txt—描述模拟器硬件配置的配置文件ndisk image(.img)—包含了一个模拟器能引导的操 作系统镜像 2、 Bochs系统文件运行GeekOS的Bochs配置文件举 例vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000 megs: 8 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一、make工具简介n无论是在Linux还是在UNIX环境中,make都是 一个非常重要的系统开发工具。
利用make工具 ,可以将大型的开发项目分解成为多个更易于 管理的模块,对于一个包括几百个源文件的应 用程序,使用make和makefile工具就可以简洁 明快地理顺各个源文件之间纷繁复杂的相互关 系 make能够按照规则自动完成编译工作,并 且可以只对程序员在上次编译后修改过的文件 进行编译,减少重复编译的工作量 它就是字 符操作方式下的项目管理工具第3章 make工具 makefile文件内容 nMake文件包含五方面的内容,即具体规则、隐含规则、宏定义 、指令和注释下面分别对它们进行说明: u具体规则:用于阐述什么时间或怎样重新生成称为规则目 标的一个或多个文件 u隐含规则:用于阐述什么时间或怎样重新生成同一个文件 名的一系列文件 u宏宏定义:为一个宏赋一个固定的字符串值,从而在以后 的文件中能够用该宏代替这个字符串 u指令:make根据makefile文件执行一定任务的命令1)读其它makefile文件(如果包括) (2)根据变量的值判定是否使用或忽略makefile文件的 部分内容 (3)定义多行变量,即定义变量值可以包含多行字符的 变量 u以“#”开始的行是注释行,注释行在处理时将被make命令 忽略, makefile规则 n targets . : dependencys . command . . ntargets是一个目标文件或一组目标文件,可以是中间 目标文件,也可以是执行文件。
还可以是一个标签( Label),对于标签这种特性,在下面会有解释 ndependencys就是用来说明要生成对应targets所需 要的文件或是目标,即由哪些源文件来生成targetsncommand就是make需要执行的命令(任意的Shell 命令),每一个命令必须以Tab键开始,不能用空格符 号替代它是用来说明如何生成targets每一次执行make命令时,如果dependencys中有一 个以上的文件比target文件要新的话,command所定义 的命令就会被系统执行,否则表示目标文件原来已经生成 ,并且是最新的,command命令不再执行Makefile文件示例 edit : main.o kbd.occ -o edit main.o kbd.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c clean : rm edit main.o kbd.omake工作原理 在默认的方式下,只要输入make命令就可以工作具体的处理 过程如下: (1)make会在当前目录下找文件名为“Makefile”或“makefile”的 文件。
(2)如果找到,它会找文件中的第一个目标文件(target),在 上面的例子中,它会找到“edit”这个文件,并把这个文件作 为最终的目标文件 (3)如果edit文件不存在,或是edit所依赖的后面的.o文件的修改 时间要比edit这个文件新,那么,就会执行后面所定义的命 令来生成edit这个文件 (4)如果edit所依赖的.o文件也不存在,那么make会在当前文件 中找目标为.o文件的依赖性,如果找到则再根据那一个规则 生成.o文件(这有点像一个堆栈的过程) (5)如果指定的C文件和H文件是存在的, 。












