static int __init start(void) { printCurrent(); printAll(); printAllGrouped(); return 0; }
int Menu::menu(){ while(true){ // så länge användaren inte har gjort ett menyval printCurrent(); // skriv ut markören int inp = keys->getch();// vänta på inputs if(inp == '\n') // om det är enter/retur knappen return current; // användaren har valt current menyalternativ else if(inp == 'q' || inp == 'Q')// om det är q tangenten så avslutas programmet return 6; else{ // anars läser vi in hela bufferten ... std::string kb = ""; kb += inp; // lägger till den föregående inläsningen //if(keys.kbhit()) while(keys->kbhit())// så länge det finns kvar info att läsa kb += keys->getch();//lägg till i kb if( kb == VK_UP || kb == VK_DOWN){// om det är upp eller nertangenten int dir = (kb[kb.length()-1]) - 'A';// avgör vilken av tangenterna det är if(dir) // om det är ner pilen next(); // gå ett steg framot i menyn else previous(); // annars gå ett steg bakot i menyn } } } return current;// kommer aldrig hit }
int main(int argc, char *argv[]) { list_entry_t *pos; int byteStart, byteEnd, globalEnd; struct ProcStruct *next; schedInit(); //init schedule printf("SchedInit finished!\n"); cpu_init(); //init cpu printf("Cpu init finished!\n"); initProcList(); //runnbale process printf("Init process list finished!\n"); procInit(); //init process table printf("The first proc init finished!\n"); initWaitQueue(); //init wait queue printf("Init wait queue finished!\n"); bc_read(&byteStart, &byteEnd, &globalEnd); //读取字节码 /* for (int i = 0; i < 7; i++) { printf("%d %d %d\n", byte_code[i].code, byte_code[i].arg1, byte_code[i].arg2); } */ createProcess(byteStart, byteEnd, globalEnd); //根据字节码的初始下标和终止下标创建第一个进程 // createProcess(0, 9, 3); //根据字节码的初始下标和终止下标创建第一个进程 printCurrent(); addRunEqueue(); //将创建的进程加入到就绪队列 printf("The proc addRunEqueu finished!\n"); while (cpu_state != 0 && rq->proc_num) { printf("schedul start...\n"); cpuSchedProc(); } while (rq->proc_num == 0 && wq->wait_num != 0) { next = waitQueuePickNext(wq); delWaitQueue(wq, next); schedClassEnqueue(next); schedule(); } return 0; }
void executeOneTime () { printCurrent(); time += 1; ktime += 1; int i; // Allot to the next process that has pending operations process_p_t p = *(pross + k); if (ktime % quantum == 0 || p->rt <= 0) { ktime = 0; k = (k + 1) % n; p = *(pross + k); int kk = k; while (p->rt <= 0) { k = (k + 1) % n; p = *(pross + k); if (k == kk) { printf("-- NO PENDING PROCESSES --\n"); return; } } } for (i = 0; i < n; ++i) { p = *(pross + i); if (i == k) { printf("Servicing process %d [AT = %d, RT = %d]\n", p->id, p->at, p->rt); fprintf(gantt, "%4d ||", time); int l; for (l = 0; l < n; ++l) { if (l == p->id) fprintf(gantt, " * |"); else fprintf(gantt, " |"); } fprintf(gantt, "\n"); p->rt -= 1; p->tat += 1; } else { if (p->rt > 0) { p->wt += 1; p->tat += 1; } } } }
void executeOneTime () { printCurrent(); time += 1; k = -1; int i; for (i = 0; i < n; ++i) { process_p_t p = *(pross + i); if (p->rt > 0) { k = i; break; } } if (k == -1) { printf("-- NO PENDING PROCESSES --\n"); return; } for (i = 0; i < n; ++i) { process_p_t p = *(pross + i); if (i == k) { printf("Servicing process %d [AT = %d, RT = %d]\n", p->id, p->at, p->rt); fprintf(gantt, "%4d ||", time); int l; for (l = 0; l < n; ++l) { if (l == p->id) fprintf(gantt, " * |"); else fprintf(gantt, " |"); } fprintf(gantt, "\n"); p->rt -= 1; p->tat += 1; } else { if (p->rt > 0) { p->wt += 1; p->tat += 1; } } } }