linux处理机调度实验报告,模拟Linux操作系统下处理机调度实验报告.docx

处理机调度

一、实验目的:

了解 Linux 下 Emacs 编辑器的使用方法,掌握各种常用的键盘操作命令;

理解并掌握处理机调度算法。

二、实验内容及要求:

在采用多道系统的设计程序中,往往有若干进程同时处于就绪状态。当就绪状态进程数 大于处理机数时,就必须按照某种策略来决定哪些进程优先占用处理机。本实验模拟在单处 理机情况下处理机调度。

1、优先调度算法实现处理机的调度:

设计思路:

每个进程用一个进程控制块 PCB 来代表,进程控制块包括进程名(进程的标识)、指针(按 优先数的大小把进程连成队列,用指针指出下一个进程的进程控制块首地址,最后一个进程 中的指针为"0")、要求运行时间、优先数、状态(就绪、结束);

每次运行处理机调度程序前,为每个进程确定它的"优先数"和"要求运行时间";

把给定的进程按优先数的大小连成队列,用一单元指出队首进程;

每模拟执行一次进程,优先数减一,要求运行时间减一;

如果要求运行的时间>=0,再将它加入队列(按优先数的大小插入,重置队首标志);如果 要求运行的时间=0,那么把它的状态修改为结束,且推出队列;

若就绪队列不为空,重复上述,直到所有的进程都结束;

程序有显示和打印语句,每次运行后显示变化。

2、按时间片轮转法实现处理机调度:

设计思路:

每个进程用一个进程控制块 PCB 来代表,进程控制块包括进程名(进程的标识)、指针(把 进程连成循环队列,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指 出第一个进程的进程控制块首地址)、已运行时间、状态(就绪、结束);

每次运行处理机调度程序前,为每个进程确定它的"要求运行时间";

用指针把给定的进程按顺序排成循环队列,用另一标志单元记录轮到的进程;

每模拟运行一次进程,已运行时间加一;

进程运行一次后,把该进程控制块的指针值送到标志单元,以指示下一个轮到的进程。若 该进程要求运行时间≠已运行时间,未执行结束,待到下一轮再执行;若要求运行时间=已 运行时间,状态改为结束,退出队列;

若就绪队列不为空,重复步骤四和五;

程序有显示和打印语句,每次运行后显示变化。

3、程序设计:

1、优先数调度算法:

/*我的思路:先主函数输入要进行调度的进程数,然后调用函数 create(),把进程的信息输入,

再调用函数 insert(),把输入的函数按照优先数的大小排成链表,然后调用函数 prio()实现优先 数调度*/

#include

#include

#include

typedef struct node

{ char name[10]; /*进程名*/

int prio; /*优先数*/

int cputime; /*占用 cpu 时间*/

int needtime; /*要求运行时间*/

char state; /*状态*/

struct node *next; /*指针*/

}PCB;

PCB *ready,*run,*finish; /*就绪 执行 结束指针*/

int N;

void prt() /*输出函数,可以方便看到进程执行的演示*/

{

PCB *p;

printf(" NAME CPUTIME NEEDTIME PRIORITY STATUS\n"); if(run!=NULL) printf(" %-10s%-10d%-10d%-10d %c\n",run->name,run->cputime,run-

>needtime,run->prio,run->state); /*输出执行的进程的信息*/

p=ready;

while(p!=NULL)

{ printf(" %-10s%-10d%-10d%-10d %c\n",p->name,p->cputime,p->needtime,p->prio,p- >state); /*输出就绪进程的信息*/

p=p->next; }

p=finish;

while(p!=NULL)

{ printf(" %-10s%-10d%-10d%-10d %c\n",p->name,p->cputime,p->needtime,p->prio,p- >state); /*输出结束队列的信息*/

p=p->next; }

getchar(); } /*使用 getchar()函数可以让输出时停留画面,等待人按回车继续*/

void insert(PCB *q) /*插入新进程,把进程按优先数大小排序*/

{ PCB *p1,*s,*r;

int b;

s=q; /*指针 s 指向新要插入的进程*/

p1=ready; /*指针 p1 指向原来的进程队列的队首*/

r=p1; /*使用指针 r 是指向 p1 前面的进程*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值