コード例 #1
0
ファイル: MediatorSystem.hpp プロジェクト: samchon/framework
    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);
    };
コード例 #2
0
ファイル: sim.c プロジェクト: deoakshay/Operating-Systems
//
// 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
}
コード例 #3
0
void Partition::allocateProcess(Process *process) {
    if (hasProcess()) {
        _waitingQueue.push(process);
    } else {
        process->setBeginMemory(_beginAddress);
        process->setEndMemory(_beginAddress + functions::getProcessSize(process) - 1);
        _process = process;
    }
}
コード例 #4
0
//
// 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
}
コード例 #5
0
ファイル: Process.cpp プロジェクト: cposture/OS_course_1
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;
}