Untitled


SUBMITTED BY: antoineh1

DATE: May 8, 2016, 10:01 p.m.

FORMAT: Text only

SIZE: 5.7 kB

HITS: 3859

  1. /*
  2. * pcb.c
  3. *
  4. * Created on: 8/5/2016
  5. * Author: utnso
  6. */
  7. #include "pcb.h"
  8. int32_t tamano_etiqueta(t_indice_etiq etiqueta){
  9. return sizeof(etiqueta.pos_real)+
  10. sizeof(etiqueta.tamano_etiqueta)+
  11. sizeof(char) * etiqueta.tamano_etiqueta;
  12. }
  13. int32_t tamanio_indice_etiquetas(t_pcb pcb){
  14. int i;
  15. int32_t contador = 0;
  16. for(i=0; i < (pcb.cant_etiquetas); i++)
  17. contador += tamano_etiqueta(pcb.indice_etiquetas[i]);
  18. return contador;
  19. }
  20. int32_t tamanio_indice_stack(t_pcb pcb){
  21. int i;
  22. int32_t contador = 0;
  23. for(i=0; i < (pcb.cant_entradas_indice_stack); i++)
  24. contador += sizeof(pcb.indice_stack->posicion) +
  25. sizeof(pcb.indice_stack->cant_argumentos) +
  26. sizeof(t_posMemoria) * pcb.indice_stack[i].cant_argumentos+
  27. sizeof(pcb.indice_stack->cant_variables) +
  28. sizeof(t_variable) * pcb.indice_stack[i].cant_variables+
  29. sizeof(pcb.indice_stack->pos_retorno)+
  30. sizeof(pcb.indice_stack->pos_var_retorno);
  31. return contador;
  32. }
  33. int32_t tamanio_pcb(t_pcb pcb){
  34. return
  35. sizeof(pcb.pid)+
  36. sizeof(pcb.pc)+
  37. sizeof(pcb.cant_pags_totales)+
  38. sizeof(pcb.fin_stack)+
  39. sizeof(pcb.cant_instrucciones)+
  40. sizeof(t_posMemoria) * pcb.cant_instrucciones +
  41. sizeof(pcb.cant_etiquetas)+
  42. tamanio_indice_etiquetas(pcb)+
  43. sizeof(pcb.cant_entradas_indice_stack)+
  44. tamanio_indice_stack(pcb);
  45. }
  46. int agregar(char *to,int32_t tamano, void* from){
  47. memcpy(to,from,tamano);
  48. return tamano;
  49. }
  50. t_pcb_serializado serializar(t_pcb pcb)
  51. {
  52. t_pcb_serializado pcb_serializado;
  53. pcb_serializado.tamanio = tamanio_pcb(pcb);
  54. pcb_serializado.contenido_pcb = malloc(pcb_serializado.tamanio);
  55. int i;
  56. int offset=0;
  57. int32_t proximo_tamano_a_serializar;
  58. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.pid),&pcb.pid);
  59. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.pc),&pcb.pc);
  60. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.cant_pags_totales),&pcb.cant_pags_totales);
  61. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.fin_stack),&pcb.fin_stack);
  62. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.cant_instrucciones),&pcb.cant_instrucciones);
  63. for(i=0;i<pcb.cant_instrucciones;i++)
  64. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(t_posMemoria) ,pcb.indice_codigo+i);
  65. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.cant_etiquetas),&pcb.cant_etiquetas);
  66. for(i=0;i<pcb.cant_etiquetas;i++){
  67. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.indice_etiquetas->tamano_etiqueta),&pcb.indice_etiquetas[i].tamano_etiqueta);
  68. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.indice_etiquetas->pos_real),&pcb.indice_etiquetas[i].pos_real);
  69. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.indice_etiquetas[i].tamano_etiqueta),pcb.indice_etiquetas[i].etiq);
  70. }
  71. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.cant_entradas_indice_stack),&pcb.cant_entradas_indice_stack);
  72. for(i=0;i<pcb.cant_entradas_indice_stack;i++){
  73. int j;
  74. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.indice_stack->posicion),&pcb.indice_stack[i].posicion);
  75. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.indice_stack->cant_argumentos),&pcb.indice_stack[i].cant_argumentos);
  76. for(j=0;j<pcb.indice_stack->cant_argumentos;j++){
  77. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(t_posMemoria),&pcb.indice_stack[i].argumentos[j]);
  78. }
  79. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.indice_stack->cant_variables),&pcb.indice_stack[i].cant_variables);
  80. for(j=0;j<pcb.indice_stack->cant_variables;j++){
  81. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(t_variable),&pcb.indice_stack[i].variables[j]);
  82. }
  83. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.indice_stack->pos_retorno),&pcb.indice_stack[i].pos_retorno);
  84. offset+=agregar(pcb_serializado.contenido_pcb+offset,sizeof(pcb.indice_stack->pos_var_retorno),&pcb.indice_stack[i].pos_var_retorno);
  85. }
  86. return pcb_serializado;
  87. }
  88. destruir_pcb_serializado(t_pcb_serializado pcbs){
  89. free(pcbs.contenido_pcb);
  90. }
  91. void deserializar(t_pcb pcb)
  92. {
  93. }
  94. int main(int argc, char **argv){
  95. t_pcb pcb_prueba;
  96. t_posMemoria indice_codigo_prueba;
  97. t_posMemoria indice_codigo_prueba2;
  98. t_indice_etiq indice_etiqueta_prueba;
  99. registro_indice_stack indice_stack_prueba;
  100. indice_codigo_prueba.pag=11;
  101. indice_codigo_prueba.offset=12;
  102. indice_codigo_prueba.size=13;
  103. indice_codigo_prueba2.pag=21;
  104. indice_codigo_prueba2.offset=22;
  105. indice_codigo_prueba2.size=33;
  106. indice_etiqueta_prueba.tamano_etiqueta=7;
  107. indice_etiqueta_prueba.etiq="sarasa";
  108. indice_etiqueta_prueba.pos_real.pag=2;
  109. indice_etiqueta_prueba.pos_real.offset=10;
  110. indice_etiqueta_prueba.pos_real.size=19;
  111. indice_stack_prueba.posicion=7;
  112. indice_stack_prueba.cant_argumentos=1;
  113. indice_stack_prueba.argumentos[0]=indice_codigo_prueba2;
  114. indice_stack_prueba.cant_variables=1;
  115. indice_stack_prueba.variables->id=1;
  116. indice_stack_prueba.variables->posicionVar[0]=indice_codigo_prueba;
  117. indice_stack_prueba.pos_retorno=28;
  118. indice_stack_prueba.pos_var_retorno=indice_codigo_prueba2;
  119. pcb_prueba.pid=1;
  120. pcb_prueba.pc=0;
  121. pcb_prueba.cant_pags_totales=15;
  122. pcb_prueba.fin_stack=0;
  123. pcb_prueba.cant_instrucciones;
  124. pcb_prueba.indice_codigo[0]=indice_codigo_prueba;
  125. pcb_prueba.indice_codigo[1]=indice_codigo_prueba2;
  126. pcb_prueba.cant_etiquetas=1;
  127. pcb_prueba.indice_etiquetas[0]=indice_etiqueta_prueba;
  128. pcb_prueba.cant_entradas_indice_stack=1;
  129. pcb_prueba.indice_stack[0]=indice_stack_prueba;
  130. }

comments powered by Disqus