文档库 最新最全的文档下载
当前位置:文档库 › 处理机调度实验报告

处理机调度实验报告

处理机调度实验报告
处理机调度实验报告

计算机与信息技术学院综合性、设计性实验报告

专业:计算机科学与技术年级/班级:08级计科二班 2010—2011学年第一学期

课程名称计算机操作系统指导教师

本组成员

学号姓名

实验地点实验时间

项目名称进程管理实验类型综合性

一、实验目的和要求

通过使用不同的算法来实现进程调度,运用优先级调度的时间片轮转算法、先后顺序的时间片轮转调度算法和先来先服务算法来模拟进程调度的过程,加深对进程概念和进程调度过程的理解。

在Linux下用C语言编程模拟优先级和时间片轮转进程调度算法。为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程情况显示出来。

二、实验仪器或设备

配有linux操作系统的微型计算机一台

三、总体设计(设计原理、设计方案及流程等)

首先,用交互式的过程来动态模拟进程的调度过程。通过输入数字来按特定的算法模拟处理机调度过程。输入1时,按优先级调度的时间片轮转算法模拟进程调度;输入2时,按先后顺序的时间片轮转调度算法模拟进程调度;输入3时,按先来先服务算法模拟进程调度;输入4时,退出程序;输入其他数字时,会显示信息“YOU HAVE NOT CHOOSE ANY ALGORITHM!”并退出程序。

其次,为进程的信息存放和进程的状态设置必要的数据结构来存放。进程的信息包括进程名、已经执行的cpu时间、还需要的cpu时间、进程所处的状态和在进程队列中指向此进程的下一个进程的指针。这些是上述三个算法都要用到的。还有一些信息是某个算法所特有的,如优先级时间片轮转算法需要用到进程优先级,先后顺序的时间片轮转需要用到得到执行的时间片的个数(有的是2个cpu为一个时间片,有的是1个cpu为一个时间片),先来先服务的算法需要用到进程到来时间。特别说明,为了便于描述进程所处的状态,将进程的状态用枚举类型来存放。

最后,执行合适的算法来实现基础调度过程。

四、实验步骤(包括主要步骤、代码分析等)

实验分4次完成

第1次:完成程序的主框架设计,进行调试,验证其正确性;)

第2次:详细设计,进行调试,验证其正确性;

第3次:进行整体调试;

第4次:验证其设计的正确性,完成实验报告。

代码分析:

#include

#include

#define P_NUM 5

#define P_TIME 50

enum state{

ready, // 准备好

execute,//执行

block,//阻塞

finish//结束

};

struct pcbb{

char name[4];

int cometime; //进程到来时间

int priority; //数越大优先级越高

int cputime; //已占用CPU的时间,也就是该处理机开始工作的时间

int needtime; //执行时间

int count; //得到的时间片的次数

enum state process;

struct pcbb *next;

} ;

typedef struct pcbb pcb;

void display_menu(){

printf("CHOOSE THE ALGORITHM:\n");

printf("1 PRIORITY\n");

printf("2 ROUNDROBIN\n");

printf("3 FIRST COME FISET SERVER\n");

printf("4 EXIT\n");

}

pcb* get_process(){//输入各个进程,并组合成链队列处理,返回队头指针pcb *q;int i = 0;

pcb *p; //队头指针

pcb *t; //队尾指针

printf("input name and time\n");

while (i < P_NUM){

q=(pcb *)malloc(sizeof(pcb));

scanf("%s",q->name);

scanf("%d",&q->needtime);

q->cputime = 0; //cputime初始化为0

q->priority = P_TIME - q->needtime;//所需要的时间越少优先级越高

q->process = ready;//process的状态初始化为ready

q->next = NULL;

if(i==0){ //队列中的第一个

p = q;

t = q;//队尾指针也要处理

}

else{//插入到队列尾

t->next = q;

t = q;

}

i++;

}

return p;

}

void free_process(pcb *p){

pcb *q;

while(p!= NULL){//队列不空时,处理队头

q = p;

p = p->next;

free(q);

}

}

void display(pcb *p){

printf("name cputime needtime priority state\n");

while(p){

printf("%s",p->name);

printf(" ");

printf("%d",p->cputime);

printf(" ");

printf("%d",p->needtime);

printf(" ");

printf("%d",p->priority);

printf(" ");

switch(p->process){

case ready:printf("ready\n");break;

case execute:printf("execute\n"); break;

case block:printf("block\n"); break;

case finish:printf("finish\n"); break;

}

p = p->next;

}

}

int process_finish(pcb *q){//判断队列中有没有进程,没有返回1,有返回0 int b = 1;

while(q){

b=b&&q->needtime==0;

q=q->next;

}

return b;

}

void cpuexe(pcb *q){//cputime指已经执行的时间,needtime指还需要的时间pcb *tr = q;

int tp = 0;

while(q){

if (q->process!=finish){//时间片到,修改上次执行的进程的状态q->process = ready;

if(q->needtime==0){

q->process = finish;

}

}

if(tppriority&&q->process!=finish){

//让tr指向优先级最高的未完成的进程

tp = q->priority;

tr = q;

}

q = q->next;

}

if(tr->needtime!=0){//执行tr所指向的进程

tr->priority -=3; //每执行一次优先级降低三个单位

tr->needtime --;//进程还需要的时间减去1

tr->process = execute;//状态为执行

tr->cputime++;//进程的已经执行的时间加上1

}

}

void priority_cal(){

pcb *p;int cpu;

p = get_process();//输入各个进程,并组合成链队列处理,返回队头指针printf("输出各个进程的初始化信息:\n");

display(p);

cpu = 0;//表示当前执行的cpu时间

while(!process_finish(p)){ //就绪队列中还有进程

cpu++;

printf("cputime:%d\n",cpu);

cpuexe(p); //选择优先级最高的进程执行一个时间单位

display(p); //每调度一次就显示次

sleep(2);

}

free_process(p); //释放所有进程

printf("All processes have finished\n");

}

pcb *get_process_round(){

pcb *q;

pcb *p; //头指针

pcb *t; //尾指针

int i = 0;

printf("input name and time\n");

while (i

q=(pcb *)malloc(sizeof(pcb));

scanf("%s",q->name);

scanf("%d",&q->needtime);

q->cputime = 0;

q->count = 0;

q->process = ready;

q->next = NULL;

if(i==0){

p = q;

t = q;

}

else{

t->next = q;

t = q;

}

i++;

}

return p;

}

