重邮操作系统课程设计报告

时间:2019-05-12 01:43:55下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《重邮操作系统课程设计报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《重邮操作系统课程设计报告》。

第一篇:重邮操作系统课程设计报告

操作系统课程设计

班级:

姓名:

学号:

时间: 年 月 日

指导教师:

实验题目:

操作系统课程设计

实验目的:

1、掌握Linux操作系统安装的一般方法

2、掌握Linux 内核升级一般方法

3、掌握系统引导管理器Grub的使用

4、学会编写简单的模块化的字符设备驱动程序。

实验内容:(叙述自己编写的程序)

1.安装Linux操作系统: 在虚拟机平台上安装CentOS6.5:

2.实现操作系统内核的升级:

使用命令uname –r 查看系统内核版本:

到http://www.xiexiebang.com下载新内核并解压缩:

在终端进入源码目录 输入命令:

make mrproper(清除当前目录下残留的.config和.o文件)make clean(清除编译中间文件)make menuconfig(配置编译选项)开始编译内核: make bzImage make modules make modules_install 配置系统引导:

编辑文件/boot/grub/grub.conf default=0 所得结果如下:

3.编译并安装一个简单的模块化字符设备驱动程序:(1)编写驱动程序 文件memdev.c #include #include #include #include #include #include #include #include #include #include #include #include

#include “memdev.h”

static mem_major = MEMDEV_MAJOR;

module_param(mem_major, int, S_IRUGO);

struct mem_dev *mem_devp;/*设备结构体指针*/

struct cdev cdev;

/*文件打开函数*/ int mem_open(struct inode *inode, struct file *filp){

struct mem_dev *dev;

/*获取次设备号*/

int num = MINOR(inode->i_rdev);

if(num >= MEMDEV_NR_DEVS)

return-ENODEV;

dev = &mem_devp[num];

/*将设备描述结构指针赋值给文件私有数据指针*/

filp->private_data = dev;

return 0;}

/*文件释放函数*/ int mem_release(struct inode *inode, struct file *filp){

return 0;}

