char* serializar_pedido_crear_hilo_t(pedido_crear_hilo_t* pedido) { char* bytes = malloc(tamanio_pedido_crear_hilo_t_serializado()); uint32_t offset = 0; memcpy(bytes + offset, &pedido->flag, sizeof(flag_t)); offset += sizeof(flag_t); memcpy(bytes + offset, serializar_tcb(pedido->tcb), tamanio_tcb_serializado()); return bytes; }
// COMIENZO DE RESPUESTA DE CREAR SEGMENTO char* serializar_pedido_interrupcion_t(pedido_interrupcion_t* pedido) { char* bytes = malloc(tamanio_pedido_interrupcion_t_serializado()); uint32_t offset = 0; memcpy(bytes + offset, &pedido->flag, sizeof(flag_t)); offset += sizeof(flag_t); memcpy(bytes + offset, &pedido->direccion_de_memoria, sizeof(direccion)); offset += sizeof(direccion); memcpy(bytes + offset, serializar_tcb(pedido->tcb), tamanio_tcb_serializado()); return bytes; }
char* serializar_pedido_bloquear_t(pedido_bloquear_t* pedido) { char* bytes = malloc(tamanio_pedido_bloquear_t_serializado()); uint32_t offset = 0; memcpy(bytes + offset, &pedido->flag, sizeof(flag_t)); offset += sizeof(flag_t); memcpy(bytes + offset, &pedido->identificador_de_recurso, sizeof(uint32_t)); offset += sizeof(uint32_t); char* tcb_serializado = serializar_tcb(pedido->tcb); memcpy(bytes + offset, tcb_serializado,tamanio_tcb_serializado()); free(tcb_serializado); return bytes; }
char* serializar_respuesta_de_nuevo_tcb_t( respuesta_de_nuevo_tcb_t* rta_nuevo_tcb) { char* bytes = malloc(tamanio_respuesta_de_nuevo_tcb_t_serializado()); uint32_t offset = 0; memcpy(bytes + offset, &rta_nuevo_tcb->flag, sizeof(flag_t)); offset += sizeof(flag_t); memcpy(bytes + offset, &rta_nuevo_tcb->quantum, sizeof(uint32_t)); offset += sizeof(uint32_t); char* tcb_serializado = serializar_tcb(rta_nuevo_tcb->tcb); memcpy(bytes + offset, tcb_serializado, tamanio_tcb_serializado()); free(tcb_serializado); return bytes; }
char* serializar_pedido_con_resultado_t( pedido_con_resultado_t* pedido_con_resultado) { char* bytes = malloc(tamanio_pedido_con_resultado_t_serializado()); uint32_t offset = 0; memcpy(bytes + offset, &pedido_con_resultado->flag, sizeof(flag_t)); offset += sizeof(flag_t); memcpy(bytes + offset, &pedido_con_resultado->informacion, sizeof(int32_t)); offset += sizeof(int32_t); memcpy(bytes + offset, &pedido_con_resultado->resultado, sizeof(resultado_t)); offset += sizeof(resultado_t); memcpy(bytes + offset, serializar_tcb(pedido_con_resultado->tcb), tamanio_tcb_serializado()); return bytes; }
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; }