void cpu_round(pcb *q){

if(q->needtime==1)

q->cputime++;

else

q->cputime +=2;

q->needtime -=2;

if(q->needtime<0){

q->needtime = 0;

}

q->count++;

q->process = execute;

}

pcb *get_next(pcb *k,pcb *head){

pcb *t;

t = k;

do{

t =t->next;

}while ( t && t->process == finish);

if(t == NULL){

t = head;

//k是刚刚被执行的节点,如果t->next=k,所明就绪队列除了k和t以外都

//已结束,按照时间片轮转算法,该t执行

while(t->next!=k && t->process == finish){

t = t->next;

}

}

return t;

}

void set_state(pcb *p){

pcb *q;

q=p;

while(q){

if(q->needtime == 0){

q->process = finish;

}

if(q->process == execute){

q->process = ready;

}

q = q->next;

}

}

void display_round(pcb *p){//显示各个进程的信息

pcb *q;

q=p;

printf("name cputime needtime count state\n");

while(q){

printf("%s",q->name);

printf(" ");

printf("%d",q->cputime);

printf(" ");

printf("%d",q->needtime);

printf(" ");

printf("%d",q->count);

printf(" ");

switch(q->process){

case ready:printf("ready\n");break;

case execute:printf("execute\n"); break;

case block:printf("block\n"); break;

case finish:printf("finish\n"); break;

}

q = q->next;

}

}

void round_cal(){

pcb *p;

pcb *r;int cpu;

p = get_process_round();//输入各个进程,并组成链队列,返回队头指针printf("输出各个进程的初始化信息:\n");

display_round(p);

cpu = 0;

r=p;

while(!process_finish(p)){ //就绪队列中还有进程

if(r->needtime==1)

cpu+=1;

else //如果需要的时间长度大于等于2

cpu+=2; //时间片长度是2

cpu_round(r);

r = get_next(r,p); //获得下一个需要执行的进程

printf("cputime:%d\n",cpu);

display_round(p); //每调度一次就显示次

set_state(p);

sleep(2);

}

free_process(p); //释放所有进程

printf("All processes have finished\n");

}

pcb* get_process_fcfs(){//输入各个进程,并组成链队列处理,返回队头指针pcb *q,*r,*f;int i = 0;

pcb *p; //队头指针

pcb *t; //队尾指针

printf("input name 、cometime and needtime\n");

while (i < P_NUM)

{

q=(pcb *)malloc(sizeof(pcb));

scanf("%s",q->name);

scanf("%d",&q->cometime);

scanf("%d",&q->needtime);

q->cputime = 0; //cputime初始化为0

q->process = ready;//process的状态初始化为ready

q->next = NULL;

if(i==0)

{ //队列中的第一个

printf("队列中的第一个\n");

p = q;

t = q;//队尾指针也要处理

}

else

{

if (q->cometime >= t->cometime)

{//插到队列尾

t->next = q;

t = q;

}

else

{//从队头开始扫描

if (p->cometime > q->cometime)

{

q->next=p;

p=q;

}

else

{

r=p;

f=r;

while(r)

{

if (r->cometime <= q->cometime)

{

f=r;

r=r->next;

}

else

{// 插入到r前面

q->next=r;

f->next=q;

break;

}

}

}

}

}

i++;

}

return p;

}

void display_fcfs(pcb *p,int cpu){//显示各个进程的信息

pcb *q;

q=p;

printf("name cputime needtime cometime state\n");

while(q&&cpu>=q->cometime){

printf("%s",q->name);

printf(" ");

printf("%d",q->cputime);

printf(" ");

printf("%d",q->needtime);

printf(" ");

printf("%d",q->cometime);

printf(" ");

switch(q->process){

case ready:printf("ready\n");break;

case execute:printf("execute\n"); break;

case block:printf("block\n"); break;

case finish:printf("finish\n"); break;

}

q = q->next;

}

}

void fcfs_cal(){

pcb *p;

pcb *r;

int cpu;

int cpufree;

p = get_process_fcfs();//输入各个进程,并组成链队列,返回队头指针printf("输出各个进程的初始化信息:\n");

display_fcfs(p,100);

cpu = 0;

r=p;

while(r&&r->process!=finish){ //就绪队列中还有进程

cpufree=0;

if (cpu<=r->cometime) {//cpu空闲

cpufree=r->cometime-cpu;

cpu=r->cometime+r->needtime;

}

else{

cpu=cpu+r->needtime;

}

r->cputime=r->needtime;

r->needtime=0;

r->process = execute;

printf("cputime:%d cpufree:%d\n",cpu,cpufree);

display_fcfs(p,cpu); //每调度一次就显示次

set_state(p);

r=r->next;

sleep(2);

}

free_process(p); //释放所有进程

printf("All processes have finished\n");

}

int main(){

int k;

display_menu();

scanf("%d",&k);

switch(k){

case 1:priority_cal();break;//按优先级的时间片轮转

case 2:round_cal();break;//按先后顺序的有条件的时间片轮转

case 3:fcfs_cal();break;//按先来先服务执行算法

case 4:printf("退出!\n");break;

default:printf("YOU HAVE NOT CHOOSE ANY ALGORITHM!\n");

}

}

五、结果分析与总结

结果与分析:

结果1:

CHOOSE THE ALGORITHM:

1 PRIORITY

2 ROUNDROBIN

3 FIRST COME FISET SERVER

4 EXIT

1

input name and time

a 3

b 2

c 1

d 5

e 4

输出各个进程的初始化信息:

name cputime needtime priority state

a 0 3 47 ready

b 0 2 48 ready

c 0 1 49 ready

d 0 5 45 ready

e 0 4 46 ready

cputime:1

name cputime needtime priority state

a 0 3 47 ready

b 0 2 48 ready

c 1 0 46 execute

d 0 5 45 ready

e 0 4 46 ready

cputime:2

name cputime needtime priority state

a 0 3 47 ready

b 1 1 45 execute

c 1 0 46 finish

d 0 5 45 ready

e 0 4 46 ready cputime:3

name cputime needtime priority state

a 1 2 44 execute

b 1 1 45 ready

c 1 0 46 finish

