计算机软件验收报告

时间:2024.5.13

毕业设计计算机软件验收报告

用计算机打印或黑色钢笔、签字笔填写。同答辩记录一同存入学生毕业设计资料中。


第二篇:计算机软件基础实践报告


计算机软件实践报告

题 目 处理机调度

专 业 电子工程

班 级 电子1班

学生姓名 钟涛 指导教师 冯建群

二0一四 年 十 月

计算机软件基础实践报告

计算机软件基础实践报告

实验名称:处理机调度

一 实验内容

选择一个调度算法,实现处理机调度。

二 实验目的

多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。

三 实验题目

设计一个按优先权调度和时间片轮转算法实现处理机调度的程序。

四 基本思想

先选择时间片的个数和每个时间片需要的时间,正在运行的进程每运行一秒其优先权数目加一,即其优先权减小。每个时间片运行结束后,选择进入时间片进程优先权数目最小的进程,开始下一个时间片的运行。如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。在运行期间,如果有新的进程来到,按优先权大小放入就绪队列中。

五 算法分析

定义一个结构体,此包含了PCB的信息:

struct PCB

{

char PID[5]; /*进程名*/

int needtime; /*要求运行的时间*/

int cputime; /*已运行时间*/

int priority; /*优先权(越小越高)*/

int starttime; /*进入就绪队列的时间*/

int overtime; /*运行完成的时间*/

int state; /*状态:1就绪2运行3完成*/

struct PCB *next;

};

子函数struct PCB *create(int num,int n)用来建立一个按优先级大小排列的就绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。

main()函数中用一while循环输出进入时间片的进程状态。

六 流程图

计算机软件基础实践报告

七 算法描述

#define NULL 0

#define LEN sizeof(struct PCB)

#include"stdio.h"

#include"stdlib.h"

struct PCB

{

char PID[5]; /*进程名*/

int needtime; /*要求运行的时间*/

int cputime; /*已运行时间*/

int priority; /*优先权(越小越高)*/

int starttime; /*进入就绪队列的时间*/

int overtime; /*运行完成的时间*/

int state; /*状态:1就绪2运行3完成*/

struct PCB *next;

};

struct PCB *create(int num,int n)

/*创建进程,并将进程按优先级顺序插入队列中*/

{

struct PCB *head,*p,*p1,*p2;

int i;

head=NULL; /*头指针指零*/

for(i=1;i<=num;i++) /*循环建立所有进程*/ {

printf("请输入第%d个进程的信息\n",i);

p=(struct PCB *)malloc(LEN); /*开辟一个空间*/ printf("进程名:"); /*输入进程名*/

scanf("%s",p->PID);

printf("要求运行的时间:"); /*输入要运行的时间*/ scanf("%d",&p->needtime);

p->cputime=0; /*占用处理机的时间赋为零*/ printf("优先权:"); /*输入优先权*/

scanf("%d",&p->priority);

if(n==1)

p->starttime=0; /*进入就绪队列的时间赋为零*/ else

{

printf("进入就绪队列时间:"); /*输入进入就绪队列的时间*/ scanf("%d",&p->starttime);

}

p->overtime=-1; /*运行没有结束所以运行完成的时间赋为-1*/

p->state=1; /*状态赋为就绪状态*/

p1=head; /*p1指针指向头指针*/

if(head==NULL) /*如果头指针为零将头指针指向新建立的进程*/ {head=p;head->next=NULL;}

else /*头指针不为零的情况*/

{

if(n==1)

while(p1!=NULL&&p->priority>p1->priority) /*查找插入点*/

{p2=p1;

p1=p1->next;

}

else

while(p1!=NULL&&p->starttime>p1->starttime) /*查找插入点*/

{p2=p1;

p1=p1->next;

}

if(head==p1) /*优先权的值最小作为表头*/

{p->next=head;p2=head=p;}

else /*否则的话插入*/

{p2->next=p;p->next=p1;}

}

}

return(head);

}

void main()

