《操作系统课程设计》报告范本(doc 10页)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《操作系统课程设计》报告
学号:
姓名:
班级:
指导教师:
报告日期:
一、课设目的
通过对操作系统课程的学习,熟悉进程的概念、进程的管理与存储、进程的调度,通过实践深入理解进程的调度算法。

二、课设任务
要求编写一个程序,可以创建若干个虚拟进程,并对若干个虚拟进程进行调度,调度策略为时间片轮转法,主要任务包括:
①进程的个数,进程的内容(即进程的功能序列)来源于一个进程序列描述文件,另外调度运行结果输出到一个运行日志文件;
②设计PCB适用于时间片轮转法;
③建立进程队列;
④实现时间片轮转调度算法,尽量可视化的展示调度的动态过程。

○5总结程序设计的开发过程:需求分析、系统设计、系统实现及文档的收集和整理。

三、实验方法与设计分析
每个进程有一个进程控制块( PCB)表示。

进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

据需要设计调查计划调查、收集数据,能按要求整理数据,在统计表
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。

进程的到达时间为输入进程的时间。

,计算机,千千万万中小创业者渴望成功高中语文,语文试卷,计算机摇篮课进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。

式,因此上开店成为了一种潮流,并且越来越多高中语文,语文试卷,计算机
就绪进程获得 CPU后都只能运行一个时间片。

用已占用CPU时间加1来表示。

卷,计算机络购物高中语文,语文试卷,计算机市场潜力还远未被释放课件同
如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

语文,语文试卷,计算机,第5代速度达自动软件,不用东奔西走高中语文,语文
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。

么方法?(学生说出自己的检验方法)哪位说一说,怎样把结果代入原题检
重复以上过程,直到所要进程都完成为止四、程序流程图

五、程序源代码
#include"stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<iostream>
#include<fstream>
using namespace std;
ofstream myfile("bb.txt",ios::app||ios::trunc);
typedef struct node
{
char name[10];/*进程名*/
int round; /*进程分配的时间片*/
int cputime; /*进程消耗的CUP时间*/
int needtime; /*进程需要的CUP时间*/
int count; /*进程运行时间*/
char state; /*进程的状态:'R':运行,'W':等待,'F':结束*/
struct node *next;/*指向下一个进程的指针*/
}PCB;
PCB *finish,*ready,*tail,*run;/*指向三个队列的队首的指针,tail为就绪队列的队尾指针*/
int N;/*定义进程的数目*/
void firstin(void)
{
if(ready!=NULL)
{
run=ready;
ready=ready->next;
run->state='R';
run->next=NULL;
}
else
{
run=NULL;
}
}
void prt1(char a)
{
cout<<"name" <<" cputime" <<" needtime"<<" count "<<" round"<<" state"<<endl;
myfile<<"name" ;myfile<<" cputime";myfile <<" needtime";
myfile<<" count ";myfile<<" round";myfile<<" state"<<endl;
}
void prt2(char a,PCB *p)
{
cout<<p->name<<" "<<p->cputime<<" "<<p->needtime<<" "<<p->count<<" "<<p->round<<" "<<p->state<<endl;
myfile<<p->name<<" ";myfile<<p->cputime<<" ";myfile<<p->needtime<<" ";
myfile<<p->count<<" ";myfile<<p->round<<" ";
myfile<<p->state<<endl;
}
void prt(char algo)
{
PCB *p;
prt1(algo);
if(run!=NULL)
{
prt2(algo,run);
}
p=ready;
while(p!=NULL)
{
prt2(algo,p);
p=p->next;
}
p=finish;
while(p!=NULL)
{
prt2(algo,p);
p=p->next;
}
getchar();
}
void insert(PCB *q)
{
tail->next=q;
tail=q;
q->next=NULL;
}
void rcreate_task(char algo)
{
PCB *p;
int n,time;
char na[10];
ready=NULL;
finish=NULL;
run=NULL;
cout<<"请输入进程数目N:";
cin>>N;
for(n=0;n<N;n++)
{
p=(PCB*)malloc(sizeof(PCB));
cout<<"Enter the name of process:"<<endl; cin>>na;
cout<<"Enter the time of process:"<<endl; cin>>time;
strcpy(p->name,na);
p->cputime=0;
p->needtime=time;
p->count=0;
p->state='W';
p->round=2;
if(ready!=NULL)
{
insert(p);
}
else
{
p->next=ready;
ready=p;
tail=p;
}
}
run=ready;
ready=ready->next;
run->state='R';
cout<<"创建成功。

"<<endl;
}
void chakan(char algo)
{
if(run->count==run->round)
{
run->count=0;
if(ready!=NULL)
{
run->state='W';
insert(run);
firstin();
}
}
prt(algo);
}
void roundrun(char algo)
{
while(run!=NULL)
{
run->cputime=run->cputime+1;
run->needtime=run->needtime-1;
run->count=run->count+1;
if(run->needtime==0)
{
run->next=finish;
finish=run;
run->state='F';
run=NULL;
if(ready!=NULL)
{
firstin();
}
}
else
{
if(run->count==run->round)
{
run->count=0;
if(ready!=NULL)
{
run->state='W';
insert(run);
firstin();
}
}
}
prt(algo);
}
}
void caidan()
{
cout<<"**************************主页************************"<<endl; cout<<"*******************1.I 创建若干进程*******************"<<endl; cout<<"*******************2.C 进程进行查看*******************"<<endl; cout<<"*******************3.O 进程进行调度*******************"<<endl; cout<<"*******************4.H 结束 ********************"<<endl;
}
int main()
{ loop1:caidan();
char algo;
cin>>algo;
if(algo=='i'||algo=='I')
{
rcreate_task(algo);
}
else if(algo=='c'||algo=='C')
{
chakan(algo);
}
else if(algo=='o'||algo=='O')
{
roundrun(algo);
}
else if(algo=='h'||algo=='H')
{
goto loop2;
}
goto loop1;
loop2:
myfile.close();
return 0;
}
六、运行结果
七、问题及解决方法
(1) 处理器调度总是选队首进程运行。

采用动态改变优先数的办法,进程每运行一次优先数就减“1”。

由于本实习是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行
(2) 进程运行一次后,若要求运行时间〉0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成“结束”(E),且退出队列。

(3) 若“就绪”状态的进程队列不为空,则重复上面(1)和(2)的步骤,直到所有进程都成为“结束”状态。

(4) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。

(5) 为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。

八、心得体会
操作系统是计算机系统中必不可少的系统软件。

它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。

操作系统采用时间片法调度进程,使系统资源得到充分的利用,用户也可以花更少的时间完成更多的工作,这次模拟系统调度进程,让我明白了系统时间片的调度方法,对操作系统理论的学习更加深一层。

通过这次的课设也让我充分的体会到了要真正的理解计算机操作系统的工作原理应该多上机做试验和操作,这样才能领悟的更深更好。

或许程序完成的有点粗糙但是也花了一些心里,感觉自己还时弄懂了它的实现过程,以前觉得操作系统都时些理论上的东西对于
具体的实践说实话还确实没怎么弄过。

所以这次的课程设计让我学到了更多的东西。

相关文档
最新文档