操作系统课程设计报告Word下载.docx
- 文档编号:15346227
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:21
- 大小:525.18KB
操作系统课程设计报告Word下载.docx
《操作系统课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
(1)进程控制块信息
structjincheng_type
{intpid;
intyouxian;
intdaxiao;
intstate;
intmessage;
};
(2)进程信息初始化
structjincheng_typeneicun[20];
intshumu=0,pid_l;
intmax=0;
intnumber=0;
(3)创建进程的算法
voidcreate()/*创建一个进程的示例*/
{
if(shumu>
=20)
{
printf("
\n内存已满,请先结束或换出进程\n"
);
}
else
printf("
\n请输入新进程的pid\n"
scanf("
%d"
&
neicun[shumu].pid);
\n请输入新进程的优先级\n"
neicun[shumu].youxian);
\n请输入新进程的大小\n"
neicun[shumu].daxiao);
\n创建进程时令其状态为就绪\n"
neicun[shumu+1].daxiao);
\n创建进程信息\n"
neicun[shumu+1].message);
neicun[shumu].state=1;
shumu++;
}
(4)查看运行进程算法
voidrun()
intmax=0;
intvpid;
for(inti=0;
i<
shumu;
i++)
if((neicun[i].flag==1)&
&
(neicun[i].youxian<
=neicun[max].youxian))
max=i;
neicun[max].flag=3;
printf("
\n当前运行进程程序名:
\n%d"
neicun[max].pid);
\n该进程的优先级:
neicun[max].youxian);
\n该进程的运行时间:
neicun[max].daxiao);
\n该进程的状态:
neicun[max].flag);
\n该进程的信息是:
neicun[max].message);
vpid=getch();
(5)换出进程算法
voidhuanchu()
inti,k,d;
if(max==shumu-1)
没有处于等待序列的进程"
{for(k=max+1;
k<
k++)
neicun[k].flag=2;
\n处于等待序列的进程有:
"
for(k=max+1;
neicun[k].pid);
\n请选择要唤醒的进程:
scanf("
k);
i=max;
while(neicun[i].pid!
=k)
i++;
neicun[i].flag=1;
\n%d进程已被唤醒"
k);
d=getche();
}
(6)杀死进程算法
voidkill()/*杀死某个进程*/
{inti=0,k,b;
\n请输入要杀死的进程:
neicun[i].daxiao=0;
neicun[i].pid=0;
neicun[i].youxian=0;
neicun[i].flag=0;
if(i==(shumu-1))
shumu--;
else{
for(intj=i+1;
j<
j++)
{
neicun[j-1].pid=neicun[j].pid;
neicun[j-1].youxian=neicun[j].youxian;
neicun[j-1].daxiao=neicun[j].daxiao;
neicun[j-1].flag=neicun[j].flag;
}
shumu--;
\n进程%d已被杀死"
b=getche();
(7)进程通信算法
inttongxun(){
inttpid1,tpid2;
intbuffer;
intd;
\n请输入通信源进程pid\n"
tpid1);
\n请输入通信目的进程pid\n"
tpid2);
if(tpid1>
0&
tpid1<
20&
neicun[tpid1].state==1)
buffer=neicun[tpid1].message;
neicun[tpid1].message=neicun[tpid2].message;
neicun[tpid2].message=buffer;
\n源进程的消息是:
%d\n"
neicun[tpid1].message);
\n目的进程的消息是:
neicun[tpid2].message);
\n所查看运行进程不存在\n"
\n请按回车退出进程通信\n"
5、程序测试过程(截图)
初始化界面,选择1-6实现功能:
创建进程1:
创建进程3:
查看运行进程:
选择唤醒处于等待态的进程:
杀死某个进程:
进程之间通信:
退出系统:
6、测试结果分析
选择功能1创建进程,然后选择功能2查看进程以检测进程是否创建成功;
选择功能3以唤醒处于等待序列中的进程;
功能4将进程杀死;
选择功能5进行进程之间的通信,将两个进程的消息进行交换。
实验二:
进程调度
1、实验目的
设计一个有N个进程共行的进程调度程序。
进程调度算法:
采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。
每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:
进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。
进程的到达时间为进程输入的时间。
进程的运行时间以时间片为单位进行计算。
每个进程的状态可以是就绪1、运行3、或完成0三种状态之一。
就绪进程获得CPU后都只能运行一个时间片。
用已占用CPU时间加1来表示。
如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个
时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
3、实验环境
C语言(C-free5.0)
模块划分:
1.定义进程控制块PCB
structpcb{/*定义进程控制块PCB*/
charname[10];
charstate;
intsuper;
intntime;
intrtime;
structpcb*link;
*ready=NULL,*p;
typedefstructpcbPCB;
2.建立进程优先级排列函数
sort()/*建立对进程进行优先级排列函数*/
{
PCB*first,*second;
intinsert=0;
3.优先级最大者采用先来先服务插入队首,优先级最低的插入队尾
if((ready==NULL)||((p->
super)>
(ready->
super)))/*优先级最大者,插入队首*/
p->
link=ready;
ready=p;
else/*进程比较优先级,插入适当的位置中*/
first=ready;
second=first->
link;
while(second!
=NULL)
if((p->
(second->
super))/*若插入进程比当前进程优先数大,*/
{/*插入到当前进程前面*/
link=second;
first->
link=p;
second=NULL;
insert=1;
else/*插入进程优先数最低,则插入到队尾*/
first=first->
second=second->
if(insert==0)first->
4.建立进程控制块,进程撤销函数,进程就绪函数
disp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/
check()/*建立进程查看函数*/
destroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/
running()/*建立进程就绪函数(进程运行时间到,置就绪状态*/
输入总共要输入的进程数:
输入进程1的信息:
输入进程2的信息
第一个时间片:
将优先级最高的3投入运行,其他处于等待状态:
第二个时间片:
将3的优先级减一,将优先级第二的2进程投入运行其他处于等待状态:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告