{

char now[5];

int cho,num,num1,timepiece,time,i,j,k,flag,choo,clock=0;

struct PCB *head,*head1,*over,*later,*l,*l1,*l2,*p,*p0,*p1,*p2,*q,*q1,*q2,*q3; over=NULL;

printf("初始化进程...\n");

printf("输入总的就绪进程数:");

scanf("%d",&num);

head=create(num,1); /*建立就绪进程的链表*/

printf("输入将会就绪的进程数:");

scanf("%d",&num1); /*建立将会进入就绪进程的链表*/

later=create(num1,2);

printf("cpu是否开始运行:1是 2不是--");

scanf("%d",&cho);

if(cho==1) /*处理机开始进行调度*/

{

printf("现在的时间是:");

scanf("%s",now);

printf("显示所有就绪的进程:\n");

p2=head;

printf("进程名\t要求运行时间\t已运行时间\t优先权\t状态(1就绪2运行3结束)\n");

while(p2!=NULL)

{

printf("%s\t%d\t\t%d\t\t%d\t%d\n",p2->PID,p2->needtime,p2->cputime,p2->priority,p2->state);

p2=p2->next;

}

printf("请输入时间片总数:");

scanf("%d",&timepiece);

printf("请输入时间片的时间:");

scanf("%d",&time);

printf("运行正式开始!\n");

head1=head;

printf("\t\t进程名\t要求运行时间\t已运行时间\t优先权\t状态\n"); for(i=1;i<=timepiece;i++) /*将进入时间片运行的进程用头指针head1指示,并改变就绪进程头指针head的指向*/

{

if(head!=NULL)

{

p=head;

head=head->next;

}

else break;

}

p->next=NULL;

while(head1!=NULL) /*就绪进程头指针不为零就循环*/

{

head1->state=2; /*状态:1就绪2运行3完成*/

for(j=1;j<=time;j++) /*每个时间片所需时间的循环*/

{

clock++; /*定时器每秒加1*/

if(later!=NULL&&clock==later->starttime)

/*如果将进入就绪队列的进程时间到达加入就绪队列*/

{l=later;

l1=head;

later=later->next;

if(head==NULL)

{head=l;head->next=NULL;}

else

{

while(l1!=NULL&&l1->priority<=l->priority)

{l2=l1;l1=l1->next;}

if(l1==head)

{

l->next=head;

head=l;

}

else

{

l2->next=l;

l->next=l1;

}

}

}

flag=0;

printf("\n%3d秒 时间片第%d秒 ",clock,j);

q=head1;

if(head1->needtime>head1->cputime) /*以运行时间和优先权都加1*/ {

head1->cputime++;

head1->priority++;

while(q) /*运行队列不为零输出其信息*/ {if(q==head1)

printf("%s\t%d\t\t%d\t\t%d\t%d\n",q->PID,q->needtime,q->cputime,q->priority,q->state);

else

printf("\t\t %s\t%d\t\t%d\t\t%d\t%d\n",q->PID,q->needtime,q->cputime,q->priority,q->state);

q=q->next;

}

}

if(head1->needtime==head1->cputime)

/*运行完成将其放入over为头指针的链表中*/

{

head1->state=3;

head1->overtime=clock;

if(over==NULL)

{over=head1;head1=head1->next;over->next=NULL;}

else

if(over!=NULL&&head1!=NULL)

{

p1=head1->next;

p0=over;

over=head1;

over->next=p0;

head1=p1;

}

flag=1;

}

if(flag==1) break;

}

if(flag==1) /*有进程结束的情况*/

{

if(head!=NULL) /*就绪队列不为零将优先权最高的放入运行链表中*/ {q1=head;

head=head->next;

q2=head1;

while(q2!=NULL&&q2->priority<=q1->priority)

{q3=q2;q2=q2->next;}

if(q2==head1)

{

q1->next=head1;

head1=q1;

}

else

{

q3->next=q1;

q1->next=q2;

}

}

}

else /*无进程结束的情况,寻找优先权最高的运行*/ {

head1->state=1;

q1=head1;

head1=head1->next;

q2=head1;

while(q2!=NULL&&q2->priority<=q1->priority)

{q3=q2;q2=q2->next;}

if(q2==head1)

{q1->next=head1;head1=q1;}

else

{q3->next=q1;q1->next=q2;}

}

}

}

printf("cpu结束运行!\n");

printf("是否输出所有结束的进程:1是2不是--");

scanf("%d",&choo);

if(choo==1) /*输出所有完成运行的进程*/

{

printf("开始时间:%s\n",now);

printf("进程名\t要求运行时间\t进入就绪队列的时间\t运行完成的时间\n");

while(over!=NULL)

{

printf("%s\t%d\t\t%d\t\t\t%d\n",over->PID,over->needtime,over->starttime,over->overtime);

over=over->next;

}

}

}

