Essays.club - Ensayos gratis, notas de cursos, notas de libros, tareas, monografías y trabajos de investigación
Buscar

Naturaleza social del ser humano

Enviado por   •  6 de Diciembre de 2017  •  1.167 Palabras (5 Páginas)  •  473 Visitas

Página 1 de 5

...

///<summary><param name = "id">Identificador de proceso</param>

///<param name = "status">Estado con el que se inicializa el proceso</param>

///<param name = "callback">puntero a la funcion</param>

///<param name = "obj">Objeto inicializado para una funcion no estatica</param></summary>

PCB(int id, int status, int *callback, ClassB *obj)

{

this->id = id;

this->status = status;

this->function = callback;

this->obj = obj;

}

~PCB()

{

this->id = this->status = 0;

this->function = NULL;

if (this->obj != NULL)

{ //TODO: Agregar el destructor de obj, si es necesario

this->obj = NULL;

}

}

///<summary>Retorna el id del PCB</summary>

int getId()

{

return this->id;

}

};

///<summary>Kernel que lleva la tabla de procesos</summary>

class Kernel

{

private:

///<summary>Contador de identificadores</summary>

int id_count;

///<summary>Valida si un proceso nuevo puede ser agregado en la posicion

///</param name = "index">Indice en que se quiere insertar el proceso</param>

///<para><returns>Entero que inidica el resultado</returns></para></summary>

int validateNewProcess(int index)

{

if (index >= MAX || index < 0)

return OUT_OF_RANGE;

if (this->pcb[index] != NULL)

{

if (this->pcb[index]->status != DONE)

return UNAVAILABLE;

else

killProcessAt(index);

}

if (count >= MAX)

return OVERFLOW;

return SUCCESSFUL;

}

///<summary>Corre un proceso al recibir el PCB

///<param name = "pcb">Puntero al Bloque de Control de Proceso</param></summary>

static void runProcess(PCB *pcb)

{

int result;

int *function = pcb->function;

pcb->status = RUNNING;

if (pcb->obj != NULL)

{

CallBackB *cb = (CallBackB*)(function);

result = (pcb->obj->**cb)(6);

}

else

{

CallBack cb = (CallBack)*(&function);

result = cb(7);

}

pcb->status = DONE;

cout << "Proceso terminado\nId de Proceso: " << pcb->getId() << "\nValor de Retorno: " << result << "\n\n";

}

///<summary>Valida si un proceso puede ser ejecutado

///<param name = "current">PCB con el proceso a validar</param>

///<para><returns>Retorna el entero del resultado validado</returns></para></summary>

static int validateProccess(PCB *current)

{

if (current == NULL)

return PROCESS_IS_NULL;

if (current->status == DONE)

return PROCESS_IS_DONE;

return SUCCESSFUL;

}

///<summary>Retorna el primer indice disponible para almacenar un nuevo PCB

///<para><returns>Si el resultado es -1, no hay indices dentro del arreglo</returns></para></summary>

int firstAvailableIndex()

{

int i = 0;

while (i < MAX)

{

if (this->pcb[i] == NULL)

return i;

else if (this->pcb[i]->status == DONE)

{

killProcessAt(i);

return i;

}

i++;

}

return -1;

}

///<summary>Busca el PCB segun su id

///<param

...

Descargar como  txt (12.2 Kb)   pdf (87.2 Kb)   docx (18.9 Kb)  
Leer 4 páginas más »
Disponible sólo en Essays.club