virtual void _Reply_data(std::shared_ptr<protocol::Invoke> invoke) override final { if (invoke->has("_History_uid") == true) { // REGISTER THIS PROCESS ON HISTORY LIST std::shared_ptr<slave::InvokeHistory> history(new slave::InvokeHistory(invoke)); progress_list_.insert({ history->getUID(), history }); if (invoke->has("_Piece_first") == true) { // PARALLEL PROCESS size_t first = invoke->get("_Piece_first")->getValue<size_t>(); size_t last = invoke->get("_Piece_last")->getValue<size_t>(); invoke->erase(invoke->end() - 2, invoke->end()); ((base::ParallelSystemArrayBase*)system_array_)->sendPieceData(invoke, first, last); } else if (invoke->has("_Process_name") == true) { // DISTRIBUTED PROCESS auto ds_system_array = (distributed::base::DistributedSystemArrayBase*)system_array_; // FIND THE MATCHED ROLE const std::string &process_name = invoke->get("_Process_name")->getValue<std::string>(); if (ds_system_array->hasProcess(process_name) == false) return; // SEND DATA VIA THE ROLE auto process = ds_system_array->getProcess(process_name); ((distributed::base::DistributedProcessBase*)(process.get()))->sendData(invoke, 1.0); } } else replyData(invoke); };
// // main - The simulator's main routine // int main(int argc, char **argv){ int processes[10]; init(); int i; for(i=0;i<10;i++){ processes[i]=100; printf("Scheduled Process: %d\n", i); addProcess(i); } int process = 0; while(hasProcess()){ process = nextProcess(); for(;;){ printf("Process %d executed\n", process); processes[process]--; if(processes[process]<0){ printf("Process %d Finished\n", process); break; } } } exit(0); //control never reaches here }
void Partition::allocateProcess(Process *process) { if (hasProcess()) { _waitingQueue.push(process); } else { process->setBeginMemory(_beginAddress); process->setEndMemory(_beginAddress + functions::getProcessSize(process) - 1); _process = process; } }
// // main - The simulator's main routine // int main(int argc, char **argv){ int processes[14]; init(); int i; for(i=0;i<10;i++){ processes[i]=100; int priority = i%4; printf("Scheduled Process: %d, Priority:%d\n", i, priority); PCB* proc = (PCB *) malloc(sizeof(PCB)); proc->pid = i; proc->priority=priority; addProcess(proc); } PCB* process = NULL; int count = 0; int time = 0; while(hasProcess()){ process = nextProcess(&time); if(!process){ printf("NULL Process, something went wrong in your code.\n"); exit(1); } for(;time>0;time--){ printf("Process %d executed\n", process->pid); processes[process->pid]--; if(processes[process->pid]<0){ printf("Process %d Finished\n", process->pid); } count++; } if(processes[process->pid]>=0){ addProcess(process); } if(count==400){ for(;i<14;i++){ processes[i]=100; int priority = i%4; printf("Scheduled Process: %d, Priority:%d\n", i, priority); PCB* proc = (PCB *) malloc(sizeof(PCB)); proc->pid = i; proc->priority=priority; addProcess(proc); } } } exit(0); //control never reaches here }
bool ProcessList::schedule(PCB& p) { if(hasProcess() == false) return false; auto min = plist.begin(); bool sign = false; for(auto i = min; i != plist.end(); ++i) if(i->state == WAIT && i->super <= min->super) { min = i; sign = true; } if(!sign) return false; if(min->tapeNum && !(min->tape->request(min->tapeNum,min->pid))) min = plist.begin(); else min->tapeNum = 0; p = *min; plist.erase(min); return true; }