/*读函数*/ static ssize_t mem_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos){

unsigned long p = *ppos;

unsigned int count = size;

int ret = 0;

struct mem_dev *dev = filp->private_data;/*获得设备结构体指针*/

/*判断读位置是否有效*/

if(p >= MEMDEV_SIZE)

return 0;

if(count > MEMDEV_SIZEp;

/*读数据到用户空间*/

if(copy_to_user(buf,(void*)(dev->data + p), count))

{

ret =p)

count = MEMDEV_SIZEEFAULT;

else

{

*ppos += count;

ret = count;

printk(KERN_INFO “written %d bytes(s)from %dn”, count, p);

}

return ret;}

/* seek文件定位函数 */ static loff_t mem_llseek(struct file *filp, loff_t offset, int whence){

loff_t newpos;

switch(whence){

case 0: /* SEEK_SET */

newpos = offset;

break;

case 1: /* SEEK_CUR */

newpos = filp->f_pos + offset;

break;

case 2: /* SEEK_END */

newpos = MEMDEV_SIZE-1 + offset;

break;

default: /* can't happen */

return-EINVAL;

}

if((newpos<0)||(newpos>MEMDEV_SIZE))

return-EINVAL;

filp->f_pos = newpos;

return newpos;}

/*文件操作结构体*/ static const struct file_operations mem_fops = {.owner = THIS_MODULE,.llseek = mem_llseek,.read = mem_read,.write = mem_write,.open = mem_open,.release = mem_release, };

/*设备驱动模块加载函数*/ static int memdev_init(void){

int result;

int i;

dev_t devno = MKDEV(mem_major, 0);

/* 静态申请设备号*/

if(mem_major)

result = register_chrdev_region(devno, 2, “memdev”);

else /* 动态分配设备号 */

{

result = alloc_chrdev_region(&devno, 0, 2, “memdev”);

mem_major = MAJOR(devno);

}

if(result < 0)

return result;

/*初始化cdev结构*/

cdev_init(&cdev, &mem_fops);

cdev.owner = THIS_MODULE;

cdev.ops = &mem_fops;

/* 注册字符设备 */

cdev_add(&cdev, MKDEV(mem_major, 0), MEMDEV_NR_DEVS);

/* 为设备描述结构分配内存*/

mem_devp = kmalloc(MEMDEV_NR_DEVS * sizeof(struct mem_dev), GFP_KERNEL);

if(!mem_devp)/*申请失败*/

{

result =-ENOMEM;

goto fail_malloc;

}

memset(mem_devp, 0, sizeof(struct mem_dev));

/*为设备分配内存*/

for(i=0;i < MEMDEV_NR_DEVS;i++)

{

mem_devp[i].size = MEMDEV_SIZE;

mem_devp[i].data = kmalloc(MEMDEV_SIZE, GFP_KERNEL);

memset(mem_devp[i].data, 0, MEMDEV_SIZE);

}

return 0;

fail_malloc:

unregister_chrdev_region(devno, 1);

return result;}

/*模块卸载函数*/ static void memdev_exit(void){

cdev_del(&cdev);/*注销设备*/

kfree(mem_devp);/*释放设备结构体内存*/

unregister_chrdev_region(MKDEV(mem_major, 0), 2);/*释放设备号*/ }

MODULE_AUTHOR(“Mac.Zhong”);MODULE_LICENSE(“GPL”);

module_init(memdev_init);module_exit(memdev_exit);

文件memdev.h #ifndef _MEMDEV_H_ #define _MEMDEV_H_

#ifndef MEMDEV_MAJOR #define MEMDEV_MAJOR 88 /*预设的mem的主设备号*/ #endif

#ifndef MEMDEV_NR_DEVS #define MEMDEV_NR_DEVS 2 /*设备数*/ #endif

#ifndef MEMDEV_SIZE #define MEMDEV_SIZE 4096 #endif

/*mem设备描述结构体*/ struct mem_dev {

char *data;

unsigned long size;};

#endif /* _MEMDEV_H_ */

(2)为include创建连接文件

(3)输入如下命令:

cd /usr/include rm-rf asm linux scsi ln-s /usr/src/linux-3.2.2/include/asm-generic asm ln-s /usr/src/linux-3.2.2/include/linux linux ln-s /usr/src/linux-3.2.2/include/scsi scsi

(4)建立相应文件: cd /root mkdir firstdriver touch memdev.c #建立驱动程序文件 touch memdev.h #头文件

touch Makefile #编写Makefile Makefile: ifneq($(KERNELRELEASE),)

obj-m:=memdev.o else

KERNELDIR:=/lib/modules/$(shell uname-r)/build

PWD:=$(shell pwd)

default:

$(MAKE)-C $(KERNELDIR)M=$(PWD)modules

clean:

rm-rf *.o *.mod.c *.mod.o *.ko

endif

(5)编译驱动程序:

make-C /lib/modules/2.6.32-generic/build M=/root/firstdriver modules

(6)找到memdev.ko,将它装入内核 imsmod memdev.ko

(7)创建文件节点,mknod memdev0 c 88 0

(8)编写测试程序,测试驱动 文件test.c #include int main(){ FILE *fp0 = NULL;char Buf[4096];fp0 = fopen(“/dev/memdev0”, “r+”);if(fp0 == NULL){ printf(“Open Memdev0 Error!n”);return-1;} else { printf(“打开Memdev0成功啦!n”);} strcpy(Buf, “Mem is char device!”);printf(“写入内容BUF: %s n”, Buf);fwrite(Buf, sizeof(Buf), 1, fp0);fseek(fp0, 0, SEEK_SET);strcpy(Buf, “Buf is NULL!”);printf(“现在清空BUF: %s n”, Buf);fread(Buf, sizeof(Buf), 1, fp0);printf(“读回内容BUF: %s n”, Buf);return 0;}

遇到的问题及解决:(程序编写调试过程中出现的错误及解决方法)

1.虚拟机不会使用,听老师讲解以及百度解决;

2.linux系统命令不会使用,询问老师以及百度解决; 3.字符设备驱动程序不会编译和安装,百度解决。

心得体会:

掌握了Linux操作系统安装的一般方法,掌握了Linux 内核升级一般方法,掌握了系统引导管理器Grub的使用,学会了编写简单的模块化的字符设备驱动程序。

第二篇:软件工程课程设计重邮

《软件工程》课程设计任务书

一.目的

软件工程课程设计是软件工程专业一个综合性的实践教学环节,其目的在于促进学生复习和巩固计算机软件设计知识,加深对软件设计方法、软件设计技术和设计思想的理解,并能运用所学软件设计知识和面向对象技术进行综合软件设计,提高学生的综合应用能力。通过这次课程设计,要掌握UML(统一建模语言),并能运用UML在Visio中建模。

二.要求:

1.两人一组。

2.熟悉Visio开发环境,认真分析题目。

3.掌握UML的基本模型元素(如角色、用例、类、数据模型等),准确把握所要开发系统的功能需求,认真完成系统前期的需求分析,绘制出系统的业务流程图。

4.建立完善的角色与用例的关系,绘制出系统的用例图。

5.分析用例为完成业务目标而进行的各项任务或活动及执行顺序,绘制出用例要求所要进行的活动以及活动间的约束关系的活动图。

6.分析各用例的可能状态及状态间的转移,描述状态变化序列的起点和终点,绘制出系统的状态图。

7.进行业务流的分析,根据系统所要完成的功能和所要处理的数据,画出反映系统逻辑模型的数据流程图。

8.通过分析系统的功能要求,抽象出系统的实体类,描述各实体类的属性,建立各个实体类及它们之间的关联,绘制系统的实体类图。

9.总结分析出系统的各功能模块,绘制系统各子模块的结构图。

10.模块的结构设计完成后,进行功能模块的界面风格和要求规范的设计,实现变量命名规范和模块命名规范的设计,根据设计结果撰写各模块说明书 11.进行检查,并提交设计报告。

三.报告要求:

1.实验题目 2.需求分析

3.系统总体设计:包括角色、用例关系说明与描述,用例状态流程的说明与描述等内容。4.系统详细设计:包括详细的业务流程的设计和数据流程图的设计、相关实体类图的设计与说明等。5.心得体会

四.参考资料:

1.Martin Fowler & Kendall Scott:UML Distilled Second Edition A Brief Guide to the Standard Object Modeling Language 2.UML参考手册

3.Jason T.Roff 著 张瑜 杨继萍 等 译《UML基础教程》 清华大学出版社 4.参见本中心服务器ftp:s@172.16.38.100《软件工程》 目录下的相关文档。

五.设计内容

可自选题目,但须经过指导教师审查。

可选题目:

1.房产管理系统:

在我国住房管理是一个关系到每个人切身利益的大问题。某大学拟开发一个用计算机进行房产管理的系统,要求系统具有分房、调房、退房和咨询统计等功能。

房产科把用户申请表输入系统后,系统首先检查申请表的合法性,对不合法的申请表系统会拒绝接受;对合法的申请表则根据其类型分别进行处理。

如果是分房申请,则根据申请者的情况(年龄、工龄、职称、职务、家庭人口等)计算其分数,当分数高于阈值分数时,按分数高低将申请表插到分房队列的适当位置。每月最后一天进行一次分房活动:从空房文件中读出空房信息(房号、面积、等级、单位面积房租等);把好房优先分配给排在前面的符合该等级住房条件的申请者,从空房文件中删除这个房号的信息,从分房队列中删除该申请者;把此房号的信息和住房信息一起写入住房文件中,输出住房分配单给住户,同时计算房租写入房租文件中。

如果是退房申请,则从住房文件和房租文件中删除有关信息,再把此房号的信息写到空房文件中。

如果是调房申请,则根据申请者的情况确定其住房等级,然后在空房文件中查找属于该等级的空房,退掉原住房,再进行与分房类似的处理。

住户可向系统询问分房的阈值分数,居住某类房屋的条件,某房号的单位面积房租等信息。房产科可要求系统打印出住房情况的统计表,或更改某类房屋的居住条件、单位面积房租等信息。

2.选票统计系统:

某学会下属的各个专业委员会经常需要改选或补选,因此希望开发一个选票统计系统。

一次选举最多有10组选票,每组用于一个委员会的选举。一个组内的所有选票都在第61至80列穿有该委员会的名字,以及该委员会候选人的名字。每个委员会最多可有25名候选人。选举人欲投某候选人的票,就在选票的第21至45列(对应候选人1~25号)的相应列上穿一个减号。一张选票上允许有多个减号,因为一个委员会可能有多个空缺名额。一包选票由若干张选票组成(一个委员会一张)。选举人每人一包选票,穿好记号后交给系统去统计票数。系统首先读入基本信息(委员会名、候选人数、该委员会需补选的人数),然后读入一张选票。若选票无效时则打印出选票内容。继续下一张选票的读取;若选票有效则处理该选票,然后继续下一张选票的读取。选票全部处理完后,打印出每个委员会的每名候选人的得票数。

选票的有效性判断步骤如下: ① 核对委员会名字(61至80列),若有此名则继续; ② 检查21至45列,若只有减号或空白,则继续;

③ 检查在最后一个候选人后面还有无记号,若无则继续;

④ 统计选票上记号的总数,若不超过允许的记号数,则此张选票有效。

若上述4项有一项不合格,则此张选票无效。3.旅馆客房管理系统:

某旅馆有客房若干,客房房间朝向分南、北两种,朝南的房间又分两人间、三人间两种;朝北的房间分三人间、四人间两种。每天住宿费因房间类型而异。每个房间、床位分别有房间号、床号。

系统根据房间已住旅客性别分配性别相同的旅客住进去,若是空房间则可分配给任意同一性别的旅客住。旅客住宿登记时需登记姓名、身份证号、住址、性别、住进日期;旅客退房时根据居住天数和住房规格结算住宿金额。

4.自动售货机系统:

自动售货机系统是一种无人售货系统。售货时,顾客把硬币投入机器的投币口中,机器检查硬币的大小、重量、厚度及边缘类型。有效的硬币是一元币、五角币、一角币、五分币和一分币。其它货币都被认为是假币。机器拒收假币,并将其从退币孔退出。当机器接收了有效的硬币之后,将之送入硬币储藏器。顾客支付的货币根据硬币的面值进行累加。

自动售货机装有货物分配器,每个分配器中包含0 个或多个价格相同的货物。顾客通过选择货物分配器来选择货物。如果有货,且顾客支付的货币值不小于该货物的价格,货物将被分配到货物传送孔送给顾客,并将找零返回到退币孔。如果无货,则和顾客支付的货币值相等的硬币将被送到退币孔。如果顾客支付的货币值小于所选货物的价格,机器将等待顾客投进更多的货币。如果顾客决定不买所选择的货物,他投放进的硬币将从退币孔中退出。

5.学校医疗费管理系统:

要求数据库中存放每个职工的职工号、姓名、所属部门。职工报销医疗费时需填写所属部门、职工号、姓名、日期。医疗费分校内门诊费、校外门诊费、住院费、子女医疗费四种。该校规定,每年每个职工的医疗费有一个限额,在年初时确定,一年内医疗费不超过限额时可全部报销;超额部分报销90%,其余10%由职工个人负担。职工子女的医疗费也另有限额。

系统每天记录当天报销的若干职工或职工子女的医疗费类别、金额,在当天下班前自动结账,统计当天报销的医疗费总额,供出纳员核对。每笔账要保存备查。每天报销的费用要和各个职工已报销的金额累计起来,以便检查哪些职工已超额。系统要配有适当的查询功能。年终结算后,下一开始时要对数据库文件进行初始化。职工调离、调入本单位、或在本单位内部部门间调动,数据库文件要及时修改。

6.路障跟踪与维修系统:

某市政部门欲开发计算机控制的路障与维修系统(PHTRS)。路障被发现上报后,系统赋予该路障一个识别号码,并存入其所在街道地址、大小(按1比10的比例)、位置(路中、人行道上等等)、所属街区(根据街道地址得出)、以及维修优先级(根据其大小确定)。对每个路障有一个施工命令,包括路障位置、大小、施工队编号、施工人数、配备工具、维修的工时数,路障状态(施工中、已修复、临时修复、未修复)、材料用量、维护费用(根据维修工时、人数、材料及工具等计算得出)。最后,系统建立一个损失报告文件,记录此路障造成的损失,包括市民的姓名、地址、电话、损失类型、以及损失量(以元为单位)。PHTRS是一个在线系统,可随时查询。

7.网上超市系统:NetSuperMarket

主要功能描述:用户通过浏览器访问网上超市系统,系统以分类的形式显示所有商品,帮助用户逐步找到所要的商品;系统也提供关键词检索功能;用户在浏览商品目录是可以点击察看商品的具体信息和价格;如果满意,用户可以将商品暂时放入“购物车“;也可以随时从“购物车“中取出商品。当用户选完后可以进行付款处理,这时用户输入信用卡号,系统联系对应的银行支付系统,开始支付。最后系统应能够向管理员提供查询界面和各类报表,统计商品的销售情况。

8.网上选课系统:

主要功能描述:系统首先维护校内所有课程的信息;课程分为研究生、本科生;也可以分为必修、选修、辅修。用户以学号和密码登陆,系统显示用户以选的课程、用户有权选但未选的其他课程,并显示具体信息(如学分)。用户选择后,系统根据规则检查用户是否进行正确的选课(如时间冲突、跨专业选课等);如果错误提示用户改,否则修改选课数据库。最后系统应能够向管理员提供查询界面和各类报表,统计每门课的选课情况。

9.电子邮件客户端产品:MailAgent

主要需求描述:为连接到Internet 的网络用户提供简便快捷的电子邮件收发系统。用户建立加密账号,并且一个账号可以对应多个pop3服务器的账号;信件输入时应该对输入的文本进行自动的语法检查;对所写的e-mail地址也有合法性检查;允许有多个附件;信件可以存储在硬盘上,并压缩、加密,连线时随时可以发出,收件人可以是一个人也可以是一个组;连线时可以一次性收取多封邮件,随时可以阅读。设有地址本功能,包括人、组的设置。安全与保密要求:同一台pc机上的不同用户,可以为自己建立账号,设定密码,互相之间不能访问。

10.在线数字图书馆系统:OnlineDigiLib

主要功能描述:用户通过浏览器远程登陆到服务器,通过身份认证后并且用户有足够的余额,进入系统。系统根据用户已有的爱好记录和查询权限,在界面上列出被允许查阅书以及具体信息和状态。用户可以点击具体书籍,从服务器中取得书本内容、解码显示。用户便可以察看该书的摘要信息以及具体内容。点击现实具体内容后,系统开始计费(按书的价格*系数记费),并且能够根据一段时间的借书纪录,统计出查阅的统计信息(如查阅书排行榜)。系统还应提供用户查询记费的界面。

11.机器人足球比赛中机器人的决策控制软件: FootballPlayer

主要功能描述:在轮式机器人足球比赛中,需要你开发一个机器人行为控制软件。该软件通过由机器人眼睛中的摄像机传来的图像,解码、分析后判断出当前场上的局势(如同伴的位置、对手的位置、球的位置),并向马达控制器发出行为信号(如前进)。对违反规则的行为应该能够识别。该软件也可以连上主机,灌输有关比赛规则、进攻策略等知识。

12.防止黑客和病毒攻击的防火墙软件:FireWall

主要功能描述:该系统实时监控本主机的各个ip端口,监视每个端口的访问模式;并且维护一个攻击模式数据库;如果发现某个端口出现与攻击模式数据库相匹配的攻击时,报警,并且在2分钟后,自动关闭改端口,并保留攻击信息(如ip地址、mac地址)以备追查。用户可以通过控制面板设定对该系统更新攻击模式数据库、设置对各端口的屏蔽、对系统的开关、报警参数等;也可以察看指定时间段中的攻击行为信息。

13.机票预订系统:

为方便旅客,某航空公司拟开发一个机票预订系统。旅行社把预订机票的旅客信息(姓名、工作单位、身份证号码、旅行时间、旅行目的地等)输入该系统,系统为旅客安排航班,印出取票通知和账单。旅客在飞机起飞的前一天凭取票通知和账单到旅行社交款取票,系统校对无误即出机票给旅客。

14.患者监护系统:

目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还会延误抢救时机。某医院拟开发一个以计算机为中心的患者监护系统,基本要求是随时接收每个病人的生理信号(脉搏、体温、血压、心电图等),定时记录病人情况以形成患者日志。当某个病人的生理信号超出医生规定的安全范围时,向值班护士发出警告信息。此外,护士在需要时还可以要求系统打印出某个指定病人的病情报告。

15.技术资料管理系统:

某大学软件工程研究中心的资料室中目前大约存有1000份技术报告、论文、图书和杂志,每份资料在目录柜中都有一张索引卡。预计资料室中最终会增加到有10000份资料。为改善对资料的管理工作,打算为每份资料建立两张穿孔卡片,并且开发一个程序以完成各种检索、排序和输出的工作。

数据结构要求:为每份资料建立的一对穿孔卡片上都有4个固定格式的字符域,Ⅰ、Ⅱ域在第一张卡片上,Ⅲ、Ⅳ域在第二张卡片上。第Ⅰ域宽30个字符,包含作者(们)的姓名;第Ⅱ域宽50个字符,包含完整的或缩写的标题;第Ⅲ域宽50个字符,包含此份资料的关键字;第Ⅳ域宽30个字符,指明此份资料的出处(杂志或会议录的名字、期数、出版社等)。

功能要求:

① 读入不定长的一叠资料卡并储存它们;

② 按第一作者名字的字母顺序排列读入的数据; ③ 印出上述数据;

④ 根据卡片第Ⅲ域的内容建立关键字表,删除重复的关键字,按字母顺序排列并打印;

⑤ 在作者名字域中搜索给定的作者名字,印出此作者的著作清单; ⑥ 搜索关键字域,找出包含指定的1个、2个、或3个关键字的资料; ⑦ 对标题域中的字提供与第⑥项类似的检索功能。

输入的卡片叠中的第一张卡片指明系统应该完成的任务(可能是一串任务),因此,这张卡片实际上是程序的控制卡。程序应能在一次运行中完成多个任务。

16.房产经营管理系统:

系统中存放经营公司现有房产的地点、楼房名称、楼房总层次、房间的层次、朝向、规格(一室一厅或二室一厅或三室一厅)、面积。房间可以出售或租用,分别写出每平方米的单价和总价。客户可能随时查询未出售或未出租的房间的上述基本情况。房产经营商可随时查询已售出或出租的房产的资金回收情况及未出售或未出租的房产的资金占用情况。

17.航空交通控制系统

某小岛国决定为自己的一个飞机场建一个航空交通控制(ACT)系统。系统描述如下:

所有在该机场降落的飞机都须配有一部自动应答器,将该机的机型和航行数据以高密度打包的格式发送至ATC地面站。ATC地面站可向飞机进行信息查询。ATC地面站收到数据后,即进行解包并存入飞机数据库,系统可根据贮存信息向航空交通控制员进行计算机图形显示,该显示每10秒更新一次。所有信息经分析以确定是否存在“危险性”。航空交通控制员可就荧屏上显示的任何飞机向数据库查询有关信息。

18.文档管理系统

面向企业用户,研制开发一套文档管理系统,实现企业文档的存储、分类、维护、检索、授权等过程的全面管理。为用户主要提供如下功能:

1)登陆:用户通过浏览器登陆到系统,输入用户名和密码,登陆到系统,看到本用户所能看到的各类信息,包括文档分类树、文档的基本信息等。

