Esempio n. 1
0
void *deal_request_thread(void *cpu_index){
	// if(set_cpu(*(int *)cpu_index)){
	// 	printf("deal_request_thread set_cpu failed\n");
	// }

	while(1){
		deal_request();
	}
	return 0;
}
Esempio n. 2
0
int main(int argc, char* argv[])
{
	int i;
	char c;
	int flag = 0;
	if (!(ptr_auxMem = fopen(AUXILIARY_MEMORY, "r+")))
	{
		do_error(ERROR_FILE_OPEN_FAILED);
		exit(1);
	}
	do_init();
	do_print_info();
	ptr_memAccReq = (Ptr_MemoryAccessRequest) malloc(sizeof(MemoryAccessRequest));
	/* 在循环中模拟访存请求与处理过程 */
	while (TRUE)
	{
loop4:		do_request();
loop:	do_response();
		printf("按Y打印页表,按其他键不打印.........\n");
loop1:	if ((c = getchar()) == 'y' || c == 'Y')
			do_print_info();
		while (c != '\n')
			c = getchar();
		if(flag == 1){
			flag = 0;
			goto loop1;
		}
loop2:		printf("按X退出程序,按I手动输入请求,按P打印实存,按R打印辅存,按T转换模式,按其他键继续...\n");
		if ((c = getchar()) == 'x' || c == 'X')
			break;
		if (c == 'i' || c == 'I'){
			flag = do_input_request();
			if(flag == 1)
				goto loop;
		}
		if (c == 'p' || c == 'P'){
			printf("实存\t对应值\t实存\t对应值\t实存\t对应值\t实存\t对应值\n");
			for(i = 0; i < ACTUAL_MEMORY_SIZE; i++){
				printf("%d \t%02X\t", i, actMem[i]);
				if(i % 4 == 3)
					printf("\n");
			}	
			goto loop1;
		}
		if (c == 'r' || c == 'R'){
			ptr_auxMem = fopen(AUXILIARY_MEMORY, "r+");
			while(fscanf(ptr_auxMem, "%c", &c) != EOF)
				printf("%c",c);
			printf("\n");
			goto loop1;		
		}
		if (c == 't' || c == 'T'){
			goto loop3;		
		}
		while (c != '\n'){
			c = getchar();
		}
		
	}
	
	/* 在循环中模拟访存请求与处理过程 */
loop3:	while (TRUE)
	{
		umask(0);
		printf("进入读写FIFO模式\n");
		//do_request();
		FILE *fp;
		char *buf[100];
		mkfifo(FIFO,S_IFIFO|0666);
		/*if (mkfifo(FIFO,S_IFIFO|0666) < 0){
			printf("what the f**k\n");
			continue;
		}*/	
		fp=fopen(FIFO,"r");
		fgets(buf,sizeof(buf),fp);
		
		deal_request(buf);
		do_response();
		printf("按Y打印页表,按其他键不打印...\n");
		if ((c = getchar()) == 'y' || c == 'Y')
			do_print_info();
		while (c != '\n')
			c = getchar();
		printf("按X退出程序,按T转换模式,按其他键继续...\n");
		if ((c = getchar()) == 'x' || c == 'X')
			break;
		if(c == 't' || c == 'T'){
			flag = 1;
			printf("退出读写FIFO模式\n");
			goto loop4;		
		}
		while (c != '\n')
			c = getchar();
		//sleep(5000);
	}

	if (fclose(ptr_auxMem) == EOF)
	{
		do_error(ERROR_FILE_CLOSE_FAILED);
		exit(1);
	}
	return (0);
}
Esempio n. 3
0
int main(int argc, char* argv[])
{
	char c,d;
	unsigned long k;
	int i,j;
	FILE *fp;
	char buf[BUFLEN];
	umask(0);
	if(mkfifo(FIFO,S_IFIFO|0660)<0)
		return -1;
	initfile();
	if (!(ptr_auxMem = fopen(AUXILIARY_MEMORY, "r+")))
	{
		do_error(ERROR_FILE_OPEN_FAILED);
		exit(1);
	}

	do_init();
	do_print_info();
	ptr_memAccReq = (Ptr_MemoryAccessRequest) malloc(sizeof(MemoryAccessRequest));
	/* 在循环中模拟访存请求与处理过程 */

	
	while(TRUE)
	{
		printf("请输入请求\n");
		fp=fopen(FIFO,"r");
		fgets(buf,sizeof(buf),fp);
		printf("Request is: %s\n",buf);
		fclose(fp);
		i=0;
		k=0;
		j=0;
		if(buf[i]=='r'||buf[i]=='w'||buf[i]=='x'){
			c='a';
            		d=buf[i];
            		k=0;
           		while(buf[i]<'0'||buf[i]>'9'){i++;}
			while(buf[i]>='0'&&buf[i]<='9'){
                		k=k*10+buf[i]-'0';
                		i++;
            		}
			while(buf[i]<'0'||buf[i]>'9'){i++;}
			while(buf[i]>='0'&&buf[i]<='9'){
                		j=j*10+buf[i]-'0';
                		i++;
            		}
            		deal_request(d,k,j);
            		do_response();	
	    	}
	    	else{
            		printf("无法识别命令");
	    	}
		printf("按Y打印页表,按其他键不打印...\n");
		fp=fopen(FIFO,"r");
		fgets(buf,sizeof(buf),fp);
		fclose(fp);
		if (buf[0] == 'y' || buf[0] == 'Y')
			do_print_info();
		printf("按X退出程序,按其他键继续...\n");
		fp=fopen(FIFO,"r");
		fgets(buf,sizeof(buf),fp);
		fclose(fp);
		if (buf[0] == 'e' || buf[0] == 'E')
			break;
	}


/*	while (TRUE)
	{
	do_request();
        do_response();
		printf("按Y打印页表,按其他键不打印...\n");
		if ((c = getchar()) == 'y' || c == 'Y')
			do_print_info();
		while (c != '\n')
			c = getchar();
		printf("按X退出程序,按其他键继续...\n");
		if ((c = getchar()) == 'x' || c == 'X')
			break;
		while (c != '\n')
			c = getchar();
		//sleep(5000);
	}*/

	if (fclose(ptr_auxMem) == EOF)
	{
		do_error(ERROR_FILE_CLOSE_FAILED);
		exit(1);
	}
	return (0);
}