d 0 5 45 ready

e 0 4 46 ready cputime:4

name cputime needtime priority state

a 1 2 44 ready

b 1 1 45 ready

c 1 0 46 finish

d 0 5 45 ready

e 1 3 43 execute cputime:5

name cputime needtime priority state

a 1 2 44 ready B 2 0 42 execute

c 1 0 46 finish

d 0 5 45 ready

e 1 3 43 ready cputime:6

name cputime needtime priority state

a 1 2 44 ready

b 2 0 42 finish

c 1 0 46 finish

d 1 4 42 execute

e 1 3 43 ready cputime:7

name cputime needtime priority state

a 2 1 41 execute

b 2 0 42 finish

c 1 0 46 finish

d 1 4 42 ready

e 1 3 43 ready cputime:8

name cputime needtime priority state

b 2 0 42 finish

c 1 0 46 finish

d 1 4 42 ready

e 2 2 40 execute cputime:9

name cputime needtime priority state

a 2 1 41 ready

b 2 0 42 finish

c 1 0 46 finish

d 2 3 39 execute

e 2 2 40 ready cputime:10

name cputime needtime priority state

a 3 0 38 execute

b 2 0 42 finish

c 1 0 46 finish

d 2 3 39 ready

e 2 2 40 ready cputime:11

name cputime needtime priority state

a 3 0 38 finish

b 2 0 42 finish

c 1 0 46 finish

d 2 3 39 ready

e 3 1 37 execute cputime:12

name cputime needtime priority state

a 3 0 38 finish

b 2 0 42 finish

c 1 0 46 finish

d 3 2 36 execute

e 3 1 37 ready cputime:13

name cputime needtime priority state

a 3 0 38 finish

b 2 0 42 finish

c 1 0 46 finish

d 3 2 36 ready

e 4 0 34 execute cputime:14

name cputime needtime priority state

a 3 0 38 finish

b 2 0 42 finish

d 4 1 33 execute

e 4 0 34 finish

cputime:15

name cputime needtime priority state

a 3 0 38 finish

b 2 0 42 finish

c 1 0 46 finish

d 5 0 30 execute

e 4 0 34 finish

All processes have finished

进程调度的时间片轮转顺序为:c b a e b d a e d a e d e d d,可以看出进程c结束时间为cpu=1时,进程b结束时间为cpu=5时,进程a结束时间为cpu=10时,进程e结束时间为cpu=13时,进程d结束时间为cpu=15时。

结果2:

CHOOSE THE ALGORITHM:

1 PRIORITY

2 ROUNDROBIN

3 FIRST COME FISET SERVER

4 EXIT

2

input name and time

a 3

b 2

c 1

d 5

e 4

输出各个进程的初始化信息:

name cputime needtime count state

a 0 3 0 ready

b 0 2 0 ready

c 0 1 0 ready

d 0 5 0 ready

e 0 4 0 ready

cputime:2

name cputime needtime count state

a 2 1 1 execute

b 0 2 0 ready

c 0 1 0 ready

d 0 5 0 ready

e 0 4 0 ready

cputime:4

name cputime needtime count state

a 2 1 1 ready

b 2 0 1 execute

c 0 1 0 ready

d 0 5 0 ready

e 0 4 0 ready cputime:5

name cputime needtime count state

a 2 1 1 ready

b 2 0 1 finish

c 1 0 1 execute

d 0 5 0 ready

e 0 4 0 ready cputime:7

name cputime needtime count state

a 2 1 1 ready

b 2 0 1 finish

c 1 0 1 finish

d 2 3 1 execute

e 0 4 0 ready cputime:9

name cputime needtime count state

a 2 1 1 ready

b 2 0 1 finish

c 1 0 1 finish

d 2 3 1 ready

e 2 2 1 execute cputime:10

name cputime needtime count state

a 3 0 2 execute

b 2 0 1 finish

c 1 0 1 finish

d 2 3 1 ready

e 2 2 1 ready cputime:12

name cputime needtime count state

a 3 0 2 finish

b 2 0 1 finish

c 1 0 1 finish

d 4 1 2 execute

e 2 2 1 ready cputime:14

name cputime needtime count state

a 3 0 2 finish

b 2 0 1 finish

c 1 0 1 finish

d 4 1 2 ready

e 4 0 2 execute

cputime:15

name cputime needtime count state

a 3 0 2 finish

b 2 0 1 finish

c 1 0 1 finish

d 5 0 3 execute

e 4 0 2 finish

All processes have finished

进程调度的执行顺序为:a b c d e a d e d,可以看出进程b结束时间为cpu=4时,进程c结束时间为cpu=5时,进程a结束时间为cpu=10时,进程e结束时间为cpu=14时,进程d结束时间为cpu=15时。

结果3:

CHOOSE THE ALGORITHM:

1 PRIORITY

2 ROUNDROBIN

3 FIRST COME FISET SERVER

4 EXIT

3

input name 、cometime and needtime

a 1 4

b 7 3

c 5 2

d 0 3

e 15 1

队列中的第一个

输出各个进程的初始化信息:

name cputime needtime cometime state

d 0 3 0 ready

a 0 4 1 ready

c 0 2 5 ready

b 0 3 7 ready

e 0 1 15 ready

cputime:3 cpufree:0

name cputime needtime cometime state

d 3 0 0 execute

a 0 4 1 ready

cputime:7 cpufree:0

name cputime needtime cometime state

d 3 0 0 finish

a 4 0 1 execute

c 0 2 5 ready

b 0 3 7 ready

cputime:9 cpufree:0

name cputime needtime cometime state

d 3 0 0 finish

a 4 0 1 finish

c 2 0 5 execute

b 0 3 7 ready

cputime:12 cpufree:0

name cputime needtime cometime state

d 3 0 0 finish

a 4 0 1 finish

c 2 0 5 finish

b 3 0 7 execute

cputime:16 cpufree:3

name cputime needtime cometime state

d 3 0 0 finish

a 4 0 1 finish

c 2 0 5 finish

b 3 0 7 finish

e 1 0 15 execute

All processes have finished

进程调度的执行顺序为:d a c b e,可以看出进程d结束时间为cpu=3时,进程a结束时间为cpu=7时,进程c结束时间为cpu=9时,进程b结束时间为cpu=12时,进程e结束时间为cpu=16时。