2)人员组织角色管理与授权管理:创建和维护企业的人员、组织和角色,人员具有登陆名、名称、密码、邮件、手机等一些基本的属性,人员从属与一个或多个组织,具有一个或多个角色,组织间具有层次关系。提供文档按照人员与角色两种方式的授权模式。

3)文档分类管理:用户可以增删改文档的分类,文档分类间可以建立层次关系。4)文档维护:用户可以增删改文档,文档包括基本的描述信息(如文档编号、文档名、文档创建时间、创建人、大小等)及文档对应的文件列表。

5)文档检索:用户可以方便的按照文档的名称、编号、创建时间、创建人等信息进行检索。

19.客户关系管理系统

“以客户为中心”的客户关系管理成为网络时代电子商务制胜的重要因素,愈来愈受到企业的重视。客户关系管理系统,简称CRM(Customer Relationship Management),是指公司在做营销策略时关注于顾客发展,给客户以最优的管理:通过完善的客户支持平台、客户交互平台、企业生产平台、最大限度地实现顾客支付价值、顾客终身价值,这样让公司的潜在客户变成现实客户、现实客户变成忠诚客户,通过满足每个客户特殊需求,与客户建立长期稳定的关系。项目拟研制一个基于B/S架构的客户关系管理系统,实现对客户数据的管理,系统提供的主要功能如下:

