⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chulijidiaodusuanfa.txt

📁 处理机调度算法 程序先对进程进行读入
💻 TXT
字号:
	void Input(){
	char s[30];
	int pr;
	//通过输入E开始的进程名结束输入操作 
	while(scanf("%s", &s) && s[0]!='E'){
	scanf("%d %d", &t, &pr);
	strcpy(temp.name, s);
	temp.runtime = t;
	temp.priority = pr;
	temp.state = 'R';
	queue[i++] = temp;
	}
	t = i;
	Sort();
	}
按照调度规则运行处理机调出程序
	void Deal(){
	    if(queue[0].runtime != 0){
	        if(queue[0].priority!=0)
	            queue[0].priority--;
	        queue[0].runtime--;
	        Sort();
	        Del();
	    }
	}
	交换函数,将两个进程控制块的信息交换
	void Swap(PCB p1, PCB p2){
	    PCB temp;
	    strcpy(temp.name, p1.name);
	    temp.priority = p1.priority; 
	    temp.runtime = p1.runtime;
	    strcpy(p1.name, p2.name);
	    p1.priority = p2.priority; 
	    p1.runtime = p2.runtime;
	    strcpy(p2.name, temp.name);
	    p2.priority = temp.priority;
	    p2.runtime= temp.runtime;
	}
	排序函数,按照进程的优先级对进程信息进行排序
	void Sort(){
	    for(j=0; j<t-1; j++){
	        for(k=j+1; k<t; k++){
	            if(queue[j].priority < queue[k].priority){
	                swap(queue[j], queue[k]);
	            }
	        }
	    }
	}
	删除进程函数,在进程的运行时间为0的时候对进程进行删除,这里的删除实际上是将进程送到队尾去,这样便于我们对进程的相关信息进行观察。
	void Del(){
	    for(j=0; j<t; j++){
	        if(queue[j].runtime == 0){
	            strcpy(queue[i].name ,queue[j].name);
	            queue[i].priority = queue[j].priority;
	            queue[i].runtime = queue[j].runtime;
	            queue[i].state = 'E';
	            for(k=j; k<i; k++){
	                strcpy(queue[k].name ,queue[k+1].name);
	                queue[k].priority = queue[k+1].priority;
	                queue[k].runtime = queue[k+1].runtime;
	                queue[k].state = queue[k+1].state;
	            }
	            j--;
	            t--;
	        }
	    }
	}
输出进程信息
	void Print(){
	    printf("优先级 运行时间 进程状态 进程名\n");
	    for(j=0; j<i; j++){
	        printf("%6d %8d", queue[j].priority, queue[j].runtime);
	        if(queue[j].state == 'R') printf(" 运行中…");
	        else printf(" 运行完成");
	        printf(" %s\n", queue[j].name); 
	    }
	}
主函数
	int main(){
	    freopen("in.txt", "r", stdin);
	    freopen("out.txt", "w", stdout);
	    Input();
	    while(queue[0].runtime != 0){
	        Print();
	        printf("\n");
	        Deal();
	    }
	    Print();
	    printf("\n");
	    return 0;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -