操作系统课程设计报告

本文由用户“夜凌含洛”分享发布 更新时间:2021-02-07 17:49:38 举报文档

以下为《操作系统课程设计报告》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

四 川 大 学

操作系统课程设计报告

学 院: 软 件 学 院

专 业: 软件工程专业

年 级: 08级

组 编 号:

组 成 员:

提交时间: 2010年6月24日

指导教师评阅意见:

.

. .

. .

指导教师评阅成绩::

实验项目一

项目名称:开发Shell程序

试验背景知识

Shell

此处的shell是指命令行式的shell。

文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。   shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell script是命令行命令简单的组合到一个文件里面。   Shell基本上是一个命令解释器,类似于DOS下的command.com。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。 交互式shell和非交互式shell 交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非XX悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。 shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

实验目的:

Shell是一个命令处理器(command processor)——是一个读入并解释你输入的命令的程序,它是介于使用者和操作系统之核心程序(kernel)间的一个接口。它是一个交互性命令解释器。shell 独立于操作系统,这种设计让用户可以灵活选择适合自己的shell。shell 让你在命令行键入命令,经过shell 解释后传送给操作系统(内核)执行。 为 Nachos 实现一个 Shell (字符终端)界面,通过该界面,用户可以实现类似于 Linux Shell 的大部分功能,实现Shell命令的cd,clr,dir,environ,echo,help,pause,quit,shell的环境变量应包含shell=/myshell ,其中pathname是执行Shell程序的完整路径。

参与人员及分工:

实验环境:Redhat Linux 9.0

NachOS-4.1

>试验环境的搭建:Vmware的安装,linuxd的安装,sin sight的安装

Vmware的安装

Vmware是一个虚拟机软件,它可以在windows平台上虚拟出真实机器的硬件环境的,使得我们可以在不购买新机器的情况下就可以在一个机器上运行多个操作系统。

Vmware的安装和普通的windows应用程序安装没有太大的差别,是一个相当“傻瓜”的过程,只要按照提示,依次点击“下一步”就可顺利地完成vmware的安装了。

虚拟机的创建

如果所示,在file中选择new——新虚拟机

然后选择定制创建虚拟机——选择操作系统类型(linux-redhat linux)——虚拟机名称和虚拟机文件安放的路径——虚拟机器模拟内存——网络选择——选择I/O适配器——硬盘创建——设置虚拟机器硬盘名称

如果所示:

定制虚拟机器

操作系统类型以及虚拟机名称和虚拟机文件安放的路径

虚拟机器模拟内存

网络选择

选择I/O适配器

硬盘创建

虚拟机器搭建完成以后,然后安装linux.

虚拟机创建完成后vmware 的主窗口就会多出一个标签页,这页的内容正式我们所创建的虚拟机的信息。(如图1-12)

图1-12 新建虚拟机信息



点击标签页上的“start this virtual machine”就可以启动我们刚刚创建的虚拟机,但是由于我们只是让vmware帮我们模拟出了一个硬件机器,我们还没有向这个机器上安装任何软件,所以我们的机器运行后除了一些BIOS程序的输出外别的什么也没有,也什么都不能干,所以我们需要进行下一步,向虚拟机上安装OS和应用程序。

虚拟机上linux的安装

虚拟机创建好了,vmware只是按照我们的要求模拟出了一个硬件机器,到目前位置这个虚拟机上并没有安装任何软件,也不能做任何事情。这一步的目的就是要向虚拟的硬件机器上安装linux操作系统,进而安装其他应用程序。

在虚拟机上安装linux和在真实机器上由光驱安装linux是相同的过程。

首先需要把安装光盘放到光驱中,双击主界面上的CD-ROM,弹出如图1-13对话框:

图1-13 CD-ROM对话框



如果你有光驱,也有linux的安装光盘就可以选择“Use physical drive”;如果有linux的ISO映象,就需要选“Use ISO image”,并且指定好映像的位置。安装光盘设置好后我们就可以启动虚拟机器进行安装了。