八 运行输出结果

初始化进程如右图

计算机软件基础实践报告

显示现在的时间和所有就绪的进程 输入时间片的总数和每个时间片的时间

计算机软件基础实践报告

运行时显示的信息

计算机软件基础实践报告

计算机软件基础实践报告

计算机软件基础实践报告

更多相关推荐:
软件验收报告

华夏影视交易平台用户名称huaxia密级huaxia123文档编号编写审核批准lt华夏影视交易平台gt验收报告版本001项目名称编写日期审核日期批准日期华夏影视交易平台20xx81220xx81220xx812...

软件项目验收报告

****——用友ERP-T6项目验收报告目录项目验收报告.............................................................................…

软件验收报告模板

用户名称密级文档编号编写审核批准lt项目名称gt验收报告版本项目名称编写日期审核日期批准日期项目名称文档修订记录第2页项目名称目录第一章项目概述411项目背景412参考资料4第二章验收定义421验收方式422验...

软件系统项目验收报告

XXXXX系统项目验收报告一项目基本信息二验收目的目的在于对项目进行全方位的检验与测评检验乙方提供的软件系统是否遵循软件开发标准的要求检验各项指标与功能是否与合同要求相吻合三验收范围验收范围以双方签订的技术开发...

软件验收报告

软件验收报告甲方有限公司乙方有限公司甲方收到乙方开发的下文简称软件截止于年月日初步测试已经通过暂时无发现重大软件漏洞问题软件细节后期有待验证乙方应在甲方实际使用软件过程中对软件已有功能做售后服务如后期有软件漏洞...

软件项目验收报告模板

xxx验收报告模板XX科技有限公司文档修订历史记录目录文档修订历史记录21项目基本情况42项目进度审核421项目实施进度情况422项目变更情况4221项目内容变更情况4222项目需求变更情况523项目投资费用情...

软件验收报告模板

《项目名称》文档修订软件验收报告编号:Q/RKS-YYXXX-QC-SNO版本号:1.0作者:时间:年月日XXXXXXXX有限公司抄送人:客户经理、客户代表、软件项目经理、测试人员、测试质保部经理、研发经理等目…

软件验收报告

联软科技售后服务部实施文档华润万家桌面管理系统软件项目用户验收报告编号填表日期20xx年12月15日说明用户验收通过后验收小组成员以及需求部门使用部门运行部门的负责人必须在验收报告上签署意见并加盖双方公章1联软...

软件系统验收报告

XXXX系统项目验收报告一、项目介绍a)项目主题合同编号:E20110615001项目名称:XXXX系统点将模块立项时间:20XX.02工程时间:20XX.0320XX.5经费来源:主持单位:b)项目目标XXX…

软件项目初步验收报告模板

项目初验报告项目名称XXXX项目

软件系统验收申请报告格式规范

软件系统建设验收申请报告格式规范修订历史目录1项目基本信息42申请验收单位情况43项目背景44项目介绍55项目实施过程66项目完成内容67项目试用单位78存在问题79解决方案710后续工作711验收标准812验...

软件项目开发正确的验收体系

软件项目开发正确的验收体系软件项目验收是对软件项目成果的检验和确认也是对软件项目范围的再确认软件验收应是一个过程的概念包括验收前的系统测试数据移植系统上线和正式验收四个阶段1系统测试系统测试是对系统进行全面的测...

软件验收报告(36篇)