1)客户资料管理:主要实现客户资料的录入、修改、保存、删除、以及查询等功能。客户资料的主要内容包括:用户编码、用户单位名称、用户单位法人代表、邮政编码、用户单位的联系地址、用户单位的联系部门、用户单位的代理人、用户单位的银行账号、电话挂号、相关销售员编码、联系电话、开户行、税号、用户单位所在区域、购买产品类型、购买日期、购买合同编号等资料。客户资料的查询功能提供根据客户名称、地域、客户代码、客户的单位地址等属性进行查询的功能。

2)客户支持管理:由客户使用支持、技术服务培训及顾客联系提醒两个部分。技术支持:将公司对产品使用培训文档转换成电子文档,由客户自己上网了解产品的性能。技术服务培训:实现公司的培训计划、培训对象的录入、修改、删除、保存功能以及将公司对公司技术人员的培训内容作成电子文档,在局域网内由公司的技术人员自由阅读,除此之外还提供培训提醒功能。顾客联系提醒:根据服务部门的条件设定实现服务人员对顾客的联系的定期提醒。

3)售后服务管理:由服务质量检查考核管理、走访顾客管理二个部分组成。服务质量检查考核管理:实现服务质量检查考核单的生成、录入、删除、存档等功能。走访顾客管理:实现走访顾客记录单的生成、录入、删除、存档等功能,并根据提供的测评方法自动产生测评结果。

4)投诉管理子模块由正常信息反馈、客户投诉、信息处理三个部分组成。正常信息反馈:根据客户的信息反馈生成信息反馈单,并实现对客户的信息反馈单的维护功能。客户投诉:根据基础数据管理中对投诉的分类生成顾客投诉单,并实现对顾客投诉单的维护功能。信息处理:根据公司的规定,对顾客的反馈信息及客户投诉进行处理,并生成信息处理单,以及实现对信息处理单的保存、删除、存档等维护功能。

5)新品市场反馈:结合客户新品开发档案,输入市场反馈情况,并通过量化来对比所有新品的反馈分,进而分析新品的市场销售趋势。

20.设备管理系统

生产型企业中存在大量的设备,如何对这些设备进行全面管理是企业管理的重要内容。项目拟研发基于B/S架构的设备管理系统,包括设备申购、设备台账、车间设备使用、使用状况查询分析四部分组成。其中设备申购是一个过程,包括设备申请采购、启用和封存、报废过程。设备台账是对所有的设备建立的一个台账,并提供设备查询功能。车间设备使用主要是记录设备使用过程中的各种情况,包括日常维修、设备交接班记录等。使用状况查询分析是根据设备台账,来查询车间设备使用的各种情况,进行一定的分析。

设备管理涉及多个表单,其中主要表单如下:

1)设备的基本信息表:设备名称、规格/型号、产地、价格、原台账数、购入时间、是否在建、整机、使用时间、折价年限、设备存放车间、现台账数、车间号、新开发、性能、凭证号数、设备原号、备注。

2)设备购置申请表:设备名称、型号规格、数量、要求进货时间、申请理由、申请部门、申请时间、主要技术要求。

3)设备启用和封存表:设备名称、设备编号、型号/规格、封存地点、封存日期、启封日期、技术状况随机附件、备注,申请设备封存理由(启封)原因、使用部门意见、设备科意见、制造部意见、副总经理批准、申请单位负责人。4)设备报废表:设备名称、设备编号、型号/规格、安装地点、申请设备报废原因、备注,报废设备处置方案、使用部门负责人、设备科、制造部、副总经理审批。

5)日常维修表:日期、机床编号、责任人、检查人。输入完成后,自动生成上月21日到本月20日的监督内容子表,并逐条输入每日监督内容,分成包洁区卫生(生产区域卫生)类:地面、墙壁、玻璃、工具箱;设备类:机床外表、导轨丝杆清洁无拉伤加油、其他;定置摆放类:工装刀量具摆放、余料摆放、其他;及其他规章制度遵守情况、处置措施、检查人、监督人。

6)设备交接记录:输入设备编号,自动根据设备检查项目表中得到所有项目及分数生成多条记录,自动记录日期、设备编号、检查项目及状况、标准、分数,选择班次(两班制的,1表示白班,2表示夜班;三班制的,1表示白班1,2表示白班2,3表示夜班),输入各项目的班组自查结果,自动生成每日评分,记录交班人、接班人,如果每日评分低于合格分数的,需要输入车间处理结果和监督抽查结果。

