ContextManager *new_ContextManager() { ContextManager *self = (ContextManager*)malloc(sizeof(ContextManager)); cl_int err; cl_platform_id *cl_platforms; cl_uint num_platforms; cl_platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id) * MAX_PLATFORMS); err = clGetPlatformIDs(MAX_PLATFORMS, cl_platforms, &num_platforms); if(PERR(err == CL_INVALID_VALUE, "Error getting platform IDs")) goto bail; self->num_platforms = num_platforms; if(self->num_platforms > 0) self->platforms = (Platform**)malloc(sizeof(Platform*) * num_platforms); for(unsigned int i = 0; i < num_platforms; ++i) self->platforms[i] = new_Platform(cl_platforms[i]); free(cl_platforms); self->incoming_queue = new_Queue(); self->outgoing_queue = new_Queue(); err = pthread_create(&self->threads[0], NULL, ContextManager_Consumer, (void*)self); err = pthread_create(&self->threads[1], NULL, ContextManager_Producer, (void*)self); self->num_threads = 2; return self; bail: delete_ContextManager(self); return NULL; }
int main(void) { Scheduling_Policy simulater[3] = {{"FCFS",FCFS},{"RR",RR},{"HRRN",HRRN}}; Queue *ready_queue = new_Queue(); //준비상태 큐 생성 Queue *wait_queue = new_Queue(); //대기상태 큐 생성 int i = 0, j = 0; int policy_count = sizeof(simulater)/sizeof(Scheduling_Policy); int process_count = 5; Process *head = NULL; //프로세스 구조체 형의 head 생성, 초기화 if(ready_queue == NULL || wait_queue == NULL) return; default_wait_queue(wait_queue); //초기 대기상태 큐에 프로세스 정책 삽입 time_axis = wait_queue->head->arrival_time; //프로세스의 최초 수행시간을 고려하기 위해 첫 프로세스의 수행시작시간을 별도 관리 // 모든 프로세스 수행 시간 //초기값 = 큐의 head, null이 아닐동안, 다음 프로세스로 진행 for(head = wait_queue->head ; head!=NULL; head = head->next) total_service_time += head->service_time; //큐에 들어온 프로세스의 서비스타임의 총합 system("clear"); printf("<Scheduling Simulater>\n"); printf("policy / time\n"); for(i = 0; i < policy_count ; i++) { // 스케줄링 정책 이름 printf("%s\t",simulater[i].name); // 시간 축 출력 for(j = time_axis; j <total_service_time+time_axis; j++) printf("%-8d",j); printf("\n"); for(head = wait_queue->head; head!=NULL; head = head->next) printf("%c\n",head->name); printf("\n"); } // 스케줄링 정책 모두 실행 for(i=0; i < policy_count ;i++) { simulater[i].scheduling(wait_queue, ready_queue); default_wait_queue(wait_queue); } // 커서 제자리에 setCursorMove(0,25); }