《计算机操作系统原理》课外实验报告.docx
- 文档编号:5995894
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:7
- 大小:16.15KB
《计算机操作系统原理》课外实验报告.docx
《《计算机操作系统原理》课外实验报告.docx》由会员分享,可在线阅读,更多相关《《计算机操作系统原理》课外实验报告.docx(7页珍藏版)》请在冰豆网上搜索。
《计算机操作系统原理》课外实验报告
《计算机操作系统原理》课外实验报告
《计算机操作系统原理》课外实验报告
设计思路和内容
先用随机函数初始化pcb结构体,从而模拟3个进程的特性,然后voidproInsert(pcb*p)/*优先数插入算法,将进程p按其优先级插入到就绪队列中相应位置*/、voidprintpcb(pcb*q)//输出进程控制字信息、voidprintLine(pcb*head)/*输出以p为队首的队列中所有pcb信息*/、voidprintAll()//输出某一时刻进程队列信息、voidFirstIn()/*将就绪队列中进程调入运行队列*/等函数体,实现进程调度过程中最基本的功能。
在主函数中先调用voidcreatepcb()/*随机产生n个进程,并对各个进程随机赋予初值*/,从而创建了就绪队列,为进程调度做好准备。
而后voidsp()/*静态优先级抢占式调度策略*/、voidDp()/*动态优先级抢占式调度策略*/、voidRR()/*时间片轮转调度策略*/等来分别实现静态优先级抢占式调度策略、动态优先级抢占式调度策略和时间片轮转调度策略三种功能。
而最后的多级反馈调度策略实现因为与前三者有很大的不同,所以在同一cpp中我几乎是重新重构了所有的基本算法来帮助快速实现多级调度策略的。
首先,对于时间的复杂性,我在进程调度实验中忽略了运行队列(cpu处理器的模拟)处理程序是依据进程进入就绪队列的时间来调度的,所以1、静态优先级抢占式调度策略最基本的思想是循环将就绪队列中程序调入到运行队列中,再在运行队列中执行对进程的操作。
2、动态优先级抢占式调度策略的基本思想是循环的调度就绪队列中进程程序,然后再运行队列中对进程的优先级进行动态的操作,如每执行一次进程,它的优先级就相应的减2.,如果没有运行完,就将其重新按照优先级重新插入到就绪队列中,从而模拟出调度返回这一操作。
3、时间片轮转调度策略,我预先确定时间片的长度为2,在循环从就绪队列中调度进程时,在运行队列中将其执行2个时间点,若没有执行完,则重新插入。
4、而对于多级队列调度策略,则首先建立pcb*ready1,*ready2,*ready3,*ready4;//多级调度队列策略时建立的四个就绪队列,再将这些就绪队列逐渐分别(从高优先级到低优先级就绪队列)“时间片轮转法”。
最后输出运行、就绪队列1、就绪队列2、就绪队列3、就绪队列4、结束队列5个队列中进程。
我将进程随进入运行队列时间的影响与进程调度分开编写程序,进程阻塞实验来模拟进程进入cpu时,遇到阻塞情况下进入到阻塞队列中,从而简化了程序的书写。
核心数据结构设计和操作函数设计
typedefstructnode{
charname[10];/*进程名*/
charID;/*进程标识名*/
intpriority;/*优先级*/
charstate;/*进程状态标志*/
intin_time;/*进程进入cpu的时间*/
intall_time;/*进程需要的总时间*/
intrun_time;/*进程已运行的时间*/
intblock_time;/*进程被阻塞的时间点*/
intweak_time;/*进程被唤醒的时间点*/
intround;/*进程时间轮转时间片*/
structnode*next;/*下个pcb指针*/
}pcb;/*进程控制块结构字*/
pcb*run,*ready,*finish,*tail_r,*tail_f;/*队列指针,依次定义运行队列、就绪队列、结束队列*/
pcb*ready1,*ready2,*ready3,*ready4;//多级调度队列策略时建立的四个就绪队列
voidsp()/*静态优先级抢占式调度策略*/
{
printf("现在开始静态优先级抢占式调度模拟\n\n");
finish=nuLL;
while(ready!
=nuLL)
{
FirstIn();
printAll();
run->run_time+=1;
if(run->all_time-run->run_time {
run->next=finish;
finish=run;
finish->state='F';
run=nuLL;
}
else
proInsert(run);
}
printAll();
}
voidDp()/*动态优先级抢占式调度策略*/
{
printf("现在开始动态优先级抢占式调度模拟\n\n");
finish=nuLL;
while(ready!
=nuLL)
{
FirstIn();
printAll();
run->run_time+=1;
run->priority-=2;/*每运行一次优先数降低2个单位*/
if(run->all_time-run->run_time {
run->next=finish;
finish=run;
run->state='F';/*置状态为完成态*/
run=nuLL;/*运行队列头指针为空*/
}
else/*没有运行完,则将其变为就绪态插入到就绪队列*/
proInsert(run);
}
printAll();
}
voidRR()/*时间片轮转调度策略*/
{
printf("现在开始时间片轮转调度策略\n\n");
intR_time=2;//时间片轮转调度法中时间为2
finish=nuLL;
while(ready!
=nuLL)
{
FirstIn();
printAll();//就绪队列中进程进入到运行队列中后队列的显示
for(inti=1;i {
run->run_time+=1;
run->priority-=1;
if(run->all_time-run->run_time {
run->next=finish;
finish=run;
run->state='F';/*置状态为完成态*/
run=nuLL;
break;
}
if(i==R_time&&run->all_time-run->run_time>0)
proInsert(run);
}
}
printAll();
}
voidmLFQ()/*多级反馈队列调度策略*/
{
printf("现在开始多级反馈队列调度策略模拟\n\n");
inttime1=1,time2=2,time3=3,time4=4;//设置每个就绪队列所分配到的时间片长度
ready1=ready;
finish=nuLL;
while(ready1!
=nuLL)
{
FirstIn_Demo1();
printAll_mLFQ();
for(inti=1;i {
run->run_time+=1;
if(run->all_time-run->run_time {
run->next=finish;
finish=run;
run->state='F';/*置状态为完成态*/
run=nuLL;
break;
}
if(i==time1&&run->all_time-run->run_time>0)
LineInsert2(run);
}
}
while(ready2!
=nuLL)
{
FirstIn_Demo2();
printAll_mLFQ();
for(inti=1;i {
run->run_time+=1;
if(run->all_time-run->run_time {
run->next=finish;
finish=run;
run->state='F';/*置状态为完成态*/
run=nuLL;
break;
}
if(i==time2&&run->all_time-run->run_time>0)
LineInsert3(run);
}
}
while(ready3!
=nuLL)
{
FirstIn_Demo3();
printAll_mLFQ();
for(inti=1;i {
run->run_time+=1;
if(run->all_time-run->run_time {
run->next=finish;
finish=run;
run->state='F';/*置状态为完成态*/
run=nuLL;
break;
}
if(i==time3&&run->all_time-run->run_time>0)
LineInsert4(run);
}
}
while(ready4!
=nuLL)
{
FirstIn_Demo4();
printAll_mLFQ();
run->run_time+=1;
if(run->run_time-run->run_time {
run->next=finish;
finish=run;
run->state='F';
run=nuLL;
ready4=ready4->next;
}
}
printAll_mLFQ();
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机操作系统原理 计算机 操作系统 原理 课外 实验 报告