21.宠物医院

为宠物主人和宠物医院间建立一个沟通的平台,主要提供如下功能。

医院管理:医院的注册申请需要提供营业执照、资质证书等材料,经由管理员审核通过后,该医院才能成为网站的会员,并且根据医院的医疗条件,医院会被评定有不同的星级水平。医院申请的时候需提供一个密码,以后医生要申请成为该医院的医生必须输入该密码。

医生管理:可以申请某个医院的医生,申请加入时需输入该医院的密码,当成为医生之后,就可以对用户提出的问诊进行诊断。用户可以通过网站,查找到所以医生的信息

在线问诊:每个个人会员都可以进行问诊,用户输入病症的一些基本描述,这个描述有一个特定格式,类似于病历。医生对每一个为诊断的问诊都可以做出诊断。对于之前的一些问诊,用户都可以查询得到。

22.基于B/S架构的网络论坛

为各类门户网站提供一个可定时开放的、安全高效的BBS论坛系统,使之成为公众就关心的重大问题和疑难问题交流的平台。论坛具有以下功能:

1)用户注册登陆:用户可自定义用户名、密码、密码提示问题和答案、个人头衔、门派、签名、自我简介等信息,可以自定义个性头像和登陆风格; 2)发帖回复功能:可以发新信息(新帖)、回复(跟随)等,可以发起投票统计并自动统计调查结果,可提供图形化显示功能;

3)短消息功能:用户可以在论坛内部相互发送短消息,系统自动提示未读短消息;

4)论坛公告功能:管理员可以发布各类论坛公告,最新公告以滚动条的形式出现在论坛最上方;

5)设定分论坛功能:管理员可自由设定分论坛的主题,可同时设置多个论坛,每个分论坛都具有定时开通功能。可为每个分论坛配置版主(分论坛管理员); 6)内容安全过滤:系统对网友的发言进行过滤,系统可设定某些关键字(例如“法轮功”)进行报警或自动用“*”号替换,系统对报警的信息自动添加特别记号重点标明; 7)人工审核功能:所有的网友发言信息必须经过管理员审核通过才能发布,提供“控制开关”,即如果审核通过,点“通过”按钮即可,需要删除的点“删除”按钮即可;

8)论坛检索功能:可以根据发帖的主题、内容关键字、作者、分论坛等信息搜索论坛内已有的文章;

9)定时开通功能:管理员可控制论坛的开通和关闭,可设定关闭后不可再发帖或不可再访问;

10)用户系统检测:系统可自动检测在线用户IP地址、操作系统、浏览器版本并可显示所有在线用户; 11)生日提醒功能:根据注册用户填写的注册信息,在用户生日到来时自动提醒; 12)论坛在线统计:自动统计在线用户数并列表显示在线用户;自动统计用户的发帖数、跟帖数(回复数)、访问次数和点击量。

第三篇:重邮51单片机课程设计报告(推荐)

重邮专用

51单片机课程设计报告

学院:

专业班级:姓名:

指导教师:

设计时间:

51单片机课程设计

一、设计任务与要求

1.任务:制作并调试51单片机学习板 2.要求:

(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会看电路原理图;

(3)制作51单片机学习板;

(4)学会使用Keil C软件下载调试程序;

用调试程序将51单片机学习板调试成功。

二、总原理图及元器件清单

1.总原理图

要求:用铅笔在A4纸整页绘制

2.元件清单

三、模块电路分析

1.最小系统:

单片机最小系统电路分为振荡电路和复位电路,振荡电路选用 12MHz 高精度晶振, 振荡电容选用 22p和30p 独石电容;

晶振为单片机提供时钟激励,保证单片机内部和外部电路的时序逻辑电路协调动作,课程中使用的是12M的晶振,可以产生每秒12M频率的激

励。而构成振荡回路的俩个电容为负载电容,可以影响晶振的谐振频率和振荡幅度。

图 1图

2复位电路使用 RC 电路,使用普通的电解电容与金属膜电阻即可;

3当单片机上电瞬间由于电容电压不能突变会使电容两边的电位相同,此时RST为高电平,之后随着时间推移电源负极通过电阻对电容放电,放完电时RST为低电平。正常工作为低电平,高电平复位。(分析振荡电路:测振荡频率; 分析复位电路:高或低电平复位?)

2.显示模块:

发光二极管显示电路:

Usb的为系统加电时,power的发光二极管处于高电位,发光。当程序控制其余四个脚的电位为低电位,输出端口为高电位,剩下的四个发光二极管发光

4数码管显示电路

本课程使用数码管显示状态为静态显示。静态显示就是显示驱动电路具有

输出锁存功能。单片机将所要显示的数据输出后,数码管显示数据不变。Cpu不再控制led。静态显示的接口电路采用一个并行口接一个数码管。数码管的公共端按共阴极或共阳极分别接地或

VCC

5四、硬件调试

1、是否短路

用万用表检查P2两端是短路。电阻为0,则短路,电阻为一适值,电路正常。

2、焊接顺序

焊接的顺序很重要,按功能划分的器件进行焊接,顺序是功能部件的焊接--调试--另一功能部件的焊接,这样容易找到问题的所在。

3、器件功能

1)检查原理图连接是否正确

2)检查原理图与PCB图是否一致

3)检查原理图与器件的DATASHEET上引脚是否一致 4)用万用表检查是否有虚焊,引脚短路现象

5)查询器件的DATASHEET,分析一下时序是否一致,同时分析一下命令字是否正确

6)通过示波器对芯片各个引脚进行检查,检查地址线是否有信号的7)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,才能找到问题出现在什么地方。

六、软件调试

1、设置硬件仿真环境

单片机应用系统程序的编译和仿真在KeilμVision环境下进行,在调试程序之前,需要对工程进行Debug设置,选择软件仿真或硬件仿真。软件仿真使用计算机来模拟程序的运行,不需要建立硬件平台就可以快速得到某些运行结果;硬件仿真是最准确的仿真方法,必须建立硬件平台,通过PC机→硬件仿真器→用户目标系统进行系统调试。采用硬件仿真的方法,硬件平台即为带有图1所示接口电路的单片机应用系统,设置硬件仿真环境的具体操作步骤如下:

首先,点击所建工程:Project菜单中的Options for Target„Targer 1‟,出现工程的配置窗口,点击Debug设置,选择KeilMcmitor-51 Driver,具体参数设置如图6所示。

图 6

然后,设置仿真器参数。建议波特率设置范围300~38 400。为避免程序中的中断和Keil硬件仿真环境中的中断互相冲突,不选择“Stop ProgramExecution with SerialInterrupt”。仿真器参数的设置如图7所示。

图7

完成51单片机在Keil μVision环境中的硬件仿真环境设置后,可以进行程序的调试仿真。

2、调试仿真

1)导入测试代码:文件→打开→key and display.Uv2 2)重建全部工程:工程→重建全部目标文件

重建结果为,“DA_5615” – 0 Error(s), 0 Warning(s).3)调试:调试→Start/Stop Debug session(Ctrl + F5)

调试结果为:Connected to Monitor_51 V3.4Load “C:......DA_56511、详细描述软件调试步骤。及各模块调试结果。

2、详细描述调试过程中出现的故障现象,并作故障分析,及解决方法

七、心得

自己写啦~~

第四篇:操作系统课程设计报告

课程设计报告

题 目: 模拟请求页式管理

