没有合适的资源?快使用搜索试试~ 我知道了~
进程调度算法(LRU算法)
5星 · 超过95%的资源 需积分: 36 32 下载量 83 浏览量
2008-10-24
13:09:36
上传
评论 1
收藏 629KB DOC 举报
温馨提示
试读
22页
LRU算法 1. LRU算法的实现 2. 模拟进程调度算法的实现 3. 通过编写程序实现LRU算法及模拟进程调度程序,并调试运行出来。加深对以上两种算法的理解,培养动手实践的能力。,进一步熟悉LRU算法和进程调度的过程. 进程调度。。。
资源推荐
资源详情
资源评论
操作系统课程设计报告
操作系统课程设计报告
撰稿人: 学号:
一、设计名称及目的:
1. LRU 算法的实现
2. 模拟进程调度算法的实现
3. 通过编写程序实现 LRU 算法及模拟进程调度程序,并调试运行出来。加深对以
上两种算法的理解,培养动手实践的能力。,进一步熟悉 LRU 算法和进程调度的
过程.
二、算法实现思想
Ⅰ、进程调度算法的实现
1、题目要求:
设计按优先数调度算法实现处理器调度的程序
2、算法实现:
①.本程序有 5 个进程,必须每个都按要求输入,每个进程用一个 PCB 来代表。PCB
的格式为:
进程名(id)——作为进程的标识,假设 5 个进程名分别为 P1、P2、P3、P4、P5。
指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的 PCB 的首地
址。
要求运行时间——假设进程需要运行的单位时间数。
优先数——调度时总是选取优先数大的进程。
状态——可假设有两种状态,“就绪”状态和“结束”状态
②、每次运行你的程序之前,为每个进程确定它的“优先数”和“要求运行时间”。
③、为了调度方便,把五个进程按优先数从大到小连成队列。
计算机 班 XXX
操作系统课程设计报告
④、处理器总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先
数就减 1。由于只是模拟,对选中的进程并不实际启动运行,而是执行:a、优先数-1;
b、要求运行时间-1 来模拟进程的一次运行。
⑤、进程运行一次之后,若要求运行时间>0,则再将它加入队列(按优先数大小插入,
且置队首标志);若要求运行时间=0,则把它的状态改成“结束”,且退出队列。
⑥、若就绪队列不为空,则重复上面 4 和 5 的步骤,直到所有进程都为“结束”状态。
3、数据结构:
typedef struct node{
int pid;
char name[5];
int needtime;
int runtime;
int status;
struct node *next;
} node,*pnode;//进程节点
pnode head,tail,pp=0;
class pcb
{
public:
int search(int m);
void init();
void createl(int n);
void com();
void showl();
void destroy();
bool searchstatus();
}//PCB
4、原代码(原程序请详见 cpp 电子文档)
#include<iostream.h>
#include<iomanip.h>
#include<stdio.h>
typedef struct node{
int pid;
char name[5];
int needtime;
int runtime;
int status;
struct node *next;
} node,*pnode;
pnode head,tail,pp=0;
计算机 班 XXX
操作系统课程设计报告
class pcb
{
public:
int search(int m);
void init();
void createl(int n);
void com();
void showl();
void destroy();
bool searchstatus();
};
void pcb::init()
{
head=tail=new node;
head->pid=0;
head->needtime=0;
head->runtime=0;
head->status=0;
head->next=0;
}
int pcb::search(int m)
{
pnode p;
p=head->next;
while(p)
{
if(p->pid==m)
{
pp=p;
return 1;
}
else
p=p->next;
}
return 0;
}
bool pcb::searchstatus()
{
if(pp->status==1)
return true;
else
return false;
}
void pcb::createl(int n)
{
pnode p;
int t;
p=new node;
cout<<"本程序实现的是进程调度的算
法实现"<<endl<<"*************程序开始
***************"<<endl;
cout<<"进程 1"<<endl;
cout<<"请输入 id 号"<<endl;
cin>>p->pid;
cout<<"输入进程控制块名:"<<endl;
cin>>p->name;
cout<<"输入要求进程运行时间"<
<endl;
cin>>p->needtime;
cout<<"已运行时间: 0"<<endl;
p->runtime=0;
cout<<"进程状态: 就绪"<<endl;
p->status=1;
p->next=0;
tail->next=p;
p->next=0;
tail=p;
n--;
while(n>0)
{
cout<<"进程"<<6-n<<endl;
p=new node;
cout<<"输入进程 id 号"<<endl;
cin>>t;
while (search(t))
{
cout<<" 进程 id 号重复,请重新输
入"<<endl;
cin>>t;
}
p->pid=t;
cout<<" 输 入 进 程 控 制 块
名:"<<endl;
cin>>p->name;
cout<<"输入要求进程运行时间"<
<endl;
cin>>p->needtime;
计算机 班 XXX
操作系统课程设计报告
cout<<"已运行时间: 0"<<endl;
p->runtime=0;
cout<<"进程状态: 就绪"<<endl;
p->status=1;
p->next=0;
tail->next=p;
p->next=0;
tail=p;
n--;
}
}
void pcb::destroy()
{
pnode temp,fir;
fir=head;
while(head->next==fir)
{
temp=head;
head=head->next;
delete temp;
}
}
void pcb::showl()
{
pnode temp;
temp=head->next;
while(temp)
{
cout<<setw(6)<<temp-
>pid<<setw(10)<<temp-
>name<<setw(13)<<temp-
>needtime<<setw(12)<<temp-
>runtime<<setw(12)<<temp->status<<endl;
temp=temp->next;
}
}
void pcb::com()
{
int id2,id3;
cout<<" 请 输 入 发 送 消 息 的 进 程 id
"<<endl;
cin>>id2;
while(!search(id2)||(search(id2)&&!
searchstatus()))
{
cout<<"进程不存在或进程已经执行完
毕,请重新输入"<<endl;
cin>>id2;
}
cout<<"进程正在发送消息............"<<endl;
cout<<" 请 输 入 接 受 消 息 的 进 程 id
"<<endl;
cin>>id3;
while(!search(id3)||(search(id3)&&!
searchstatus()))
{
cout<<"进程不存在或进程已经执
行完毕,请重新输入"<<endl;
cin>>id3;
}
cout<<"正在接受消息............."<<endl;
for(int j=1;j<200000000;j++)
{
}
}
int main(int argc, char* argv[])
{
pcb pcb1;
pnode fir;
int count=5,i=1;
char ch;
pcb1.init();
cout<<"初始化进程信息:"<<endl;
pcb1.createl(count);
cout<<" 显 示 初 始 化 进 程 信
息:"<<endl;
cout<<"进程 id "<<"进程控制块名 "<
<"要求运行时间 "<<"已运行时间 "<<"进
程状态 "<<endl;
fir=head->next;
pcb1.showl();
while(count>0)
{
if(fir->needtime!=0)
{
cout<<" 被 选 中 进 程 id 号 :
"<<fir->pid<<" 被 选 中 进 程 控 制 块 id 名
字:"<<setw(10)<<fir->pid<<endl;
计算机 班 XXX
剩余21页未读,继续阅读
资源评论
- Tuhesson2014-01-09非常详细的学习资料
zhaofangbin
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 卡方数据.sav
- Python实现基于Django框架的二手物品购物网站设计源码+数据库.zip
- 基于Python和Django的二手物品购物网站设计源码+数据库脚本.zip
- 【计算机毕业设计】基于h5的移动网赚项目小程序【源码+lw+部署文档+讲解】
- 【计算机毕业设计】基于ssm-vue的oa系统设计与实现【源码+lw+部署文档+讲解】
- 基于pytorch实现的YOLOV5+SORT的车辆行人目标识别及追踪系统源码.zip
- 【计算机毕业设计】基于servlet+jdbc的在线选房系统设计与实现【源码+lw+部署文档+讲解】
- 投身科技创新,勇担时代先锋.pptx
- 【计算机毕业设计】基于SSM的仿微博系统的设计与实现【源码+lw+部署文档+讲解】
- 使用 Web Components 实现,遵循 Material You 设计规范的 Web 前端组件库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功