其他结果:

CHOOSE THE ALGORITHM:

1 PRIORITY

2 ROUNDROBIN

3 FIRST COME FISET SERVER

4 EXIT

4

退出!

CHOOSE THE ALGORITHM:

1 PRIORITY

2 ROUNDROBIN

3 FIRST COME FISET SERVER

4 EXIT

6

YOU HAVE NOT CHOOSE ANY ALGORITHM!

总结:

通过本次实验,我对进程调度算法的相关知识有了更加深刻的理解和掌握,明白了先到先服务、时间片轮转算法以及优先级调度算法的执行过程,使得所学知识不仅仅停留在课本理论知识的层次,而是上升为现实实践的层次。

教师签名:

年月日

实验二--单处理器系统的进程调度

实验二单处理器系统的进程调度 (附实验报告) 1.实验目的 加深对进程概念的理解,明确进程和程序的区别; 深入了解系统如何组织进程、创建进程; 进一步认识如何实现处理器调度。 2.实验预备知识 进程的概念; 进程的组织方式; 进程的创建; 进程的调度。 3.实验内容

编写程序完成单处理机系统中的进程调度,要求采用时间片轮转调度算法。实验具体包括:首先确定进程控制块的内容,进程控制块的组成方式;然后完成进程创建原语和进程调度原语;最后编写主函数对所作工作进程测试。 4.提示与讲解 这个实验主要要考虑三个问题:如何组织进程、如何创建进程和如何实现处理器调度。 考虑如何组织进程,首先就要设定进程控制块的内容。进程控制块PCB 记录各个进程执行时的情况。不同的操作系统,进程控制块记录的信息内容不一样。操作系统功能越强,软件也越庞大,进程控制块记录的内容也就越多。这里的实验只使用了必不可少的信息。一般操作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类: ①标识信息 每个进程都要有一个惟一的标识符,用来标识进程的存在和区别于其他进程。这个标识符是必不可少的,可以用符号或编号实现,它必须是操作系统分配的。在后面给出的参考程序中,采用编号方式,也就是为每个进程依次分配一个不相同的正整数。 ②说明信息