课程名称: 计算机操作系统 学 院: 信息工程学院

专 业: 计算机科学与技术

班 级: 14计本(1)学生姓名: * * * 学 号: 201403031** 指导教师: * * 成 绩:

开课时间: 2016-2017 学年 一 学期

模拟请求页式管理

第1章 需求分析

1.1设计要求

请求页式管理是一种常用的虚拟存储管理技术。本设计通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。本实验要求用Vc++或其他高级语言编写和调试。

编写程序实现:

(1)先进先出页面置换算法(FIFO)(2)最近最久未使用页面置换算法(LRU)最佳置换页面置换算法(OPT)设计一个虚拟存储区和内存工作区,编程序演示以上三种算法的具体实现过程,并计算访问命中率。

1.2解决方案

首先确定实现语言使用c#实现图形化界面,后确定要实现哪些功能,比如算法选择,页面添加,模拟控制。然后确定输出结构以便于程序的测试和验证。将基本框架建立后再进行编程。编程前进行算法结构分析最后编程实现。

1.3算法实现原理

1、先进先出置换算法(FIFO):

发生缺页中断时按照页面进入内存顺序总是淘汰最先进入内存的页面。

2、最近最久未使用置换算法(LRU):

发生缺页中断时总是淘汰存在内存中最长时间未被使用的页面。

3、最佳置换算法(OPT):

发生缺页中断时若一个或几个页面将来将不会被调用则按先进先出原则淘汰页面,若将来都有调用则比较调用时刻选择最远时刻页面淘汰。

4、缺页率:缺页次数占页面调用次数的百分比。

第2章 概要设计

2.1数据设计

常变量:调用页面最大数量(MaxN),内存最大页面数(MaxM)待调用页面数组:page_dd[MaxN]存放等待调用的页面号

页面数组专用指针 page_p,用于指向page_dd数组中正需调入内存的页号 内存块数组:Memery[MaxM],存放内存当前存放的页号 缺页计数器:count,记录缺页次数

内存块状态数组:M1[MaxN],M2[MaxN],M3[MaxN],记录每次页面调用结束后内存各块的状态

缺页记录数组s[MaxN],用于记录页面调用时是否产生缺页中断,初始化为是

2.2函数设计

1、页面添加函数:void btnAdd_Click(object sender, EventArgs e)用于实现通过点击按钮实现数据输入。

2、内存初始化函数:init(int[] a, int[] b,int []m1,int[]m2,int[]m3)参数有页面数组、内存数组、状态数组,采用先进先出算法对内存先进行装满 服务于先进先出页面置换函数和最佳置换函数。

3、输出函数:void display(int[]a,int[]m1,int[]m2,int[]m3,char[]c)用于输出模拟结果,参数有页面数组,内存数组,状态数组,缺页记录数组。再模拟之后调用。

4、模拟控制函数:void btnmo_Click(object sender, EventArgs e)用于实现通过单击模拟按钮,根据用户所选算法进行模拟并显示结果。

5、先进先出算法模拟函数:

void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s)用于实现先进先出算法模拟,参数有页面数组,内存数组、内存状态记录数组,缺页记录数组。在模拟函数中调用。

6、最近最久未使用算法模拟函数:

void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于 3 实现最近最久未使用算法模拟,参数有页面数组,内存数组,内存状态记录数组,缺页记录数组。在模拟函数中被调用。

7、最近最久未使用函数辅助函数:void LUR_I(int[] a,int e)用于对最近最久未使用算法中所用辅助数组(记录页面存在时长)进行调整,参数有辅助数组及需调整的数据下标。在最近最久未使用函数中调用。

8、最佳置换算法模拟函数:

