int32_t OSSim::getPriority(Pid_t pid) { // Get the process descriptor ProcessId *proc = ProcessId::getProcessId(pid); // It should exist I(proc); // Return the priority of the process return proc->getPriority(); }
void OSSim::setPriority(Pid_t pid, int32_t newPrio) { ProcessId *proc = ProcessId::getProcessId(pid); I(proc); int32_t oldPrio=proc->getPriority(); if(newPrio==oldPrio) return; // Set the new priority of the process ProcessId *otherProc=proc->setPriority(newPrio); if(newPrio>oldPrio) { // Priority is better now, check if still running if(proc->getState()==RunningState) { // Is there a process we need to swap with if(otherProc) { // Get the cpu where the demoted process is running CPU_t cpu=proc->getCPU(); // Switch the demoted process out cpus.switchOut(cpu,proc); // Switch the new process in cpus.switchIn(cpu,otherProc); } } } else { // Priority is worse now, check if ready but not already running if(proc->getState()==ReadyState) { // Is there a process we need to swap with if(otherProc) { // Get the cpu where the other process is running CPU_t cpu=otherProc->getCPU(); // Switch the victim process out cpus.switchOut(cpu,otherProc); // Switch the promoted process in cpus.switchIn(cpu,proc); } } } }