CPP/计算机组成原理实验代码/First_Fit_1.cpp
2023-05-12 00:34:15 +08:00

132 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
#include <iostream>
using namespace std;
struct FF {
char name[10];
float address;//起始地址
float AFFival_time;//没用
float Service_hours;//没用
float Process_size;//进程大小
float size;//在内存中一块一块的值
float max_size;//内存最大值
float state;//0为空闲 1为不空闲别问我为什么不用bool 因为抄袭只能拿60
};
void print_Memory(FF *p,int N);//内存空间打印函数
void recovery(FF *p,int N);//回收函数,紧凑功能
void input(FF *p, int N);//输入函数
void run(FF *p,int N);//交互式界面
void detelex(FF *p,int N);//结束进程函数
void input(FF *p, int N) {
int i;
int x=0;
printf("输入系统内存大小");
scanf("%f",&p[0].max_size);
printf("\n");
for(i = 0; i <= N - 1; i++) {
printf("输入第%d个进程的名字,到达时间,服务时间,进程大小(例如1 2 1 5)\n", i+1);
scanf("%s %f %f %f", p[i].name, &p[i].AFFival_time, &p[i].Service_hours,&p[i].Process_size);
}
}
void print(FF *p,int N){
for(int i=0;i<=N;i++){
printf(p[i].name, &p[i].AFFival_time, &p[i].Service_hours,&p[i].Process_size);
}
}
void distribution(FF *p,int N) {
int i;
p[0].size=p[0].max_size;
for (i=0; i<N; i++) {
p[i+1].size=p[i].Process_size;
if(p[0].size>=p[i].Process_size) {
p[0].size=p[0].size-p[i].Process_size;
p[i+1].state=1;
} else {
printf("第%d个进程进去后导致",i+1);
printf("马冲我谢谢你,内存不足\n");
p[i+1].size=p[0].size;
p[i+1].state=0;
print_Memory(p, N);
}
}
}
void recovery(FF *p,int N) {//想拿一百分还不赶快完成这个
int i;
for(i=1; i<N; i++) {
if(p[i].state==0&&p[i+1].state==0) {
p[i].size=p[i].size+p[i+1].size;
p[i+1].size=0;
}
}
printf("\n回收完毕\n");
}
void print_Memory(FF *p,int N) {
int i;
float q;
p[0].address=0;
printf("\n内存的使用状态\n");
for (i=1; i<=N; i++) {
printf("起始地址:\t");
q+=p[i].size;
p[i].address=q;
printf("%f\t",p[i-1].address);
printf("分区大小:\t");
printf("%f\t",p[i].size);
if(p[i].state==1) {
printf("\t正在工作\n");
} else {
printf("\t空闲\n");
}
}
printf("剩余内存");
printf("%f",p[0].size);
}
void run(FF *p,int N) {
int xx=0;
while(xx!=4) {
printf("\n释放内存请按1回收内存请按2查看内存请按3退出请按4\n");
cin>>xx;
if(xx==1) {
detelex(p, N);
print(p,N);
} else if(xx==2) {
recovery(p, N);
} else if(xx==3) {
print_Memory(p, N);
}
}
}
void detelex(FF *p,int N) {
float yy;
printf("\n输入删除进程的起始地址\n");
scanf("%f",&yy);
for(int i =0;i<N;i++){
if(yy==p[i].address){
cout<<"已删除"<<"\n";
p[i+1].state=0;
}
};
}
void FF_MAIN() {
int N;
printf("请输入进程的数量:\n");
scanf("%d",&N);
FF *p = new FF[N];
input(p, N);
distribution(p,N);
run (p,N);
delete [] p;
}
int main() {
FF_MAIN();
return 0;
}