机器正常从光驱启动就会出现如图1-14的画面:Rat Hat安装界面

nachos用来分析源码,所以随便你放在linux下面的都可以。在windows下面直接用winrar就可以解压。在linux下面用命令 tar -zvxf nachos-3.4.1.tar.Z解压。

重要的是nachos4.1及其交叉编译工具的安装。

1 把nachos4.1下载到/usr/local目录

2 tar -zvxf nachos-4.1.tgz

3 进入解压后的目录,其中有code子目录,再进入其中的build.linux子目录

4 输入 make depend

5 输入 make 看看结束有没有错误,如果没有,那么就成功了。

编译好的nachos系统镜像就在build.linux目录下,运行时直接 . / nachos 就可以了。

如果要到其他目录下运行的话,还要export才行。nachos详细运行参数可以用

. / nachos -u 得到。

交叉编译工具的搭建。

把下载的交叉编译工具放到 / 目录下,即根目录下然后用tar -zvxf 命令解压即可。必须放到根目录下,因为压缩包里面包含了/usr/local的目录层次。

另外还需要编译测试程序转换工具,进入 nachos4.1/code/coff2noff

运行 . / configure

make 即可。

然后在Rat Hat上编译出nachos,其系统结构如下图所示:

Si35Setup.rar的安装

虽然在linux我们可以高效地完成所有开发所需的任务,但是对于刚刚开始接触unix/linux的同学,一下子用熟那么多的工具还是有些困难的。正是基于这一点我们的教学网站上也提供了在windows下用来阅读代码的工具Source Insight,借助于它我们可以加快代码阅读速度。

这个软件的安装是个很简单的过程只要运行setup一路next下去就可以了。

代码阅读时要先建工程,点击project-new project,然后按照要求回答源代码的位置,工程就会顺利的建成。代码阅读时如果需要一些功能比如想要查找某个符号的定义只要在选定的符号上点右键就会弹出菜单,选择相应的命令就可以了。

Nachos的介绍

Nachos的全称是“Not Another Completely Heuristic Operating System”,它是一个可修改和跟踪的操作系统教学软件。它给出了一个支持多线程和虚拟存储的操作系统骨架,可让学生在较短的时间内对操作系统中的基本原理和核心算法有一个全面和完整的了解。

Nachos的目录结构

以上操作系统可以发现在工作目录下生成一个名为nachos-3.4 的目录。该目录中含有:

copyright 文件 Nachos 的版权信息

readme 文件 Nachos 的readme 信息

nachos.ps 文件 Nachos 的介绍文档(Postscript 格式)

c++example 目录 有关C++介绍和实例

doc 目录 Nachos 各个部分介绍和原有的作业要求

code 目录 Nachos 各个部分的源代码

最主要的部分是Nachos 的源代码部分。它的目录结构是:

Makefile

Makefile.common

Makefile.dep

文件

文件

文件

Nachos 的Makefile 文件。当Nachos 需要移植到其它系统时,

可以修改Makefile.dep 中的HOST 参数

machine 目录 Nachos 虚拟机模拟部分源代码

threads 目录 Nachos 线程管理部分源代码

filesys 目录 Nachos 文件系统管理部分源代码

userprog 目录 Nachos 用户程序部分源代码

network 目录 Nachos 网络管理部分源代码

vm 目录 Nachos 虚拟内存管理部分源代码

test 目录 一些测试用应用程序

bin 目录 包含有用户程序目标码变换的程序

三、各个部分的编译运行

Nachos的各个部分都可以独立编译运行,也可以同时编译各个部分。全部编译可以采用如下

命令:

~/nachos-3.4$ make

当需要单独编译线程管理部分时,先进入threads 目录,然后采用如下命令:

~/nachos-3.4/threads$ make depend

~/nachos-3.4/threads$ make nachos

实际上,各部分目录下都有一个Makefile 文件,内容大体相同,区别在于一些条件编译的

参数。比如在单独编译线程管理部分时,文件管理部分就被屏蔽了,这样读者读者就可以专

心于线程管理部分的调试。

