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

2026/4/25 1:08:16

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进程状态转换.doc 将本文的Word文档下载到电脑
搜索更多关于: 操作系统实验1进程状态转换 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219