用于记录进程的基本情况,例如进程的状态、等待原因、进程程序存放位置、进程数据存放位置等等。实验中,因为进程没有数据和程序,仅使用进程控制块模拟进程,所以这部分内容仅包括进程状态。 ③现场信息 现场信息记录各个寄存器的内容。当进程由于某种原因让出处理器时,需要将现场信息记录在进程控制块中,当进行进程调度时,从选中进程的进程控制块中读取现场信息进行现场恢复。现场信息就是处理器的相关寄存器内容,包括通用寄存器、程序计数器和程序状态字寄存器等。在实验中,可选取几个寄存器作为代表。用大写的全局变量AX、BX、CX、DX模拟通用寄存器、大写的全局变量PC模拟程序计数器、大写的全局变量PSW模拟程序状态字寄存器。 ④管理信息 管理信息记录进程管理和调度的信息。例如进程优先数、进程队列指针等。实验中,仅包括队列指针。 因此可将进程控制块结构定义如下: struct pcb {int name; int status;

电力系统调度自动化试验-电气工程试验教学中心

电力系统调度自动化实验指导书 电气工程实验教学中心

电力系统调度自动化实验 一、实验目的 1.了解电力系统自动化的遥测,遥信,遥控,遥调等功能。 2.了解电力系统调度的自动化。 二、基本原理 电力系统是由许多发电厂,输电线路和各种形式的负荷组成。由于元件数量大,接线复杂,因而大大增加了分析计算的复杂性。作为电力系统的调度和通信中心担负着整个电力网的调度任务,以实现电力系统的安全优质和经济运行的目标。 “PS-5G型电力系统微机监控实验台”相当于电力系统的调度和通信中心。针对5个发电厂的安全、合理分配和经济运行进行调度,针对电力网的有功功率进行频率调整,针对电力网的无功功率的合理补偿和分配进行电压调整。 微机监控实验台对电力网的输电线路、联络变压器、负荷全采用了微机型的标准电力监测仪,可以显示各支路的所有电气量。开关量的输入、输出则通过可编程控制器来实现控制,并且各监测仪和PLC通过RS-485 通信口与上位机相联,实时显示电力系统的运行状况。 所有常规监视和操作除在现地进行外,均可在远方的监控系统上完成,计算机屏幕显示整个电力系统的主接线的开关状态和潮流分布,通过画面切换可以显示每台发电机的运行状况,包括励磁电流、励磁电压,通过鼠标的点击,可远方投、切线路或负荷,还可以通过鼠标的操作增、减有功或无功功率,实现电力系统自动化的遥测、

遥信、遥控、遥调等功能。运行中可以打印实验接线图、潮流分布图、报警信息、数据表格以及历史记录等。 三、实验项目和方法 1.电力网的电压和功率分布实验。 2.电力系统有功功率平衡和频率调整实验。 3.电力系统无功功率平衡和电压调整实验。 同学们自己设计实验方案,拟定实验步骤以及实验数据表格。 四、实验报告要求 1.详细说明各种实验方案和实验步骤。 2.认真整理实验数据。 3.比较各项的实验数据,分析其产生的原因。 五、思考题 1.电路系统无功功率补偿有哪些措施?为了保证电压质量采取了哪些调压手段? 2.何为发电机的一次调频、二次调频? 3.电力系统经济运行的基本要求是什么?

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

实验五-页面调度算法模拟实验报告

《计算机操作系统》实验报告 实验五:页面调度算法模拟 学校:╳╳╳ 院系:╳╳╳ 班级:╳╳╳ 姓名:╳╳╳ 学号:╳╳╳

指导教师:╳╳╳ 目录 一、实验题目 (3) 二、实验学时 (4) 三、指导老师 (4) 四、实验日期 (4) 五、实验目的 (4) 六、实验原理 (4) 6.1页面的含义 (4) 6.2 页面置换算法的含义 (4) 6.3 置换算法 (4) 6.3.1最佳置换算法(Optimal) (5) 6.3.2先进先出(FIFO)页面置换算法 (5) 6.3.3 LRU置换算法 (5) 七、实验步骤及结果 (5)

7.1 验证最佳置换算法 (5) 7.1.1 实验截图 (5) 7.1.2 实验分析 (6) 7.2 验证先进先出(FIFO)页面置换算法 (7) 7.2.1 实验截图 (7) 7.2.2 实验分析 (7) 7.3 验证LRU置换算法 (8) 7.3.1 实验截图 (8) 7.3.2 实验分析 (8) 八、报告书写人 (9) 附录一最佳置换算法(Optimal) (9) 附录二先进先出(FIFO)页面置换算法 (15) 附录三LRU置换算法 (20) 实验五:页面调度算法模拟 一、实验题目 页面调度算法模拟

二、实验学时 2学时 三、指导老师 ╳╳╳ 四、实验日期 2018年12月10日星期一 五、实验目的 (1)熟悉操作系统页面调度算法 (2)编写程序模拟先进先出、LRU等页面调度算法,体会页面调度算法原理 六、实验原理 6.1页面的含义 分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。 6.2 页面置换算法的含义 在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪个页面调出,须根据一定的算法来确定。通常,把选择换出页面的算法称为页面置换算法(Page_Replacement Algorithms)。 6.3 置换算法 一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。

实时监控功能分析实验报告

实时监控功能分析实验报告 一.实验目的 1.对实时监控功能的基本作用有一个感性认识:电力系统的安全、可靠运行是发电、 供电和保障人民生产和生活用电的基本任务,发电厂和变电站当前运行状态信息必须及时准确地送到电力调度控制中心,以便调度人员进行调度。 2.掌握实时监控SCADA的基本功能、实现原理和操作方法。 3.了解表征发电厂和变电站当前运行状态的参数类型和特点、获取方式、表现形式。 如母线电压、有功功率、无功功率、电流和开关状态等。 4.了解改变发电厂和变电站当前运行方式的控制命令信息的类型和特点、下发方式。 5.了解非正常状态信息的表现形式。 二.实验要求 1.已对调度教材中有关调度自动化系统基本结构和功能以及状态信息的处理章节进 行了学习,建立了基本概念。 2.实验前认真阅读实验指导书;实验中,根据实验内容,做好实验记录;实验后,写 出实验报告。 3.认真上机操作,建立感性认识。 4.严格按照教师的指导进行操作。 5.在实验过程中做好记录。 三.系统结构

发电厂模拟一次控制屏变电站模拟一次控制屏 图1-1 系统结构

四.实验步骤及内容 1.了解实时监控控制台的硬件结构。 (1)调度自动化实验系统配置两台实时监控控制台,一台调度专用投影仪; (2)实时监控控制台联接在调度主站计算机网络系统中; (3)在实时监控控制台上运行实时监控软件; 2.启动系统 (1)启动厂站一次控制模拟屏和远方采集终端RTU; (2)启动HUB; (3)启动前置通信控制台及其软件; (4)启动服务器; (5)启动实时监控控制台及其软件。 3.了解实时监控控制台的软件配置情况 (1)IP地址 (2)共享目录的映射关系 (3)实时监控软件运行状况,菜单功能,多画面显示 4.实时画面显示 (1)分别调出系统接线图、发电厂和变电站主接线图;

进程调度算法实验报告

操作系统实验报告(二) 实验题目:进程调度算法 实验环境:C++ 实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较 各种算法的性能优劣。 实验内容:编程实现如下算法: 1.先来先服务算法; 2.短进程优先算法; 3.时间片轮转调度算法。 设计分析: 程序流程图: 1.先来先服务算法 开始 初始化PCB,输入进程信息 各进程按先来先到的顺序进入就绪队列 结束 就绪队列? 运行 运行进程所需CPU时间 取消该进程 2.短进程优先算法

3.时间片轮转调度算法 实验代码: 1.先来先服务算法 #include #define n 20 typedef struct { int id; //进程名

int atime; //进程到达时间 int runtime; //进程运行时间 }fcs; void main() { int amount,i,j,diao,huan; fcs f[n]; cout<<"请输入进程个数:"<>amount; for(i=0;i>f[i].id; cin>>f[i].atime; cin>>f[i].runtime; } for(i=0;if[j+1].atime) {diao=f[j].atime; f[j].atime=f[j+1].atime; f[j+1].atime=diao; huan=f[j].id; f[j].id=f[j+1].id; f[j+1].id=huan; } } } for(i=0;i #define n 5 #define num 5 #define max 65535 typedef struct pro { int PRO_ID; int arrive_time;

电力系统动态模拟实验-上海交通大学电气工程实验中心

电气系统综合实验(下)电力系统动态模拟实验 实验模版 任务编号

电力系统调度自动化实验 一、实验目的 1.了解电力系统自动化的遥测,遥信,遥控,遥调等功能。 2.了解电力系统调度的自动化。 二、原理与说明 电力系统是由许多发电厂,输电线路和各种形式的负荷组成的。由于元件数量大,接线复杂,因而大大地增加了分析计算的复杂性。作为电力系统的调度和通信中心担负着整个电力网的调度任务,以实现电力系统的安全优质和经济运行的目标。随着微电子技术、计算机技术和通信技术的发展,综合自动化技术也得到迅速发展。 电网调度自动化是综合自动化的一部分,它只包括远动装置和调度主站系统,是用来监控整个电网运行状态的。为使调度人员统观全局,运筹全网,有效地指挥电网安全、稳定和经济运行,实现电网调度自动化已成为调度现代电网的重要手段,其作用主要有以下三个方面: 1、对电网安全运行状态实现监控 电网正常运行时,通过调度人员监视和控制电网的周波、电压、潮流、负荷与出力;主设备的位置状况及水、热能等方面的工况指标,使之符合规定,保证电能质量和用户计划用电、用水和用汽的要求。 2、对电网运行实现经济调度 在对电网实现安全监控的基础上,通过调度自动化的手段实现电网的经济调度,以达到降低损耗、节省能源,多发电、多供电的目的。 3、对电网运行实现安全分析和事故处理 导致电网发生故障或异常运行的因素非常复杂,且过程十分迅速,如不能及时预测、判断或处理不当,不但可能危及人身和设备安全,甚至会使电网瓦解崩溃,造成大面积停电,给国民经济带来严重损失。为此,必须增强调度自动化手段,实现电网运行的安全分析,提供事故处理对策和相应的监控手段,防止事故发生以便及时处理事故,避免或减少事故造成的重大损失。 二、电网调度自动化的基本内容 现代电网调度自动化所设计的内容范围很广,其基本内容如下: 1、运行监视

作业调度实验报告

作业调度实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

实验二作业调度 一.实验题目 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 (1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。 (2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。 (3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。 2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。 二.实验目的: 本实验要求用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解三 .实验过程 <一>单道处理系统作业调度 1)单道处理程序作业调度实验的源程序: 执行程序: 2)实验分析:

1、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU 时限等因素。 2、每个作业由一个作业控制块JCB 表示,JCB 可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W 。 3、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。 3)流程图: 二.最短作业优先算法 三.高响应比算法 图一.先来先服务流程图 4)源程序: #include <> #include <> #include <> #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 int n; float T1=0,T2=0; int times=0; struct jcb .\n",p->name); free(p); .wait...",time); if(times>1000) 代替 代替