四、应用程序的编译

由于Linux 指令集和R2/3000 指令集不同,用户编写的应用程序用Linux 系统中标准gcc 编

译后,不能直接在Nachos 虚拟机环境下运行。所以需要采用交叉编译技术。所谓交叉编译

技术是在一个操作系统下将源码编译成另一个操作系统的目标码,这里就是在Linux 下通过

gcc 交叉编译版本将用户程序的源码编译成R2/3000 指令集的目标码。

在Linux 中,没有缺省的交叉编译工具。读者可以到XX交通大学计算机系FTP 服务器上

下载,URL 为:

ftp://donkey.cs.sjtu.edu.cn/linux/cross-compiler.tgz

该文件的解开需要有超级用户的权利,将解开至/usr/local/目录下:

/# gzip -dc cross-compiler.tgz | tar xf -

在编译用户程某某,用交叉编译器将源码编译成R2/3000 指令集的目标代码,再经过一个简

单的转换就可以在Nachos 虚拟机上运行。注意,在读者实现虚拟存储之前,有些应用程序

可能会因为使用过多的内存而不能运行。

实验内容:

本项目在实践的过程中需要注意以下要点:

Shell项目的要求

设计一个简单的命令行shell,满足下面的属性并且可以在指定的UNIX平台下执行。

这个shell支持一下内部命令:

cd——把当前默认目录改变为。如果没有参数,则显示当前目录。如果该目录不存在,会出现合适的错误信息。

cle——清屏。

dir——列出目录的内容。

environ——列出所有的环境变量。

echo——在屏幕上显示并且换行(多个空格和制表符可能被缩减为一个空格)。

help——显示用户手册,并且使用more命令过滤。

pause——停止shell操作直到按下回车键。

quit——推出shell。

shell的环境变量应该包含shell=/myshell,其中/myshell是可以执行的shell完整路径(及shell的可执行路径,而不是他在目录下的硬连接路线)。

其他的命令行输入被解释为程序的调用,shell创建并执行折个程序,并作为自己的子进程。程序的执行的环境变量包含在以下条目中:

parent=/shell,其中/myshell已经在1.i)中描述过了。

Shell必须能够从文件中提取命令输入

例如shell使用以下命令行被调用:

programname arg1 arg2 outputfile

这个批处理文件应该包括一组命令集,当到达文件结尾时shell退出。很明显,如果shell被调用是没有使用参数,他会在屏幕上显示提示符请求用户输入。

Shell必须支持i/o重定向,stdin和stdout,或者其中之一

例如命令行:

programname arg1 arg2 outputfile

使用arg1以及arg2执行程序programname,输入文件流被替换为inputfile,输出文件流被替换为outputfile.

stdout重定向应该支持一下的内部命令:

dir

environ

echo

help

以上内部命令已在1中有具体解释,本处比在叙述。

使用输出重定向时,如果重定向字符为>,则创建输出文件,如果存在则覆盖之;如果重定向字符为〉〉,也会创建输出文件,如果存在则添加到文件尾。

shell必须支持后台程序执行。如果在命令行后面添加&字符,在加载完程序后需要立刻返回命令行的提示符。命令行提示符必须包含当前路径。

写一个关于使用如何使用shell的简单的用户手册,用户手册应该包括足够的细节以方便UNIX的初学者简单方便的使用这个shell程序。

例如:解释i/o重定向,程序环境以及后台程序执行。用户手册必须命名为readme,必须为一个可以并准文件编辑器可以打开的简单的文档。

例如这个描述类型和深度的例子,cah和tcsh的在线帮助(man csh,man tcsh)。这两个shell明显比我们所谓的shell具有更加强大功能。所以用用户手册不一定要非常庞大,也不应包括编译指示——即文件列表和源代码,这个用户手册应该面向操作用户,所以台应该是一个操作用手册而不是一个程序员手册。

源代码必须有很详细得注释,并且要有很好的组织结构以方便非制作人员的阅读,维护或者修改。结构和注释使程序跟更加易于阅读和理解,并且可以保证批改你的作业的人不用很费劲的去读你的源代码。

