]>
wirehaze git hosting - ppos.git/blob - ppos/test/pingpong-cache-on.c
1 // PingPongOS - PingPong Operating System
2 // Prof. Carlos A. Maziero, DINF UFPR
3 // Versão 2.0 -- Junho de 2025
5 // ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
6 // ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
8 // Teste das operações de acesso ao disco com uma única tarefa,
9 // que lê e escreve/altera blocos do disco COM CACHE.
15 // corpo da tarefa principal
16 void user_main(void *arg
)
19 unsigned char *buffer
;
20 int num_blk
; // numero de blocos no disco
21 int blk_size
; // tamanho de cada bloco (bytes)
23 int blk_inicio
, blk_final
;
25 printf("%5d ms: user: inicio\n", systime());
27 // busca geometria do disco
28 num_blk
= block_blocks();
30 blk_size
= block_size();
33 printf("%5d ms: disco contem %d blocos de %d bytes cada\n",
34 systime(), num_blk
, blk_size
);
36 // aloca o buffer para ler blocos do disco
37 buffer
= mem_alloc(blk_size
);
40 time_start
= systime();
44 blk_final
= num_blk
/ 4;
45 for (int i
= blk_inicio
; i
< blk_final
; i
++)
47 printf("%5d ms: escreve bloco %d\n", systime(), i
);
48 status
= cache_write(i
, buffer
);
50 printf("Erro ao escrever bloco %d!\n", i
);
54 blk_inicio
+= num_blk
/ 8;
55 blk_final
+= num_blk
/ 8;
56 for (int i
= blk_inicio
; i
< blk_final
; i
++)
58 printf("%5d ms: lendo bloco %d\n", systime(), i
);
59 status
= cache_read(i
, buffer
);
61 printf("Erro ao ler bloco %d!\n", i
);
65 blk_inicio
+= num_blk
/ 8;
66 blk_final
+= num_blk
/ 8;
67 for (int i
= blk_inicio
; i
< blk_final
; i
++)
69 printf("%5d ms: lendo bloco %d\n", systime(), i
);
70 status
= cache_read(i
, buffer
);
72 printf("Erro ao ler bloco %d!\n", i
);
75 printf("As operações COM CACHE demoraram %d ms\n", systime() - time_start
);
77 // libera o buffer de blocos do disco
80 printf("%5d ms: user fim\n", systime());