void OPT(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于模拟最佳置换算法。参数有页面数组,内存数组,内存状态记录数组,缺页记录数组。在模拟函数中被调用。

9、最佳置换算法辅助函数:void OPT_F(int[] a, int e)用于对最佳置换算法中的辅助数组进行调整。参数有辅助数组,需调整数据下标。在最佳置换算法中被调用。

10、重置函数:void btncz_Click(object sender, EventArgs e)用于重新选择算法进行新的模拟。

2.3主要算法设计

1、初始化函数算法:

第一步:将第一个页面调入内存,调整最佳置换算法辅助数组,缺页计数器加一,保存内存数组状态。

第二步:调用下一个页面并判断内存中是否有本页面有转第三步,无转第四步。第三步:更改缺页数组对应下标值,记录当前内存状态,调整最佳置换算法辅助数组,页面指针指向下一页。

第四步:将页面调入内存,调整最佳置换算法辅助函数,缺页计数器加一,保存内存数组状态。若内存尚不满转第一步。具体见图1初始化算法流程图。

开始页面调入内存缺页计数器加一记录内存状态调用下一页否否内存是否有该页面是记录内存状态修改缺页数组内存已满是结束

图1 初始化算法流程图

2、先进先出页面置换算法:

第一步:检查内存中是否已有需调用页面,有则转第二步,无则转第三步。第二步:记录当前内存状态,修改缺页数组对应下标值。

第三步:内存中无需要调用的页面,进行出队操作,然后进行入队操作,记录内存块状态,缺页计数器加一。

第四步:若页面数组未被调用结束转第一步。具体见图2先进先出算法流程图。

开始页面调入内存该页在内存中是否已存在是否否先出队操作后入队操作记录内存状态修改缺页数组值记录内存状态缺页计数器加一页面调用结束是结束

图2 先进先出算法流程图

3、最近最久未使用置换算法:

第一步:将页面调入内存,记录内存状态,缺页计数器加一,调整辅助数组,页面指针加一。

第二步:检查内存中是否已有所需页面,有转第三步,无转第一步。

第三步:修改缺页数组对应下标记录,记录内存状态,调整辅助数组,页面指针加一。第四步:内存是否已满,无则转第一步,是则转第五步。

第五步:检查内存中是否有所需页面,有则记录当前内存状态,修改缺页数组对应下标值。无则转第六步。

第六步:检查辅助数组找出最大值并记录其下标,置换内存中对应下标的数据,调整辅助数组,缺页计数器加一。

第七步:页面是否调用结束未结束则转第五步。具体见图3最近最久未使用算法流程图。

开始调入页面至内存记录内存状态计数器加一否调整辅助数组调用下一页内存中是否已有该页否内存已满是通过辅助数组确定淘汰页面是修改缺页数组记录内存状态调整辅助数组否页面置换记录内存状态计数器加一调用结束是结束

图3 最近最久未使用算法

4、最佳置换算法:

第一步:检查内存中是否已有所需页面,有则记录内存状态,修改缺页数组对应下标数值。无则转第二步。

第二步:判断内存中各页面的未来调用情况,记录是否还有调用,若有则记录调用时刻。

第三步:分析调用情况,内存中页面都在将来不会被调用转第四步,有一个被调用转第五步,有两个被调用转第六步,全被调用转第七步。

第四步:查找辅助数组找到内存中存在时间最长的页面进行置换,修改内存状态,缺页计数器加一,修改辅助数组。

第五步:查找到不会被调用的页面,并根据辅助数组选择最早进入内存的页面将其置换。修改内存状态,缺页计数器加一,修改辅助数组。

第六步:查找辅助数组找到将来不需要在调用的页面将其置换,修改辅助数组,记录内存状态,缺页计数器加一。

第七步:查找辅助数组,找寻最晚被调用的页面,将其置换。记录内存状态,修改辅助数组,缺页计数器加一。

第八步:页面是否调用完成,否则转第一步。具体见图4最佳置换算法流程图

开始调入页面记录内存状态计数器加一更新辅助函数是页面已存在否向后检查内存当前页面调用情况所有页面都不会再度调用否是一个页面会调用否否是两个页面会调用是否查找辅助数组得到最先进入页面通过辅助数组得到不会再调用的页面通过辅助数组获取最晚调用的页面通过辅助数组得到另外两个页面中最先进入的页面置换页面记录内存状态计数器加一更新辅助函数页面调用结束是结束

图4 最佳置换算法流程图 2.4界面设计

采用c# 设计windows窗体应用程序,使用下拉列表框选择算法,通过按钮添加待调用的页面。通过文本控件显示模拟结果。显示样式:第一行:算法名称;

第二行:调用页面顺序;

第三行至第五行显示内存在每调用一次页面后的状态;

第六行:是否缺页;

最后一行显示缺页率;

第3章 详细设计与实现

3.1函数设计

1、添加按钮功能实现代码

主要功能:实现单击一次添加一个调用页面,并给出相应的提示,如正在输入的是第几次调度页面,在输入为空时能够弹出对话框提示用户,在输入完成时为避免数组越界应在输入完成时隐藏;输入过程中始终保证时输入焦点。private void btnAdd_Click(object sender, EventArgs e){ if(txtAdd.Text!= “")//输入不为空才能继续输入 { page_dd[i_add] = Convert.ToInt32(txtAdd.Text);/*将输入值赋值给页面数组*/ txtShow.Text += txtAdd.Text + ” “;/*显示供用户查阅*/ i_add++;txtAdd.Clear();/*清空*/ if(i_add == MaxN)//输入结束时 { txtAdd.ReadOnly = true;//不允许继续输入 btnAdd.Hide();//按钮隐藏 return;} txtAdd.Focus();//设置为输入焦点

label2.Text = ”第“ +(i_add + 1)+ ”次调度页面:“;/*提示用户正在输入的是第几次调度页面*/ } /*输入为空则弹出对话框提示用户输入为空*/ else { MessageBox.Show(”请输入调用页面!“, ”输入为空“, MessageBoxButtons.OK, MessageBoxIcon.Warning);txtAdd.Focus();} }

2、初始化函数

主要功能:将内存一先进先出方式填满,并记录每个页面进入时间,服务于先进先出页面置换算法和最佳置换算法。

void init(int[] a, int[] b,int []m1,int[]m2,int[]m3){ /*内存未满时循环*/ for(int i = 0;i < MaxM&&page_p

//调整辅助数组将刚进入内存的页面的对应时间 OPT_F(O_Q ,i); count++;//缺页计数器加一 m1[page_p] = b[0];//保存内存状态 m2[page_p] = b[1];m3[page_p] = b[2];page_p++;//调用下一页面

//检查内存中是否原先就有需要的页面; for(int j = 0;j <= i&&page_p

s[page_p] = 'F';//缺页数组对应数据更改 m1[page_p] = b[0];//记录内存状态 m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q,-1);//调整最佳置换算法辅助函数 page_p++;//调用下一页 j =-1;//重新开始寻找 } } } }

3、先进先出页面置换函数

主要功能:根据先进先出算法要求在产生缺页中断时采用先进先出方式确定淘汰页面,并在每次页面调用时记录下内存状态,缺页次数;采用循环队列使得每次出队的一定是最先进入内存的。

private void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s){ int Fpage_p = page_p;int front, rear;//定义队列对手和对尾指针并初始化 front = 0;rear = MaxM1;int sa;for(;Fpage_p < MaxN;Fpage_p++){ sa = 0;for(int i = 0;i < MaxM;i++)//检查内存中是否已有要调用的页面。

{ if(b[i] == a[Fpage_p]){ m1[Fpage_p] = b[0];m2[Fpage_p] = b[1];m3[Fpage_p] = b[2];s[Fpage_p] = 'F';sa = 1;break;} } if(sa == 0){ front =(front + 1)% MaxM;

rear =(rear + 1)% MaxM;b[rear] = a[Fpage_p];m1[Fpage_p] = b[0];m2[Fpage_p] = b[1];m3[Fpage_p] = b[2];count++;} else continue;} } /*最近最久未使用算法辅助数组调整函数*/ private void LUR_I(int[] a,int e){ int temp;temp = a[e];a[e] = 1;for(int i = 0;i < MaxM;i++){ if(a[i] < temp && i!=e)a[i]++;} } /*最佳置换算法辅助数组调整函数*/ private void OPT_F(int[] a, int e){ if(e!=-1){ a[e] = 0;for(int i = 0;i < MaxM;i++){ if(i!= e)a[i]++;} } else for(int i = 0;i < MaxM;i++){ a[i]++;} } /*最近最久未使用算法*/ private void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s){

int[] L_Q = new int[MaxM]{3,3,3};int sa;for(int i = 0;i < MaxM && page_p < MaxN;i++){ b[i] = a[page_p];//调入内存 count++;m1[page_p] = b[0];//保存内存状态 m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, i);page_p++;for(int j = 0;j <= i && page_p < MaxN;j++){ if(b[j] == a[page_p]){ s[page_p] = 'F';m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, j);page_p++;j =-1;} } } for(;page_p < MaxN;page_p++){ sa = 0;for(int i = 0;i < MaxM;i++)//用的页面。{ if(b[i] == a[page_p]){ m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];s[page_p] = 'F';LUR_I(L_Q, i);sa = 1;break;} } if(sa == 0){

检查内存中是否已有要调40 for(int i = 0;i < MaxM;i++){ if(L_Q[i] == 3){ b[i] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, i);break;} } count++;} else continue;} } /*最佳置换算法*/ private void OPT(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s){ int sa;int O_p;int Ocount;int[] OPT_I=new int [MaxM ]{-1 ,-1 ,-1 };int[] OPT_J=new int [MaxM]{MaxN ,MaxN ,MaxN };for(;page_p < MaxN;page_p++){ for(int i = 0;i < MaxM;i++){ OPT_I[i] =-1;//刷新状态数组 OPT_J[i] = MaxN;} sa = 0;for(int i = 0;i < MaxM;i++)//检查内存中是否已有要调用的页面。

{

if(b[i] == a[page_p]){ m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q,-1);

s[page_p] = 'F';sa = 1;break;} } if(sa == 0)//缺页 { Ocount = 0;for(int i = 0;i < MaxM;i++){ O_p = page_p + 1;for(;O_p < MaxN;O_p++){ if(b[i] == a[O_p]){ Ocount++;OPT_I[i] = 1;OPT_J[i] = O_p;break;} } } switch(Ocount){ case 0://全部页面以后都不会再度调用 int temp = 0;for(int i = 0;i < MaxM;i++){ if(O_Q[i] > O_Q[temp])temp = i;} b[temp] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q ,temp);count++;break;case 1://有一个页面将在以后调用 temp = 0;for(int i = 0;i < MaxM;i++){ if(OPT_I[i]!= 1 && O_Q[i] > O_Q[temp])temp = i;

} b[temp] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q ,temp);count++;break;case 2: for(int i = 0;i < MaxM;i++){ if(OPT_I[i] ==-1){ b[i] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q, i);count++;} } break;case 3: int p = 0;for(int i = 0;i < MaxM;i++){ if(OPT_J[i] >OPT_J[p])p = i;} b[p] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q, p);count++;break;} } } } /*重置函数*/ private void btncz_Click(object sender, EventArgs e){ comboBox1.SelectedIndex = 0;

txtAdd.Text = ”“;page_p = 0;i_add = 0;count = 0;//txtShow.Text = ”";for(int i = 0;i < MaxM;i++)Memery[i] =-1;for(int i = 0;i < MaxN;i++)s[i] = 'T';} } }

第五篇:操作系统课程设计报告

操 作 系 统

学院:计算机科学与技术学院

班级:计112

学号:1113022032

姓名:

一、实验名称:

用C++实现驱动调度算法、页面替换算法、银行家算法、处理器调度算法

二、实验要求:

书写实验报告,包括的内容有:

(1)实验题目

(2)程序中使用的数据结构及主要文字说明

(3)带有注释的源程序

(4)执行程序说明,表明各进程控制快的初始状态,以及各算法的运行状态

(5)通过实验后的收获与体会及对实验的改进意见和见解

二、实验目的:

通过自己编程来实现各类操作系统算法,进一步理解操作系统的概念及含义,提高对操作系统的认识,同时提高自己的动手实践能力。加强我们对各类算法的理解。

三、实验内容:

1、实现页面替换算法

(1)FIFO 先进先出页面替换算法

(2)LRU最近最少使用页面替换算法

(3)LFU最少使用频率页面替换算法

2、银行家算法

3、实现驱动调度算法

(1)先来先服务算法

(2)电梯算法

(3)扫描算法

4、实现处理器调度

(1)先进先出处理器调度

(2)时间片轮转法

(3)优先级调度

四、实验原理:

1、页面替换算法

先进先出页面置换算法:该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面加以淘汰。将已调入内存的页面按先后次序链接成一个队列,将最先调入的页面与新页面进行置换

最近最久未使用置换算法:该算法是利用“最近的过去”作为“最近的将来”,将最近最久未使用的页面加以淘汰。将已调入内存的页面按先后顺序链接成一个队列,为每一个页面增加一个访问字段,用来记录一个页面自上次被访问以来所经历的是时间t,当需淘汰一个页面时,选择现有页面中其t值最大,即最近最久未使用的页面加以淘汰

2、银行家算法

先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。

3、驱动调度算法

先进先出算法(FIFO):总是严格按时间顺序对磁盘请求予以处理。算法实现简单、易于理解并且相对公平,不会发生进程饿死现象。但该算法可能会移动的柱面数较多并且会

经常更换移动方向,效率有待提高

电梯调度算法:总是将一个方向上的请求全部处理完后,才改变方向继续处理其他请求。

扫描算法(scan algorithm):总是从最外向最内(或最内向最外)进行扫描,然后在从最内向最外(或最外向最内)扫描。该算法与电梯调度算法的区别是电梯调度在没有最外或最内的请求时不会移动到最外或最内柱面。

4、处理器调度算法

先进先出处理器调度:按照作业进入系统后备工作队列的先后次序来挑选作业,先进入系统的作业将优先被挑选进入主存,创建用户进程,分配所需资源,然后移入就绪队列。

时间片轮转法调度算法:调度次序每次把CPU分配给就绪队列进程/线程使用规

定的时间间隔,就绪队列中每个进程/线程轮流的运行一个时间片,当时间片耗尽时,就强迫当前运行进程/线程让出处理器,转而排列到就绪队列尾部,等候下一轮调度。

优先级调度:根据确定的优先级来选取进程/线程,总是选择就绪队列中的优先

级最高者投入运行,即优先级越高,先被调用。

五、数据结构设计

对操作系统的各类算法设计数据结构如下:

页面替换算法:void FIFO();void LRU();void LFU();

银行家算法:void Init()初始化算法

void Bank()银行家算法

bool Safe()安全性算法

驱动调度算法:

struct MagneticHead//磁头构成{

int site;

int count;

bool direct;

};

