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; }
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); }
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); }