教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 小学教育 >

操作系统实验报告--n个进程的进程调度

来源:网络收集 时间:2026-08-23
导读: 操作系统实验报告 操作系统课程设计 实验报告 班级:计1109班 姓名:林海慧 学号:XXXXXXXXXXXXX 指导老师:XXXX 操作系统实验报告 实验一:设计一个有 N个进程的进程调度程序 一、实验目的 通过一个简单的进程调度模拟程序的实现,加深对各种进程调度算法,

操作系统实验报告

操作系统课程设计

实验报告

班级:计1109班

姓名:林海慧

学号:XXXXXXXXXXXXX

指导老师:XXXX

操作系统实验报告

实验一:设计一个有 N个进程的进程调度程序

一、实验目的

通过一个简单的进程调度模拟程序的实现,加深对各种进程调度算法,进程切换的理解。

二 实验内容

1、进程调度算法:采用动态最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。

2、每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息: 进程名---进程标示数 ID

优先数 PRIORITY 优先数越大优先权越高

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

进程还需要运行时间ALLTIME,进程运行完毕ALLTIME=0,

已用CPU时间----CPUTIME、

进程的阻塞时间STARTBLOCK-表示当进程在运行STARTBLOCK个时间片后,进程将进入阻塞状态

进程的阻塞时间BLOCKTIME--表示当进程阻塞BLOCKTIME个时间片后,进程将进入就绪状态 进程状态—STATE

队列指针NEXT 用来将PCB排成队列。

3、调度原则:

进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算。

进程在就绪队列中待一个时间片,优先数加1

每个进程的状态可以是就绪 R(READY)、运行R(Run)阻塞B(BLOCK)、或完成F(Finish)四种状态之一。

就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减3,然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。

重复以上过程,直到所要进程都完成为止。

三、 实验要求

完成验内容并写出实验报告,报告应具有以下内容:

1.实验目的。

2.实验内容。

3.程序及运行情况。

4.实验过程中出现的问题及解决方法。

四、程序代码

#include "stdio.h"

#include "stdlib.h"

#define STARTBLOCK_TIME 3

#define BLOCKTIME_TIME 3

操作系统实验报告

#define N sizeof(PCB)

struct PCB // 定义进程控制块PCB /

{

int ID;//进程标志

//int PID;//进程号

int PRIORITY;//优先数

int ALLTIME;//运行时间ALLTIME,进程运行完毕ALLTIME=0

int CPUTIME;//已用CPU时间

char STATE[10];//进程状态—STATE

int STARTBLOCK;//表示当进程在运行STARTBLOCK个时间片后,进程将进入阻塞状态

int BLOCKTIME;//表示当进程阻塞BLOCKTIME个时间片后,进程将进入就绪状态

PCB* NEXT;//队列指针NEXT

};

PCB *ready=NULL,*p=NULL,*block=NULL;

//p为当前进程 ready为就绪链表表头 block为阻塞链表表头

//插入等待表

void insert_ready(PCB *pcb)

{

PCB *pp;

sprintf(pcb->STATE,"ready");

int flag=0;//标志进程是否插入

/*就绪队列为空*/

if(ready==NULL)

{

pcb->NEXT=ready;

ready=pcb;

}

/* 比较进程优先级*/

else

{

pp=ready;

while(pp->NEXT!=NULL)

{

if((pcb->PRIORITY)>(pp->PRIORITY)) /*若插入进程比当前进程优先数大,*/

{

pcb->NEXT=pp;

ready=pcb;//表头

flag=1;

}

else

{

操作系统实验报告

pp=pp->NEXT;

}

}

if(flag==0)//此时进程优先数最低,插入到队尾

{

pcb->NEXT=NULL;

pp->NEXT=pcb;

}

}

}

//插入阻塞表

void insert_block(PCB *pcb) //采用在队列最前插入结点

{

sprintf(pcb->STATE,"阻塞");

if(block==NULL)

{

block=pcb;

}

else

{

pcb->NEXT=block;

block=pcb;

}

}

//初始化进程PCB

void input_pcb()

{

int num;

printf("\n 请输入进程个数: ");

scanf("%d",&num);

for(int i=0;i<num;i++)

{

printf("\n 初始化第%d个进程信息\n",i);

p=(PCB*)malloc(N);//p指向新申请出来的pcb

printf("\n 输入进程标志ID:");

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

printf("\n 输入进程优先数 PRIORITY :");

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

printf("\n 输入进程运行时间ALLTIME:");

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

printf("进程阻塞时间STARTBLOCK");

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

操作系统实验报告

printf("进程阻塞时间BLOCKTIME");

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

getchar();

printf("\n");

p->CPUTIME=0;

p->NEXT=NULL;

p->STATE[0]=0;//初始化进程状态

insert_ready(p);

}

}

/*进程链表显示函数函数*/

void show_pcb(PCB * pcb)

{

printf("\n ID STARTE PRIORITY ALLTIME CPUTIME BLOCKTIME\n"); printf("%d ",pcb->ID);

printf("%s ",pcb->STATE);

printf("%d ",pcb->PRIORITY);

printf("%d ",pcb->ALLTIME);

printf("%d ",pcb->CPUTIME);

printf("%d ",pcb->BLOCKTIME);

printf("\n");

}

/* 打印运行进程、就绪队列、以及各个进程的 PCB */

void show_list()

{

PCB* pp=NULL;

printf("\n **** 当前正在运行的进程是:\n");

if(p!=NULL)

show_pcb(p);

pp=ready;

printf("\n **** 当前就绪队列状态为:\n");

while(pp!=NULL)

{

(pp->PRIORITY)++;

show_pcb(pp);

pp=pp->NEXT;

}

pp=block;

printf("\n **** 当前阻塞队列状态为:\n");

while(pp!=NULL)

{

(pp->BLOCKTIME)++;

show_pcb(pp);

pp=pp->NEXT;

操作系统实验报告

}

}

/* 设置进程为XX状态*/

void run_pcb()

{

(p->CPUTIME)++;

(p->STARTBLOCK)++;

(p->ALLTIME)--;

if(p->ALLTIME==0)//需要的运行时间到

sprintf(p->STATE,"fin …… 此处隐藏:2357字,全部文档内容请下载后查看。喜欢就下载吧 ……

操作系统实验报告--n个进程的进程调度.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/42030.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)