网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月31日漏签0天
linux编程吧 关注:27,667贴子:11,825
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 0回复贴,共1页
<<返回linux编程吧
>0< 加载中...

帮忙填写下程序 急急急啊

  • 只看楼主
  • 收藏

  • 回复
  • nihyou
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*进程调度模拟程序process.c*/
#include "stdio.h"
#define running 1   /*进程运行状态*/
#define aready 2    /*进程就绪状态*/
#define blocking 3  /*进程等待状态*/
#define sometime 5  /*时间片大小*/
#define n 10        /*系统允许的进程个数*/

struct
{int name;          /*进程标识符*/     
 int status;        /*进程状态*/
 int ax,bx,cx,dx;   /*通用寄存器内容*/
 int pc;            /*程序计数器内容*/
 int psw;           /*程序状态寄存器内容*/
 int next;          /*下一个进程控制块的位置*/
}pcbarea[n];        /*进程控制块区域数组*/
int PSW,AX,BX,CX,DX,PC,TIME;   /*模拟寄存器*/
int run;             /*定义指向正在运行进程的进程控制块的指针*/
int block;          /*定义指向处于等待状态进程的进程控制块的指针*/
struct
{int head;
 int tail;
}ready;
int pfree;          /*定义指向空闲进程控制块队列的指针*/

sheduling()          /*进程调度函数*/
{int i;
if(ready.head==-1)
 {printf("无就绪进程\n");
  return;
 }
i=ready.head;
ready.head=pcbarea[ready.head].next;
if(ready.head==-1)ready.tail=-1;
pcbarea[i].status=running;
TIME=sometime;      /*设置相对时钟寄存器*/
                    /*恢复进程现场信息*/
AX=pcbarea[run].ax;
BX=pcbarea[run].bx;
CX=pcbarea[run].cx;
DX=pcbarea[run].dx;
PC=pcbarea[run].pc;
PSW=pcbarea[run].psw;
run=i;
}                   /*进程调度函数结束*/

create(int x)       /*创建进程函数*/
{int i;
if(pfree==-1)
  {printf("无空闲进程控制块,进程创建失败\n");
   return;
  }
i=pfree;
                     /*填写进程控制块内容*/
pfree=pcbarea[pfree].next;       
pcbarea[i].name=x;
pcbarea[i].status=aready;
pcbarea[i].ax=x;
pcbarea[i].bx=x;
pcbarea[i].cx=x;
pcbarea[i].dx=x;
pcbarea[i].pc=x;
pcbarea[i].psw=x;
if(ready.head!=-1)
 {pcbarea[ready.tail].next=i;
  ready.tail=i;
  pcbarea[ready.tail].next=-1;
  }
else
 {ready.head=i;
  ready.tail=i;
  pcbarea[ready.tail].next=-1;
  }
 }                      /*创建进程函数结束*/

main()
{                       /*系统初始化*/
 int num,i,j;
 run=ready.head=ready.tail=block=-1;
 pfree=0;
 for(j=0;j<n-1;j++)
   pcbarea[j].next=j+1;
 pcbarea[n-1].next=-1;
 printf("输入进程编号:\n");
 scanf("%d",&num);
 while(num>=0)
   {create(num);
    scanf("%d",&num);
    }
 sheduling();            /*调进程调度函数*/
 if(run!=-1)
   {printf("进程标识符  进程状态  寄存器内容:ax  bx  cx  dx  pc  
psw:\n");
    printf("%8d%10d%16d%3d%3d%3d%3d%3d\n",pcbarea[run].name,
    pcbarea[run].status,pcbarea[run].ax,pcbarea[run].bx,
    pcbarea[run].cx,pcbarea[run].dx,pcbarea[run].pc,
    pcbarea[run].psw);
   }
 }


2.实验测试结果:

输入进程编号:
3 2 1 6 4 8 9 -1
进程标识符  进程状态  寄存器内容:ax  bx  cx  dx  pc  psw:
3           1                 3   3   3    3   3   3




登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回linux编程吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示