Naturaleza social del ser humano
Enviado por Kate • 6 de Diciembre de 2017 • 1.167 Palabras (5 Páginas) • 553 Visitas
...
///<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
...