pedido_crear_hilo_t* deserializar_pedido_crear_hilo_t(char* chorro) { pedido_crear_hilo_t* pedido = malloc(sizeof(pedido_crear_hilo_t)); uint32_t offset = 0; memcpy(&pedido->flag, chorro + offset, sizeof(flag_t)); offset += sizeof(flag_t); pedido->tcb = malloc(sizeof(tcb_t)); memcpy(pedido->tcb, deserializar_tcb(chorro + offset), sizeof(tcb_t)); return pedido; }
pedido_bloquear_t* deserializar_pedido_bloquear_t(char* chorro) { pedido_bloquear_t* pedido = malloc(sizeof(pedido_bloquear_t)); uint32_t offset = 0; memcpy(&pedido->flag, chorro + offset, sizeof(flag_t)); offset += sizeof(flag_t); memcpy(&pedido->identificador_de_recurso, chorro + offset, sizeof(uint32_t)); offset += sizeof(uint32_t); pedido->tcb = malloc(sizeof(tcb_t)); memcpy(pedido->tcb, deserializar_tcb(chorro + offset), sizeof(tcb_t)); return pedido; }
pedido_interrupcion_t* deserializar_pedido_interrupcion_t(char* chorro) { pedido_interrupcion_t* pedido = malloc(sizeof(pedido_interrupcion_t)); uint32_t offset = 0; memcpy(&pedido->flag, chorro + offset, sizeof(flag_t)); offset += sizeof(flag_t); memcpy(&pedido->direccion_de_memoria, chorro + offset, sizeof(direccion)); offset += sizeof(direccion); pedido->tcb = malloc(sizeof(tcb_t)); memcpy(pedido->tcb, deserializar_tcb(chorro + offset), sizeof(tcb_t)); return pedido; }
respuesta_de_nuevo_tcb_t* deserializar_respuesta_de_nuevo_tcb_t(char* chorro) { respuesta_de_nuevo_tcb_t* rta_nuevo_tcb = malloc( sizeof(respuesta_de_nuevo_tcb_t)); uint32_t offset = 0; memcpy(&rta_nuevo_tcb->flag, chorro + offset, sizeof(flag_t)); offset += sizeof(flag_t); memcpy(&rta_nuevo_tcb->quantum, chorro + offset, sizeof(uint32_t)); offset += sizeof(uint32_t); rta_nuevo_tcb->tcb = malloc(sizeof(tcb_t)); memcpy(rta_nuevo_tcb->tcb, deserializar_tcb(chorro + offset), sizeof(tcb_t)); return rta_nuevo_tcb; }
int main(void) { int i; t_hilo hilo,hilo2; uint16_t quantum = 27,quantum2 = 0; hilo.base_stack = 17632785; hilo.cola = READY; hilo.cursor_stack = 127; hilo.kernel_mode = 0; hilo.pid = 1147; hilo.puntero_instruccion = 2; for (i = 0; i < 5; ++i) hilo.registros[i] = 13 + i; hilo.segmento_codigo = 38155741; hilo.segmento_codigo_size = 1024; hilo.tid = 0; char* stream = serializar_tcb(&hilo,quantum); quantum2 = (uint16_t) *stream; deserializar_tcb(&hilo2,(stream + 2)); printf("Quantum Valor: %8d\n", quantum2); printf("Registro PID Valor: %8d\n", hilo2.pid); printf("Registro TID Valor: %8d\n", hilo2.tid); printf("Registro KM Valor: %8d\n", hilo2.kernel_mode); printf("Registro CS Valor: %8d\n", hilo2.segmento_codigo); printf("Registro CS_Size Valor: %8d\n", hilo2.segmento_codigo_size); printf("Registro IP Valor: %8d\n", hilo2.puntero_instruccion); printf("Registro Stack Valor: %8d\n", hilo2.base_stack); printf("Registro Stack_Size Valor: %8d\n", hilo2.cursor_stack); for(i = 0;i < 5; ++i) printf("Registro %c. Valor: %8d\n",('A'+i), hilo2.registros[i]); printf("Registro COLA: %8d\n", hilo2.cola); puts("\n"); return 0; }
pedido_con_resultado_t* deserializar_pedido_con_resultado_t(char* chorro) { pedido_con_resultado_t* pedido_con_resultado = malloc(sizeof(pedido_con_resultado_t)); uint32_t offset = 0; memcpy(&pedido_con_resultado->flag, chorro + offset, sizeof(flag_t)); offset += sizeof(flag_t); memcpy(&pedido_con_resultado->informacion, chorro + offset, sizeof(int32_t)); offset += sizeof(int32_t); memcpy(&pedido_con_resultado->resultado, chorro + offset, sizeof(resultado_t)); offset += sizeof(resultado_t); pedido_con_resultado->tcb = malloc(sizeof(tcb_t)); tcb_t* tcb = deserializar_tcb(chorro + offset); memcpy(pedido_con_resultado->tcb, tcb, sizeof(tcb_t)); free(tcb); return pedido_con_resultado; }