操作系统实验报告(进程调度算法)

操作系统实验报告(进程调度算法)

实验1 进程调度算法 一、实验内容 按优先数调度算法实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。 三、实验原理 设计一个按优先数调度算法实现处理器调度的程序。 (1) 假定系统有五个进程,每一个进程用一个进程控制块PCB来代表,进程控制块的格式为: 进程名 指针 要求运行时 间 优先数

状态 其中,进程名——作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。 指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。 要求运行时间——假设进程需要运行的单位时间数。 优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态——可假设有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。 (2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。 (3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。例: 队首标志 K2

1P1 K 2 P2 K 3 P3 K 4 P4 K 5 P5 0 K4K5K3K1 2 3 1 2 4 1 5 3 4 2 R R R R R PC B1 PC B2 PC B3 PC B4 PC B5 (4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行: 优先数-1 要求运行时间-1 来模拟进程的一次运行。 提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。

配网自动化实验报告

配网自动化实验报告 学院:电气信息学院 学生: 学号: 班级: 任课教师:

一.实验名称: 馈线自动化功能分析 二.实验目的: 1.对馈线自动化功能的基本作用有一个感性认识:配电网的安全、可靠运 行是发电、供电和保障人民生产和生活用电的重要任务,馈线的运行方 式和负荷信息必须及时准确地送到配网监控中心,以便运行管理人员进 行调度控制管理;当故障发生后,能及时准确地确定故障区段,迅速隔 离故障区段并恢复健全区域供电。 2.掌握配网SCADA的基本功能、实现原理和操作方法。 3.了解表征馈线当前运行状态的参数类型和特点、获取方式、表现形式。 如馈电点电压、有功功率、无功功率、电流和开关状态等。 4.了解改变馈线当前运行方式的控制命令信息的类型和特点、下发方式。 5.了解非正常状态信息的表现形式。 6.掌握故障判断、隔离和健全区域恢复供电功能的原理和实现。 三.实验要求: 1.已对配网教材中有关馈线自动化系统基本结构和功能以及状态信息的 处理章节进行了学习,建立了基本概念。 2.实验前认真阅读实验指导书;实验中,根据实验内容,做好实验记录; 实验后,写出实验报告。 3.认真上机操作,建立感性认识。 4.严格按照教师的指导进行操作。 5.在实验过程中做好记录。 四.系统结构:

FTU FTU 图4-1 系统结构 五.系统功能:

图4-2 系统功能

六.实验步骤及内容: 1.了解馈线自动化的硬件结构 (1)调度自动化实验系统配置两台实时监控控制台,一台调度专用投影仪; (2)实时监控控制台联接在调度主站计算机网络系统中; (3)在实时监控控制台上运行实时监控软件,既监控输电网又监控配电网的运行情况; (4)本实验将连接在调度主站计算机网络系统中的多台微机控制台安装并运行实时监控软件,以满足更多同学同时上机操作的需要。 2.启动系统 (1)启动厂站一次控制模拟屏和远方采集终端RTU; (2)启动HUB; (3)启动服务器; (4)启动前置通信控制台及其软件; (5)启动实时监控控制台及其软件。 3.了解实时监控控制台的软件配置情况 (1) IP地址 (2)共享目录的映射关系 (3)实时监控软件运行状况,菜单功能,多画面显示 图4-3 主界面

管理信息系统实验报告

《管理信息系统》实验报告 实验项目:教务处排课系统分析 实验学时:18学时 姓名: 学号: 专业班级: 实验时间: 实验成绩:

东北财经大学 《管理信息系统》实验报告实验项目名称:

管理系统实验报告 实验小组成员: 实验对象:教务处排课信息系统 实验对象背景介绍:教务管理系统是一个庞大而复杂的系统,它包括:学生学籍管理 系统、排课系统、教师管理系统、学生成绩系统、系统设置、班级信息系统、教学培养计划管理系统、教学资源管理系统、招生系统教务信息发布系统和事务处理系统。随着科学技术的进步与相应的管理信息系统的升级,教务系统管理平台充分利用互联网络B/S管理信息模式,以网络为平台,为各个学校教务系统的管理提供一个平台,帮助学校管理教务系统,用一个帐号解决学校教务教学管理,并且学校可以自由选择学校需要的教务管理系统,灵活地定制符合学校自己实际情况的教务系统。教务管理系统内部子系统多样庞杂,今天我们主要讨论的研究对象是排课管理信息系统。 排课管理系统是每个学校必不可少的内容,它的优劣直接学校教学工作质量和学校的正常教学活动秩序。随着现在生源数量的不断增长以及各行业竞争日益激烈,为了满足中国社会主义事业发展对高素质人才的需求,各大高校都在尽自己努力,以本校现状及需求作为基础,以科技发展进步作为依托,发展完善一个功能完整,操作简单快捷,高效率,与本校其他教务管理系统良好适应的排课系统与之配套,使教师等教学资源利用达到最大化,为学生提供优良的教育环境。因此,东北财经大学作为一个知名的财经类高校,要达到适应教育现状及提高自身教育层次的目标,完善教务排课管理系统显得尤为重要。 系统功能简述 排课管理系统需要合理调配各个班级专业所需的专业课程选修必修课程,相应教师,教师及上课班级,尽可能全面的考虑到教师的身体状况,工作条件,家庭状况甚至与学校距离,教师及学生时间,各种课程按重要程度以及学生兴奋点和接受能力合理排序,教师的容量用途,学校集体活动或教师会议等多方面因素,以计算机安排为主,手工调整为辅的方式做出各个院系各个专业各个班级的课程安排。 排课管理系统的目标不仅是对于原有系统进行改进提高,还使课程管理科学化系统化准确化,减少手工录入的误差可能性,方便操作者的随时添加、查询、修改,是统计表格格式规范化统一化,提高工作效率,降低人工成本,提高处理数据能力与速度,提高教学质量,优化学校教务管理系统,为学校的进一步发展提供技术支持与可能性。 系统分析 (1)系统分析任务:根据系统设计任务书所确定的范围,并在充分认识原有系统的基础上进行详细的调查分析,通过问题识别、可行性分析、详细调查、系统化分析,进而确定新系统的基本目标和逻辑功能结构,最后完成新系统的逻辑方案设计。 (2)可行性分析和详细调查概述:由于实验的限制,假定建立排课管理信息系统在管理上、技术上、经济上都是可行的。而详细调查采用一定的调查方法发现了现行系统有以下优缺点: 现有系统优缺点分析 1.选课分为预选、正选、补退选,一定程度上完善了选课系统。 2.在选课中,按年级差异区分次序,一定程度上缓解短时间内系统压力,保证了高年级学生顺利完成课业。

操作系统实验报告-作业调度

作业调度 一、实验目的 1、对作业调度的相关内容作进一步的理解。 2、明白作业调度的主要任务。 3、通过编程掌握作业调度的主要算法。 二、实验内容及要求 1、对于给定的一组作业, 给出其到达时间和运行时间,例如下表所示: 2、分别用先来先服务算法、短作业优先和响应比高者优先三种算法给出作业的调度顺序。 3、计算每一种算法的平均周转时间及平均带权周转时间并比较不同算法的优劣。

测试数据 workA={'作业名':'A','到达时间':0,'服务时间':6} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8} 运行结果 先来先服务算法 调度顺序:['A', 'B', 'C', 'D', 'E', 'F'] 周转时间: 带权周转时间:

短作业优先算法 调度顺序:['A', 'D', 'F', 'C', 'E', 'B'] 周转时间: 带权周转时间:1. 响应比高者优先算法 调度顺序:['A', 'D', 'F', 'E', 'C', 'B'] 周转时间: 带权周转时间: 五、代码 #encoding=gbk workA={'作业名':'A','到达时间':0,'服务时间':6,'结束时间':0,'周转时间':0,'带权周转时间':0} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8} list1=[workB,workA,workC,workD,workE,workF] list2=[workB,workA,workC,workD,workE,workF] list3=[workB,workA,workC,workD,workE,workF] #先来先服务算法 def fcfs(list): resultlist = sorted(list, key=lambda s: s['到达时间']) return resultlist #短作业优先算法 def sjf(list): time=0 resultlist=[] for work1 in list: time+=work1['服务时间'] listdd=[] ctime=0 for i in range(time): for work2 in list: if work2['到达时间']<=ctime: (work2) if len(listdd)!=0: li = sorted(listdd, key=lambda s: s['服务时间']) (li[0]) (li[0]) ctime+=li[0]['服务时间'] listdd=[]

广工大操作系统实验报告-进程调度

进程调度模拟实验 一、实验目的 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。 二、实验内容和要求 1.编写并调试一个模拟的进程调度程序,采用“简单时间片轮转法”调度算法对五个进程 进行调度。 2.每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、到 达时间、需要运行时间、已运行时间、进程状态等等。 3.进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程 的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。 4.每个进程的状态可以是就绪 W(Wait)、运行R(Run)两种状态之一。 5.就绪进程获得 CPU后都只能运行一个时间片。用运行时间加1来表示。 6.如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该 进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应分配时间片给就绪队列中排在该进程之后的进程,并将它插入就绪队列队尾。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。 7.重复以上过程,直到所要进程都完成为止。 三、实验主要仪器设备和材料 硬件环境:IBM-PC或兼容机 软件环境:C语言编程环境 四、实验原理及设计方案 1.进程调度算法:采用多级反馈队列调度算法。其基本思想是:当一个新进程进入内在后, 首先将它放入第一个队列的末尾,按FCFS原则排队等待高度。当轮到该进程执行时,如能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚为完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行,以此类推。 2.实验步骤: (1)按先来先服务算法将进程排成就绪队列。 (2)检查所有队列是否为空,若空则退出,否则将队首进程调入执行。 (3)检查该运行进程是否运行完毕,若运行完毕,则撤消进程,否则,将该进程插入到下一个逻辑队列的队尾。 (4)是否再插入新的进程,若是则把它放到第一逻辑队列的列尾。 (5)重复步骤(2)、(3)、(4),直到就绪队列为空。

微处理器实验报告

《微处理器实验》实验报告 一、实验目的与任务 1、掌握80C51单片机程序的调试与下载方法。 2、掌握80C51单片机并口的工作原理及输入输出控制方法。 3、理解和学会单片机外部中断的使用; 4、学习单片机定时器/计数器的应用。 二、实验原理介绍 80C51单片机包括P0~P3共4个并口,除可作为普通I/O口使用外,P0口还可用作8位数据总线口和低8位地址口,P2可用作高8位地址口,P3.6、P3.7可用作外部RAM或I/O接口的读、写控制引脚,P3.0~P3.5可用作串口、外部中断、计数器的功能引脚。 ZSC-1实验箱包括4个单片机,其中1#单片机(MCU1)和2#单片机(MCU2)的型号都是STC12C5A60S2,只是封装不同。STC12C5A60S2采用80C51内核,片内资源和性能较标准80C51单片机增强了许多。本课程的全部实验只用到MCU1。 图3-1为本实验对应的硬件电路。P0口用于控制发光管L101~L108,口线输出0(低电平)时,对应的发光管点亮,口线输出1(高电平)时,对应的发光管熄灭。P3口的4根口线连接独立按键KX0~KX3,由于P3口内部上拉电阻的作用,按键松开时,对应的口线表现为1状态(高电平),按键按下时,对应的口线表现为0状态(低电平)。 中断是指在突发事件到来时先中止当前正在进行的工作,转而去处理突发事件。待处理完成后,再返回到原先被中止的工作处,继续进行随后的工作。引起突发事件的来源称为中断源,中断源要求服务的请求称为中断请求,对中断请求提供的服务称为中断服务,中断管理系统处理事件的过程称为中断响应过程。51类单片机至少包括5个中断源: INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。(本实验用) INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 T0:定时器/计数器0中断,由T0计满回零引起。(本实验用) T1:定时器/计数器l中断,由T1计满回零引起。 TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。 与实验三相同,图3-1为本实验对应的硬件电路。P0口用于控制发光管L101~L108,口线输出0(低电平)时,对应的发光管点亮,口线输出1(高电平)时,对应的发光管熄灭。P3口的4根口线连接独立按键KX0~KX3,其中KX0对应外部中断0,进行KX0按键动作的时候可以触发外部中断。 三、实验内容与结果 1、设计程序,控制发光管L101~L108以一定的时间间隔轮流点亮。 ①在Keil中编写源程序。参考程序如下(请将下划线部分补充完整): ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV A, #11111110B ;准备点亮第一只发光管 NEXT: MOV ,A ACALL DELAY ;软件延时1s左右 A ;准备点亮下一只发光管 SJMP NEXT

实验一处理器调度实验报告

处理器调度一、实验内容 选择一个调度算法,实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。 当就绪状态进程 个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下处理器调度,帮助学生加深了解处理器调度的工作。 三、实验题目 设计一个按优先数调度算法实现处理器调度的程序 提示: (1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进 程控制块的格 式为: 其中,进程名----作为进程的标识,假设五个进程的进程名分别是R, P2, P3, P4,R。 指针—按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块

首地址,最后一个进程中的指针为“ 0”。 要求运行时间-- 假设进程需要运行的单位时间数。 优先数-赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态-可假设有两种状态,“就绪”状态和“结束“状态,五个进程的初 始状态都为 “就绪“状态,用“ R”表示,当一个进程运行结束后,它的状态变为“结束”, 用“ E”表示。 (2)在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数” 和“要求运行时间”。 (3)为了调度方便,把五个进程按给定的优先数从大到小连成队列,用一单元指出队首 进程,用指针指出队列的连接情况。例: 队首标志 (4)处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优 先数就减“ 1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的 启动运行,而是执行: 优先数- 1 要求运行时间-1 来模拟进程的一次运行提醒注意的是:在实际的系统中,当一个进程被选中运

时间片轮转调度算法实验报告

xx大学操作系统实验报告 姓名:学号:班级: 实验日期: 实验名称:时间片轮转RR进程调度算法 实验二时间片轮转RR进程调度算法 1.实验目的:通过这次实验,理解时间片轮转RR进程调度算法的运行原理,进一步 掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。 2.需求分析 (1) 输入的形式和输入值的范围; 输入:进程个数n 范围:0

(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。正确输入: 错误输入:

2、概要设计 所有抽象数据类型的定义: static int MaxNum=100 int ArrivalTime //到达时间 int ServiceTime //服务时间 int FinishedTime //结束时间 int WholeTime //周转时间 double WeightWholeTime //带权周转时间double AverageWT //平均周转时间double AverageWWT //平均带权周转时间主程序的流程: 变量初始化

销售管理实验报告doc

销售管理实验报告 篇一:销售管理实训总结报告 销售管理实训总结报告 XX442866 张萌 一、实训目的 本次实训目的是让我们更好的了解和掌握销售管理的种种步骤及要求,如何做好产品的销售工作,包括从销售计划的制定到销售渠道的建设以及销售团队的建立和管理等等的工作步骤,把理论知识运用到实践中去。 二、实训意义 通过本次实训,使学生全面了解和掌握有关销售管理工作的各个方面,建设、管理销售渠道和销售团队的方法。通过实训,使学生能够对销售管理有一个全方位的认识,丰富相关知识,从而为以后走向相关工作岗位打下坚实的基础。 三、实训时间 XX年1月6日----XX年1月10日 四、实训地点 重庆科技学院经管大楼F404 五、实训内容 1.企业简介 2.企业市场环境分析 3.销售组织设计

4.销售团队管理制度设计 5.销售区域及渠道管理 6.客户管理 7.销售计划管理 六、总结体会 本周的实训是翟静老师的销售管理课程,实训重要的任务就是结合企业,具体了解企业的销售组织结构、销售渠道及团队建设。本次实训的目的,在于理解销售管理工作在市场营销中的重要作用,并熟练的掌握销售管理各方面的知识,为今后的工作打下良好的基础。通过本次实训进一步掌握销售管理各方面的知识,学会在市场营销中,如何才能建立一个好的销售渠道和一个优秀的销售团队, 实 现企业最佳的经济效益。 通过一周的实训,使我对销售管理工作有了进一步了解和感触,进一步掌握了销售管理工作中的各种要点。同时,我还发现有很多的不足之处,也为自己积累下了日后销售管理工作的经验。实训是我大学生活中拥有的一段经历,也是给我上了在课堂上学不到的非常重要的一课。它使我在实践中了解社会,让我在踏入社会之前打了一针预防针,让我明白做销售的艰辛,为我以后走入社会打下了基础。 我会珍惜在学校的每一次难得的学习机会,而这样的实训学习更是值得我去珍惜!相信,有了这一次实训经历,无

实验一、进程调度实验报告

实验一、进程调度实验报告

广东技术师范学院实验报告 学院:计算机科学学 院 专业: 计算机科学与 技术(师范) 班级:成绩: 姓名:学号:组别:组员: 实验地点:实验日期:指导教师签名: 实验名称:实验一、进程调度实验 一、实验目的 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解 二、实验类别 综合性实验。综合高级语言编程、进程调度模型、进程调度算法及数据结构等多方面的知识 三、实验内容和步骤 1.编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。 “最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进程。 静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。 动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等 该题根据老师给的代码用Visual C++运行,结果以及分析如下: 预习情况操作情况考勤情况数据处理情况

结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程cc 最先调度进程cc的状态为运行态,需要执行的时间为10当前就绪队列状态为:进程aa先级比较高,处于就绪队列前面,而进程bb先级是三者中最低的,所以处于就绪队列的最后。而此时这两个进程的状态都为就绪态。

结果分析:当进程cc了一个时间片之后而它已占用CPU时间已达到所需要的运行时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级大的进程进入运行状态,则该次进入运行态的是进程aa 按照这种方式一直运行下去: 直到:

相关文档
相关文档 最新文档