第一范文网 - 专业文章范例文档资料分享平台

操作系统实验1进程状态转换

来源:用户分享 时间:2025/5/26 10:12:04 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

printf(\

Display_Process(p); }

if(signal5&&p->P_Id==2) {

p->P_Requiry=1;

DeleteQueue(&Block_state,p);

strcpy(p->P_State,\

InsertQueue(&Ready_state,p);

printf(\ Display_Process(p); }

} }

void Create_Process() {

int i;

struct PCB *p;

char name[10];

strcpy(name,\

for(i=1;i<3;i++) //动态创建2个处于阻塞状态的进程 {

p=(struct PCB *)malloc(sizeof(struct PCB)); p->P_Id=i; name[7]=i+'0'; name[8]='\\0';

strcpy(p->P_Name,name);

strcpy(p->P_State,\ p->P_Runtime=1; p->P_Requiry=0;

Display_Process(p); Sleep(4000);

printf(\\\n process%d will be in the state of Block, waiting the resource ready \\n\\n\

DispatchToBlock(p); }

for(i=3;i<7;i++) {

//创建4个就绪状态的队列

//同时调度到阻塞队列

//创建进程函数

//所需要的时间片为1

p=(struct PCB *)malloc(sizeof(struct PCB)); p->P_Id=i;

name[7]=i+'0';

name[8]='\\0';

strcpy(p->P_Name,name);

strcpy(p->P_State,\

p->P_Requiry=1; if(i==6) p->P_Runtime=2; else

p->P_Runtime=1;

Display_Process(p); Sleep(4000);

printf(\ DispatchToReady(p); } }

void display(struct PCB **head) {

struct PCB *p; p=*head;

while(p!=NULL) {

Sleep(2000);

printf(\ printf(\

printf(\ printf(\

if(p->P_Requiry)

printf(\else

printf(\ p=p->next; } }

void Process_Run() {

//进程运行函数

//打印各个状态队列里进程数目

//在这里个进程6所需要的时间片为2

struct PCB *p;

while(Ready_state!=NULL) //就绪队列不空则继续执行 { p=Ready_state;

if(p->P_Runtime<=0) break; strcpy(p->P_State,\ Display_Process(p);

p->P_Runtime=p->P_Runtime-1; Sleep(4000); if(p->P_Runtime>0) {

//如果时间片执行完了,则跳出循环

//没有完成,则进入就绪队列

printf(\process is not finished,will be dispatch to the ready

queue!!\\n\

DeleteQueue(&Ready_state,p);

strcpy(p->P_State,\ InsertQueue(&Ready_state,p); Display_Process(p);

} else

//执行完成,则跳出,并发送相应的信息

{ printf(\is finished and will be in the state of exit!\\n\\n\

if(p->P_Id==4) signal4=1; if(p->P_Id==5) signal5=1;

DeleteQueue(&Ready_state,p); }

if(signal4||signal5)

DispatchBlockToReady(); //如果资源满足,则将进程调度到就绪队列 }

if(Ready_state==NULL)

printf(\}

void main(int argc,char * argv[]) {

char c='c';

//主函数

//界面

printf(\ printf(\ printf(\ scanf(\ while(1)

{

if(c=='s'||c=='S')break; scanf(\ }

Create_Process();

//调用创建进程函数

printf(\

printf(\ Sleep(5000);

display(&Ready_state); ////////////////显示就绪队列里的进程 printf(\

printf(\ Sleep(5000); //显示阻塞队列函数 display(&Block_state); /////////////////////

printf(\

printf(\ Sleep(5000); Process_Run(); }

//调用进程运行函数

六.程序使用说明:

1)输入字符‘s’启动程序

2)程序将自动执行,自动创建进程,运行进程和结束进程。 3)程序将自动显示每一步进程的执行状态。

七.实验结果分析

1) 写出各个进程被创建后的初始状态,并列出各进程初始时的PCB内容。

2) 阐述系统中各进程并发执行的过程,并分析就绪队列和等待队列的变化过程。 3) 描述Create_Process()函数和 Process_Run()函数的执行流程。

搜索更多关于: 操作系统实验1进程状态转换 的文档
操作系统实验1进程状态转换.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c67yvx2n1cl47le14lle0_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top