在提交的源代码文件中,包括:

原文件

makefile

readme

并且这些源代码应该能够编译完成完整的结果。

makefile必须产生二进制未见myshell。

例如一个makefile例子:

#Joe Citizen,s***-Operating Systems Project 1

#CompLab1/01 tutor: Fred Bloggs

myshell:myshell.c utility,c myshell.h

gcc-Wall myshell.c utility.c-o myshell

在执行命令符键入make就会产生myshell程序。上述makefile从第4行必须以制表符开始。

根据上述第6点的实例中,提交的目录中应该包含以下文件:

makefile

myshell.c

utility.c

myshell.h

readme

项目说明:可以通过调用Linux下的/bin/sh来实现该项目shell,主要是实现几个nachos系统调用:SysWrite,SysRead,SysExec,SysJoin,SysStrncmp 然后就是在exception.cc中调用这些系统调用

在shell中它们的作用:

?? SysWrite: 显示提示符与shell的版本信息

?? SysRead:读取n个字符到缓存buffer

?? SysExec 与SysJoin:主要是用来执行命令,如dir 等 。如果该命令不存在则打印错误信息

?? SysStrncmp:比较两个字符串的前n个字符, 主要用来判断用户是否输入了exit命令以退出shell

Nachos中修改的地方:

1.? syscall.h

添加了代码:#define SC_Strncmp 43

int Strncmp(char *buffer,char*str,int size);

2.? Ksyscall

添加的代码:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define SHELL "/bin/sh"

int SysWrite(char*buffer ,int size,OpenFileId id)

{

return write(id,buffer,(size_t)size);

}

?

int SysRead(char*buffer ,int size,OpenFileId id)

{

return read(id, buffer, (size_t) size);

}

?

SpaceId SysExec(char* exec_name)

{

pid_t child;

内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。

建议选择第二种,方便且不需要对文件系统进行任何修改.

系统中的三类页表:

描述每个进程地址空间的页表;

虚存页表:用于描述操作系统使用的虚拟内存.它会随着地址空间的创建和销毁而动态改变其长度;

实存页表:即实际的物理内存;



如何通过进程的虚拟页表查找内存的物理地址



⑾程序改进概要:

创建虚存页表,用于记录所有使用的虚存

地址空间AddrSpace构造函数中创建页表操作应进行修改.

在Load函数中根据装载文件需要内存的尺寸,创建该进程的页表,并在虚存页表中添加相应项,将他们对应起来.

装载程某某,每一个页面根据虚存页表中的信息,存放入虚存文件或者实际内存中.

在Machine::Translate函数中,根据传入的虚地址查找当前线程地址空间中的地址表(kernel->currentThread->space);

找到对应虚存表中的项,再根据虚拟页表的项判断该页是在内存中还是在文件中.如果在内存中则直接返回物理地址,否则返回一个缺页中断的异常.

在ExceptionHandler中处理这个异常,执行页面的换入换出操作.

实验结果和结论:

[文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。

  1. RTL8723DS蓝牙问题分析
  2. Greenplum安装部署
  3. 文化的选择
  4. 微课通产品手册_智写板
  5. 中标XX桌面操作系统软件(龙某某)V7.0-用户手册
  6. 网络安全加密系统方案
  7. 《2020疫情年开学第一课(网课)》 课件 (共34张)
  8. 班主任对学生评语大全
  9. 期末评语内容
  10. 特色小镇全产业链全程方案(4大案例)
  11. 操作系统的概述教学设计
  12. 操作系统的概述课件
  13. 2.1认识windows7
  14. 幼儿教师是一个神圣的职业,肩负着为祖国培养下一代的历史重任。当一名教师容易,但是要当一名好幼儿教师却
  15. Linux学习笔记
  16. 2019民主生活会征求意见
  17. 汽修职业生涯规划书
  18. X10安装教程
  19. 实训1:安装与基本配置Windows+Server+2008
  20. 学期期末学生评语

以上为《操作系统课程设计报告》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览