struct Range//磁盘磁道范围

{

int mStart;

int mEnd;

};

struct RequestList//请求序列

{

int site;

bool state;

};

struct Data//基本数据集合{

MagneticHead magneticHead;

RequestList *requestList;

int *executeList;

Range range;

int length;

};

处理器调度:

typedef struct pcb//时间片轮转法

{

char pname[N];

int runtime;

int arrivetime;

char state;

struct pcb*next;

}PCB;

typedef struct PCB1//先进先出服务

{

char ID[3];//进程号

char name[10];//进程名

char state;//运行状态

floatarrivetime;//到达时间

floatstarttime;//进程开始时间

floatfinishtime;//进程结束时间

floatservicetime;//服务时间

float turnaroundtime;//周转时间

float weightedturnaroundtime;//带权周转时间

struct PCB1 *next;//指向下个进程

}pcb1;

struct pcb2 {优先级调度

char name[10];

char state;

int super;

int ntime;

int rtime;

struct pcb2* link;

}*ready=NULL,*d;

typedef struct pcb2 PCB2;

六、课程设计总结

在本次课程设计中,就是讲平时所做的实验结合起来,实现操作系统的各类算法,了解操作系统的运行原理以及其基本概念,更好的将操作系统的原理很好的展现出来。同时,在本次实验中遇到了很多问题,需要我们仔细的检查和修改。其次,实验中为了能更好的体现各类算法的运行情况,需要做一个清晰的界面,以能清楚地看出运行结果。

下载重邮操作系统课程设计报告word格式文档
下载重邮操作系统课程设计报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    操作系统课程设计报告

    操作系统课程设计报告 专 业:计算机科学与技术 学 号: 姓 名: 提交日期: 操作系统课程设计报告 【设计目的】 (1)本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系......

    操作系统课程设计

    操作系统课程设计 注意事项: 0. 请每位同学必须按时提交课程设计报告(包括电子版和纸质版),算入期末成绩 1. 在三个题目中选择一个 2. 如果选择题目(一)进程调度算法,要求实现其中2......

    操作系统课程设计

    湖北民族学院信息工程学院11级计算机专业操作系统课程设计 (操作系统课程设计)连续动态分区内存 管理模拟实现 学生姓名: 韩 慧 学生学号: 031140312 班 级: 031140--3 0311401、......

    操作系统课程设计

    长春理工大学 软件学院 0813111班 27号 姓名:丁为胜 一. 概述 1、课程设计目的及任务课程设计地点及要求 每个学生一台微机,需要安装windows98或windows2000操作系统,配备VC、VB......

    操作系统课程设计

    1 引言 操作系统是计算机科学与技术专业的主要专业基础课和主干课。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得......

    计算机操作系统 课程设计报告(推荐)

    操作系统课程设计报告 时间:2010-12-20~2010-12-31 地点:信息技术实验中心 计算机科学与技术专业 2008级2班15号 杨 烨2010-12-31 信息工程学院计算机科学与技术082班 目录 一......

    嵌入式操作系统程课程设计报告

    目录 一、 实习任务和目的„„„„„„„„„„„„1 二、实习基本要求„„„„„„„„„„„„„1 三、实习题目„„„„„„„„„„„„„„„1 四、实习地点„„„......

    银行家算法《操作系统》课程设计报告

    《操作系统》课程设计报告课题:银行家算法专业计算机科学与技术学生姓名班级计算机学号指导教师信息工程学院一、实验要求和实验目的实验目的:本课程设计是学生学习完《操作系......