📄 process.cpp
字号:
#include <stdio.h>
#include <string.h>
#define ESC 27
#define SPACE 32
#define COMMAND_COUNT 6
#define W_PROCEEE_ARRAY_LENGTH 15
#define PRINTPCB printf("%d\t%s\t%d\t%d\t%s",q->pcb,q->name,q->cputime,q->needtime,q->status)
char cmd[COMMAND_COUNT][10]={"CREATE","KILL","BLOCK","WAKEUP","SPACE","EXIT"};
int running = -1;
/******************************************/
/*********** 队列结构 ***************/
#define QLENGTH 10
struct queue{
int array[QLENGTH];
int b;
int e;
int size;
};
void push(struct queue *q,int pid)
{
if( q->size >= QLENGTH ){
printf("\n队列空间不足,请修改QLENGTH值增加空间\n");
printf("闃熷垪婊′簡!\n");
}
else{
q->array[q->e]=pid;
q->e += QLENGTH+1;
q->e %= QLENGTH;
++(q->size);
}
}
int pop(struct queue *q)
{
if(q->size<=0){
printf("队列中没有数据\n");
// printf("娌℃湁杩涚▼!\n");
}
else{
int r=q->array[q->b];
q->b += QLENGTH+1;
q->b %= QLENGTH;
--(q->size);
return r;
}
return -1;
}
int front(struct queue *q)
{
if(q->size>0)
return q->array[q->b];
return -1;
}
void delque(struct queue *q,int pid)
{
int b1;
int b=q->b,
e=q->e;
while(b!=e){
if(q->array[b]==pid){
while(b!=e){
b1 = b+1;
b1 %= QLENGTH;
q->array[b] = q->array[b1];
b = b1;
}
q->array[e] = 0;
e += QLENGTH -1;
e %= QLENGTH;
q->e = e;
break;
}
b += QLENGTH+1;
b %= QLENGTH;
}//end_while
}
/******************************************/
struct queue readyq, blockedq;
/******************************************/
/*********** 进程结构 ***************/
struct process{
int pid;
char name[10];
char status[10];
int cputime;
int needtime;
}proarr[W_PROCEEE_ARRAY_LENGTH];
void initprocess()
{
int i=0;
for(i=0; i<W_PROCEEE_ARRAY_LENGTH; ++i)
{
proarr[i].pid=-1;
strcpy(proarr[i].name,"");
strcpy(proarr[i].status,"");
proarr[i].cputime = 0;
proarr[i].needtime = 50;
}
}
int findpid(int pid)
{
int i=0;
for(i=0; i<W_PROCEEE_ARRAY_LENGTH; ++i)
{
if(proarr[i].pid==pid)
return i;
}
return -1;
}
/******************************************/
/*********** 进程调度 ***************/
void dispatch();
int create()
{
static int pid=1;
int i=0;
while(proarr[i].pid!=-1 && i< W_PROCEEE_ARRAY_LENGTH) ++i;
if(i>=W_PROCEEE_ARRAY_LENGTH){
printf("警告:进程存储空间不足!!!\nnn");
exit(0);
}
else{
printf("请输入进程名称:");
scanf("%s",proarr[i].name);
proarr[i].pid=pid;
strcpy(proarr[i].status,"ready");
proarr[i].cputime = 0;
proarr[i].needtime = 50;
push(&readyq,pid);
++pid;
printf("创建进程成功!\n");
// printf("娌℃湁鍐呭瓨鍙
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -