资源简介
一、课程设计题目及内容
时间片轮转法实现处理机调度的程序设计提示如下:
(1)假设系统有n个进程,每个进程用一个进程控制块(PCB)来代表。进程控制块的格式如下表所示,且参数意义也相同。
进程名
链接指针
到达时间
估计运行时间
进程状态
(2)按照进程到达的先后顺序排成一个循环队列,设一个队首指针指向第一个到达进程的首址。另外再设一个当前运行进程指针,指向当前正运行的进程。
(3)执行处理机调度时,首先选择队首的第一个进程运行。
(4)由于本题目是模拟实验,所以对被选中的进程并不实际启动运行,而只是执行如下操作:1)估计运行时间减1;
2)输出当前运行进程的名字。
用这两个操作来模拟进程的一次运行。
(5)进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程,同时还应判断该进程的剩余运行时间是否为0,若不为0,则等待下一轮的运行,若该进程的剩余运行时间为0,则将该进程的状态置为完成状态“C”,并退出循环队列。
(6)若就绪队列不为空,则重复上述的步骤(4)和(5)直到所有进程都运行完为止。
(7)在所设计的调度程序中,应包含显示或打印语句,以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。
时间片轮转法实现处理机调度的程序设计提示如下:
(1)假设系统有n个进程,每个进程用一个进程控制块(PCB)来代表。进程控制块的格式如下表所示,且参数意义也相同。
进程名
链接指针
到达时间
估计运行时间
进程状态
(2)按照进程到达的先后顺序排成一个循环队列,设一个队首指针指向第一个到达进程的首址。另外再设一个当前运行进程指针,指向当前正运行的进程。
(3)执行处理机调度时,首先选择队首的第一个进程运行。
(4)由于本题目是模拟实验,所以对被选中的进程并不实际启动运行,而只是执行如下操作:1)估计运行时间减1;
2)输出当前运行进程的名字。
用这两个操作来模拟进程的一次运行。
(5)进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程,同时还应判断该进程的剩余运行时间是否为0,若不为0,则等待下一轮的运行,若该进程的剩余运行时间为0,则将该进程的状态置为完成状态“C”,并退出循环队列。
(6)若就绪队列不为空,则重复上述的步骤(4)和(5)直到所有进程都运行完为止。
(7)在所设计的调度程序中,应包含显示或打印语句,以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。
代码片段和文件信息
#include
#include
#include
using namespace std;
typedef struct PNode //PCB
{
struct PNode *next; //定义指向下一个节点的指针
char name[10]; //定义进程名,并分配空间
int laitime; //定义到达时间
int All_time; //定义总运行时间
int Runed_Time; //定义已运行时间
char state; //定义进程状态R (就绪态)/C(完成态)/Y(运行态)/W(未到态)
}
*Proc; //指向该PCB的指针
int ProcNum; //总进程数
//初始化就绪队列
void lnitPCB(Proc &H)
{
fstream fin(“D:\\data1.txt“); //打开数据文件
fin >> ProcNum; //读取进程数
int Num = ProcNum;
H = (Proc)malloc(sizeof(PNode)); //建立头结点
H->next = NULL;
Proc p = H; //定义一个指针
Proc j;
cout << “总进程个数为“ << ProcNum << endl;
cout << endl;
while (Num--)
{
j = (Proc)malloc(sizeof(PNode));
fin >> j->name >> j->laitime >> j->All_time >> j->Runed_Time;//读取进程信息
if (j->laitime != 0)
j->state = ‘W‘; //进程未到达则状态为W
else
j->state = ‘R‘; //进程到达则状态为R
j->next = NULL;
while (1)
{
if (p->next == NULL) //若下一个节点为空则直接插入
{
p->next = j;
break;
}
if (j->laitime < p->next->laitime) //前插
{
j->next = p->next;
p->next = j;
break;
}
else p = p->next;
}
p = H;
}
while (p->next != NULL) //将p指向最后一个节点
p = p->next;
p->next = H->next; //将尾节点和头节点连接变成循环队列
}
//输入运行中的进程信息
void Displnfo(Proc H)
{
Proc p = H->next;
do
{
cout << “进程名:“ << p->name << “\t总运行时间:“ << p->All_time << “\t已运行时间“ << p->Runed_Time << “\t状态:“ << p->state << endl;
p = p->next;
} while (p != H->next); //整个进程链条始终完整,只是状态位有差异
}
//输入初始状态的进程信息
void Displnfo1(Proc H)
{
Proc p = H->next;
do
{
cout << “进程名:“ << p->name << “\t到达时间:“ << p->laitime << “\t总运行时间:“ << p->All_time << “\t已运行时间“ << p->Runed_Time << “\t状态:“ << p->state << endl;
p = p->next;
} while (p != H->next); //整个进程链条始终完整,只是状态位有差异
}
void Displnfo2(Proc H)
{
Proc p = H->next;
do
{
if (p->state == ‘R‘) //输出此时可执行队列
{
cout << “进程名:“ << p->name << “\t总运行时间:“ << p->All_time << “\t已运行时间“ << p->Runed_Time << “\t状态:“ << p->state << endl;
p = p->next;
}
else break;
} while (p != H->next);
}
//时间片轮转法
void SJP_Simulator(Proc &H)
{
cout << endl << “-------------START-----------------\n“;
int flag = ProcNum; //记录剩余进程数
int round = 0; //记录轮转数
Proc p = H->next;
/*Proc q = H->next; */ //存放头节点
while (p->All_time > p->Runed_Time)
{
Proc j;
j = p; //记录当前p指针
p = H->next;
while (1) //标记此时进程状态
{
if (p->laitime <= round)
{
p->state = ‘R‘;
p = p->next;
}
else
{
p->state = ‘W‘;
p = p->next;
}
if (p->next == H->next)
break;
}
if (H->next->state == ‘W‘)
cout << “此时无可执行进程“;
else
{
cout << “此时可执行的进程有:“ << endl;
Displnfo2(H);
}
p = j; //恢复p指针位置
if (p->laitime <= round)
{
round++;
cout << endl << “Round“ << round << “--正在运行“ << p->name << “进程“ << endl;
p->state = ‘Y‘;
p->Runed_Time++; //更改正在运行的进程的
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 623104 2018-12-27 22:18 1606100068_陈家乐_操作系统课程设计实验报告.doc
文件 246450 2018-12-24 06:15 实验一---处理器调度(设计一个按时间片轮转法实现处理器调度的程序).doc
文件 2031616 2018-12-21 15:54 操作系统课程设计2017.doc
文件 3530 2018-12-26 14:07 时间法1.txt
文件 3953 2018-12-26 15:07 时间法2(增加输出可执行队列).txt
文件 21478 2018-12-27 21:12 时间片流转法主要思想流程图.pdf
文件 70011 2018-12-27 16:27 时间片流转法初始化流程图.jpg
文件 58587 2018-12-27 16:27 时间片流转法初始化流程图.pdf
目录 0 2018-12-28 23:04 计机162_1606100068_陈家乐\
文件 4501 2018-12-27 21:14 计机162_1606100068_陈家乐\源.cpp
相关资源
- 广州大学--操作系统实验1-5实验报告
- 基于linux的操作系统课程设计 中北大
- 操作系统课程设计 绘制资源分配图
- 操作系统课程设计完整版报告+源程序
- 模拟Unix文件系统,操作系统课程设计
- 操作系统课程设计报告 分页存储管理
- 山东大学操作系统课程设计实验报告
- GeekOS操作系统课程设计project0-4讲解
- DOS画画_操作系统课程设计_操作系统图
- 操作系统课程设计报告-单用户多级文
- Pintos 西电操作系统课程设计3 报告+代
- 中北大学软件学院操作系统课程设计
- 操作系统课程设计报告(进程控制与
- 操作系统课程设计资源分配图
- 操作系统课程设计生产者和消费者问
- 计算机操作系统学位考试题
- linux文件系统操作系统课程设计
- 操作系统课程设计实验报告
- 操作系统课程设计.zip
- 操作系统课程设计--多用户多级目录文
- 动态分区分配存储管理-操作系统课程
- 操作系统课程设计进程管理与通信,
- 操作系统课程设计Spooling输入输出模拟
- 操作系统课程设计报告-多用户文件系
- 操作系统课程设计,单索引文件系统
- os课程设计 操作系统课程设计
- 操作系统课程设计---文件资源管理器
- Nachos实验代码
- 山东大学操作系统课程设计nachos
- 广州大学微机原理与接口技术实验报
评论
共有 条评论