]> wirehaze git hosting - ppos.git/commitdiff

wirehaze git hosting

add ppos/
authorphfr24 <phfr24@inf.ufpr.br>
Sun, 8 Mar 2026 20:06:33 +0000 (17:06 -0300)
committerphfr24 <phfr24@inf.ufpr.br>
Sun, 8 Mar 2026 20:06:33 +0000 (17:06 -0300)
83 files changed:
ppos/hardware/cpu.c [new file with mode: 0644]
ppos/hardware/cpu.h [new file with mode: 0644]
ppos/hardware/disk.c [new file with mode: 0644]
ppos/hardware/disk.dat [new file with mode: 0644]
ppos/hardware/disk.dat-final [new file with mode: 0644]
ppos/hardware/disk.dat-inicial [new file with mode: 0644]
ppos/hardware/disk.h [new file with mode: 0644]
ppos/hardware/makefile [new file with mode: 0644]
ppos/hardware/serial.c [new file with mode: 0644]
ppos/hardware/serial.h [new file with mode: 0644]
ppos/kernel/block.c [new file with mode: 0644]
ppos/kernel/block.h [new file with mode: 0644]
ppos/kernel/ctx.h [new file with mode: 0644]
ppos/kernel/ctx.s [new file with mode: 0644]
ppos/kernel/dispatcher.c [new file with mode: 0644]
ppos/kernel/dispatcher.h [new file with mode: 0644]
ppos/kernel/macros.h [new file with mode: 0644]
ppos/kernel/makefile [new file with mode: 0644]
ppos/kernel/memory.c [new file with mode: 0644]
ppos/kernel/memory.h [new file with mode: 0644]
ppos/kernel/mqueue.c [new file with mode: 0644]
ppos/kernel/mqueue.h [new file with mode: 0644]
ppos/kernel/ppos.c [new file with mode: 0644]
ppos/kernel/ppos.h [new file with mode: 0644]
ppos/kernel/scheduler.c [new file with mode: 0644]
ppos/kernel/scheduler.h [new file with mode: 0644]
ppos/kernel/semaphore.c [new file with mode: 0644]
ppos/kernel/semaphore.h [new file with mode: 0644]
ppos/kernel/task.c [new file with mode: 0644]
ppos/kernel/task.h [new file with mode: 0644]
ppos/kernel/tcb.h [new file with mode: 0644]
ppos/kernel/time.c [new file with mode: 0644]
ppos/kernel/time.h [new file with mode: 0644]
ppos/leia-me.txt [new file with mode: 0644]
ppos/lib/libc.c [new file with mode: 0644]
ppos/lib/libc.h [new file with mode: 0644]
ppos/lib/makefile [new file with mode: 0644]
ppos/lib/queue.c [new file with mode: 0644]
ppos/lib/queue.h [new file with mode: 0644]
ppos/makefile [new file with mode: 0644]
ppos/test/makefile [new file with mode: 0644]
ppos/test/pingpong-cache-off.c [new file with mode: 0644]
ppos/test/pingpong-cache-off.txt [new file with mode: 0644]
ppos/test/pingpong-cache-on.c [new file with mode: 0644]
ppos/test/pingpong-cache-on.txt [new file with mode: 0644]
ppos/test/pingpong-contab-prio.c [new file with mode: 0644]
ppos/test/pingpong-contab-prio.txt [new file with mode: 0644]
ppos/test/pingpong-contab-stress.c [new file with mode: 0644]
ppos/test/pingpong-contab-stress.txt [new file with mode: 0644]
ppos/test/pingpong-contab.c [new file with mode: 0644]
ppos/test/pingpong-contab.txt [new file with mode: 0644]
ppos/test/pingpong-disco-stress.c [new file with mode: 0644]
ppos/test/pingpong-disco-stress.txt [new file with mode: 0644]
ppos/test/pingpong-disco.c [new file with mode: 0644]
ppos/test/pingpong-disco.txt [new file with mode: 0644]
ppos/test/pingpong-dispatcher.c [new file with mode: 0644]
ppos/test/pingpong-dispatcher.txt [new file with mode: 0644]
ppos/test/pingpong-memoria.c [new file with mode: 0644]
ppos/test/pingpong-memoria.txt [new file with mode: 0644]
ppos/test/pingpong-mqueue.c [new file with mode: 0644]
ppos/test/pingpong-mqueue.txt [new file with mode: 0644]
ppos/test/pingpong-preempcao.c [new file with mode: 0644]
ppos/test/pingpong-preempcao.txt [new file with mode: 0644]
ppos/test/pingpong-prodcons.c [new file with mode: 0644]
ppos/test/pingpong-prodcons.txt [new file with mode: 0644]
ppos/test/pingpong-scheduler.c [new file with mode: 0644]
ppos/test/pingpong-scheduler.txt [new file with mode: 0644]
ppos/test/pingpong-semaphore-stress.c [new file with mode: 0644]
ppos/test/pingpong-semaphore-stress.txt [new file with mode: 0644]
ppos/test/pingpong-semaphore.c [new file with mode: 0644]
ppos/test/pingpong-semaphore.txt [new file with mode: 0644]
ppos/test/pingpong-sleep.c [new file with mode: 0644]
ppos/test/pingpong-sleep.txt [new file with mode: 0644]
ppos/test/pingpong-task1.c [new file with mode: 0644]
ppos/test/pingpong-task1.txt [new file with mode: 0644]
ppos/test/pingpong-task2.c [new file with mode: 0644]
ppos/test/pingpong-task2.txt [new file with mode: 0644]
ppos/test/pingpong-task3.c [new file with mode: 0644]
ppos/test/pingpong-task3.txt [new file with mode: 0644]
ppos/test/pingpong-wait-stress.c [new file with mode: 0644]
ppos/test/pingpong-wait-stress.txt [new file with mode: 0644]
ppos/test/pingpong-wait.c [new file with mode: 0644]
ppos/test/pingpong-wait.txt [new file with mode: 0644]

diff --git a/ppos/hardware/cpu.c b/ppos/hardware/cpu.c
new file mode 100644 (file)
index 0000000..c10b75b
--- /dev/null
@@ -0,0 +1,135 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Emula vários mecanismos de uma CPU:
+// - interrupções virtuais - emuladas com sinais POSIX de tempo real
+//   a partir de SIGRTMIN+1
+// - desligamento do sistema
+
+// padrão de API UNIX a usar (para sigaction)
+#define _XOPEN_SOURCE 700
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <time.h>
+#include <sys/times.h>
+#include "cpu.h"
+
+#define NOERROR 0
+#define ERROR -1
+
+// para os sinais
+static struct sigaction action;
+
+// para o timer
+static timer_t timer;
+static struct itimerspec delay;
+static struct sigevent sigev; 
+
+//----------------------------------------------------------------------
+
+int hw_irq_handle(int irq, void (*handle)(int))
+{
+    if (irq < 1)
+        return (ERROR);
+
+    if ((irq + SIGRTMIN) >= SIGRTMAX)
+        return (ERROR);
+
+    if (!handle)
+        return (ERROR);
+
+    // registra a ação para o sinal indicado
+    action.sa_handler = handle;
+    sigemptyset(&action.sa_mask);
+    action.sa_flags = SA_NODEFER;
+    if (sigaction(irq + SIGRTMIN, &action, 0) < 0)
+    {
+        perror("IRQ:");
+        abort();
+    }
+    return (NOERROR);
+}
+
+//----------------------------------------------------------------------
+
+void hw_irq_enable(int enable)
+{
+    sigset_t mask;
+
+    if (enable)
+        sigemptyset(&mask);
+    else
+        sigfillset(&mask);
+
+    sigprocmask(SIG_SETMASK, &mask, NULL);
+}
+
+//----------------------------------------------------------------------
+
+int hw_timer(int first, int next)
+{
+    if (first < 0 || next < 0)
+        return (ERROR);
+
+    // cria o timer
+    sigev.sigev_notify = SIGEV_SIGNAL;
+    sigev.sigev_signo = IRQ_TIMER + SIGRTMIN;
+    if (timer_create(CLOCK_REALTIME, &sigev, &timer) == -1)
+    {
+        perror("TIMER:");
+        abort();
+    }
+
+    // configura o timer POSIX
+    delay.it_value.tv_nsec = first * 1000000;
+    delay.it_value.tv_sec = 0;
+    delay.it_interval.tv_nsec = first * 1000000;
+    delay.it_interval.tv_sec = 0;
+
+    // arma o timer POSIX
+    if (timer_settime(timer, 0, &delay, NULL) == -1)
+    {
+        perror("TIMER:");
+        abort();
+    }
+    return (NOERROR);
+}
+
+//----------------------------------------------------------------------
+
+void hw_wfi()
+{
+    // A syscall pause permite emular o comportamento da instrução HLT
+    // (halt) ou WFI (wait for interrupt), que suspendem a CPU até a
+    // próxima interrupção de hardware, para economizar energia.
+    // Neste caso, pause() suspende este processo até o próximo sinal
+    // UNIX, que emula uma interrupção.
+    pause();
+}
+
+//----------------------------------------------------------------------
+
+void hw_poweroff(int error)
+{
+    //struct tms time;
+
+    // print CPU usage
+    //times(&time);
+    //printf("Hardware shutdown, cpu active for %ld ms\n",
+    //       10 * (time.tms_utime + time.tms_stime));
+
+    // encerra com erro, GDB pode ver o call stack
+    if (error)
+        abort();
+
+    exit(0);
+}
+
+//----------------------------------------------------------------------
diff --git a/ppos/hardware/cpu.h b/ppos/hardware/cpu.h
new file mode 100644 (file)
index 0000000..2edf89e
--- /dev/null
@@ -0,0 +1,46 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Emula vários mecanismos de uma CPU:
+// - interrupções virtuais
+// - temporizador virtual
+// - Wait for Interrupt
+// - desligamento do hardware
+
+#ifndef __HW_CPU__
+#define __HW_CPU__
+
+// Interrupções virtuais
+#define IRQ_RESERVED 0   // reservada (não usar)
+#define IRQ_TIMER 1      // IRQ gerada pelo temporizador
+#define IRQ_DISK 2       // IRQ gerada pelo controlador de disco
+#define IRQ_UART 3       // IRQ gerada pela UART (serial)
+#define IRQ_NET 4        // IRQ gerada pela interface de rede
+
+// Define a função de tratamento de uma IRQ; a função "handle"
+// será chamada sempre que a IRQ indicada ocorrer.
+// Retorno: ERROR ou NOERROR
+int hw_irq_handle(int irq, void (*handle)(int));
+
+// Habilita (enable != 0) ou desabilita (enable == 0) as IRQs.
+void hw_irq_enable(int enable);
+
+// Arma o temporizador para disparar após "first" ms e depois
+// repetir a cada "next" ms. Se first == next == 0, desarma-o.
+// Ao disparar, o temporizador gera a IRq IRQ_TIMER.
+// Retorno: ERROR ou NOERROR
+int hw_timer (int first, int next);
+
+// "Wait for Interrupt": suspende a CPU até a próxima IRq,
+// para economizar energia.
+void hw_wfi();
+
+// Desliga o hardware; se error != 0, encerra com status de erro
+// (útil quando depurar com o GDB).
+void hw_poweroff(int error);
+
+#endif
diff --git a/ppos/hardware/disk.c b/ppos/hardware/disk.c
new file mode 100644 (file)
index 0000000..41f4353
--- /dev/null
@@ -0,0 +1,268 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Implementação do disco virtual, que simula um disco rígido.
+
+// para depurar a operação do disco
+//#define DEBUG_DISK 1
+
+// padrão de API UNIX a usar (para sigaction)
+#define _XOPEN_SOURCE 700
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <time.h>
+#include "cpu.h"
+#include "disk.h"
+
+#define NOERROR 0
+#define ERROR -1
+
+// parâmetros de operação do disco simulado
+#define DISK_BLOCK_SIZE 64   // tamanho de cada bloco, em bytes
+#define DISK_DELAY_MIN 30    // atraso minimo, em milisegundos
+#define DISK_DELAY_MAX 300   // atraso maximo, em milisegundos
+#define DISK_SIGNAL SIGRTMIN // sinal a ser usado no timer interno
+
+//----------------------------------------------------------------------
+
+// estrutura com os dados internos do disco (estado inicial desconhecido)
+struct disk_t
+{
+    int status;               // estado do disco
+    char *file;               // nome do arquivo que simula o disco
+    int fd;                   // descritor do arquivo que simula o disco
+    int numblocks;            // numero de blocos do disco
+    int blocksize;            // tamanho dos blocos em bytes
+    char *buffer;             // buffer da próxima operação (read/write)
+    int prev_block;           // bloco da ultima operação
+    int next_block;           // bloco da próxima operação
+    int delay_min, delay_max; // tempos de acesso mínimo e máximo
+    timer_t timer;            // timer que simula o tempo de acesso
+    struct itimerspec delay;  // struct do timer de tempo de acesso
+    struct sigevent sigev;    // evento associado ao timer
+    struct sigaction signal;  // tratador de sinal do timer
+};
+
+// disco
+static struct disk_t disk = {.status = DISK_STATUS_UNKNOWN};
+
+//----------------------------------------------------------------------
+
+// arma o timer que simula o tempo de acesso ao disco;
+// ao disparar, ele gera um sinal DISK_SIGNAL
+static void disk_settimer()
+{
+    int time_ms;
+
+    // tempo no intervalo [DISK_DELAY_MIN ... DISK_DELAY_MAX], proporcional a
+    // distancia entre o proximo bloco a ler (next_block) e a ultima leitura
+    // (prev_block), somado a um pequeno fator aleatorio
+    time_ms = abs(disk.next_block - disk.prev_block) *
+                  (disk.delay_max - disk.delay_min) /
+                  disk.numblocks +
+              disk.delay_min +
+              random() % (disk.delay_max - disk.delay_min) / 10;
+
+#ifdef DEBUG_DISK
+    printf("DISK: [From block %d to block %d in %d ms]\n",
+                   disk.prev_block, disk.next_block, time_ms);
+#endif
+
+    // primeiro disparo, em nano-segundos,
+    disk.delay.it_value.tv_nsec = time_ms * 1000000;
+
+    // primeiro disparo, em segundos
+    disk.delay.it_value.tv_sec = time_ms / 1000;
+
+    // próximos disparos nao ocorrem (disparo único)
+    disk.delay.it_interval.tv_nsec = 0;
+    disk.delay.it_interval.tv_sec = 0;
+
+    // arma o timer
+    if (timer_settime(disk.timer, 0, &disk.delay, NULL) == -1)
+    {
+        perror("DISK:");
+        abort();
+    }
+#ifdef DEBUG_DISK
+    printf("DISK: timer is set\n");
+#endif
+}
+
+//----------------------------------------------------------------------
+
+// trata o sinal do timer que simula o tempo de acesso ao disco
+static void disk_sighandle(int)
+{
+#ifdef DEBUG_DISK
+    printf("DISK: signal received\n");
+    printf("fd: %d, block %d, size %d\n", disk.fd, disk.next_block,
+           disk.blocksize);
+#endif
+
+    // verificar qual a operação pendente e realizá-la
+    switch (disk.status)
+    {
+    case DISK_STATUS_READ:
+        // faz a leitura previamente agendada
+        pread(disk.fd, disk.buffer, disk.blocksize, 
+              disk.next_block * disk.blocksize);
+        break;
+
+    case DISK_STATUS_WRITE:
+        // faz a escrita previamente agendada
+        pwrite(disk.fd, disk.buffer, disk.blocksize, 
+              disk.next_block * disk.blocksize);
+        break;
+
+    default:
+        // erro: estado desconhecido
+        perror("DISK: unknown disk state");
+        abort();
+    }
+
+    // guarda numero de bloco da ultima operação
+    disk.prev_block = disk.next_block;
+
+    // disco se torna ocioso novamente
+    disk.status = DISK_STATUS_IDLE;
+
+    // gera uma IRQ virtual para o "kernel" do usuário
+    raise(IRQ_DISK + SIGRTMIN);
+}
+
+//----------------------------------------------------------------------
+
+// inicia o disco virtual contido em "disk_image"
+// retorno: 0 (sucesso) ou -1 (erro)
+static int disk_init(char *disk_image)
+{
+    // o disco já foi iniciado ?
+    if (disk.status != DISK_STATUS_UNKNOWN)
+        return (ERROR);
+
+    // estado atual do disco
+    disk.status = DISK_STATUS_IDLE;
+    disk.next_block = disk.prev_block = 0;
+
+    // abre o arquivo no disco (leitura/escrita, sincrono)
+    disk.file = disk_image;
+    disk.fd = open(disk.file, O_RDWR | O_SYNC);
+    if (disk.fd < 0)
+    {
+        perror("DISK: ");
+        abort();
+    }
+
+    // define seu tamanho em blocos
+    disk.blocksize = DISK_BLOCK_SIZE;
+    disk.numblocks = lseek(disk.fd, 0, SEEK_END) / disk.blocksize;
+
+    // ajusta atrasos mínimo e máximo de acesso no disco
+    disk.delay_min = DISK_DELAY_MIN;
+    disk.delay_max = DISK_DELAY_MAX;
+
+    // associa sinal do timer interno ao handle apropriado
+    disk.signal.sa_handler = disk_sighandle;
+    sigemptyset(&disk.signal.sa_mask);
+    disk.signal.sa_flags = SA_NODEFER;
+    sigaction(DISK_SIGNAL, &disk.signal, 0);
+
+    // cria o timer que simula o tempo de acesso ao disco
+    disk.sigev.sigev_notify = SIGEV_SIGNAL;
+    disk.sigev.sigev_signo = DISK_SIGNAL;
+    if (timer_create(CLOCK_REALTIME, &disk.sigev, &disk.timer) == -1)
+    {
+        perror("DISK:");
+        abort();
+    }
+
+#ifdef DEBUG_DISK
+    printf("DISK: initialized\n");
+#endif
+
+    return (NOERROR);
+}
+
+//----------------------------------------------------------------------
+
+// função que implementa a interface de acesso ao disco virtual
+int hw_disk_cmd(int cmd, int block, void *buffer)
+{
+#ifdef DEBUG_DISK
+    printf("DISK: received command %d\n", cmd);
+#endif
+
+    switch (cmd)
+    {
+    // inicia o disco
+    case DISK_CMD_INIT:
+        return (disk_init(buffer));
+
+    // solicita status do disco
+    case DISK_CMD_STATUS:
+        return (disk.status);
+
+    // solicita tamanho do disco
+    case DISK_CMD_DISKSIZE:
+        if (disk.status == DISK_STATUS_UNKNOWN)
+            return (ERROR);
+        return (disk.numblocks);
+
+    // solicita tamanho de bloco
+    case DISK_CMD_BLOCKSIZE:
+        if (disk.status == DISK_STATUS_UNKNOWN)
+            return (ERROR);
+        return (disk.blocksize);
+
+    // solicita atraso mínimo
+    case DISK_CMD_DELAYMIN:
+        if (disk.status == DISK_STATUS_UNKNOWN)
+            return (ERROR);
+        return (disk.delay_min);
+
+    // solicita atraso máximo
+    case DISK_CMD_DELAYMAX:
+        if (disk.status == DISK_STATUS_UNKNOWN)
+            return (ERROR);
+        return (disk.delay_max);
+
+    // solicita operação de leitura ou de escrita
+    case DISK_CMD_READ:
+    case DISK_CMD_WRITE:
+        if (disk.status != DISK_STATUS_IDLE)
+            return (ERROR);
+        if (!buffer)
+            return (ERROR);
+        if (block < 0 || block >= disk.numblocks)
+            return (ERROR);
+
+        // registra que ha uma operação pendente
+        disk.buffer = buffer;
+        disk.next_block = block;
+        if (cmd == DISK_CMD_READ)
+            disk.status = DISK_STATUS_READ;
+        else
+            disk.status = DISK_STATUS_WRITE;
+
+        // arma o timer que simula o atraso do disco
+        disk_settimer();
+
+        return (NOERROR);
+
+    default:
+        return (ERROR);
+    }
+}
+
+//----------------------------------------------------------------------
diff --git a/ppos/hardware/disk.dat b/ppos/hardware/disk.dat
new file mode 100644 (file)
index 0000000..29c7d48
--- /dev/null
@@ -0,0 +1 @@
+<--bloco 0000--------------------------------------------------><--bloco 0001--------------------------------------------------><--bloco 0002--------------------------------------------------><--bloco 0003--------------------------------------------------><--bloco 0004--------------------------------------------------><--bloco 0005--------------------------------------------------><--bloco 0006--------------------------------------------------><--bloco 0007--------------------------------------------------><--bloco 0008--------------------------------------------------><--bloco 0009--------------------------------------------------><--bloco 0010--------------------------------------------------><--bloco 0011--------------------------------------------------><--bloco 0012--------------------------------------------------><--bloco 0013--------------------------------------------------><--bloco 0014--------------------------------------------------><--bloco 0015--------------------------------------------------><--bloco 0016--------------------------------------------------><--bloco 0017--------------------------------------------------><--bloco 0018--------------------------------------------------><--bloco 0019--------------------------------------------------><--bloco 0020--------------------------------------------------><--bloco 0021--------------------------------------------------><--bloco 0022--------------------------------------------------><--bloco 0023--------------------------------------------------><--bloco 0024--------------------------------------------------><--bloco 0025--------------------------------------------------><--bloco 0026--------------------------------------------------><--bloco 0027--------------------------------------------------><--bloco 0028--------------------------------------------------><--bloco 0029--------------------------------------------------><--bloco 0030--------------------------------------------------><--bloco 0031--------------------------------------------------><--bloco 0032--------------------------------------------------><--bloco 0033--------------------------------------------------><--bloco 0034--------------------------------------------------><--bloco 0035--------------------------------------------------><--bloco 0036--------------------------------------------------><--bloco 0037--------------------------------------------------><--bloco 0038--------------------------------------------------><--bloco 0039--------------------------------------------------><--bloco 0040--------------------------------------------------><--bloco 0041--------------------------------------------------><--bloco 0042--------------------------------------------------><--bloco 0043--------------------------------------------------><--bloco 0044--------------------------------------------------><--bloco 0045--------------------------------------------------><--bloco 0046--------------------------------------------------><--bloco 0047--------------------------------------------------><--bloco 0048--------------------------------------------------><--bloco 0049--------------------------------------------------><--bloco 0050--------------------------------------------------><--bloco 0051--------------------------------------------------><--bloco 0052--------------------------------------------------><--bloco 0053--------------------------------------------------><--bloco 0054--------------------------------------------------><--bloco 0055--------------------------------------------------><--bloco 0056--------------------------------------------------><--bloco 0057--------------------------------------------------><--bloco 0058--------------------------------------------------><--bloco 0059--------------------------------------------------><--bloco 0060--------------------------------------------------><--bloco 0061--------------------------------------------------><--bloco 0062--------------------------------------------------><--bloco 0063--------------------------------------------------><--bloco 0064--------------------------------------------------><--bloco 0065--------------------------------------------------><--bloco 0066--------------------------------------------------><--bloco 0067--------------------------------------------------><--bloco 0068--------------------------------------------------><--bloco 0069--------------------------------------------------><--bloco 0070--------------------------------------------------><--bloco 0071--------------------------------------------------><--bloco 0072--------------------------------------------------><--bloco 0073--------------------------------------------------><--bloco 0074--------------------------------------------------><--bloco 0075--------------------------------------------------><--bloco 0076--------------------------------------------------><--bloco 0077--------------------------------------------------><--bloco 0078--------------------------------------------------><--bloco 0079--------------------------------------------------><--bloco 0080--------------------------------------------------><--bloco 0081--------------------------------------------------><--bloco 0082--------------------------------------------------><--bloco 0083--------------------------------------------------><--bloco 0084--------------------------------------------------><--bloco 0085--------------------------------------------------><--bloco 0086--------------------------------------------------><--bloco 0087--------------------------------------------------><--bloco 0088--------------------------------------------------><--bloco 0089--------------------------------------------------><--bloco 0090--------------------------------------------------><--bloco 0091--------------------------------------------------><--bloco 0092--------------------------------------------------><--bloco 0093--------------------------------------------------><--bloco 0094--------------------------------------------------><--bloco 0095--------------------------------------------------><--bloco 0096--------------------------------------------------><--bloco 0097--------------------------------------------------><--bloco 0098--------------------------------------------------><--bloco 0099--------------------------------------------------><--bloco 0100--------------------------------------------------><--bloco 0101--------------------------------------------------><--bloco 0102--------------------------------------------------><--bloco 0103--------------------------------------------------><--bloco 0104--------------------------------------------------><--bloco 0105--------------------------------------------------><--bloco 0106--------------------------------------------------><--bloco 0107--------------------------------------------------><--bloco 0108--------------------------------------------------><--bloco 0109--------------------------------------------------><--bloco 0110--------------------------------------------------><--bloco 0111--------------------------------------------------><--bloco 0112--------------------------------------------------><--bloco 0113--------------------------------------------------><--bloco 0114--------------------------------------------------><--bloco 0115--------------------------------------------------><--bloco 0116--------------------------------------------------><--bloco 0117--------------------------------------------------><--bloco 0118--------------------------------------------------><--bloco 0119--------------------------------------------------><--bloco 0120--------------------------------------------------><--bloco 0121--------------------------------------------------><--bloco 0122--------------------------------------------------><--bloco 0123--------------------------------------------------><--bloco 0124--------------------------------------------------><--bloco 0125--------------------------------------------------><--bloco 0126--------------------------------------------------><--bloco 0127--------------------------------------------------><--bloco 0128--------------------------------------------------><--bloco 0129--------------------------------------------------><--bloco 0130--------------------------------------------------><--bloco 0131--------------------------------------------------><--bloco 0132--------------------------------------------------><--bloco 0133--------------------------------------------------><--bloco 0134--------------------------------------------------><--bloco 0135--------------------------------------------------><--bloco 0136--------------------------------------------------><--bloco 0137--------------------------------------------------><--bloco 0138--------------------------------------------------><--bloco 0139--------------------------------------------------><--bloco 0140--------------------------------------------------><--bloco 0141--------------------------------------------------><--bloco 0142--------------------------------------------------><--bloco 0143--------------------------------------------------><--bloco 0144--------------------------------------------------><--bloco 0145--------------------------------------------------><--bloco 0146--------------------------------------------------><--bloco 0147--------------------------------------------------><--bloco 0148--------------------------------------------------><--bloco 0149--------------------------------------------------><--bloco 0150--------------------------------------------------><--bloco 0151--------------------------------------------------><--bloco 0152--------------------------------------------------><--bloco 0153--------------------------------------------------><--bloco 0154--------------------------------------------------><--bloco 0155--------------------------------------------------><--bloco 0156--------------------------------------------------><--bloco 0157--------------------------------------------------><--bloco 0158--------------------------------------------------><--bloco 0159--------------------------------------------------><--bloco 0160--------------------------------------------------><--bloco 0161--------------------------------------------------><--bloco 0162--------------------------------------------------><--bloco 0163--------------------------------------------------><--bloco 0164--------------------------------------------------><--bloco 0165--------------------------------------------------><--bloco 0166--------------------------------------------------><--bloco 0167--------------------------------------------------><--bloco 0168--------------------------------------------------><--bloco 0169--------------------------------------------------><--bloco 0170--------------------------------------------------><--bloco 0171--------------------------------------------------><--bloco 0172--------------------------------------------------><--bloco 0173--------------------------------------------------><--bloco 0174--------------------------------------------------><--bloco 0175--------------------------------------------------><--bloco 0176--------------------------------------------------><--bloco 0177--------------------------------------------------><--bloco 0178--------------------------------------------------><--bloco 0179--------------------------------------------------><--bloco 0180--------------------------------------------------><--bloco 0181--------------------------------------------------><--bloco 0182--------------------------------------------------><--bloco 0183--------------------------------------------------><--bloco 0184--------------------------------------------------><--bloco 0185--------------------------------------------------><--bloco 0186--------------------------------------------------><--bloco 0187--------------------------------------------------><--bloco 0188--------------------------------------------------><--bloco 0189--------------------------------------------------><--bloco 0190--------------------------------------------------><--bloco 0191--------------------------------------------------><--bloco 0192--------------------------------------------------><--bloco 0193--------------------------------------------------><--bloco 0194--------------------------------------------------><--bloco 0195--------------------------------------------------><--bloco 0196--------------------------------------------------><--bloco 0197--------------------------------------------------><--bloco 0198--------------------------------------------------><--bloco 0199--------------------------------------------------><--bloco 0200--------------------------------------------------><--bloco 0201--------------------------------------------------><--bloco 0202--------------------------------------------------><--bloco 0203--------------------------------------------------><--bloco 0204--------------------------------------------------><--bloco 0205--------------------------------------------------><--bloco 0206--------------------------------------------------><--bloco 0207--------------------------------------------------><--bloco 0208--------------------------------------------------><--bloco 0209--------------------------------------------------><--bloco 0210--------------------------------------------------><--bloco 0211--------------------------------------------------><--bloco 0212--------------------------------------------------><--bloco 0213--------------------------------------------------><--bloco 0214--------------------------------------------------><--bloco 0215--------------------------------------------------><--bloco 0216--------------------------------------------------><--bloco 0217--------------------------------------------------><--bloco 0218--------------------------------------------------><--bloco 0219--------------------------------------------------><--bloco 0220--------------------------------------------------><--bloco 0221--------------------------------------------------><--bloco 0222--------------------------------------------------><--bloco 0223--------------------------------------------------><--bloco 0224--------------------------------------------------><--bloco 0225--------------------------------------------------><--bloco 0226--------------------------------------------------><--bloco 0227--------------------------------------------------><--bloco 0228--------------------------------------------------><--bloco 0229--------------------------------------------------><--bloco 0230--------------------------------------------------><--bloco 0231--------------------------------------------------><--bloco 0232--------------------------------------------------><--bloco 0233--------------------------------------------------><--bloco 0234--------------------------------------------------><--bloco 0235--------------------------------------------------><--bloco 0236--------------------------------------------------><--bloco 0237--------------------------------------------------><--bloco 0238--------------------------------------------------><--bloco 0239--------------------------------------------------><--bloco 0240--------------------------------------------------><--bloco 0241--------------------------------------------------><--bloco 0242--------------------------------------------------><--bloco 0243--------------------------------------------------><--bloco 0244--------------------------------------------------><--bloco 0245--------------------------------------------------><--bloco 0246--------------------------------------------------><--bloco 0247--------------------------------------------------><--bloco 0248--------------------------------------------------><--bloco 0249--------------------------------------------------><--bloco 0250--------------------------------------------------><--bloco 0251--------------------------------------------------><--bloco 0252--------------------------------------------------><--bloco 0253--------------------------------------------------><--bloco 0254--------------------------------------------------><--bloco 0255-------------------------------------------------->
\ No newline at end of file
diff --git a/ppos/hardware/disk.dat-final b/ppos/hardware/disk.dat-final
new file mode 100644 (file)
index 0000000..a765a9d
--- /dev/null
@@ -0,0 +1 @@
+<--bloco 0255--------------------------------------------------><--bloco 0254--------------------------------------------------><--bloco 0253--------------------------------------------------><--bloco 0252--------------------------------------------------><--bloco 0251--------------------------------------------------><--bloco 0250--------------------------------------------------><--bloco 0249--------------------------------------------------><--bloco 0248--------------------------------------------------><--bloco 0247--------------------------------------------------><--bloco 0246--------------------------------------------------><--bloco 0245--------------------------------------------------><--bloco 0244--------------------------------------------------><--bloco 0243--------------------------------------------------><--bloco 0242--------------------------------------------------><--bloco 0241--------------------------------------------------><--bloco 0240--------------------------------------------------><--bloco 0239--------------------------------------------------><--bloco 0238--------------------------------------------------><--bloco 0237--------------------------------------------------><--bloco 0236--------------------------------------------------><--bloco 0235--------------------------------------------------><--bloco 0234--------------------------------------------------><--bloco 0233--------------------------------------------------><--bloco 0232--------------------------------------------------><--bloco 0231--------------------------------------------------><--bloco 0230--------------------------------------------------><--bloco 0229--------------------------------------------------><--bloco 0228--------------------------------------------------><--bloco 0227--------------------------------------------------><--bloco 0226--------------------------------------------------><--bloco 0225--------------------------------------------------><--bloco 0224--------------------------------------------------><--bloco 0223--------------------------------------------------><--bloco 0222--------------------------------------------------><--bloco 0221--------------------------------------------------><--bloco 0220--------------------------------------------------><--bloco 0219--------------------------------------------------><--bloco 0218--------------------------------------------------><--bloco 0217--------------------------------------------------><--bloco 0216--------------------------------------------------><--bloco 0215--------------------------------------------------><--bloco 0214--------------------------------------------------><--bloco 0213--------------------------------------------------><--bloco 0212--------------------------------------------------><--bloco 0211--------------------------------------------------><--bloco 0210--------------------------------------------------><--bloco 0209--------------------------------------------------><--bloco 0208--------------------------------------------------><--bloco 0207--------------------------------------------------><--bloco 0206--------------------------------------------------><--bloco 0205--------------------------------------------------><--bloco 0204--------------------------------------------------><--bloco 0203--------------------------------------------------><--bloco 0202--------------------------------------------------><--bloco 0201--------------------------------------------------><--bloco 0200--------------------------------------------------><--bloco 0199--------------------------------------------------><--bloco 0198--------------------------------------------------><--bloco 0197--------------------------------------------------><--bloco 0196--------------------------------------------------><--bloco 0195--------------------------------------------------><--bloco 0194--------------------------------------------------><--bloco 0193--------------------------------------------------><--bloco 0192--------------------------------------------------><--bloco 0191--------------------------------------------------><--bloco 0190--------------------------------------------------><--bloco 0189--------------------------------------------------><--bloco 0188--------------------------------------------------><--bloco 0187--------------------------------------------------><--bloco 0186--------------------------------------------------><--bloco 0185--------------------------------------------------><--bloco 0184--------------------------------------------------><--bloco 0183--------------------------------------------------><--bloco 0182--------------------------------------------------><--bloco 0181--------------------------------------------------><--bloco 0180--------------------------------------------------><--bloco 0179--------------------------------------------------><--bloco 0178--------------------------------------------------><--bloco 0177--------------------------------------------------><--bloco 0176--------------------------------------------------><--bloco 0175--------------------------------------------------><--bloco 0174--------------------------------------------------><--bloco 0173--------------------------------------------------><--bloco 0172--------------------------------------------------><--bloco 0171--------------------------------------------------><--bloco 0170--------------------------------------------------><--bloco 0169--------------------------------------------------><--bloco 0168--------------------------------------------------><--bloco 0167--------------------------------------------------><--bloco 0166--------------------------------------------------><--bloco 0165--------------------------------------------------><--bloco 0164--------------------------------------------------><--bloco 0163--------------------------------------------------><--bloco 0162--------------------------------------------------><--bloco 0161--------------------------------------------------><--bloco 0160--------------------------------------------------><--bloco 0159--------------------------------------------------><--bloco 0158--------------------------------------------------><--bloco 0157--------------------------------------------------><--bloco 0156--------------------------------------------------><--bloco 0155--------------------------------------------------><--bloco 0154--------------------------------------------------><--bloco 0153--------------------------------------------------><--bloco 0152--------------------------------------------------><--bloco 0151--------------------------------------------------><--bloco 0150--------------------------------------------------><--bloco 0149--------------------------------------------------><--bloco 0148--------------------------------------------------><--bloco 0147--------------------------------------------------><--bloco 0146--------------------------------------------------><--bloco 0145--------------------------------------------------><--bloco 0144--------------------------------------------------><--bloco 0143--------------------------------------------------><--bloco 0142--------------------------------------------------><--bloco 0141--------------------------------------------------><--bloco 0140--------------------------------------------------><--bloco 0139--------------------------------------------------><--bloco 0138--------------------------------------------------><--bloco 0137--------------------------------------------------><--bloco 0136--------------------------------------------------><--bloco 0135--------------------------------------------------><--bloco 0134--------------------------------------------------><--bloco 0133--------------------------------------------------><--bloco 0132--------------------------------------------------><--bloco 0131--------------------------------------------------><--bloco 0130--------------------------------------------------><--bloco 0129--------------------------------------------------><--bloco 0128--------------------------------------------------><--bloco 0127--------------------------------------------------><--bloco 0126--------------------------------------------------><--bloco 0125--------------------------------------------------><--bloco 0124--------------------------------------------------><--bloco 0123--------------------------------------------------><--bloco 0122--------------------------------------------------><--bloco 0121--------------------------------------------------><--bloco 0120--------------------------------------------------><--bloco 0119--------------------------------------------------><--bloco 0118--------------------------------------------------><--bloco 0117--------------------------------------------------><--bloco 0116--------------------------------------------------><--bloco 0115--------------------------------------------------><--bloco 0114--------------------------------------------------><--bloco 0113--------------------------------------------------><--bloco 0112--------------------------------------------------><--bloco 0111--------------------------------------------------><--bloco 0110--------------------------------------------------><--bloco 0109--------------------------------------------------><--bloco 0108--------------------------------------------------><--bloco 0107--------------------------------------------------><--bloco 0106--------------------------------------------------><--bloco 0105--------------------------------------------------><--bloco 0104--------------------------------------------------><--bloco 0103--------------------------------------------------><--bloco 0102--------------------------------------------------><--bloco 0101--------------------------------------------------><--bloco 0100--------------------------------------------------><--bloco 0099--------------------------------------------------><--bloco 0098--------------------------------------------------><--bloco 0097--------------------------------------------------><--bloco 0096--------------------------------------------------><--bloco 0095--------------------------------------------------><--bloco 0094--------------------------------------------------><--bloco 0093--------------------------------------------------><--bloco 0092--------------------------------------------------><--bloco 0091--------------------------------------------------><--bloco 0090--------------------------------------------------><--bloco 0089--------------------------------------------------><--bloco 0088--------------------------------------------------><--bloco 0087--------------------------------------------------><--bloco 0086--------------------------------------------------><--bloco 0085--------------------------------------------------><--bloco 0084--------------------------------------------------><--bloco 0083--------------------------------------------------><--bloco 0082--------------------------------------------------><--bloco 0081--------------------------------------------------><--bloco 0080--------------------------------------------------><--bloco 0079--------------------------------------------------><--bloco 0078--------------------------------------------------><--bloco 0077--------------------------------------------------><--bloco 0076--------------------------------------------------><--bloco 0075--------------------------------------------------><--bloco 0074--------------------------------------------------><--bloco 0073--------------------------------------------------><--bloco 0072--------------------------------------------------><--bloco 0071--------------------------------------------------><--bloco 0070--------------------------------------------------><--bloco 0069--------------------------------------------------><--bloco 0068--------------------------------------------------><--bloco 0067--------------------------------------------------><--bloco 0066--------------------------------------------------><--bloco 0065--------------------------------------------------><--bloco 0064--------------------------------------------------><--bloco 0063--------------------------------------------------><--bloco 0062--------------------------------------------------><--bloco 0061--------------------------------------------------><--bloco 0060--------------------------------------------------><--bloco 0059--------------------------------------------------><--bloco 0058--------------------------------------------------><--bloco 0057--------------------------------------------------><--bloco 0056--------------------------------------------------><--bloco 0055--------------------------------------------------><--bloco 0054--------------------------------------------------><--bloco 0053--------------------------------------------------><--bloco 0052--------------------------------------------------><--bloco 0051--------------------------------------------------><--bloco 0050--------------------------------------------------><--bloco 0049--------------------------------------------------><--bloco 0048--------------------------------------------------><--bloco 0047--------------------------------------------------><--bloco 0046--------------------------------------------------><--bloco 0045--------------------------------------------------><--bloco 0044--------------------------------------------------><--bloco 0043--------------------------------------------------><--bloco 0042--------------------------------------------------><--bloco 0041--------------------------------------------------><--bloco 0040--------------------------------------------------><--bloco 0039--------------------------------------------------><--bloco 0038--------------------------------------------------><--bloco 0037--------------------------------------------------><--bloco 0036--------------------------------------------------><--bloco 0035--------------------------------------------------><--bloco 0034--------------------------------------------------><--bloco 0033--------------------------------------------------><--bloco 0032--------------------------------------------------><--bloco 0031--------------------------------------------------><--bloco 0030--------------------------------------------------><--bloco 0029--------------------------------------------------><--bloco 0028--------------------------------------------------><--bloco 0027--------------------------------------------------><--bloco 0026--------------------------------------------------><--bloco 0025--------------------------------------------------><--bloco 0024--------------------------------------------------><--bloco 0023--------------------------------------------------><--bloco 0022--------------------------------------------------><--bloco 0021--------------------------------------------------><--bloco 0020--------------------------------------------------><--bloco 0019--------------------------------------------------><--bloco 0018--------------------------------------------------><--bloco 0017--------------------------------------------------><--bloco 0016--------------------------------------------------><--bloco 0015--------------------------------------------------><--bloco 0014--------------------------------------------------><--bloco 0013--------------------------------------------------><--bloco 0012--------------------------------------------------><--bloco 0011--------------------------------------------------><--bloco 0010--------------------------------------------------><--bloco 0009--------------------------------------------------><--bloco 0008--------------------------------------------------><--bloco 0007--------------------------------------------------><--bloco 0006--------------------------------------------------><--bloco 0005--------------------------------------------------><--bloco 0004--------------------------------------------------><--bloco 0003--------------------------------------------------><--bloco 0002--------------------------------------------------><--bloco 0001--------------------------------------------------><--bloco 0000-------------------------------------------------->
\ No newline at end of file
diff --git a/ppos/hardware/disk.dat-inicial b/ppos/hardware/disk.dat-inicial
new file mode 100644 (file)
index 0000000..29c7d48
--- /dev/null
@@ -0,0 +1 @@
+<--bloco 0000--------------------------------------------------><--bloco 0001--------------------------------------------------><--bloco 0002--------------------------------------------------><--bloco 0003--------------------------------------------------><--bloco 0004--------------------------------------------------><--bloco 0005--------------------------------------------------><--bloco 0006--------------------------------------------------><--bloco 0007--------------------------------------------------><--bloco 0008--------------------------------------------------><--bloco 0009--------------------------------------------------><--bloco 0010--------------------------------------------------><--bloco 0011--------------------------------------------------><--bloco 0012--------------------------------------------------><--bloco 0013--------------------------------------------------><--bloco 0014--------------------------------------------------><--bloco 0015--------------------------------------------------><--bloco 0016--------------------------------------------------><--bloco 0017--------------------------------------------------><--bloco 0018--------------------------------------------------><--bloco 0019--------------------------------------------------><--bloco 0020--------------------------------------------------><--bloco 0021--------------------------------------------------><--bloco 0022--------------------------------------------------><--bloco 0023--------------------------------------------------><--bloco 0024--------------------------------------------------><--bloco 0025--------------------------------------------------><--bloco 0026--------------------------------------------------><--bloco 0027--------------------------------------------------><--bloco 0028--------------------------------------------------><--bloco 0029--------------------------------------------------><--bloco 0030--------------------------------------------------><--bloco 0031--------------------------------------------------><--bloco 0032--------------------------------------------------><--bloco 0033--------------------------------------------------><--bloco 0034--------------------------------------------------><--bloco 0035--------------------------------------------------><--bloco 0036--------------------------------------------------><--bloco 0037--------------------------------------------------><--bloco 0038--------------------------------------------------><--bloco 0039--------------------------------------------------><--bloco 0040--------------------------------------------------><--bloco 0041--------------------------------------------------><--bloco 0042--------------------------------------------------><--bloco 0043--------------------------------------------------><--bloco 0044--------------------------------------------------><--bloco 0045--------------------------------------------------><--bloco 0046--------------------------------------------------><--bloco 0047--------------------------------------------------><--bloco 0048--------------------------------------------------><--bloco 0049--------------------------------------------------><--bloco 0050--------------------------------------------------><--bloco 0051--------------------------------------------------><--bloco 0052--------------------------------------------------><--bloco 0053--------------------------------------------------><--bloco 0054--------------------------------------------------><--bloco 0055--------------------------------------------------><--bloco 0056--------------------------------------------------><--bloco 0057--------------------------------------------------><--bloco 0058--------------------------------------------------><--bloco 0059--------------------------------------------------><--bloco 0060--------------------------------------------------><--bloco 0061--------------------------------------------------><--bloco 0062--------------------------------------------------><--bloco 0063--------------------------------------------------><--bloco 0064--------------------------------------------------><--bloco 0065--------------------------------------------------><--bloco 0066--------------------------------------------------><--bloco 0067--------------------------------------------------><--bloco 0068--------------------------------------------------><--bloco 0069--------------------------------------------------><--bloco 0070--------------------------------------------------><--bloco 0071--------------------------------------------------><--bloco 0072--------------------------------------------------><--bloco 0073--------------------------------------------------><--bloco 0074--------------------------------------------------><--bloco 0075--------------------------------------------------><--bloco 0076--------------------------------------------------><--bloco 0077--------------------------------------------------><--bloco 0078--------------------------------------------------><--bloco 0079--------------------------------------------------><--bloco 0080--------------------------------------------------><--bloco 0081--------------------------------------------------><--bloco 0082--------------------------------------------------><--bloco 0083--------------------------------------------------><--bloco 0084--------------------------------------------------><--bloco 0085--------------------------------------------------><--bloco 0086--------------------------------------------------><--bloco 0087--------------------------------------------------><--bloco 0088--------------------------------------------------><--bloco 0089--------------------------------------------------><--bloco 0090--------------------------------------------------><--bloco 0091--------------------------------------------------><--bloco 0092--------------------------------------------------><--bloco 0093--------------------------------------------------><--bloco 0094--------------------------------------------------><--bloco 0095--------------------------------------------------><--bloco 0096--------------------------------------------------><--bloco 0097--------------------------------------------------><--bloco 0098--------------------------------------------------><--bloco 0099--------------------------------------------------><--bloco 0100--------------------------------------------------><--bloco 0101--------------------------------------------------><--bloco 0102--------------------------------------------------><--bloco 0103--------------------------------------------------><--bloco 0104--------------------------------------------------><--bloco 0105--------------------------------------------------><--bloco 0106--------------------------------------------------><--bloco 0107--------------------------------------------------><--bloco 0108--------------------------------------------------><--bloco 0109--------------------------------------------------><--bloco 0110--------------------------------------------------><--bloco 0111--------------------------------------------------><--bloco 0112--------------------------------------------------><--bloco 0113--------------------------------------------------><--bloco 0114--------------------------------------------------><--bloco 0115--------------------------------------------------><--bloco 0116--------------------------------------------------><--bloco 0117--------------------------------------------------><--bloco 0118--------------------------------------------------><--bloco 0119--------------------------------------------------><--bloco 0120--------------------------------------------------><--bloco 0121--------------------------------------------------><--bloco 0122--------------------------------------------------><--bloco 0123--------------------------------------------------><--bloco 0124--------------------------------------------------><--bloco 0125--------------------------------------------------><--bloco 0126--------------------------------------------------><--bloco 0127--------------------------------------------------><--bloco 0128--------------------------------------------------><--bloco 0129--------------------------------------------------><--bloco 0130--------------------------------------------------><--bloco 0131--------------------------------------------------><--bloco 0132--------------------------------------------------><--bloco 0133--------------------------------------------------><--bloco 0134--------------------------------------------------><--bloco 0135--------------------------------------------------><--bloco 0136--------------------------------------------------><--bloco 0137--------------------------------------------------><--bloco 0138--------------------------------------------------><--bloco 0139--------------------------------------------------><--bloco 0140--------------------------------------------------><--bloco 0141--------------------------------------------------><--bloco 0142--------------------------------------------------><--bloco 0143--------------------------------------------------><--bloco 0144--------------------------------------------------><--bloco 0145--------------------------------------------------><--bloco 0146--------------------------------------------------><--bloco 0147--------------------------------------------------><--bloco 0148--------------------------------------------------><--bloco 0149--------------------------------------------------><--bloco 0150--------------------------------------------------><--bloco 0151--------------------------------------------------><--bloco 0152--------------------------------------------------><--bloco 0153--------------------------------------------------><--bloco 0154--------------------------------------------------><--bloco 0155--------------------------------------------------><--bloco 0156--------------------------------------------------><--bloco 0157--------------------------------------------------><--bloco 0158--------------------------------------------------><--bloco 0159--------------------------------------------------><--bloco 0160--------------------------------------------------><--bloco 0161--------------------------------------------------><--bloco 0162--------------------------------------------------><--bloco 0163--------------------------------------------------><--bloco 0164--------------------------------------------------><--bloco 0165--------------------------------------------------><--bloco 0166--------------------------------------------------><--bloco 0167--------------------------------------------------><--bloco 0168--------------------------------------------------><--bloco 0169--------------------------------------------------><--bloco 0170--------------------------------------------------><--bloco 0171--------------------------------------------------><--bloco 0172--------------------------------------------------><--bloco 0173--------------------------------------------------><--bloco 0174--------------------------------------------------><--bloco 0175--------------------------------------------------><--bloco 0176--------------------------------------------------><--bloco 0177--------------------------------------------------><--bloco 0178--------------------------------------------------><--bloco 0179--------------------------------------------------><--bloco 0180--------------------------------------------------><--bloco 0181--------------------------------------------------><--bloco 0182--------------------------------------------------><--bloco 0183--------------------------------------------------><--bloco 0184--------------------------------------------------><--bloco 0185--------------------------------------------------><--bloco 0186--------------------------------------------------><--bloco 0187--------------------------------------------------><--bloco 0188--------------------------------------------------><--bloco 0189--------------------------------------------------><--bloco 0190--------------------------------------------------><--bloco 0191--------------------------------------------------><--bloco 0192--------------------------------------------------><--bloco 0193--------------------------------------------------><--bloco 0194--------------------------------------------------><--bloco 0195--------------------------------------------------><--bloco 0196--------------------------------------------------><--bloco 0197--------------------------------------------------><--bloco 0198--------------------------------------------------><--bloco 0199--------------------------------------------------><--bloco 0200--------------------------------------------------><--bloco 0201--------------------------------------------------><--bloco 0202--------------------------------------------------><--bloco 0203--------------------------------------------------><--bloco 0204--------------------------------------------------><--bloco 0205--------------------------------------------------><--bloco 0206--------------------------------------------------><--bloco 0207--------------------------------------------------><--bloco 0208--------------------------------------------------><--bloco 0209--------------------------------------------------><--bloco 0210--------------------------------------------------><--bloco 0211--------------------------------------------------><--bloco 0212--------------------------------------------------><--bloco 0213--------------------------------------------------><--bloco 0214--------------------------------------------------><--bloco 0215--------------------------------------------------><--bloco 0216--------------------------------------------------><--bloco 0217--------------------------------------------------><--bloco 0218--------------------------------------------------><--bloco 0219--------------------------------------------------><--bloco 0220--------------------------------------------------><--bloco 0221--------------------------------------------------><--bloco 0222--------------------------------------------------><--bloco 0223--------------------------------------------------><--bloco 0224--------------------------------------------------><--bloco 0225--------------------------------------------------><--bloco 0226--------------------------------------------------><--bloco 0227--------------------------------------------------><--bloco 0228--------------------------------------------------><--bloco 0229--------------------------------------------------><--bloco 0230--------------------------------------------------><--bloco 0231--------------------------------------------------><--bloco 0232--------------------------------------------------><--bloco 0233--------------------------------------------------><--bloco 0234--------------------------------------------------><--bloco 0235--------------------------------------------------><--bloco 0236--------------------------------------------------><--bloco 0237--------------------------------------------------><--bloco 0238--------------------------------------------------><--bloco 0239--------------------------------------------------><--bloco 0240--------------------------------------------------><--bloco 0241--------------------------------------------------><--bloco 0242--------------------------------------------------><--bloco 0243--------------------------------------------------><--bloco 0244--------------------------------------------------><--bloco 0245--------------------------------------------------><--bloco 0246--------------------------------------------------><--bloco 0247--------------------------------------------------><--bloco 0248--------------------------------------------------><--bloco 0249--------------------------------------------------><--bloco 0250--------------------------------------------------><--bloco 0251--------------------------------------------------><--bloco 0252--------------------------------------------------><--bloco 0253--------------------------------------------------><--bloco 0254--------------------------------------------------><--bloco 0255-------------------------------------------------->
\ No newline at end of file
diff --git a/ppos/hardware/disk.h b/ppos/hardware/disk.h
new file mode 100644 (file)
index 0000000..bcca766
--- /dev/null
@@ -0,0 +1,110 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Interface do disco virtual, que simula um disco rígido (descrição abaixo).
+
+// Atenção: deve ser usado o flag de ligação -lrt, para ligar com a
+// biblioteca POSIX de tempo real, pois o disco simulado usa timers POSIX.
+
+// verifica sistema operacional
+#ifndef __linux__
+#error "Disk emulator library is designed specifically for Linux OS."
+#endif
+
+#ifndef __HW_DISK__
+#define __HW_DISK__
+
+// estados internos do disco
+#define DISK_STATUS_UNKNOWN 0 // disco não iniciado
+#define DISK_STATUS_IDLE 1    // disco livre
+#define DISK_STATUS_READ 2    // disco ocupado fazendo leitura
+#define DISK_STATUS_WRITE 3   // disco ocupado fazendo escrita
+
+// operações oferecidas pelo disco
+#define DISK_CMD_INIT 0      // inicia o disco
+#define DISK_CMD_READ 1      // leitura de bloco do disco
+#define DISK_CMD_WRITE 2     // escrita de bloco do disco
+#define DISK_CMD_STATUS 3    // consulta status do disco
+#define DISK_CMD_DISKSIZE 4  // consulta tamanho do disco em blocos
+#define DISK_CMD_BLOCKSIZE 5 // consulta tamanho de bloco em bytes
+#define DISK_CMD_DELAYMIN 6  // consulta tempo resposta mínimo (ms)
+#define DISK_CMD_DELAYMAX 7  // consulta tempo resposta máximo (ms)
+
+// solicita uma operação ao disco virtual
+int hw_disk_cmd(int cmd, int block, void *buffer);
+
+/*
+Este código simula a operação e interface de um disco rígido de computador,
+que permite a leitura e escrita sequencial de blocos de dados, usando a
+interface descrita acima. O conteúdo do disco simulado é armazenado em um
+arquivo no sistema operacional subjacente, sendo portanto preservado de
+uma execução para outra.
+
+O disco opera sequencialmente (realiza somente uma operação por vez) e a
+maioria das operações é síncrona, retornando o resultado ao concluir.
+Todavia, as operações de leitura e escrita de blocos de dados são atendidas
+de forma assíncrona, ou seja: o disco responde à solicitação imediatamente,
+mas a operação de E/S em si demora um pouco mais; quando ela for completada,
+o disco irá informar isso através de uma interrupção (IRQ). Essa interrupção
+deve então ser tratada pelo driver de disco, para acordar a tarefa que
+solicitou a operação de E/S.
+
+Enquanto o disco estiver ocupado em uma leitura/escrita, o status do disco
+será DISK_STATUS_READ ou DISK_STATUS_WRITE; solicitações de leitura ou
+escrita com o disco ocupado retornarão com erro.
+
+Exemplos de uso:
+
+inicia um disco (operação síncrona)
+int disk_cmd (DISK_CMD_INIT, 0, char *disk_image) ;
+disk_image: caminho do arquivo que contém a imagem do disco
+result < 0: erro
+result = 0: disco corretamente iniciado
+
+consulta status do disco (operação síncrona)
+int disk_cmd (DISK_CMD_STATUS, 0, 0) ;
+result = 0: erro (disco não iniciado ou inexistente)
+result = DISK_STATUS_IDLE: disco livre
+result = DISK_STATUS_READ: disco ocupado realizando leitura
+result = DISK_STATUS_WRITE: disco ocupado realizando escrita
+
+consulta tamanho do disco (operação síncrona)
+int disk_cmd (DISK_CMD_DISKSIZE, 0, 0) ;
+result <  0: erro
+result >= 0: tamanho do disco (em blocos)
+
+consulta tamanho de cada bloco (operação síncrona)
+int disk_cmd (DISK_CMD_BLOCKSIZE, 0, 0) ;
+result <  0: erro
+result >= 0: tamanho de cada bloco (em bytes)
+
+consulta tempo de resposta mínimo (operação síncrona)
+int disk_cmd (DISK_CMD_DELAYMIN, 0, 0) ;
+result <  0: erro
+result >= 0: tempo de resposta mínimo do disco (em ms)
+
+consulta tempo de resposta máximo (operação síncrona)
+int disk_cmd (DISK_CMD_DELAYMAX, 0, 0) ;
+result <  0: erro
+result >= 0: tempo de resposta máximo do disco (em ms)
+
+agenda a leitura de um bloco de disco (operação assíncrona)
+int disk_cmd (DISK_CMD_READ, int block, void *buffer) ;
+block: número do bloco a ser lido
+buffer: endereço do buffer para os dados lidos
+result < 0: erro
+result = 0: ok (leitura agendada, IRQ_DISK será gerada ao completar)
+
+agenda a escrita de um bloco de disco (operação assíncrona)
+int disk_cmd (DISK_CMD_WRITE, int block, void *buffer) ;
+block: número do bloco a ser escrito
+buffer: endereço do buffer com os dados a escrever
+result < 0: erro
+result = 0: ok (escrita agendada, IRQ_DISK será gerada ao completar)
+*/
+
+#endif
diff --git a/ppos/hardware/makefile b/ppos/hardware/makefile
new file mode 100644 (file)
index 0000000..15fe34b
--- /dev/null
@@ -0,0 +1,32 @@
+# PingPongOS - PingPong Operating System
+# Prof. Carlos A. Maziero, DINF UFPR
+# Versão 2.0 -- Junho de 2025
+
+# ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+# ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+# flags são importados do makefile superior
+
+HDR = $(wildcard *.h)                  # headers
+SRC = $(wildcard *.c)                  # fontes C
+ASM = $(wildcard *.s)                  # fontes assembly
+OBJ = $(patsubst %.c,%.o,$(SRC))       # objetos .o
+OBJ+= $(patsubst %.s,%.o,$(ASM))       # idem
+
+# arquivo com a imagem do disco virtual
+DISK = disk.dat
+
+# regra default: reconstruir tudo
+all   : $(OBJ)
+$(OBJ): $(SRC) $(HDR)
+
+# testa o conteudo do disco
+test:
+       @echo "Comparando imagens do disco:"
+       -@diff -qs $(DISK) $(DISK)-inicial || true
+       -@diff -qs $(DISK) $(DISK)-final   || true
+
+# reinicia o conteúdo do disco
+reset:
+       -cp -f $(DISK)-inicial $(DISK)
+       @echo "Conteúdo do disco reiniciado"
diff --git a/ppos/hardware/serial.c b/ppos/hardware/serial.c
new file mode 100644 (file)
index 0000000..3ec9d60
--- /dev/null
@@ -0,0 +1,45 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+/*
+
+Emula operações de E/S de caracteres em uma porta serial,
+que normalmente corresponde a um terminal de texto.
+
+Esta implementação usando stdio é trivial, deve ser substituída
+por uma emulação mais detalhada de uma UART (Universal Asynchronous
+Receiver-Transmitter) gerenciando a linha serial.
+
+*/
+
+#include <stdio.h>
+#include "serial.h"
+
+#define NOERROR 0
+#define ERROR -1
+
+//----------------------------------------------------------------------
+
+int hw_serial_init ()
+{
+    return(NOERROR);
+}
+
+//----------------------------------------------------------------------
+
+int hw_serial_put(char c)
+{
+    // implementação trivial, a ser substituída pela emulação da UART.
+    return(putchar(c));
+}
+
+//----------------------------------------------------------------------
+
+char hw_serial_get()
+{
+    // a ser implementado
+    return (0);
+}
+
+//----------------------------------------------------------------------
diff --git a/ppos/hardware/serial.h b/ppos/hardware/serial.h
new file mode 100644 (file)
index 0000000..d79d490
--- /dev/null
@@ -0,0 +1,27 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Emula uma porta serial com operações de E/S de caracteres,
+// que normalmente corresponde a um terminal de texto acessível
+// através de uma UART.
+
+#ifndef __HW_SERIAL__
+#define __HW_SERIAL__
+
+// Inicia a porta serial.
+// Return: NOERROR or ERROR.
+int hw_serial_init ();
+
+// Envia um caractere à interface serial.
+// Return: NOERROR ou ERROR.
+int hw_serial_put (char c);
+
+// Recebe um caractere da interface serial (não bloqueante).
+// Return: caractere ASCII ou 0 se não há nada a ser lido.
+char hw_serial_get ();
+
+#endif
diff --git a/ppos/kernel/block.c b/ppos/kernel/block.c
new file mode 100644 (file)
index 0000000..84e490c
--- /dev/null
@@ -0,0 +1,6 @@
+// PingPongOS - PingPong Operating System
+
+void block_init(char *disk_image)
+{
+}
+
diff --git a/ppos/kernel/block.h b/ppos/kernel/block.h
new file mode 100644 (file)
index 0000000..f6c0643
--- /dev/null
@@ -0,0 +1,26 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS_BLOCK__
+#define __PPOS_BLOCK__
+
+// inicia o subsistema de gestão do disco virtual armazenado em "disk_image"
+void block_init(char *disk_image);
+
+// retorna o tamanho de cada bloco do disco, em bytes
+int block_size();
+
+// retorna o tamanho do disco, em blocos
+int block_blocks();
+
+// leitura de um bloco, do disco para o buffer
+int block_read(int block, void *buffer);
+
+// escrita de um bloco, do buffer para o disco
+int block_write(int block, void *buffer);
+
+#endif
diff --git a/ppos/kernel/ctx.h b/ppos/kernel/ctx.h
new file mode 100644 (file)
index 0000000..e664909
--- /dev/null
@@ -0,0 +1,92 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+/*
+Rotinas de manipulação de contextos no userspace, inspiradas de
+https://github.com/kaniini/libucontext/blob/master/arch/x86_64
+https://graphitemaster.github.io/fibers/
+
+Estas rotinas são específicas para CPUs x86_64 (Intel/AMD 64 bits)
+no sistema operacional Linux. Não funcionam em outras plataformas
+sem as devidas adaptações.
+
+To-do:
+- aceitar stack == NULL para não alterar a pilha do contexto.
+- salvar/restaurar registradores de ponto flutuante %xmm*
+- SEGV se função do contexto encerrar sem ctx_swap (falta uc_link).
+*/
+
+#ifndef __CTX__
+#define __CTX__
+
+// verificação de processador
+#ifndef __x86_64__
+#error "This library is designed specifically for x86_64 processors."
+#endif
+
+// verificação de sistema operacional
+#ifndef __linux__
+#error "This library is designed specifically for Linux OS."
+#endif
+
+// verificação de compilador (flags de otimização -O)
+#ifdef __OPTIMIZE__
+#error "Optimizations (-O*) may interfere with the context switching"
+#endif
+
+//----------------------------------------------------------------------
+
+#include <stdint.h>
+
+#define ERROR -1
+#define NOERROR 0
+
+/*
+Este struct permite salvar um contexto, ou seja, um estado da CPU
+definido pelos valores de seus principais registradores.
+Ajuste os offsets dos registradores em ctx.s se alterar algo aqui.
+Este struct deve ser alocado com alinhamento de 16 bytes.
+*/
+struct ctx_t
+{
+    // instruction pointer
+    uint64_t rip;
+
+    // stack pointer & base
+    uint64_t rsp, rbp;
+
+    // registradores gerais
+    uint64_t rdi, rsi, rax, rbx, rcx, rdx;
+    uint64_t r8, r9, r10, r11, r12, r13, r14, r15;
+
+    // endereço e tamanho da pilha associada a este contexto
+    void *stack;
+    unsigned long size;
+} __attribute__((aligned(16)));
+
+//----------------------------------------------------------------------
+
+/*
+Define um contexto com uma função de entrada e uma pilha própria:
+ - entry: função a ser executada ao ativar este contexto;
+ - arg:   argumento para a função "entry" quando ela iniciar;
+ - stack: endereço inicial (mais baixo) da pilha; deve ser
+          previamente alocado e alinhado em 16 bytes;
+ - size:  tamanho da pilha, deve ter ao menos 4.096 bytes.
+Retorno:  0 em sucesso, -1 em erro (vide ctx.s).
+*/
+int ctx_create(struct ctx_t *ctx, void(entry)(void *),
+               void *arg, void *stack, uint64_t size);
+
+/*
+Salva o estado atual da CPU em ctx1 (se não for NULL) e
+carrega na CPU o estado salvo em ctx2 (se não for NULL).
+Retorno: 0 em sucesso, -1 em erro (vide ctx.s).
+*/
+int ctx_swap(struct ctx_t *ctx1, struct ctx_t *ctx2);
+
+#endif
diff --git a/ppos/kernel/ctx.s b/ppos/kernel/ctx.s
new file mode 100644 (file)
index 0000000..b410d25
--- /dev/null
@@ -0,0 +1,212 @@
+# PingPongOS - PingPong Operating System
+# Prof. Carlos A. Maziero, DINF UFPR
+# Versão 2.0 -- Junho de 2025
+
+# ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+# ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+# Rotinas de manipulação de contextos no userspace, detalhes em ctx.h.
+# Escrito em assembly com sintaxe AT&T (cmd source, dest)
+
+#-----------------------------------------------------------------------
+
+# register offsets in the ctx_t struct (defined in ctx.h)
+.equ OFF_RIP, 8*0   # registers
+.equ OFF_RSP, 8*1
+.equ OFF_RBP, 8*2
+.equ OFF_RDI, 8*3
+.equ OFF_RSI, 8*4
+.equ OFF_RAX, 8*5
+.equ OFF_RBX, 8*6
+.equ OFF_RCX, 8*7
+.equ OFF_RDX, 8*8
+.equ OFF_R8,  8*9
+.equ OFF_R9,  8*10
+.equ OFF_R10, 8*11
+.equ OFF_R11, 8*12
+.equ OFF_R12, 8*13
+.equ OFF_R13, 8*14
+.equ OFF_R14, 8*15
+.equ OFF_R15, 8*16
+.equ OFF_SSA, 8*17  # stack start address
+.equ OFF_SSZ, 8*18  # stack size in bytes
+
+#-----------------------------------------------------------------------
+
+# saves the current context in ctx1 and transfers control to ctx2
+.type ctx_swap, @function
+.global ctx_swap
+
+ctx_swap:
+    # Arguments:
+    # rdi: *ctx1
+    # rsi: *ctx2
+
+    # if ctx1 == ctx2, goto error
+    cmp %rdi, %rsi
+    jz ctx_swap_error
+
+    # if ctx1 == NULL, do not save current context
+    cmp $0, %rdi
+    jz ctx_swap_load_ctx2
+
+    # save CPU registers in ctx1 struct
+    mov %r8,  OFF_R8(%rdi)    # ctx->r8 = %r8
+    mov %r9,  OFF_R9(%rdi)    # ...
+    mov %r10, OFF_R10(%rdi)
+    mov %r11, OFF_R11(%rdi)
+    mov %r12, OFF_R12(%rdi)
+    mov %r13, OFF_R13(%rdi)
+    mov %r14, OFF_R14(%rdi)
+    mov %r15, OFF_R15(%rdi)
+    mov %rax, OFF_RAX(%rdi)
+    mov %rbx, OFF_RBX(%rdi)
+    mov %rcx, OFF_RCX(%rdi)
+    mov %rdx, OFF_RDX(%rdi)
+    mov %rdi, OFF_RDI(%rdi)
+    mov %rsi, OFF_RSI(%rdi)
+    mov %rbp, OFF_RBP(%rdi)
+
+    # Current stack state:
+    #  :                     :
+    #  :                     :
+    #  +---------------------+
+    #  | caller stack bottom | <- stack pointer before calling ctx_swap
+    #  +---------------------+
+    #  | ret addr (8 bytes)  | <- stack pointer now (%rsp)
+    #  +---------------------+
+
+    # save the return address in ctx1->rip
+    mov (%rsp), %rcx          # %rcx = *(%rsp)
+    mov %rcx, OFF_RIP(%rdi)   # *(%rdi + OFF_RIP) = %rcx
+
+    # save the previous stack pointer in ctx1->rsp
+    lea 8(%rsp), %rcx         # %rcx = *(%rsp + 8)
+    mov %rcx, OFF_RSP(%rdi)   # *(%rdi + OFF_RSP) = %rcx
+
+ctx_swap_load_ctx2:
+    # if ctx2 == NULL, do not load ctx2 into the CPU
+    cmp $0, %rsi
+    jz ctx_swap_noerror
+
+    # load CPU registers from ctx2 struct, except %rsi because
+    # its current value is being used
+    mov OFF_R8(%rsi),  %r8    # %r8 = *(%rsi + OFF_R8)
+    mov OFF_R9(%rsi),  %r9    # ...
+    mov OFF_R10(%rsi), %r10
+    mov OFF_R11(%rsi), %r11
+    mov OFF_R12(%rsi), %r12
+    mov OFF_R13(%rsi), %r13
+    mov OFF_R14(%rsi), %r14
+    mov OFF_R15(%rsi), %r15
+    mov OFF_RAX(%rsi), %rax
+    mov OFF_RBX(%rsi), %rbx
+    mov OFF_RCX(%rsi), %rcx
+    mov OFF_RDX(%rsi), %rdx
+    mov OFF_RDI(%rsi), %rdi
+    # mov OFF_RSI(%rsi), %rsi  # do this later
+    mov OFF_RBP(%rsi), %rbp
+    mov OFF_RSP(%rsi), %rsp
+
+    # load the saved RIP and push it in the stack;
+    # it will be the return address when calling ret below
+    push OFF_RIP(%rsi)
+
+    # now we can load %rsi with value stored in ctx2->rsi
+    mov OFF_RSI(%rsi), %rsi
+
+ctx_swap_noerror:
+    # no errors, return 0
+    xor %eax, %eax
+    ret
+
+ctx_swap_error:
+    # error, return -1
+    movl $-1, %eax
+    ret
+
+#-----------------------------------------------------------------------
+
+# set entry point, arg, and stack for the context given as parameter
+.type ctx_create, @function
+.global ctx_create
+
+ctx_create:
+    # Arguments:
+    # %rdi: *ctx
+    # %rsi: *entry
+    # %rdx: *arg
+    # %rcx: *stack
+    # %r8 : size
+
+    # if ctx == NULL, goto error
+    cmp $0, %rdi
+    jz ctx_create_error
+
+    # if entry == NULL, goto error
+    cmp $0, %rsi
+    jz ctx_create_error
+
+    # if stack == NULL, goto error
+    cmp $0, %rcx
+    jz ctx_create_error
+
+    # if stack is not 16-byte aligned, goto error
+    # (last 4 bits of %rcx should be zero)
+    test $0x0F, %rcx   # 0x0F = 00001111
+    jnz ctx_create_error
+
+    # if stack size < 4K, goto error
+    cmp $0x1000, %r8   # 0x1000 = 4096
+    jl ctx_create_error
+
+    # save current CPU registers in ctx struct
+    mov %r8,  OFF_R8(%rdi)    # ctx->r8 = %r8
+    mov %r9,  OFF_R9(%rdi)    # ...
+    mov %r10, OFF_R10(%rdi)
+    mov %r11, OFF_R11(%rdi)
+    mov %r12, OFF_R12(%rdi)
+    mov %r13, OFF_R13(%rdi)
+    mov %r14, OFF_R14(%rdi)
+    mov %r15, OFF_R15(%rdi)
+    mov %rax, OFF_RAX(%rdi)
+    mov %rbx, OFF_RBX(%rdi)
+    mov %rcx, OFF_RCX(%rdi)
+    mov %rdx, OFF_RDX(%rdi)
+    mov %rdi, OFF_RDI(%rdi)
+    mov %rsi, OFF_RSI(%rdi)
+    mov %rbp, OFF_RBP(%rdi)
+
+    # save context's stack address and size
+    mov %rcx, OFF_SSA(%rdi)       # ctx->stack = stack
+    mov %r8,  OFF_SSZ(%rdi)       # ctx->size  = size
+
+    # set context's stack base and pointer; both should point to
+    # the top of the stack area provided and should be 16-byte
+    # aligned (stack + size - 16)
+    add %r8,  %rcx                # stack += size
+    sub $0x10, %rcx               # stack -= 16
+    mov %rcx, OFF_RBP(%rdi)       # ctx->rbp = stack
+    mov %rcx, OFF_RSP(%rdi)       # ctx->rsp = stack
+
+    # ctx->rsp should be decremented by 8 to keep it 16-byte aligned
+    # when the ctx_swap function returns, because the ret instruction
+    # pops an 8-byte return address from the stack
+    subq $0x8, OFF_RSP(%rdi)      # ctx->rsp -= 8
+
+    # set context's entry point (function)
+    mov %rsi, OFF_RIP(%rdi)       # ctx->rip = entry
+
+    # set entry point function argument
+    mov %rdx, OFF_RDI(%rdi)       # ctx->rdi = arg
+
+    # no errors, return 0
+    xor %eax, %eax
+    ret
+
+ctx_create_error:
+    # errors, return -1
+    movl $-1, %eax
+    ret
+
+#-----------------------------------------------------------------------s
diff --git a/ppos/kernel/dispatcher.c b/ppos/kernel/dispatcher.c
new file mode 100644 (file)
index 0000000..7e66246
--- /dev/null
@@ -0,0 +1,9 @@
+// PingPongOS - PingPong Operating System
+
+void dispatcher_init()
+{
+}
+
+void dispatcher()
+{
+}
diff --git a/ppos/kernel/dispatcher.h b/ppos/kernel/dispatcher.h
new file mode 100644 (file)
index 0000000..37d8ac1
--- /dev/null
@@ -0,0 +1,51 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS_DISPATCHER__
+#define __PPOS_DISPATCHER__
+
+#include "lib/queue.h"
+#include "tcb.h"
+
+// inicia o subsistema dispatcher
+void dispatcher_init();
+
+// executa o dispatcher
+void dispatcher();
+
+// executa a tarefa indicada: a retira da fila de prontas,
+// muda seu status para RODANDO e transfere a CPU para ela.
+void task_run(struct task_t *task);
+
+// a tarefa atual libera a CPU para o dispatcher,
+// voltando para a fila de prontas
+void task_yield();
+
+// suspende a tarefa atual: a retira da fila de prontas,
+// a insere na fila "queue" (se não for NULL) e retorna
+// ao dispatcher.
+void task_suspend(struct queue_t *queue);
+
+// acorda uma tarefa: a retira da fila onde se encontra
+// suspensa (se estiver em uma) e a insere na fila de
+// prontas, para retomar (ou iniciar) sua execução.
+void task_awake(struct task_t *task);
+
+// encerra a execução da tarefa atual, informando um
+// "exit code", e retorna ao dispatcher.
+void task_exit(int exit_code);
+
+// a tarefa atual fica suspensa aguardando que a tarefa
+// indicada termine; a execução retorna ao dispatcher.
+// retorno: "exit code" da tarefa indicada ou ERROR
+int task_wait(struct task_t *task);
+
+// a tarefa atual fica suspensa por t milissegundos;
+// a execução retorna ao dispatcher.
+void task_sleep(int t);
+
+#endif
diff --git a/ppos/kernel/macros.h b/ppos/kernel/macros.h
new file mode 100644 (file)
index 0000000..e080ed2
--- /dev/null
@@ -0,0 +1,85 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __MACROS__
+#define __MACROS__
+
+// este código deve ser compilado em sistemas UNIX-like
+#ifndef __linux__
+#error "Este codigo foi planejado para ambientes Linux."
+#endif
+
+#include <hardware/cpu.h>
+#include "lib/libc.h"
+
+// códigos de cor ANSI (terminal)
+#define FONT_NORMAL "\x1B[0m"
+#define FONT_BLACK "\x1B[30m"
+#define FONT_RED "\x1B[31m"
+#define FONT_GREEN "\x1B[32m"
+#define FONT_YELLOW "\x1B[33m"
+#define FONT_BLUE "\x1B[34m"
+#define FONT_MAGENTA "\x1B[35m"
+#define FONT_CYAN "\x1B[36m"
+#define FONT_WHITE "\x1B[37m"
+#define BACK_BLACK "\x1B[40m"
+#define BACK_RED "\x1B[41m"
+#define BACK_GREEN "\x1B[42m"
+#define BACK_YELLOW "\x1B[43m"
+#define BACK_BLUE "\x1B[44m"
+#define BACK_MAGENTA "\x1B[45m"
+#define BACK_CYAN "\x1B[46m"
+#define BACK_WHITE "\x1B[47m"
+
+// Imprime mensagem de depuração se DEBUG estiver definido;
+// Uso igual ao printf: ppos_debug(format, arg1, arg2, ...)
+#ifdef DEBUG
+#define ppos_debug(...)                   \
+    do                                    \
+    {                                     \
+        printf(FONT_CYAN "DEBUG: ");      \
+        printf(__VA_ARGS__);              \
+        printf(FONT_NORMAL);              \
+    } while (0)
+#else
+#define ppos_debug(...)  // não faz nada
+#endif
+
+// Imprime mensagem de aviso, com arquivo e linha do código.
+// Uso igual ao printf: ppos_warn(format, arg1, arg2, ...)
+#define ppos_warn(...)                                        \
+    do                                                        \
+    {                                                         \
+        printf(BACK_YELLOW "WARN (%s:%d)" FONT_NORMAL ": ",   \
+               __FILE__, __LINE__);                           \
+        printf(__VA_ARGS__);                                  \
+    } while (0)
+
+// Imprime mensagem de erro com arquivo e linha do código e encerra.
+// Uso igual ao printf: ppos_panic(format, arg1, arg2, ...)
+#define ppos_panic(...)                                              \
+    do                                                               \
+    {                                                                \
+        printf(BACK_RED "PANIC (%s:%d)" FONT_NORMAL ": ",            \
+               __FILE__, __LINE__);                                  \
+        printf(__VA_ARGS__);                                         \
+        hw_poweroff(1);                                              \
+    } while (0)
+
+// Testa parâmetros de funções, imprime e retorna erro.
+// Uso: check_parm(value < 0, "invalid value", NULL);
+#define check_parm(error_cond, error_msg, ret_val)      \
+    if (error_cond)                                     \
+    {                                                   \
+        printf(BACK_YELLOW);                            \
+        printf("Error in %s():", __func__);             \
+        printf(FONT_NORMAL);                            \
+        printf(" %s\n", error_msg);                     \
+        return ret_val;                                 \
+    }
+
+#endif
diff --git a/ppos/kernel/makefile b/ppos/kernel/makefile
new file mode 100644 (file)
index 0000000..0770bc4
--- /dev/null
@@ -0,0 +1,22 @@
+# PingPongOS - PingPong Operating System
+# Prof. Carlos A. Maziero, DINF UFPR
+# Versão 2.0 -- Junho de 2025
+
+# ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+# ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+# flags são importados do makefile superior
+
+# flags adicionais
+CPPFLAGS += -I../
+
+# arquivos a compilar
+HDR = $(wildcard *.h)                  # headers
+SRC = $(wildcard *.c)                  # fontes C
+ASM = $(wildcard *.s)                  # fontes assembly
+OBJ = $(patsubst %.c,%.o,$(SRC))       # objetos .o
+OBJ+= $(patsubst %.s,%.o,$(ASM))       # idem
+
+# regra default: reconstruir tudo
+all   : $(OBJ)
+$(OBJ): $(SRC) $(HDR)
diff --git a/ppos/kernel/memory.c b/ppos/kernel/memory.c
new file mode 100644 (file)
index 0000000..1f1c1ba
--- /dev/null
@@ -0,0 +1,20 @@
+// PingPongOS - PingPong Operating System
+
+// implementação trivial, a ser substituída no projeto de alocação de heap.
+
+#include <stdlib.h>
+
+void mem_init()
+{
+}
+
+void *mem_alloc(int size)
+{
+    return (malloc(size));
+}
+
+int mem_free(void *ptr)
+{
+    free(ptr);
+    return(0);
+}
diff --git a/ppos/kernel/memory.h b/ppos/kernel/memory.h
new file mode 100644 (file)
index 0000000..b9b6a48
--- /dev/null
@@ -0,0 +1,33 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// biblioteca de alocação de memória heap.
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS_MEMORY__
+#define __PPOS_MEMORY__
+
+// inicia o subsistema de memória RAM (heap)
+void mem_init();
+
+// informa a quantidade de memória total, em bytes
+int mem_size();
+
+// informa a quantidade de memória disponível, em bytes
+int mem_avail();
+
+// aloca um bloco de memória com o tamanho indicado
+// retorna ponteiro ou NULL se houver erro
+void *mem_alloc(int size);
+
+// libera um bloco de memória previamente alocado
+// retorna NOERROR se ok ou ERROR se ptr for NULL ou inválido
+int mem_free(void *ptr);
+
+// gera um relatório sobre o uso da memória
+void mem_report();
+
+#endif
diff --git a/ppos/kernel/mqueue.c b/ppos/kernel/mqueue.c
new file mode 100644 (file)
index 0000000..0576555
--- /dev/null
@@ -0,0 +1,6 @@
+// PingPongOS - PingPong Operating System
+
+void mqueue_init()
+{
+}
+
diff --git a/ppos/kernel/mqueue.h b/ppos/kernel/mqueue.h
new file mode 100644 (file)
index 0000000..77c6205
--- /dev/null
@@ -0,0 +1,38 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS_MQUEUE__
+#define __PPOS_MQUEUE__
+
+// Estrutura que define uma fila de mensagens (struct opaco).
+// Este struct deve ser redefinido em mqueue.c
+struct mqueue_t;
+
+// inicia o subsistema de filas de mensagens
+void mqueue_init();
+
+// cria uma fila de mensagens.
+// Retorno: ptr para a nova fila ou NULL
+struct mqueue_t *mqueue_create(int max_msgs, int msg_size);
+
+// destroi uma fila de mensagens, liberando recursos e tarefas
+// Retorno: NOERROR ou ERROR
+int mqueue_destroy(struct mqueue_t *queue);
+
+// envia uma mensagem
+// Retorno: NOERROR ou ERROR
+int mqueue_send(struct mqueue_t *queue, void *msg);
+
+// recebe uma mensagem
+// Retorno: NOERROR ou ERROR
+int mqueue_recv(struct mqueue_t *queue, void *msg);
+
+// retorna o numero de mensagens em uma fila
+// Retorno: número >= 0 ou ERROR
+int mqueue_msgs(struct mqueue_t *queue);
+
+#endif
diff --git a/ppos/kernel/ppos.c b/ppos/kernel/ppos.c
new file mode 100644 (file)
index 0000000..dec4be2
--- /dev/null
@@ -0,0 +1,61 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#include "hardware/cpu.h"
+#include "lib/libc.h"
+#include "ppos.h"
+
+//----------------------------------------------------------------------
+
+static void ppos_start()
+{
+    printf("PPOS: system starting\n");
+
+    // inicia os vários subsistemas
+    mem_init();
+    task_init();
+    dispatcher_init();
+    sched_init();
+    time_init();
+    sem_init();
+    mqueue_init();
+    block_init("hardware/disk.dat");
+
+    printf("PPOS: system started (uptime %d ms)\n", systime());
+}
+
+//----------------------------------------------------------------------
+
+void ppos_stop()
+{
+    printf("PPOS: system stopping\n", systime());
+
+    // encerra os vários subsistemas (em ordem contrária ao init)
+    //block_stop("hardware/disk.dat");
+    //mqueue_stop();
+    //sem_stop();
+    //time_stop();
+    //sched_stop();
+    //dispatcher_stop();
+    //task_stop();
+    //mem_stop();
+
+    printf("PPOS: system stopped (uptime %d ms)\n", systime());
+}
+
+//----------------------------------------------------------------------
+
+int main()
+{
+    ppos_start();
+    dispatcher();
+    ppos_stop();
+    hw_poweroff(0);
+}
+
+//----------------------------------------------------------------------
+
diff --git a/ppos/kernel/ppos.h b/ppos/kernel/ppos.h
new file mode 100644 (file)
index 0000000..2b67487
--- /dev/null
@@ -0,0 +1,34 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS__
+#define __PPOS__
+
+// este código deve ser compilado em sistemas UNIX-like
+#ifndef __linux__
+#error "Este codigo foi planejado para ambientes Linux."
+#endif
+
+// módulos do sistema operacional
+#include "macros.h"
+#include "tcb.h"
+#include "task.h"
+#include "dispatcher.h"
+#include "scheduler.h"
+#include "time.h"
+#include "memory.h"
+#include "semaphore.h"
+#include "mqueue.h"
+#include "block.h"
+
+// Inicia o sistema operacional
+static void ppos_start();
+
+// Encerra o sistema operacional
+void ppos_stop();
+
+#endif
diff --git a/ppos/kernel/scheduler.c b/ppos/kernel/scheduler.c
new file mode 100644 (file)
index 0000000..bf0cc67
--- /dev/null
@@ -0,0 +1,6 @@
+// PingPongOS - PingPong Operating System
+
+void sched_init()
+{
+}
+
diff --git a/ppos/kernel/scheduler.h b/ppos/kernel/scheduler.h
new file mode 100644 (file)
index 0000000..7197ee4
--- /dev/null
@@ -0,0 +1,26 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS_SCHEDULER__
+#define __PPOS_SCHEDULER__
+
+#include "lib/queue.h"
+#include "tcb.h"
+
+// inicia o subsistema do escalonador de tarefas
+void sched_init();
+
+// função escalonador: devolve a próxima tarefa a escalonar na fila
+struct task_t *scheduler(struct queue_t *ready_queue);
+
+// muda a prioridade de uma tarefa
+void sched_setprio(struct task_t *task, int prio);
+
+// obtem a prioridade de uma tarefa
+int sched_getprio(struct task_t *task);
+
+#endif
diff --git a/ppos/kernel/semaphore.c b/ppos/kernel/semaphore.c
new file mode 100644 (file)
index 0000000..53f56c5
--- /dev/null
@@ -0,0 +1,5 @@
+// PingPongOS - PingPong Operating System
+
+void sem_init()
+{
+}
diff --git a/ppos/kernel/semaphore.h b/ppos/kernel/semaphore.h
new file mode 100644 (file)
index 0000000..f115ef6
--- /dev/null
@@ -0,0 +1,40 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS_SEMAPHORE__
+#define __PPOS_SEMAPHORE__
+
+// Estrutura que define um semáforo (struct opaco).
+// Este struct deve ser redefinido em semaphore.c
+struct semaphore_t;
+
+// inicia o subsistema de semáforos
+void sem_init();
+
+// Cria um novo semáforo, inicializado com value >= 0.
+// Retorno: ptr para o semáforo ou NULL (erro).
+struct semaphore_t *sem_create(int value);
+
+// Requisita acesso a um semáforo
+// Retorno: NOERROR (0) ou ERROR (<0)
+int sem_down(struct semaphore_t *s);
+
+// libera o acesso a um semáforo
+// Retorno: NOERROR (0) ou ERROR (<0)
+int sem_up(struct semaphore_t *s);
+
+// destrói um semáforo, liberando recursos e tarefas bloqueadas
+// Retorno: NOERROR (0) ou ERROR (<0)
+int sem_destroy(struct semaphore_t *s);
+
+// trava um spin-lock (busy wait)
+void spin_lock(int *lock);
+
+// libera um spin-lock
+void spin_unlock(int *lock);
+
+#endif
diff --git a/ppos/kernel/task.c b/ppos/kernel/task.c
new file mode 100644 (file)
index 0000000..a97fee7
--- /dev/null
@@ -0,0 +1,5 @@
+// PingPongOS - PingPong Operating System
+
+void task_init()
+{
+}
diff --git a/ppos/kernel/task.h b/ppos/kernel/task.h
new file mode 100644 (file)
index 0000000..1821198
--- /dev/null
@@ -0,0 +1,40 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS_TASK__
+#define __PPOS_TASK__
+
+#include "tcb.h"
+
+// inicializa o subsistema de tarefas
+void task_init();
+
+// cria uma nova tarefa: "name" é o nome da tarefa, "entry"
+// é a função que ela irá executar e "arg" aponta para o valor
+// recebido por "entry" ao iniciar (pode ser NULL).
+// retorno: ptr para o descritor da tarefa ou NULL se houver erro
+struct task_t *task_create(char *name, void (*entry)(void *),
+                           void *arg);
+
+// destroi uma tarefa e libera seus recursos;
+// somente deve atuar sobre tarefas terminadas.
+// Retorno: NOERROR (0) ou ERROR (<0)
+int task_destroy(struct task_t *task);
+
+// transfere a cpu da tarefa atual para outra tarefa;
+// se task == NULL, transfere para a tarefa que a criou.
+// ignora sem erro se "task" já tiver terminado.
+// Retorno: NOERROR (0) ou ERROR (<0)
+int task_switch(struct task_t *task);
+
+// informa o ID de uma tarefa (ou da tarefa atual se NULL)
+int task_id(struct task_t *task);
+
+// informa o nome de uma tarefa (ou da tarefa atual se NULL)
+char *task_name(struct task_t *task);
+
+#endif
diff --git a/ppos/kernel/tcb.h b/ppos/kernel/tcb.h
new file mode 100644 (file)
index 0000000..d93897a
--- /dev/null
@@ -0,0 +1,21 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// TCB - Task Control Block do sistema operacional
+
+#ifndef __PPOS_TCB__
+#define __PPOS_TCB__
+
+#include "ctx.h"
+
+// Task Control Block (TCB), infos sobre uma tarefa
+struct task_t
+{
+    int id;                     // identificador da tarefa
+    char *name;                 // nome da tarefa
+    struct ctx_t context;       // contexto armazenado da tarefa
+                                // ...
+};
+
+#endif
diff --git a/ppos/kernel/time.c b/ppos/kernel/time.c
new file mode 100644 (file)
index 0000000..bbc0e7b
--- /dev/null
@@ -0,0 +1,10 @@
+// PingPongOS - PingPong Operating System
+
+void time_init()
+{
+}
+
+int systime()
+{
+    return (0);
+}
diff --git a/ppos/kernel/time.h b/ppos/kernel/time.h
new file mode 100644 (file)
index 0000000..5159e52
--- /dev/null
@@ -0,0 +1,20 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS_TIME__
+#define __PPOS_TIME__
+
+// duracao default do quantum em ticks (ms)
+#define QUANTUM 10
+
+// inicia o subsistema de gestão do tempo
+void time_init();
+
+// informa o valor atual do relógio (milissegundos)
+int systime();
+
+#endif
diff --git a/ppos/leia-me.txt b/ppos/leia-me.txt
new file mode 100644 (file)
index 0000000..1db78e1
--- /dev/null
@@ -0,0 +1,48 @@
+Ping-Pong Operating Systema - PPOS
+
+Este diretório contém o código-fonte do Sistema Operacional Ping-Pong, ou PPOS, um projeto que visa construir um sistema operacional didático ("toy operating system").
+
+Ao contrário de projetos similares, o PPOS executa inteiramente dentro de um processo do Linux. A maior vantagem em executar um SO dentro de um processo em modo usuário é a possibilidade de usar ferramentas padrão de depuração, como o Valgrind e o GDB no modo default, o que reduz a curva de aprendizado do aluno.
+
+O PPOS tem uma estrutura típica de um RTOS (Real-Time Operating System), um sistema operacional com espaço de memória único, no qual o núcleo e as aplicações são compilados juntos, formando um único código binário.
+
+As seguintes funcionalidades são suportadas pelo PPOS:
+
+- tarefas com troca de contexto
+- escalonador FCFS e por prioridades
+- preempção por tempo (quantum)
+- gestão do tempo e contabilização
+- sincronização de tarefas
+- semáforos genéricos
+- filas de mensagens
+- alocador de memória heap
+- driver de disco
+- escalonador de E/S
+
+Estas funcionalidades estão sendo desenvolvidas:
+
+- cache de blocos para o driver de disco
+- sistema de arquivos (inodes, diretórios, nomes)
+
+Estas funcionalidades NÃO SÃO suportadas pelo PPOS:
+
+- memória virtual
+- separação userspace/kernelspace
+- chamadas de sistema usando traps
+
+O desenvolvimento do PPOS está organizado em projetos incrementais, que visam implementar cada uma das funcionalidades do sistema. Geralmente, cada projeto depende de funcionalidades desenvolvidas em projetos anteriores. Os detalhes de cada projeto estão descritos com maior detalhe na página web do docente: http://wiki.inf.ufpr.br/maziero.
+
+Este diretório tem a seguinte estrutura:
+
+hardware/: hardware virtual (emuladores)
+lib/     : bibliotecas de apoio
+kernel/  : código-fonte do PPOS, a ser desenvolvido pelo aluno
+test/    : programas de teste dos projetos
+makefile : para compilar o sistema
+
+Alguns arquivos (sobretudo os headers, os arquivos no diretório hardware, a mini-biblioteca C e os makefiles) estão prontos e não devem ser alterados (essa restrição está claramente indicada no início de cada arquivo). Esses arquivos serão sobrescritos pelos originais durante a avaliação de cada projeto.
+
+Os demais arquivos devem ser escritos pelo aluno, para implementar as funcionalidades solicitadas em cada projeto.
+
+Prof. Carlos Maziero, DINF/UFPR
+Julho de 2025
diff --git a/ppos/lib/libc.c b/ppos/lib/libc.c
new file mode 100644 (file)
index 0000000..08540ee
--- /dev/null
@@ -0,0 +1,296 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Funções básicas da biblioteca C, que devem ser definidas aqui
+// para nos liberar da GLibC.
+
+#include "hardware/serial.h"
+#include <stdbool.h>
+#include "libc.h"
+
+// macros do compilador para funções variádicas (usadas no printk)
+#define va_list __builtin_va_list
+#define va_start __builtin_va_start
+#define va_end __builtin_va_end
+#define va_arg __builtin_va_arg
+
+// estado interno do gerador de números pseudo-aleatórios
+// https://en.wikipedia.org/wiki/Linear_congruential_generator
+static unsigned int rand_number = 0;
+
+//----------------------------------------------------------------------
+
+void randseed(unsigned long seed)
+{
+    rand_number = seed;
+}
+
+//----------------------------------------------------------------------
+
+unsigned long randnum(void)
+{
+//    rand_number = (1103515245L * rand_number + 12345) % (1 << 30);
+    rand_number = (1664525L * rand_number + 1013904223L) % (1L << 31);
+    return (rand_number);
+}
+
+//----------------------------------------------------------------------
+
+int abs(int num)
+{
+    if (num < 0)
+        return (-num);
+    else
+        return (num);
+}
+
+//----------------------------------------------------------------------
+
+int mem_copy(const char *orig, char *dest, int size)
+{
+    if (!orig || !dest || size <= 0)
+        return (ERROR);
+
+    for (int i = 0; i < size; i++)
+        dest[i] = orig[i];
+
+    return (NOERROR);
+}
+
+//----------------------------------------------------------------------
+
+void putch(char c)
+{
+    hw_serial_put(c);
+}
+
+//----------------------------------------------------------------------
+
+void putst(const char *s)
+{
+    if (!s)
+        s = "NULL";
+
+    while (*s)
+    {
+        putch(*s);
+        s++;
+    }
+}
+
+//----------------------------------------------------------------------
+
+// adaptado de from: https://operating-system-in-1000-lines.vercel.app/en/
+void printk(const char *fmt, ...)
+{
+    bool left_align;
+    //bool fill_zeros = false;
+    //bool signal_space = false;
+    short width;
+    va_list vargs;
+
+    va_start(vargs, fmt);
+
+    while (*fmt)
+    {
+        // find a % mark, process it
+        if (*fmt == '%')
+        {
+            // skip '%'
+            fmt++;
+
+            // space for signal (% )
+            /*if (*fmt == ' ')
+            {
+                signal_space = true;
+                fmt++;
+            }*/
+
+            // left alignment (%-)
+            left_align = false;
+            if (*fmt == '-')
+            {
+                left_align = true;
+                fmt++;
+            }
+
+            // fill with zeros (%0)
+            /*if (*fmt == '0')
+            {
+                fill_zeros = true;
+                fmt++;
+            }*/
+
+            // width modifier (%NN)
+            width = 0;
+            while (*fmt && *fmt >= '1' && *fmt <= '9')
+            {
+                width = 10 * width + (*fmt - '0');
+                fmt++;
+            }
+
+            switch (*fmt)
+            {
+
+            // "%%" or '%' at the end of the format string
+            case '%':
+            case '\0':
+                putch('%');
+                break;
+
+            // %c: char
+            case 'c':
+            {
+                int c = va_arg(vargs, int);
+                putch(c);
+                break;
+            }
+
+            // %s: string
+            case 's':
+            {
+                const char *s = va_arg(vargs, const char *);
+                char *aux;
+
+                // null string
+                if (!s)
+                s = "(null)";
+
+                // decrement width according to string size
+                aux = (char *) s;
+                while (*aux)
+                {
+                    width--;
+                    aux++;
+                }
+
+                // print whitespaces before
+                if (!left_align)
+                    while (width > 0)
+                    {
+                        putch(' ');
+                        width--;
+                    }
+
+                // print string chars
+                while (*s)
+                {
+                    putch(*s);
+                    s++;
+                }
+
+                // print whitespaces after
+                if (left_align)
+                    while (width > 0)
+                    {
+                        putch(' ');
+                        width--;
+                    }
+
+                break;
+            }
+
+            // %d %i: integer, printed in decimal
+            case 'i':
+            case 'd':
+            {
+                bool negative;
+                int divisor;
+                int value = va_arg(vargs, int);
+
+                width--;
+
+                // treat negative number
+                negative = false;
+                if (value < 0)
+                {
+                    value = -value;
+                    negative = true;
+                    width--;
+                }
+
+                // calculate number of digits to print
+                divisor = 1;
+                while (value / divisor > 9)
+                {
+                    divisor *= 10;
+                    width--;
+                }
+
+                // print whitespaces before
+                if (!left_align)
+                    while (width > 0)
+                    {
+                        putch(' ');
+                        width--;
+                    }
+
+                // print number signal
+                if (negative)
+                    putch('-');
+
+                // print number digits
+                while (divisor > 0)
+                {
+                    putch('0' + value / divisor);
+                    value   %= divisor;
+                    divisor /= 10;
+                }
+
+                // print whitespaces after
+                if (left_align)
+                    while (width > 0)
+                    {
+                        putch(' ');
+                        width--;
+                    }
+
+                break;
+            }
+
+            // %p: long, printed in hexadecimal
+            case 'p':
+            {
+                unsigned nibble;
+                unsigned long value = va_arg(vargs, unsigned long);
+
+                if (value)
+                {
+                    putst("0x");
+                    for (int i = 15; i >= 0; i--)
+                    {
+                        nibble = (value >> (i * 4)) & 0xf;
+                        putch("0123456789abcdef"[nibble]);
+                    }
+                }
+                else
+                    putst("(nil)");
+
+                break;
+            }
+
+            // %? unrecognized
+            default:
+            {
+                putst("%?");
+            }
+            }
+        }
+        // not a placeholder, just print it
+        else
+        {
+            putch(*fmt);
+        }
+
+        // take the next char in format
+        if (*fmt)
+            fmt++;
+    }
+    va_end(vargs);
+}
+
+//----------------------------------------------------------------------
diff --git a/ppos/lib/libc.h b/ppos/lib/libc.h
new file mode 100644 (file)
index 0000000..5f62ef0
--- /dev/null
@@ -0,0 +1,59 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// Implementações simplificadas de algumas funções básicas da biblioteca C,
+// que devem ser definidas aqui para nos liberar da GLibC.
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+#ifndef __PPOS_LIBC__
+#define __PPOS_LIBC__
+
+// códigos de retorno das funções
+#ifndef ERROR
+#define ERROR -1
+#define NOERROR 0
+#endif
+
+// ponteiro nulo
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+// Substitui o printf da LibC onde este arquivo for incluído.
+#define printf printk
+
+// Copia "size" bytes da área de memória apontada por "orig"
+// para a área apontada por "dest".
+// Retorno: NOERROR ou ERROR.
+int mem_copy (const char *orig, char *dest, int size);
+
+// Envia um caractere para o console.
+void putch (const char c);
+
+// Envia uma string para o console.
+void putst (const char *s);
+
+// Imprime uma mensagem no console, de forma similar a printf.
+// Suporta os formatos %d %i %c %s %p %%
+// e os modificadores %NN (tamanho) e %- (alinhamento).
+void printk(const char *fmt, ...);
+
+// retorna o número sem sinal
+int abs(int num) ;
+
+// define a semente do gerador de aleatórios
+void randseed(unsigned long seed);
+
+// gera um inteiro aleatório entre 0 e MAX_INT
+unsigned long randnum(void);
+
+// Encerra o programa normalmente, com o exit code informado.
+//void exit(int exit_code);
+
+// Encerra o programa com erro
+//void abort();
+
+#endif
diff --git a/ppos/lib/makefile b/ppos/lib/makefile
new file mode 100644 (file)
index 0000000..91366a1
--- /dev/null
@@ -0,0 +1,22 @@
+# PingPongOS - PingPong Operating System
+# Prof. Carlos A. Maziero, DINF UFPR
+# Versão 2.0 -- Junho de 2025
+
+# ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+# ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+# flags são importados do makefile superior
+
+# flags adicionais
+CPPFLAGS += -I../ -I../kernel
+
+# arquivos a compilar
+HDR = $(wildcard *.h)                  # headers
+SRC = $(wildcard *.c)                  # fontes C
+ASM = $(wildcard *.s)                  # fontes assembly
+OBJ = $(patsubst %.c,%.o,$(SRC))       # objetos .o
+OBJ+= $(patsubst %.s,%.o,$(ASM))       # idem
+
+# regra default: reconstruir tudo
+all   : $(OBJ)
+$(OBJ): $(SRC) $(HDR)
diff --git a/ppos/lib/queue.c b/ppos/lib/queue.c
new file mode 100644 (file)
index 0000000..26bfa05
--- /dev/null
@@ -0,0 +1 @@
+// PingPongOS - PingPong Operating System
diff --git a/ppos/lib/queue.h b/ppos/lib/queue.h
new file mode 100644 (file)
index 0000000..6cb94b6
--- /dev/null
@@ -0,0 +1,94 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+/*
+TAD fila genérica de ponteiros, que armazena itens de tipo "void *".
+A fila mantém um iterador que aponta para um item da fila (ou para NULL).
+O iterador pode ser ajustado usando as funções queue_head() e queue_next()
+e ter seu item consultado com a função queue_item(). Inicialmente o iterador
+aponta para o começo da fila.
+*/
+
+#ifndef __QUEUE__
+#define __QUEUE__
+
+#include <stdbool.h>
+
+// códigos de retorno das funções
+#ifndef ERROR
+#define ERROR -1
+#define NOERROR 0
+#endif
+
+// ponteiro nulo
+#ifndef NULL
+#define NULL ((void *)0)
+#endif
+
+// struct que representa uma fila; este é um struct "opaco",
+// que deve ser redefinido completamente em queue.c
+struct queue_t;
+
+// Cria uma fila inicialmente vazia.
+// Retorno: ponteiro p/ a nova fila
+//          NULL se houver erro
+struct queue_t *queue_create();
+
+// Destroi uma fila, liberando a memória alocada por ela.
+// IMPORTANTE: os itens apontados pela fila NÃO devem ser liberados,
+// pois a aplicação que os criou e pôs na fila é responsável por eles.
+// Retorno: NOERROR ou ERROR (se a fila não existir)
+int queue_destroy(struct queue_t *queue);
+
+// Adiciona um item no fim da fila; ajusta o iterador para ele
+// se for o primeiro item (ou seja, se a fila estiver vazia).
+// Retorno: NOERROR ou ERROR (se fila ou item não existir)
+int queue_add(struct queue_t *queue, void *item);
+
+// Retira da fila o item com o valor indicado; se o item estiver
+// em mais de uma posição da fila, retira apenas da primeira posição
+// encontrada; se o item estiver apontado pelo iterador, este avança
+// para o próximo item da fila (ou para NULL, se for o último).
+// Retorno: NOERROR ou ERROR (não encontrou ou outro erro).
+int queue_del(struct queue_t *queue, void *item);
+
+// Informa se o item indicado está na fila.
+// Retorno: true/false (error: false).
+bool queue_has(struct queue_t *queue, void *item);
+
+// Informa o número de itens na fila.
+// Retorno: número de itens na fila (>= 0)
+//          ERROR se a fila não existir
+int queue_size(struct queue_t *queue);
+
+// Põe o iterador no início da fila.
+// Retorno: ptr para o item apontado pelo iterador
+//          NULL se a fila estiver vazia ou não existir
+void *queue_head(struct queue_t *queue);
+
+// Avança o iterador ao próximo item na fila.
+// Retorno: ptr para o item apontado pelo iterador após avançar
+//          NULL se o iterador passou do último item da fila
+//          NULL se a fila estiver vazia ou não existir
+void *queue_next(struct queue_t *queue);
+
+// Informa o item atualmente sob o iterador na fila.
+// Retorno: ptr para o item apontado pelo iterador
+//          NULL se a fila estiver vazia ou não existir
+//          NULL se o iterador passou do fim da fila
+void *queue_item(struct queue_t *queue);
+
+// Imprime os elementos de uma fila; a função externa "func"
+// deve ser chamada para imprimir cada item.
+// Exemplos de saída, com name == "Frutas":
+// Frutas: [ banana pera ameixa uva ] (4 itens)
+// Frutas: [ ] (0 itens)
+// Frutas: undef   se queue == NULL
+// Frutas: [ undef undef undef ] (3 itens)  se func == NULL
+void queue_print(char *name, struct queue_t *queue, void(func)(void *));
+
+#endif
diff --git a/ppos/makefile b/ppos/makefile
new file mode 100644 (file)
index 0000000..31dc66a
--- /dev/null
@@ -0,0 +1,105 @@
+# PingPongOS - PingPong Operating System
+# Prof. Carlos A. Maziero, DINF UFPR
+# Versão 2.0 -- Junho de 2025
+
+# ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+# ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+# flags de compilação e ligação
+CC       = gcc
+CPPFLAGS = 
+CFLAGS   = -std=c99 -Wall -Wextra -O0 -g -Wno-unused-function -Wno-unused-parameter
+LDFLAGS  = -z noexecstack
+LDLIBS   = -lrt -lm
+export CC CPPFLAGS CFLAGS LDFLAGS LDLIBS
+
+# arquivo .tgz para envio
+TGZ = ppos-${USER}.tgz
+
+# estes alvos não são arquivos
+.PHONY: all help debug clean purge hardware lib kernel
+
+# regra default
+help:
+       @echo "Makefile para compilação do PPOS"
+       @echo "Uso:" 
+       @echo "  make p1          : compila o projeto p1 (idem para p2, ...)"
+       @echo "  make debug p1    : idem, com o flag -DDEBUG"
+       @echo "  make all         : compila todos os projetos"
+       @echo "  make clean       : remove objetos e backups"
+       @echo "  make purge       : remove objetos, backups e executáveis"
+       @echo "  make tgz         : gera um arquivo .tgz para entrega"
+
+# compila o hardware virtual, bibliotecas e kernel
+hardware kernel lib:
+       @echo "=== Compilando $@ ==="
+       -test -s $@/makefile && $(MAKE) -C $@
+
+# ativa modo de depuração
+debug:
+       $(eval CPPFLAGS += -DDEBUG)
+
+# programas de teste de cada projeto
+P1  = pingpong-task1 pingpong-task2 pingpong-task3
+P2  = pingpong-dispatcher
+P3  = pingpong-scheduler
+P4  = pingpong-preempcao
+P5  = pingpong-contab pingpong-contab-prio pingpong-contab-stress
+P6  = pingpong-wait pingpong-wait-stress
+P7  = pingpong-sleep
+P8  = pingpong-semaphore pingpong-semaphore-stress
+P9  = pingpong-prodcons
+P10 = pingpong-mqueue
+P11 = pingpong-memoria pingpong-mqueue
+P12 = pingpong-disco pingpong-disco-stress
+P13 = pingpong-disco-stress
+P14 = pingpong-cache-on pingpong-cache-off
+
+BIN = $(P1) $(P2) $(P3) $(P4) $(P5) $(P6) $(P7) $(P8) \
+      $(P9) $(P10) $(P11) $(P12) $(P13) $(P14)
+
+# compila todos os projetos
+all: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14
+
+# alvos: testes de cada projeto (como criar uma receita genérica aqui?) 
+p1:  $(P1)
+p2:  $(P2)
+p3:  $(P3)
+p4:  $(P4)
+p5:  $(P5)
+p6:  $(P6)
+p7:  $(P7)
+p8:  $(P8)
+p9:  $(P9)
+p10: $(P10)
+p11: $(P11)
+p12: $(P12)
+p13: $(P13)
+p14: $(P14)
+
+# compila e liga um programa de teste ping*
+ping%: hardware kernel lib
+       @echo "=== Compilando $@ ==="
+       $(MAKE) -C test $@
+       @echo "=== Ligando $@ ==="
+       $(eval OBJS = $(wildcard hardware/*.o kernel/*.o lib/*.o))
+       $(CC) $(LDFLAGS) $(OBJS) test/$@.o -o $@ $(LDLIBS)
+
+# limpa arquivos temporários
+clean:
+       -rm -f *.o *~ */*.o */*~
+
+# reinicia o conteúdo do disco virtual
+disk-reset:
+       -test -s hardware/makefile && $(MAKE) -C hardware reset
+
+# limpa tudo, deixa só o o código-fonte
+purge: clean disk-reset
+       -rm -f $(BIN) $(TGZ)
+
+# gera arquivo .tgz para entrega
+tgz: purge
+       -rm -f $(TGZ)
+       -tar --ignore-failed-read -czvf $(TGZ) lib/ kernel/ test/$(P9).c
+       @echo ""
+       @echo "Arquivo $(TGZ) pronto para entrega"
diff --git a/ppos/test/makefile b/ppos/test/makefile
new file mode 100644 (file)
index 0000000..654907d
--- /dev/null
@@ -0,0 +1,12 @@
+# PingPongOS - PingPong Operating System
+# Prof. Carlos A. Maziero, DINF UFPR
+# Versão 2.0 -- Junho de 2025
+
+# ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO; ALTERAÇÕES SERÃO DESCARTADAS.
+
+# flags
+CPPFLAGS += -I../ -I../kernel/ -I../lib/
+
+# compila arquivo de teste
+ping%:
+       $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@.o $@.c 
diff --git a/ppos/test/pingpong-cache-off.c b/ppos/test/pingpong-cache-off.c
new file mode 100644 (file)
index 0000000..0c4035f
--- /dev/null
@@ -0,0 +1,84 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste das operações de acesso ao disco com uma única tarefa,
+// que lê e escreve/altera blocos do disco SEM CACHE.
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+    unsigned char *buffer;
+    int num_blk;     // numero de blocos no disco
+    int blk_size;    // tamanho de cada bloco (bytes)
+    int time_start;
+    int blk_inicio, blk_final;
+
+    printf("%5d ms: user: inicio\n", systime());
+
+    // busca geometria do disco
+    num_blk = block_blocks();
+    assert(num_blk);
+    blk_size = block_size();
+    assert(blk_size);
+
+    printf("%5d ms: disco contem %d blocos de %d bytes cada\n",
+           systime(), num_blk, blk_size);
+
+    // aloca o buffer para ler blocos do disco
+    buffer = mem_alloc(blk_size);
+    assert(buffer);
+
+    time_start = systime();
+
+    // escreve blocos
+    blk_inicio = 0;
+    blk_final  = num_blk / 4;
+    for (int i = blk_inicio; i < blk_final; i++)
+    {
+        printf("%5d ms: escreve bloco %d\n", systime(), i);
+        status = block_write(i, buffer);
+        if (status)
+            printf("Erro ao escrever bloco %d!\n", i);
+    }
+
+    // lê blocos
+    blk_inicio += num_blk / 8;
+    blk_final  += num_blk / 8;
+    for (int i = blk_inicio; i < blk_final; i++)
+    {
+        printf("%5d ms: lendo bloco %d\n", systime(), i);
+        status = block_read(i, buffer);
+        if (status)
+            printf("Erro ao ler bloco %d!\n", i);
+    }
+
+    // lê blocos
+    blk_inicio += num_blk / 8;
+    blk_final  += num_blk / 8;
+    for (int i = blk_inicio; i < blk_final; i++)
+    {
+        printf("%5d ms: lendo bloco %d\n", systime(), i);
+        status = block_read(i, buffer);
+        if (status)
+            printf("Erro ao ler bloco %d!\n", i);
+    }
+
+    printf("As operações SEM CACHE demoraram %d ms\n", systime() - time_start);
+
+    // libera o buffer de blocos do disco
+    mem_free(buffer);
+
+    printf("%5d ms: user fim\n", systime());
+
+    task_exit(0);
+}
+
diff --git a/ppos/test/pingpong-cache-off.txt b/ppos/test/pingpong-cache-off.txt
new file mode 100644 (file)
index 0000000..b767a44
--- /dev/null
@@ -0,0 +1,204 @@
+PPOS: system starting
+PPOS: disk driver started (disk has 256 blocks of 64 bytes each)
+PPOS: system started (uptime 0 ms)
+    0 ms: user: inicio
+    0 ms: disco contem 256 blocos de 64 bytes cada
+    0 ms: escreve bloco 0
+   38 ms: escreve bloco 1
+   71 ms: escreve bloco 2
+  123 ms: escreve bloco 3
+  157 ms: escreve bloco 4
+  209 ms: escreve bloco 5
+  243 ms: escreve bloco 6
+  280 ms: escreve bloco 7
+  313 ms: escreve bloco 8
+  369 ms: escreve bloco 9
+  411 ms: escreve bloco 10
+  464 ms: escreve bloco 11
+  520 ms: escreve bloco 12
+  566 ms: escreve bloco 13
+  614 ms: escreve bloco 14
+  657 ms: escreve bloco 15
+  706 ms: escreve bloco 16
+  744 ms: escreve bloco 17
+  796 ms: escreve bloco 18
+  833 ms: escreve bloco 19
+  887 ms: escreve bloco 20
+  944 ms: escreve bloco 21
+  995 ms: escreve bloco 22
+ 1053 ms: escreve bloco 23
+ 1109 ms: escreve bloco 24
+ 1156 ms: escreve bloco 25
+ 1205 ms: escreve bloco 26
+ 1261 ms: escreve bloco 27
+ 1303 ms: escreve bloco 28
+ 1339 ms: escreve bloco 29
+ 1385 ms: escreve bloco 30
+ 1422 ms: escreve bloco 31
+ 1461 ms: escreve bloco 32
+ 1509 ms: escreve bloco 33
+ 1563 ms: escreve bloco 34
+ 1600 ms: escreve bloco 35
+ 1637 ms: escreve bloco 36
+ 1695 ms: escreve bloco 37
+ 1737 ms: escreve bloco 38
+ 1772 ms: escreve bloco 39
+ 1827 ms: escreve bloco 40
+ 1875 ms: escreve bloco 41
+ 1931 ms: escreve bloco 42
+ 1980 ms: escreve bloco 43
+ 2014 ms: escreve bloco 44
+ 2056 ms: escreve bloco 45
+ 2112 ms: escreve bloco 46
+ 2160 ms: escreve bloco 47
+ 2208 ms: escreve bloco 48
+ 2255 ms: escreve bloco 49
+ 2309 ms: escreve bloco 50
+ 2351 ms: escreve bloco 51
+ 2396 ms: escreve bloco 52
+ 2437 ms: escreve bloco 53
+ 2477 ms: escreve bloco 54
+ 2520 ms: escreve bloco 55
+ 2576 ms: escreve bloco 56
+ 2627 ms: escreve bloco 57
+ 2664 ms: escreve bloco 58
+ 2703 ms: escreve bloco 59
+ 2756 ms: escreve bloco 60
+ 2807 ms: escreve bloco 61
+ 2852 ms: escreve bloco 62
+ 2885 ms: escreve bloco 63
+ 2926 ms: lendo bloco 32
+ 2993 ms: lendo bloco 33
+ 3027 ms: lendo bloco 34
+ 3068 ms: lendo bloco 35
+ 3102 ms: lendo bloco 36
+ 3143 ms: lendo bloco 37
+ 3187 ms: lendo bloco 38
+ 3242 ms: lendo bloco 39
+ 3295 ms: lendo bloco 40
+ 3333 ms: lendo bloco 41
+ 3377 ms: lendo bloco 42
+ 3433 ms: lendo bloco 43
+ 3481 ms: lendo bloco 44
+ 3519 ms: lendo bloco 45
+ 3560 ms: lendo bloco 46
+ 3594 ms: lendo bloco 47
+ 3649 ms: lendo bloco 48
+ 3680 ms: lendo bloco 49
+ 3718 ms: lendo bloco 50
+ 3758 ms: lendo bloco 51
+ 3798 ms: lendo bloco 52
+ 3844 ms: lendo bloco 53
+ 3892 ms: lendo bloco 54
+ 3926 ms: lendo bloco 55
+ 3967 ms: lendo bloco 56
+ 4021 ms: lendo bloco 57
+ 4062 ms: lendo bloco 58
+ 4097 ms: lendo bloco 59
+ 4142 ms: lendo bloco 60
+ 4194 ms: lendo bloco 61
+ 4226 ms: lendo bloco 62
+ 4276 ms: lendo bloco 63
+ 4333 ms: lendo bloco 64
+ 4365 ms: lendo bloco 65
+ 4400 ms: lendo bloco 66
+ 4457 ms: lendo bloco 67
+ 4499 ms: lendo bloco 68
+ 4543 ms: lendo bloco 69
+ 4593 ms: lendo bloco 70
+ 4631 ms: lendo bloco 71
+ 4683 ms: lendo bloco 72
+ 4715 ms: lendo bloco 73
+ 4748 ms: lendo bloco 74
+ 4786 ms: lendo bloco 75
+ 4826 ms: lendo bloco 76
+ 4866 ms: lendo bloco 77
+ 4904 ms: lendo bloco 78
+ 4940 ms: lendo bloco 79
+ 4976 ms: lendo bloco 80
+ 5022 ms: lendo bloco 81
+ 5064 ms: lendo bloco 82
+ 5106 ms: lendo bloco 83
+ 5138 ms: lendo bloco 84
+ 5170 ms: lendo bloco 85
+ 5215 ms: lendo bloco 86
+ 5252 ms: lendo bloco 87
+ 5306 ms: lendo bloco 88
+ 5360 ms: lendo bloco 89
+ 5397 ms: lendo bloco 90
+ 5436 ms: lendo bloco 91
+ 5482 ms: lendo bloco 92
+ 5522 ms: lendo bloco 93
+ 5554 ms: lendo bloco 94
+ 5596 ms: lendo bloco 95
+ 5633 ms: lendo bloco 64
+ 5696 ms: lendo bloco 65
+ 5733 ms: lendo bloco 66
+ 5778 ms: lendo bloco 67
+ 5819 ms: lendo bloco 68
+ 5875 ms: lendo bloco 69
+ 5924 ms: lendo bloco 70
+ 5956 ms: lendo bloco 71
+ 5987 ms: lendo bloco 72
+ 6034 ms: lendo bloco 73
+ 6073 ms: lendo bloco 74
+ 6109 ms: lendo bloco 75
+ 6165 ms: lendo bloco 76
+ 6207 ms: lendo bloco 77
+ 6249 ms: lendo bloco 78
+ 6280 ms: lendo bloco 79
+ 6338 ms: lendo bloco 80
+ 6387 ms: lendo bloco 81
+ 6429 ms: lendo bloco 82
+ 6460 ms: lendo bloco 83
+ 6510 ms: lendo bloco 84
+ 6567 ms: lendo bloco 85
+ 6604 ms: lendo bloco 86
+ 6648 ms: lendo bloco 87
+ 6701 ms: lendo bloco 88
+ 6741 ms: lendo bloco 89
+ 6789 ms: lendo bloco 90
+ 6826 ms: lendo bloco 91
+ 6871 ms: lendo bloco 92
+ 6916 ms: lendo bloco 93
+ 6962 ms: lendo bloco 94
+ 7014 ms: lendo bloco 95
+ 7060 ms: lendo bloco 96
+ 7111 ms: lendo bloco 97
+ 7150 ms: lendo bloco 98
+ 7203 ms: lendo bloco 99
+ 7249 ms: lendo bloco 100
+ 7280 ms: lendo bloco 101
+ 7334 ms: lendo bloco 102
+ 7381 ms: lendo bloco 103
+ 7426 ms: lendo bloco 104
+ 7461 ms: lendo bloco 105
+ 7510 ms: lendo bloco 106
+ 7552 ms: lendo bloco 107
+ 7595 ms: lendo bloco 108
+ 7651 ms: lendo bloco 109
+ 7694 ms: lendo bloco 110
+ 7737 ms: lendo bloco 111
+ 7785 ms: lendo bloco 112
+ 7835 ms: lendo bloco 113
+ 7875 ms: lendo bloco 114
+ 7915 ms: lendo bloco 115
+ 7965 ms: lendo bloco 116
+ 8007 ms: lendo bloco 117
+ 8057 ms: lendo bloco 118
+ 8098 ms: lendo bloco 119
+ 8149 ms: lendo bloco 120
+ 8190 ms: lendo bloco 121
+ 8234 ms: lendo bloco 122
+ 8273 ms: lendo bloco 123
+ 8328 ms: lendo bloco 124
+ 8359 ms: lendo bloco 125
+ 8392 ms: lendo bloco 126
+ 8431 ms: lendo bloco 127
+As operações SEM CACHE demoraram 8483 ms
+ 8483 ms: user fim
+PPOS: task 2 (user) exit code 0,  8483 ms elapsed time,     1 ms cpu time,   193 activations
+PPOS: task 0 (kernel) exit code 0,  8483 ms elapsed time,  8482 ms cpu time,   578 activations
+PPOS: system stopping
+PPOS: disk driver stopped (128 blocks read, 64 blocks written)
+PPOS: system stopped (uptime 8483 ms)
diff --git a/ppos/test/pingpong-cache-on.c b/ppos/test/pingpong-cache-on.c
new file mode 100644 (file)
index 0000000..6f0e09d
--- /dev/null
@@ -0,0 +1,84 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste das operações de acesso ao disco com uma única tarefa,
+// que lê e escreve/altera blocos do disco COM CACHE.
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+    unsigned char *buffer;
+    int num_blk;     // numero de blocos no disco
+    int blk_size;    // tamanho de cada bloco (bytes)
+    int time_start;
+    int blk_inicio, blk_final;
+
+    printf("%5d ms: user: inicio\n", systime());
+
+    // busca geometria do disco
+    num_blk = block_blocks();
+    assert(num_blk);
+    blk_size = block_size();
+    assert(blk_size);
+
+    printf("%5d ms: disco contem %d blocos de %d bytes cada\n",
+           systime(), num_blk, blk_size);
+
+    // aloca o buffer para ler blocos do disco
+    buffer = mem_alloc(blk_size);
+    assert(buffer);
+
+    time_start = systime();
+
+    // escreve blocos
+    blk_inicio = 0;
+    blk_final  = num_blk / 4;
+    for (int i = blk_inicio; i < blk_final; i++)
+    {
+        printf("%5d ms: escreve bloco %d\n", systime(), i);
+        status = cache_write(i, buffer);
+        if (status)
+            printf("Erro ao escrever bloco %d!\n", i);
+    }
+
+    // lê blocos
+    blk_inicio += num_blk / 8;
+    blk_final  += num_blk / 8;
+    for (int i = blk_inicio; i < blk_final; i++)
+    {
+        printf("%5d ms: lendo bloco %d\n", systime(), i);
+        status = cache_read(i, buffer);
+        if (status)
+            printf("Erro ao ler bloco %d!\n", i);
+    }
+
+    // lê blocos
+    blk_inicio += num_blk / 8;
+    blk_final  += num_blk / 8;
+    for (int i = blk_inicio; i < blk_final; i++)
+    {
+        printf("%5d ms: lendo bloco %d\n", systime(), i);
+        status = cache_read(i, buffer);
+        if (status)
+            printf("Erro ao ler bloco %d!\n", i);
+    }
+
+    printf("As operações COM CACHE demoraram %d ms\n", systime() - time_start);
+
+    // libera o buffer de blocos do disco
+    mem_free(buffer);
+
+    printf("%5d ms: user fim\n", systime());
+
+    task_exit(0);
+}
+
diff --git a/ppos/test/pingpong-cache-on.txt b/ppos/test/pingpong-cache-on.txt
new file mode 100644 (file)
index 0000000..97be6f3
--- /dev/null
@@ -0,0 +1,204 @@
+PPOS: system starting
+PPOS: disk driver started (disk has 256 blocks of 64 bytes each)
+PPOS: system started (uptime 0 ms)
+    0 ms: user: inicio
+    0 ms: disco contem 256 blocos de 64 bytes cada
+    0 ms: escreve bloco 0
+   38 ms: escreve bloco 1
+   71 ms: escreve bloco 2
+  123 ms: escreve bloco 3
+  157 ms: escreve bloco 4
+  211 ms: escreve bloco 5
+  245 ms: escreve bloco 6
+  281 ms: escreve bloco 7
+  314 ms: escreve bloco 8
+  370 ms: escreve bloco 9
+  411 ms: escreve bloco 10
+  464 ms: escreve bloco 11
+  520 ms: escreve bloco 12
+  566 ms: escreve bloco 13
+  615 ms: escreve bloco 14
+  658 ms: escreve bloco 15
+  706 ms: escreve bloco 16
+  744 ms: escreve bloco 17
+  797 ms: escreve bloco 18
+  834 ms: escreve bloco 19
+  888 ms: escreve bloco 20
+  945 ms: escreve bloco 21
+  995 ms: escreve bloco 22
+ 1053 ms: escreve bloco 23
+ 1109 ms: escreve bloco 24
+ 1156 ms: escreve bloco 25
+ 1205 ms: escreve bloco 26
+ 1261 ms: escreve bloco 27
+ 1303 ms: escreve bloco 28
+ 1338 ms: escreve bloco 29
+ 1384 ms: escreve bloco 30
+ 1421 ms: escreve bloco 31
+ 1460 ms: escreve bloco 32
+ 1508 ms: escreve bloco 33
+ 1562 ms: escreve bloco 34
+ 1600 ms: escreve bloco 35
+ 1637 ms: escreve bloco 36
+ 1694 ms: escreve bloco 37
+ 1737 ms: escreve bloco 38
+ 1772 ms: escreve bloco 39
+ 1828 ms: escreve bloco 40
+ 1875 ms: escreve bloco 41
+ 1932 ms: escreve bloco 42
+ 1981 ms: escreve bloco 43
+ 2015 ms: escreve bloco 44
+ 2057 ms: escreve bloco 45
+ 2113 ms: escreve bloco 46
+ 2160 ms: escreve bloco 47
+ 2208 ms: escreve bloco 48
+ 2255 ms: escreve bloco 49
+ 2308 ms: escreve bloco 50
+ 2348 ms: escreve bloco 51
+ 2393 ms: escreve bloco 52
+ 2434 ms: escreve bloco 53
+ 2474 ms: escreve bloco 54
+ 2517 ms: escreve bloco 55
+ 2573 ms: escreve bloco 56
+ 2626 ms: escreve bloco 57
+ 2664 ms: escreve bloco 58
+ 2703 ms: escreve bloco 59
+ 2756 ms: escreve bloco 60
+ 2808 ms: escreve bloco 61
+ 2853 ms: escreve bloco 62
+ 2887 ms: escreve bloco 63
+ 2928 ms: lendo bloco 32
+ 2928 ms: lendo bloco 33
+ 2928 ms: lendo bloco 34
+ 2928 ms: lendo bloco 35
+ 2928 ms: lendo bloco 36
+ 2928 ms: lendo bloco 37
+ 2928 ms: lendo bloco 38
+ 2928 ms: lendo bloco 39
+ 2928 ms: lendo bloco 40
+ 2928 ms: lendo bloco 41
+ 2928 ms: lendo bloco 42
+ 2928 ms: lendo bloco 43
+ 2928 ms: lendo bloco 44
+ 2928 ms: lendo bloco 45
+ 2928 ms: lendo bloco 46
+ 2928 ms: lendo bloco 47
+ 2928 ms: lendo bloco 48
+ 2928 ms: lendo bloco 49
+ 2928 ms: lendo bloco 50
+ 2928 ms: lendo bloco 51
+ 2928 ms: lendo bloco 52
+ 2928 ms: lendo bloco 53
+ 2928 ms: lendo bloco 54
+ 2928 ms: lendo bloco 55
+ 2928 ms: lendo bloco 56
+ 2928 ms: lendo bloco 57
+ 2928 ms: lendo bloco 58
+ 2928 ms: lendo bloco 59
+ 2928 ms: lendo bloco 60
+ 2928 ms: lendo bloco 61
+ 2928 ms: lendo bloco 62
+ 2928 ms: lendo bloco 63
+ 2928 ms: lendo bloco 64
+ 2964 ms: lendo bloco 65
+ 2998 ms: lendo bloco 66
+ 3039 ms: lendo bloco 67
+ 3073 ms: lendo bloco 68
+ 3114 ms: lendo bloco 69
+ 3158 ms: lendo bloco 70
+ 3213 ms: lendo bloco 71
+ 3266 ms: lendo bloco 72
+ 3304 ms: lendo bloco 73
+ 3348 ms: lendo bloco 74
+ 3404 ms: lendo bloco 75
+ 3452 ms: lendo bloco 76
+ 3490 ms: lendo bloco 77
+ 3531 ms: lendo bloco 78
+ 3566 ms: lendo bloco 79
+ 3620 ms: lendo bloco 80
+ 3651 ms: lendo bloco 81
+ 3689 ms: lendo bloco 82
+ 3730 ms: lendo bloco 83
+ 3770 ms: lendo bloco 84
+ 3816 ms: lendo bloco 85
+ 3864 ms: lendo bloco 86
+ 3898 ms: lendo bloco 87
+ 3940 ms: lendo bloco 88
+ 3993 ms: lendo bloco 89
+ 4034 ms: lendo bloco 90
+ 4069 ms: lendo bloco 91
+ 4115 ms: lendo bloco 92
+ 4166 ms: lendo bloco 93
+ 4198 ms: lendo bloco 94
+ 4248 ms: lendo bloco 95
+ 4305 ms: lendo bloco 64
+ 4305 ms: lendo bloco 65
+ 4305 ms: lendo bloco 66
+ 4305 ms: lendo bloco 67
+ 4305 ms: lendo bloco 68
+ 4305 ms: lendo bloco 69
+ 4305 ms: lendo bloco 70
+ 4306 ms: lendo bloco 71
+ 4306 ms: lendo bloco 72
+ 4306 ms: lendo bloco 73
+ 4306 ms: lendo bloco 74
+ 4306 ms: lendo bloco 75
+ 4306 ms: lendo bloco 76
+ 4306 ms: lendo bloco 77
+ 4306 ms: lendo bloco 78
+ 4306 ms: lendo bloco 79
+ 4306 ms: lendo bloco 80
+ 4306 ms: lendo bloco 81
+ 4306 ms: lendo bloco 82
+ 4306 ms: lendo bloco 83
+ 4306 ms: lendo bloco 84
+ 4306 ms: lendo bloco 85
+ 4306 ms: lendo bloco 86
+ 4306 ms: lendo bloco 87
+ 4306 ms: lendo bloco 88
+ 4306 ms: lendo bloco 89
+ 4306 ms: lendo bloco 90
+ 4306 ms: lendo bloco 91
+ 4306 ms: lendo bloco 92
+ 4306 ms: lendo bloco 93
+ 4306 ms: lendo bloco 94
+ 4306 ms: lendo bloco 95
+ 4306 ms: lendo bloco 96
+ 4338 ms: lendo bloco 97
+ 4372 ms: lendo bloco 98
+ 4429 ms: lendo bloco 99
+ 4471 ms: lendo bloco 100
+ 4516 ms: lendo bloco 101
+ 4566 ms: lendo bloco 102
+ 4604 ms: lendo bloco 103
+ 4655 ms: lendo bloco 104
+ 4687 ms: lendo bloco 105
+ 4721 ms: lendo bloco 106
+ 4759 ms: lendo bloco 107
+ 4799 ms: lendo bloco 108
+ 4838 ms: lendo bloco 109
+ 4876 ms: lendo bloco 110
+ 4912 ms: lendo bloco 111
+ 4948 ms: lendo bloco 112
+ 4994 ms: lendo bloco 113
+ 5036 ms: lendo bloco 114
+ 5078 ms: lendo bloco 115
+ 5109 ms: lendo bloco 116
+ 5142 ms: lendo bloco 117
+ 5187 ms: lendo bloco 118
+ 5224 ms: lendo bloco 119
+ 5278 ms: lendo bloco 120
+ 5331 ms: lendo bloco 121
+ 5368 ms: lendo bloco 122
+ 5407 ms: lendo bloco 123
+ 5454 ms: lendo bloco 124
+ 5493 ms: lendo bloco 125
+ 5525 ms: lendo bloco 126
+ 5567 ms: lendo bloco 127
+As operações COM CACHE demoraram 5604 ms
+ 5604 ms: user fim
+PPOS: task 2 (user) exit code 0,  5604 ms elapsed time,     1 ms cpu time,   129 activations
+PPOS: task 0 (kernel) exit code 0,  5604 ms elapsed time,  5602 ms cpu time,   386 activations
+PPOS: system stopping
+PPOS: disk driver stopped (64 blocks read, 64 blocks written)
+PPOS: system stopped (uptime 5604 ms)
diff --git a/ppos/test/pingpong-contab-prio.c b/ppos/test/pingpong-contab-prio.c
new file mode 100644 (file)
index 0000000..b9e551f
--- /dev/null
@@ -0,0 +1,66 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da contabilização com tarefas de prioridades distintas
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define WORKLOAD 40000
+
+static struct task_t *pang, *peng, *ping, *pong, *pung;
+
+// simula um processamento pesado
+int hardwork(int n)
+{
+    int soma = 0;
+
+    for (int i = 0; i < n; i++)
+        for (int j = 0; j < n; j++)
+            soma += j;
+    return (soma);
+}
+
+// corpo das tarefas
+void body(void *arg)
+{
+    printf("%5d ms: %s inicia (prio: %d)\n", systime(),
+           (char *)arg, sched_getprio(NULL));
+    hardwork(WORKLOAD);
+    printf("%5d ms: %s termina\n", systime(), (char *)arg);
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    printf("user: inicio\n");
+
+    // cria tarefas
+    pang = task_create("pang", body, "\tPang");
+    assert(pang);
+    peng = task_create("peng", body, "\t\tPeng");
+    assert(peng);
+    ping = task_create("ping", body, "\t\t\tPing");
+    assert(ping);
+    pong = task_create("pong", body, "\t\t\t\tPong");
+    assert(pong);
+    pung = task_create("pung", body, "\t\t\t\t\tPung");
+    assert(pung);
+
+    // ajusta prioridades
+    sched_setprio(pang, 0);
+    sched_setprio(peng, -2);
+    sched_setprio(ping, -4);
+    sched_setprio(pong, -6);
+    sched_setprio(pung, -8);
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-contab-prio.txt b/ppos/test/pingpong-contab-prio.txt
new file mode 100644 (file)
index 0000000..277efc5
--- /dev/null
@@ -0,0 +1,23 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+user: fim
+PPOS: task 1 (user) exit code 0,     0 ms elapsed time,     0 ms cpu time,     1 activations
+    0 ms:                                      Pung inicia (prio: -8)
+   20 ms:                              Pong inicia (prio: -6)
+   40 ms:                      Ping inicia (prio: -4)
+   70 ms:              Peng inicia (prio: -2)
+   90 ms:      Pang inicia (prio: 0)
+23585 ms:                                      Pung termina
+PPOS: task 6 (pung) exit code 0, 23585 ms elapsed time,  9185 ms cpu time,   919 activations
+32220 ms:                              Pong termina
+PPOS: task 5 (pong) exit code 0, 32220 ms elapsed time,  9195 ms cpu time,   920 activations
+37938 ms:                      Ping termina
+PPOS: task 4 (ping) exit code 0, 37938 ms elapsed time,  9208 ms cpu time,   921 activations
+43393 ms:              Peng termina
+PPOS: task 3 (peng) exit code 0, 43393 ms elapsed time,  9255 ms cpu time,   926 activations
+46090 ms:      Pang termina
+PPOS: task 2 (pang) exit code 0, 46090 ms elapsed time,  9247 ms cpu time,   925 activations
+PPOS: task 0 (kernel) exit code 0, 46090 ms elapsed time,     0 ms cpu time,  4613 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 46090 ms)
diff --git a/ppos/test/pingpong-contab-stress.c b/ppos/test/pingpong-contab-stress.c
new file mode 100644 (file)
index 0000000..f9fc4e8
--- /dev/null
@@ -0,0 +1,54 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da contabilização com muitas tarefas (stress)
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define WORKLOAD 5000
+#define NUMTASKS 512
+
+static struct task_t *task[NUMTASKS];
+
+// simula um processamento pesado
+int hardwork(int n)
+{
+    int soma = 0;
+
+    for (int i = 0; i < n; i++)
+        for (int j = 0; j < n; j++)
+            soma += j;
+    return (soma);
+}
+
+// corpo das tarefas
+void body()
+{
+    for (int i = 0; i < 3; i++)
+        hardwork(WORKLOAD);
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    printf("user: inicio\n");
+
+    // cria tarefas
+    printf("Creating %d tasks\n", NUMTASKS);
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        task[i] = task_create(NULL, body, NULL);
+        assert(task[i]);
+    }
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-contab-stress.txt b/ppos/test/pingpong-contab-stress.txt
new file mode 100644 (file)
index 0000000..c7614e3
--- /dev/null
@@ -0,0 +1,521 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+Creating 512 tasks
+user: fim
+PPOS: task 1 (user) exit code 0,     1 ms elapsed time,     1 ms cpu time,     1 activations
+PPOS: task 366 ((null)) exit code 0, 203322 ms elapsed time,   392 ms cpu time,    40 activations
+PPOS: task 367 ((null)) exit code 0, 203331 ms elapsed time,   399 ms cpu time,    40 activations
+PPOS: task 18 ((null)) exit code 0, 204961 ms elapsed time,   409 ms cpu time,    41 activations
+PPOS: task 19 ((null)) exit code 0, 204967 ms elapsed time,   406 ms cpu time,    41 activations
+PPOS: task 223 ((null)) exit code 0, 207003 ms elapsed time,   406 ms cpu time,    41 activations
+PPOS: task 224 ((null)) exit code 0, 207009 ms elapsed time,   406 ms cpu time,    41 activations
+PPOS: task 358 ((null)) exit code 0, 208342 ms elapsed time,   404 ms cpu time,    41 activations
+PPOS: task 376 ((null)) exit code 0, 208499 ms elapsed time,   407 ms cpu time,    41 activations
+PPOS: task 377 ((null)) exit code 0, 208507 ms elapsed time,   408 ms cpu time,    41 activations
+PPOS: task 379 ((null)) exit code 0, 208523 ms elapsed time,   406 ms cpu time,    41 activations
+PPOS: task 380 ((null)) exit code 0, 208531 ms elapsed time,   408 ms cpu time,    41 activations
+PPOS: task 383 ((null)) exit code 0, 208558 ms elapsed time,   407 ms cpu time,    41 activations
+PPOS: task 8 ((null)) exit code 0, 209925 ms elapsed time,   416 ms cpu time,    42 activations
+PPOS: task 9 ((null)) exit code 0, 209932 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 10 ((null)) exit code 0, 209939 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 17 ((null)) exit code 0, 210006 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 20 ((null)) exit code 0, 210007 ms elapsed time,   411 ms cpu time,    42 activations
+PPOS: task 21 ((null)) exit code 0, 210010 ms elapsed time,   412 ms cpu time,    42 activations
+PPOS: task 33 ((null)) exit code 0, 210129 ms elapsed time,   419 ms cpu time,    42 activations
+PPOS: task 57 ((null)) exit code 0, 210368 ms elapsed time,   419 ms cpu time,    42 activations
+PPOS: task 74 ((null)) exit code 0, 210537 ms elapsed time,   419 ms cpu time,    42 activations
+PPOS: task 75 ((null)) exit code 0, 210544 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 148 ((null)) exit code 0, 211271 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 149 ((null)) exit code 0, 211279 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 150 ((null)) exit code 0, 211286 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 151 ((null)) exit code 0, 211295 ms elapsed time,   419 ms cpu time,    42 activations
+PPOS: task 158 ((null)) exit code 0, 211364 ms elapsed time,   419 ms cpu time,    42 activations
+PPOS: task 159 ((null)) exit code 0, 211371 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 160 ((null)) exit code 0, 211379 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 161 ((null)) exit code 0, 211386 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 162 ((null)) exit code 0, 211392 ms elapsed time,   416 ms cpu time,    42 activations
+PPOS: task 163 ((null)) exit code 0, 211399 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 220 ((null)) exit code 0, 211966 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 221 ((null)) exit code 0, 211973 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 222 ((null)) exit code 0, 211977 ms elapsed time,   414 ms cpu time,    42 activations
+PPOS: task 225 ((null)) exit code 0, 211984 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 261 ((null)) exit code 0, 212343 ms elapsed time,   419 ms cpu time,    42 activations
+PPOS: task 276 ((null)) exit code 0, 212489 ms elapsed time,   416 ms cpu time,    42 activations
+PPOS: task 356 ((null)) exit code 0, 213286 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 357 ((null)) exit code 0, 213292 ms elapsed time,   416 ms cpu time,    42 activations
+PPOS: task 359 ((null)) exit code 0, 213299 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 361 ((null)) exit code 0, 213318 ms elapsed time,   419 ms cpu time,    42 activations
+PPOS: task 365 ((null)) exit code 0, 213353 ms elapsed time,   415 ms cpu time,    42 activations
+PPOS: task 368 ((null)) exit code 0, 213361 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 371 ((null)) exit code 0, 213389 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 375 ((null)) exit code 0, 213419 ms elapsed time,   410 ms cpu time,    42 activations
+PPOS: task 378 ((null)) exit code 0, 213425 ms elapsed time,   416 ms cpu time,    42 activations
+PPOS: task 381 ((null)) exit code 0, 213433 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 382 ((null)) exit code 0, 213440 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 390 ((null)) exit code 0, 213507 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 397 ((null)) exit code 0, 213574 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 398 ((null)) exit code 0, 213581 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 399 ((null)) exit code 0, 213588 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 400 ((null)) exit code 0, 213595 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 401 ((null)) exit code 0, 213603 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 402 ((null)) exit code 0, 213610 ms elapsed time,   416 ms cpu time,    42 activations
+PPOS: task 403 ((null)) exit code 0, 213618 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 404 ((null)) exit code 0, 213626 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 405 ((null)) exit code 0, 213633 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 406 ((null)) exit code 0, 213641 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 407 ((null)) exit code 0, 213648 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 408 ((null)) exit code 0, 213656 ms elapsed time,   418 ms cpu time,    42 activations
+PPOS: task 409 ((null)) exit code 0, 213663 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 410 ((null)) exit code 0, 213670 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 414 ((null)) exit code 0, 213702 ms elapsed time,   412 ms cpu time,    42 activations
+PPOS: task 415 ((null)) exit code 0, 213709 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 416 ((null)) exit code 0, 213716 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 417 ((null)) exit code 0, 213723 ms elapsed time,   417 ms cpu time,    42 activations
+PPOS: task 418 ((null)) exit code 0, 213729 ms elapsed time,   416 ms cpu time,    42 activations
+PPOS: task 419 ((null)) exit code 0, 213735 ms elapsed time,   416 ms cpu time,    42 activations
+PPOS: task 499 ((null)) exit code 0, 214534 ms elapsed time,   419 ms cpu time,    42 activations
+PPOS: task 6 ((null)) exit code 0, 214720 ms elapsed time,   425 ms cpu time,    43 activations
+PPOS: task 7 ((null)) exit code 0, 214725 ms elapsed time,   425 ms cpu time,    43 activations
+PPOS: task 11 ((null)) exit code 0, 214731 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 12 ((null)) exit code 0, 214737 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 13 ((null)) exit code 0, 214745 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 14 ((null)) exit code 0, 214752 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 15 ((null)) exit code 0, 214759 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 16 ((null)) exit code 0, 214766 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 22 ((null)) exit code 0, 214768 ms elapsed time,   422 ms cpu time,    43 activations
+PPOS: task 23 ((null)) exit code 0, 214775 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 24 ((null)) exit code 0, 214781 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 25 ((null)) exit code 0, 214789 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 26 ((null)) exit code 0, 214797 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 27 ((null)) exit code 0, 214805 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 28 ((null)) exit code 0, 214813 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 29 ((null)) exit code 0, 214820 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 30 ((null)) exit code 0, 214827 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 31 ((null)) exit code 0, 214835 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 32 ((null)) exit code 0, 214835 ms elapsed time,   420 ms cpu time,    43 activations
+PPOS: task 34 ((null)) exit code 0, 214843 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 35 ((null)) exit code 0, 214851 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 38 ((null)) exit code 0, 214878 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 39 ((null)) exit code 0, 214886 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 40 ((null)) exit code 0, 214893 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 41 ((null)) exit code 0, 214901 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 42 ((null)) exit code 0, 214909 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 43 ((null)) exit code 0, 214915 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 44 ((null)) exit code 0, 214923 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 45 ((null)) exit code 0, 214931 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 46 ((null)) exit code 0, 214938 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 47 ((null)) exit code 0, 214947 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 48 ((null)) exit code 0, 214954 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 50 ((null)) exit code 0, 214968 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 56 ((null)) exit code 0, 215018 ms elapsed time,   420 ms cpu time,    43 activations
+PPOS: task 58 ((null)) exit code 0, 215021 ms elapsed time,   423 ms cpu time,    43 activations
+PPOS: task 59 ((null)) exit code 0, 215027 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 60 ((null)) exit code 0, 215036 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 64 ((null)) exit code 0, 215073 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 65 ((null)) exit code 0, 215081 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 70 ((null)) exit code 0, 215128 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 71 ((null)) exit code 0, 215135 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 72 ((null)) exit code 0, 215142 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 73 ((null)) exit code 0, 215149 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 76 ((null)) exit code 0, 215155 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 77 ((null)) exit code 0, 215162 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 78 ((null)) exit code 0, 215170 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 81 ((null)) exit code 0, 215198 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 82 ((null)) exit code 0, 215205 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 90 ((null)) exit code 0, 215282 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 91 ((null)) exit code 0, 215290 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 92 ((null)) exit code 0, 215297 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 93 ((null)) exit code 0, 215305 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 99 ((null)) exit code 0, 215364 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 106 ((null)) exit code 0, 215433 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 107 ((null)) exit code 0, 215442 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 127 ((null)) exit code 0, 215640 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 128 ((null)) exit code 0, 215646 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 129 ((null)) exit code 0, 215654 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 130 ((null)) exit code 0, 215661 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 131 ((null)) exit code 0, 215668 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 132 ((null)) exit code 0, 215675 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 133 ((null)) exit code 0, 215683 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 134 ((null)) exit code 0, 215690 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 135 ((null)) exit code 0, 215697 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 136 ((null)) exit code 0, 215704 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 137 ((null)) exit code 0, 215711 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 138 ((null)) exit code 0, 215719 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 139 ((null)) exit code 0, 215726 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 140 ((null)) exit code 0, 215733 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 141 ((null)) exit code 0, 215741 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 142 ((null)) exit code 0, 215748 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 143 ((null)) exit code 0, 215756 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 144 ((null)) exit code 0, 215763 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 145 ((null)) exit code 0, 215767 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 146 ((null)) exit code 0, 215771 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 147 ((null)) exit code 0, 215771 ms elapsed time,   420 ms cpu time,    43 activations
+PPOS: task 152 ((null)) exit code 0, 215780 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 153 ((null)) exit code 0, 215787 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 154 ((null)) exit code 0, 215795 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 155 ((null)) exit code 0, 215802 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 156 ((null)) exit code 0, 215809 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 157 ((null)) exit code 0, 215816 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 164 ((null)) exit code 0, 215817 ms elapsed time,   421 ms cpu time,    43 activations
+PPOS: task 165 ((null)) exit code 0, 215824 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 166 ((null)) exit code 0, 215828 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 167 ((null)) exit code 0, 215835 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 168 ((null)) exit code 0, 215843 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 169 ((null)) exit code 0, 215850 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 170 ((null)) exit code 0, 215858 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 171 ((null)) exit code 0, 215865 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 172 ((null)) exit code 0, 215872 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 173 ((null)) exit code 0, 215880 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 174 ((null)) exit code 0, 215887 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 175 ((null)) exit code 0, 215894 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 176 ((null)) exit code 0, 215902 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 177 ((null)) exit code 0, 215909 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 178 ((null)) exit code 0, 215917 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 179 ((null)) exit code 0, 215924 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 180 ((null)) exit code 0, 215932 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 181 ((null)) exit code 0, 215940 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 182 ((null)) exit code 0, 215947 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 183 ((null)) exit code 0, 215954 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 184 ((null)) exit code 0, 215962 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 185 ((null)) exit code 0, 215970 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 186 ((null)) exit code 0, 215978 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 187 ((null)) exit code 0, 215985 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 188 ((null)) exit code 0, 215990 ms elapsed time,   425 ms cpu time,    43 activations
+PPOS: task 189 ((null)) exit code 0, 215997 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 190 ((null)) exit code 0, 216006 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 191 ((null)) exit code 0, 216014 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 192 ((null)) exit code 0, 216021 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 193 ((null)) exit code 0, 216028 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 194 ((null)) exit code 0, 216035 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 195 ((null)) exit code 0, 216043 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 196 ((null)) exit code 0, 216050 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 197 ((null)) exit code 0, 216057 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 198 ((null)) exit code 0, 216064 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 199 ((null)) exit code 0, 216071 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 200 ((null)) exit code 0, 216078 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 201 ((null)) exit code 0, 216085 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 202 ((null)) exit code 0, 216092 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 203 ((null)) exit code 0, 216099 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 204 ((null)) exit code 0, 216106 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 205 ((null)) exit code 0, 216113 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 206 ((null)) exit code 0, 216120 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 207 ((null)) exit code 0, 216127 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 208 ((null)) exit code 0, 216134 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 209 ((null)) exit code 0, 216141 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 210 ((null)) exit code 0, 216148 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 211 ((null)) exit code 0, 216156 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 212 ((null)) exit code 0, 216163 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 219 ((null)) exit code 0, 216225 ms elapsed time,   422 ms cpu time,    43 activations
+PPOS: task 226 ((null)) exit code 0, 216230 ms elapsed time,   425 ms cpu time,    43 activations
+PPOS: task 257 ((null)) exit code 0, 216538 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 260 ((null)) exit code 0, 216561 ms elapsed time,   423 ms cpu time,    43 activations
+PPOS: task 262 ((null)) exit code 0, 216565 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 263 ((null)) exit code 0, 216568 ms elapsed time,   423 ms cpu time,    43 activations
+PPOS: task 264 ((null)) exit code 0, 216572 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 265 ((null)) exit code 0, 216580 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 266 ((null)) exit code 0, 216587 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 267 ((null)) exit code 0, 216596 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 268 ((null)) exit code 0, 216604 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 269 ((null)) exit code 0, 216611 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 270 ((null)) exit code 0, 216619 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 271 ((null)) exit code 0, 216627 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 272 ((null)) exit code 0, 216635 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 273 ((null)) exit code 0, 216642 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 274 ((null)) exit code 0, 216649 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 275 ((null)) exit code 0, 216655 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 277 ((null)) exit code 0, 216662 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 278 ((null)) exit code 0, 216666 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 279 ((null)) exit code 0, 216670 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 280 ((null)) exit code 0, 216675 ms elapsed time,   425 ms cpu time,    43 activations
+PPOS: task 281 ((null)) exit code 0, 216679 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 282 ((null)) exit code 0, 216683 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 283 ((null)) exit code 0, 216688 ms elapsed time,   425 ms cpu time,    43 activations
+PPOS: task 284 ((null)) exit code 0, 216695 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 287 ((null)) exit code 0, 216723 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 288 ((null)) exit code 0, 216729 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 289 ((null)) exit code 0, 216734 ms elapsed time,   425 ms cpu time,    43 activations
+PPOS: task 290 ((null)) exit code 0, 216740 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 291 ((null)) exit code 0, 216748 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 292 ((null)) exit code 0, 216755 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 293 ((null)) exit code 0, 216763 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 294 ((null)) exit code 0, 216770 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 295 ((null)) exit code 0, 216777 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 296 ((null)) exit code 0, 216784 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 306 ((null)) exit code 0, 216881 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 307 ((null)) exit code 0, 216889 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 308 ((null)) exit code 0, 216897 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 309 ((null)) exit code 0, 216904 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 310 ((null)) exit code 0, 216912 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 311 ((null)) exit code 0, 216920 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 312 ((null)) exit code 0, 216929 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 313 ((null)) exit code 0, 216937 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 314 ((null)) exit code 0, 216945 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 315 ((null)) exit code 0, 216953 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 316 ((null)) exit code 0, 216960 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 317 ((null)) exit code 0, 216968 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 318 ((null)) exit code 0, 216975 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 319 ((null)) exit code 0, 216983 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 320 ((null)) exit code 0, 216987 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 321 ((null)) exit code 0, 216994 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 322 ((null)) exit code 0, 217002 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 323 ((null)) exit code 0, 217002 ms elapsed time,   420 ms cpu time,    43 activations
+PPOS: task 324 ((null)) exit code 0, 217011 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 325 ((null)) exit code 0, 217019 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 326 ((null)) exit code 0, 217027 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 341 ((null)) exit code 0, 217175 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 342 ((null)) exit code 0, 217183 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 343 ((null)) exit code 0, 217192 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 344 ((null)) exit code 0, 217199 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 345 ((null)) exit code 0, 217207 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 346 ((null)) exit code 0, 217215 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 347 ((null)) exit code 0, 217222 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 348 ((null)) exit code 0, 217230 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 349 ((null)) exit code 0, 217238 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 350 ((null)) exit code 0, 217245 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 351 ((null)) exit code 0, 217252 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 352 ((null)) exit code 0, 217259 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 353 ((null)) exit code 0, 217266 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 354 ((null)) exit code 0, 217273 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 355 ((null)) exit code 0, 217280 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 360 ((null)) exit code 0, 217281 ms elapsed time,   421 ms cpu time,    43 activations
+PPOS: task 362 ((null)) exit code 0, 217285 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 363 ((null)) exit code 0, 217293 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 364 ((null)) exit code 0, 217301 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 369 ((null)) exit code 0, 217305 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 370 ((null)) exit code 0, 217308 ms elapsed time,   423 ms cpu time,    43 activations
+PPOS: task 372 ((null)) exit code 0, 217313 ms elapsed time,   425 ms cpu time,    43 activations
+PPOS: task 373 ((null)) exit code 0, 217320 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 374 ((null)) exit code 0, 217328 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 384 ((null)) exit code 0, 217332 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 385 ((null)) exit code 0, 217340 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 386 ((null)) exit code 0, 217347 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 387 ((null)) exit code 0, 217353 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 388 ((null)) exit code 0, 217355 ms elapsed time,   422 ms cpu time,    43 activations
+PPOS: task 389 ((null)) exit code 0, 217357 ms elapsed time,   422 ms cpu time,    43 activations
+PPOS: task 391 ((null)) exit code 0, 217361 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 392 ((null)) exit code 0, 217369 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 393 ((null)) exit code 0, 217376 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 394 ((null)) exit code 0, 217384 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 395 ((null)) exit code 0, 217392 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 396 ((null)) exit code 0, 217400 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 411 ((null)) exit code 0, 217403 ms elapsed time,   423 ms cpu time,    43 activations
+PPOS: task 412 ((null)) exit code 0, 217411 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 413 ((null)) exit code 0, 217413 ms elapsed time,   422 ms cpu time,    43 activations
+PPOS: task 420 ((null)) exit code 0, 217419 ms elapsed time,   426 ms cpu time,    43 activations
+PPOS: task 421 ((null)) exit code 0, 217421 ms elapsed time,   422 ms cpu time,    43 activations
+PPOS: task 422 ((null)) exit code 0, 217429 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 423 ((null)) exit code 0, 217431 ms elapsed time,   422 ms cpu time,    43 activations
+PPOS: task 425 ((null)) exit code 0, 217449 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 426 ((null)) exit code 0, 217457 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 427 ((null)) exit code 0, 217465 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 428 ((null)) exit code 0, 217473 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 453 ((null)) exit code 0, 217720 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 454 ((null)) exit code 0, 217728 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 458 ((null)) exit code 0, 217767 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 492 ((null)) exit code 0, 218105 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 493 ((null)) exit code 0, 218114 ms elapsed time,   429 ms cpu time,    43 activations
+PPOS: task 498 ((null)) exit code 0, 218159 ms elapsed time,   425 ms cpu time,    43 activations
+PPOS: task 500 ((null)) exit code 0, 218163 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 501 ((null)) exit code 0, 218167 ms elapsed time,   424 ms cpu time,    43 activations
+PPOS: task 502 ((null)) exit code 0, 218175 ms elapsed time,   428 ms cpu time,    43 activations
+PPOS: task 503 ((null)) exit code 0, 218182 ms elapsed time,   427 ms cpu time,    43 activations
+PPOS: task 2 ((null)) exit code 0, 218291 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 3 ((null)) exit code 0, 218298 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 4 ((null)) exit code 0, 218305 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 5 ((null)) exit code 0, 218306 ms elapsed time,   431 ms cpu time,    44 activations
+PPOS: task 36 ((null)) exit code 0, 218315 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 37 ((null)) exit code 0, 218319 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 49 ((null)) exit code 0, 218321 ms elapsed time,   432 ms cpu time,    44 activations
+PPOS: task 51 ((null)) exit code 0, 218324 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 52 ((null)) exit code 0, 218331 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 53 ((null)) exit code 0, 218340 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 54 ((null)) exit code 0, 218347 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 55 ((null)) exit code 0, 218354 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 61 ((null)) exit code 0, 218357 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 62 ((null)) exit code 0, 218365 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 63 ((null)) exit code 0, 218368 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 66 ((null)) exit code 0, 218369 ms elapsed time,   431 ms cpu time,    44 activations
+PPOS: task 67 ((null)) exit code 0, 218375 ms elapsed time,   436 ms cpu time,    44 activations
+PPOS: task 68 ((null)) exit code 0, 218379 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 69 ((null)) exit code 0, 218381 ms elapsed time,   432 ms cpu time,    44 activations
+PPOS: task 79 ((null)) exit code 0, 218385 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 80 ((null)) exit code 0, 218389 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 83 ((null)) exit code 0, 218394 ms elapsed time,   435 ms cpu time,    44 activations
+PPOS: task 84 ((null)) exit code 0, 218402 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 85 ((null)) exit code 0, 218410 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 86 ((null)) exit code 0, 218418 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 87 ((null)) exit code 0, 218426 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 88 ((null)) exit code 0, 218434 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 89 ((null)) exit code 0, 218441 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 94 ((null)) exit code 0, 218442 ms elapsed time,   431 ms cpu time,    44 activations
+PPOS: task 95 ((null)) exit code 0, 218450 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 96 ((null)) exit code 0, 218455 ms elapsed time,   435 ms cpu time,    44 activations
+PPOS: task 97 ((null)) exit code 0, 218464 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 100 ((null)) exit code 0, 218474 ms elapsed time,   430 ms cpu time,    44 activations
+PPOS: task 101 ((null)) exit code 0, 218483 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 102 ((null)) exit code 0, 218491 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 103 ((null)) exit code 0, 218499 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 104 ((null)) exit code 0, 218507 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 105 ((null)) exit code 0, 218515 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 108 ((null)) exit code 0, 218524 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 109 ((null)) exit code 0, 218532 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 110 ((null)) exit code 0, 218539 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 111 ((null)) exit code 0, 218547 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 112 ((null)) exit code 0, 218554 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 113 ((null)) exit code 0, 218562 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 114 ((null)) exit code 0, 218569 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 115 ((null)) exit code 0, 218576 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 116 ((null)) exit code 0, 218584 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 117 ((null)) exit code 0, 218592 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 118 ((null)) exit code 0, 218598 ms elapsed time,   436 ms cpu time,    44 activations
+PPOS: task 119 ((null)) exit code 0, 218606 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 120 ((null)) exit code 0, 218614 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 121 ((null)) exit code 0, 218623 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 122 ((null)) exit code 0, 218630 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 123 ((null)) exit code 0, 218638 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 124 ((null)) exit code 0, 218646 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 125 ((null)) exit code 0, 218654 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 126 ((null)) exit code 0, 218657 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 213 ((null)) exit code 0, 218660 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 214 ((null)) exit code 0, 218667 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 215 ((null)) exit code 0, 218675 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 216 ((null)) exit code 0, 218682 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 217 ((null)) exit code 0, 218690 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 218 ((null)) exit code 0, 218693 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 227 ((null)) exit code 0, 218698 ms elapsed time,   435 ms cpu time,    44 activations
+PPOS: task 228 ((null)) exit code 0, 218705 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 229 ((null)) exit code 0, 218714 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 230 ((null)) exit code 0, 218721 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 231 ((null)) exit code 0, 218729 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 232 ((null)) exit code 0, 218737 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 233 ((null)) exit code 0, 218745 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 234 ((null)) exit code 0, 218749 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 235 ((null)) exit code 0, 218758 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 236 ((null)) exit code 0, 218765 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 237 ((null)) exit code 0, 218773 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 238 ((null)) exit code 0, 218780 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 240 ((null)) exit code 0, 218797 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 241 ((null)) exit code 0, 218805 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 242 ((null)) exit code 0, 218812 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 243 ((null)) exit code 0, 218820 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 244 ((null)) exit code 0, 218827 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 245 ((null)) exit code 0, 218836 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 246 ((null)) exit code 0, 218845 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 247 ((null)) exit code 0, 218845 ms elapsed time,   430 ms cpu time,    44 activations
+PPOS: task 248 ((null)) exit code 0, 218846 ms elapsed time,   431 ms cpu time,    44 activations
+PPOS: task 249 ((null)) exit code 0, 218854 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 250 ((null)) exit code 0, 218862 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 251 ((null)) exit code 0, 218871 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 252 ((null)) exit code 0, 218879 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 253 ((null)) exit code 0, 218887 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 254 ((null)) exit code 0, 218891 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 255 ((null)) exit code 0, 218899 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 256 ((null)) exit code 0, 218901 ms elapsed time,   432 ms cpu time,    44 activations
+PPOS: task 258 ((null)) exit code 0, 218904 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 259 ((null)) exit code 0, 218906 ms elapsed time,   432 ms cpu time,    44 activations
+PPOS: task 285 ((null)) exit code 0, 218914 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 286 ((null)) exit code 0, 218922 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 297 ((null)) exit code 0, 218929 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 298 ((null)) exit code 0, 218936 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 299 ((null)) exit code 0, 218944 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 300 ((null)) exit code 0, 218951 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 301 ((null)) exit code 0, 218960 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 302 ((null)) exit code 0, 218967 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 303 ((null)) exit code 0, 218972 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 304 ((null)) exit code 0, 218979 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 305 ((null)) exit code 0, 218985 ms elapsed time,   436 ms cpu time,    44 activations
+PPOS: task 327 ((null)) exit code 0, 218986 ms elapsed time,   431 ms cpu time,    44 activations
+PPOS: task 328 ((null)) exit code 0, 218986 ms elapsed time,   430 ms cpu time,    44 activations
+PPOS: task 329 ((null)) exit code 0, 218992 ms elapsed time,   436 ms cpu time,    44 activations
+PPOS: task 330 ((null)) exit code 0, 218996 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 331 ((null)) exit code 0, 219004 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 332 ((null)) exit code 0, 219012 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 333 ((null)) exit code 0, 219020 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 334 ((null)) exit code 0, 219029 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 335 ((null)) exit code 0, 219037 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 336 ((null)) exit code 0, 219044 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 337 ((null)) exit code 0, 219052 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 338 ((null)) exit code 0, 219060 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 339 ((null)) exit code 0, 219068 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 340 ((null)) exit code 0, 219072 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 424 ((null)) exit code 0, 219076 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 429 ((null)) exit code 0, 219085 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 430 ((null)) exit code 0, 219093 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 431 ((null)) exit code 0, 219101 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 432 ((null)) exit code 0, 219108 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 433 ((null)) exit code 0, 219115 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 434 ((null)) exit code 0, 219123 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 435 ((null)) exit code 0, 219131 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 436 ((null)) exit code 0, 219139 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 437 ((null)) exit code 0, 219147 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 438 ((null)) exit code 0, 219154 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 439 ((null)) exit code 0, 219162 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 440 ((null)) exit code 0, 219165 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 441 ((null)) exit code 0, 219173 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 442 ((null)) exit code 0, 219181 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 443 ((null)) exit code 0, 219189 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 444 ((null)) exit code 0, 219196 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 445 ((null)) exit code 0, 219204 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 446 ((null)) exit code 0, 219212 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 447 ((null)) exit code 0, 219220 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 448 ((null)) exit code 0, 219224 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 449 ((null)) exit code 0, 219232 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 450 ((null)) exit code 0, 219239 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 451 ((null)) exit code 0, 219248 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 452 ((null)) exit code 0, 219250 ms elapsed time,   432 ms cpu time,    44 activations
+PPOS: task 455 ((null)) exit code 0, 219254 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 456 ((null)) exit code 0, 219262 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 457 ((null)) exit code 0, 219267 ms elapsed time,   435 ms cpu time,    44 activations
+PPOS: task 459 ((null)) exit code 0, 219272 ms elapsed time,   435 ms cpu time,    44 activations
+PPOS: task 460 ((null)) exit code 0, 219276 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 461 ((null)) exit code 0, 219283 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 462 ((null)) exit code 0, 219291 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 463 ((null)) exit code 0, 219299 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 464 ((null)) exit code 0, 219307 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 465 ((null)) exit code 0, 219314 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 466 ((null)) exit code 0, 219321 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 467 ((null)) exit code 0, 219330 ms elapsed time,   439 ms cpu time,    44 activations
+PPOS: task 468 ((null)) exit code 0, 219337 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 469 ((null)) exit code 0, 219344 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 470 ((null)) exit code 0, 219352 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 471 ((null)) exit code 0, 219360 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 472 ((null)) exit code 0, 219368 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 473 ((null)) exit code 0, 219375 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 474 ((null)) exit code 0, 219383 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 475 ((null)) exit code 0, 219390 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 476 ((null)) exit code 0, 219397 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 477 ((null)) exit code 0, 219404 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 478 ((null)) exit code 0, 219411 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 479 ((null)) exit code 0, 219419 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 480 ((null)) exit code 0, 219426 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 481 ((null)) exit code 0, 219433 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 482 ((null)) exit code 0, 219440 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 483 ((null)) exit code 0, 219448 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 484 ((null)) exit code 0, 219450 ms elapsed time,   432 ms cpu time,    44 activations
+PPOS: task 485 ((null)) exit code 0, 219455 ms elapsed time,   435 ms cpu time,    44 activations
+PPOS: task 486 ((null)) exit code 0, 219462 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 487 ((null)) exit code 0, 219470 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 488 ((null)) exit code 0, 219477 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 489 ((null)) exit code 0, 219485 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 490 ((null)) exit code 0, 219492 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 491 ((null)) exit code 0, 219496 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 494 ((null)) exit code 0, 219498 ms elapsed time,   432 ms cpu time,    44 activations
+PPOS: task 495 ((null)) exit code 0, 219501 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 496 ((null)) exit code 0, 219502 ms elapsed time,   431 ms cpu time,    44 activations
+PPOS: task 497 ((null)) exit code 0, 219502 ms elapsed time,   430 ms cpu time,    44 activations
+PPOS: task 504 ((null)) exit code 0, 219506 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 505 ((null)) exit code 0, 219510 ms elapsed time,   434 ms cpu time,    44 activations
+PPOS: task 506 ((null)) exit code 0, 219517 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 507 ((null)) exit code 0, 219525 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 508 ((null)) exit code 0, 219533 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 509 ((null)) exit code 0, 219540 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 510 ((null)) exit code 0, 219547 ms elapsed time,   437 ms cpu time,    44 activations
+PPOS: task 511 ((null)) exit code 0, 219555 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 512 ((null)) exit code 0, 219558 ms elapsed time,   433 ms cpu time,    44 activations
+PPOS: task 513 ((null)) exit code 0, 219566 ms elapsed time,   438 ms cpu time,    44 activations
+PPOS: task 98 ((null)) exit code 0, 219568 ms elapsed time,   441 ms cpu time,    45 activations
+PPOS: task 239 ((null)) exit code 0, 219568 ms elapsed time,   440 ms cpu time,    45 activations
+PPOS: task 0 (kernel) exit code 0, 219568 ms elapsed time,     6 ms cpu time, 22131 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 219568 ms)
diff --git a/ppos/test/pingpong-contab.c b/ppos/test/pingpong-contab.c
new file mode 100644 (file)
index 0000000..9a21884
--- /dev/null
@@ -0,0 +1,58 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da contabilização com tarefas de prioridades iguais
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define WORKLOAD 40000
+
+static struct task_t *pang, *peng, *ping, *pong, *pung;
+
+// simula um processamento pesado
+int hardwork(int n)
+{
+    int soma = 0;
+
+    for (int i = 0; i < n; i++)
+        for (int j = 0; j < n; j++)
+            soma += j;
+    return (soma);
+}
+
+// corpo das tarefas
+void body(void *arg)
+{
+    printf("%5d ms: %s inicia\n", systime(), (char *)arg);
+    hardwork(WORKLOAD);
+    printf("%5d ms: %s termina\n", systime(), (char *)arg);
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    printf("user: inicio\n");
+
+    // cria tarefas
+    pang = task_create("pang", body, "\tPang");
+    assert(pang);
+    peng = task_create("peng", body, "\t\tPeng");
+    assert(peng);
+    ping = task_create("ping", body, "\t\t\tPing");
+    assert(ping);
+    pong = task_create("pong", body, "\t\t\t\tPong");
+    assert(pong);
+    pung = task_create("pung", body, "\t\t\t\t\tPung");
+    assert(pung);
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-contab.txt b/ppos/test/pingpong-contab.txt
new file mode 100644 (file)
index 0000000..73ea967
--- /dev/null
@@ -0,0 +1,23 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+user: fim
+PPOS: task 1 (user) exit code 0,     0 ms elapsed time,     0 ms cpu time,     1 activations
+    0 ms:      Pang inicia
+   10 ms:              Peng inicia
+   20 ms:                      Ping inicia
+   30 ms:                              Pong inicia
+   40 ms:                                      Pung inicia
+42562 ms:              Peng termina
+PPOS: task 3 (peng) exit code 0, 42562 ms elapsed time,  8512 ms cpu time,   852 activations
+42567 ms:                      Ping termina
+PPOS: task 4 (ping) exit code 0, 42567 ms elapsed time,  8515 ms cpu time,   852 activations
+42689 ms:                              Pong termina
+PPOS: task 5 (pong) exit code 0, 42689 ms elapsed time,  8552 ms cpu time,   856 activations
+42752 ms:                                      Pung termina
+PPOS: task 6 (pung) exit code 0, 42752 ms elapsed time,  8583 ms cpu time,   859 activations
+42757 ms:      Pang termina
+PPOS: task 2 (pang) exit code 0, 42757 ms elapsed time,  8595 ms cpu time,   860 activations
+PPOS: task 0 (kernel) exit code 0, 42757 ms elapsed time,     0 ms cpu time,  4281 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 42757 ms)
diff --git a/ppos/test/pingpong-disco-stress.c b/ppos/test/pingpong-disco-stress.c
new file mode 100644 (file)
index 0000000..8c7f706
--- /dev/null
@@ -0,0 +1,148 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste das operações de acesso a disco com múltiplas tarefas
+// fazendo operações de leitura e escrita simultâneas.
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define NUMTASKS 8
+
+// tarefas
+static struct task_t *mover[NUMTASKS]; // tarefas movedoras de blocos
+static int num_blk;                    // numero de blocos no disco
+static int blk_size;                   // tamanho de cada bloco (bytes)
+
+// lê um bloco do disco
+void le_bloco(int task, int block, char *buffer)
+{
+    int status;
+
+    printf("%5d ms: T%-2d lendo bloco %3d\n", systime(), task, block);
+    status = block_read(block, buffer);
+    if (status == 0)
+        printf("%5d ms: T%-2d leu   bloco %3d\n", systime(), task, block);
+    else
+        printf("%5d ms: T%-2d erro ao ler bloco %3d\n", systime(), task, block);
+}
+
+// escreve um bloco no disco
+void escreve_bloco(int task, int block, char *buffer)
+{
+    int status;
+
+    printf("%5d ms: T%-2d escrevendo bloco %3d\n", systime(), task, block);
+    status = block_write(block, buffer);
+    if (status == 0)
+        printf("%5d ms: T%-2d escreveu   bloco %3d\n", systime(), task, block);
+    else
+        printf("%5d ms: T%-2d erro ao escrever bloco %3d\n",
+               systime(), task, block);
+}
+
+// mostra o conteudo do bloco
+void mostra_bloco(int task, int block, char *buffer)
+{
+    printf("%5d ms: T%-2d bloco %3d tem: [", systime(), task, block);
+    for (int j = 0; j < blk_size; j++)
+        printf("%c", buffer[j]);
+    printf("]\n");
+}
+
+// corpo das tarefas "mover"
+void body(void *arg)
+{
+    int my_id, blk_orig, blk_dest;
+    int tid, blk_per_task;
+    char *buf1, *buf2;
+
+    tid = task_id(NULL);
+    blk_per_task = (num_blk / NUMTASKS / 2);
+
+    // aloca espaço para os buffers
+    buf1 = mem_alloc(blk_size);
+    assert(buf1);
+    buf2 = mem_alloc(blk_size);
+    assert(buf2);
+
+    // define os blocos iniciais
+    my_id = (long)arg;
+    blk_orig = my_id * blk_per_task;
+    blk_dest = num_blk - 1 - (my_id * blk_per_task);
+
+    printf("%5d ms: T%-2d movendo %2d blocos entre blocos %3d e %3d\n",
+           systime(), tid, blk_per_task, blk_orig, blk_dest);
+
+    // move blk_per_task blocos
+    for (int i = 0; i < blk_per_task; i++)
+    {
+        // lê dois blocos do disco
+        le_bloco(tid, blk_orig, buf1);
+        le_bloco(tid, blk_dest, buf2);
+
+        // mostra o conteudo dos blocos
+        mostra_bloco(tid, blk_orig, buf1);
+        mostra_bloco(tid, blk_dest, buf2);
+
+        // escreve os blocos trocados no disco
+        escreve_bloco(tid, blk_dest, buf1);
+        escreve_bloco(tid, blk_orig, buf2);
+
+        // define os próximos blocos
+        blk_orig++;
+        blk_dest--;
+    }
+    printf("%5d ms: T%-2d terminou\n", systime(), tid);
+
+    mem_free(buf1);
+    mem_free(buf2);
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+
+    printf("user: inicio\n");
+
+    // busca geometria do disco
+    num_blk = block_blocks();
+    assert(num_blk);
+    blk_size = block_size();
+    assert(blk_size);
+
+    printf("%5d ms: disco contem %d blocos de %d bytes cada\n",
+           systime(), num_blk, blk_size);
+
+    // cria as tarefas
+    for (long i = 0; i < NUMTASKS; i++)
+    {
+        mover[i] = task_create(NULL, body, (void *)i);
+        assert(mover[i]);
+    }
+
+    // aguarda as tarefas encerrarem
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        status = task_wait(mover[i]);
+        assert(status == NOERROR);
+    }
+
+    // destroi os descritores
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        status = task_destroy(mover[i]);
+        assert(status == NOERROR);
+    }
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-disco-stress.txt b/ppos/test/pingpong-disco-stress.txt
new file mode 100644 (file)
index 0000000..6a2650f
--- /dev/null
@@ -0,0 +1,1314 @@
+PPOS: system starting
+PPOS: disk driver started (disk has 256 blocks of 64 bytes each)
+PPOS: system started (uptime 0 ms)
+user: inicio
+    0 ms: disco contem 256 blocos de 64 bytes cada
+    0 ms: T3  movendo 16 blocos entre blocos   0 e 255
+    0 ms: T3  lendo bloco   0
+    0 ms: T4  movendo 16 blocos entre blocos  16 e 239
+    0 ms: T4  lendo bloco  16
+    0 ms: T5  movendo 16 blocos entre blocos  32 e 223
+    0 ms: T5  lendo bloco  32
+    0 ms: T6  movendo 16 blocos entre blocos  48 e 207
+    0 ms: T6  lendo bloco  48
+    0 ms: T7  movendo 16 blocos entre blocos  64 e 191
+    0 ms: T7  lendo bloco  64
+    0 ms: T8  movendo 16 blocos entre blocos  80 e 175
+    0 ms: T8  lendo bloco  80
+    0 ms: T9  movendo 16 blocos entre blocos  96 e 159
+    0 ms: T9  lendo bloco  96
+    0 ms: T10 movendo 16 blocos entre blocos 112 e 143
+    0 ms: T10 lendo bloco 112
+   37 ms: T3  leu   bloco   0
+   37 ms: T3  lendo bloco 255
+   84 ms: T4  leu   bloco  16
+   84 ms: T4  lendo bloco 239
+  150 ms: T5  leu   bloco  32
+  150 ms: T5  lendo bloco 223
+  198 ms: T6  leu   bloco  48
+  198 ms: T6  lendo bloco 207
+  264 ms: T7  leu   bloco  64
+  264 ms: T7  lendo bloco 191
+  313 ms: T8  leu   bloco  80
+  313 ms: T8  lendo bloco 175
+  363 ms: T9  leu   bloco  96
+  363 ms: T9  lendo bloco 159
+  410 ms: T10 leu   bloco 112
+  410 ms: T10 lendo bloco 143
+  614 ms: T3  leu   bloco 255
+  614 ms: T3  bloco   0 tem: [<--bloco 0000-------------------------------------------------->]
+  614 ms: T3  bloco 255 tem: [<--bloco 0255-------------------------------------------------->]
+  614 ms: T3  escrevendo bloco 255
+  670 ms: T4  leu   bloco 239
+  670 ms: T4  bloco  16 tem: [<--bloco 0016-------------------------------------------------->]
+  670 ms: T4  bloco 239 tem: [<--bloco 0239-------------------------------------------------->]
+  670 ms: T4  escrevendo bloco 239
+  737 ms: T5  leu   bloco 223
+  737 ms: T5  bloco  32 tem: [<--bloco 0032-------------------------------------------------->]
+  737 ms: T5  bloco 223 tem: [<--bloco 0223-------------------------------------------------->]
+  737 ms: T5  escrevendo bloco 223
+  807 ms: T6  leu   bloco 207
+  807 ms: T6  bloco  48 tem: [<--bloco 0048-------------------------------------------------->]
+  807 ms: T6  bloco 207 tem: [<--bloco 0207-------------------------------------------------->]
+  807 ms: T6  escrevendo bloco 207
+  867 ms: T7  leu   bloco 191
+  867 ms: T7  bloco  64 tem: [<--bloco 0064-------------------------------------------------->]
+  867 ms: T7  bloco 191 tem: [<--bloco 0191-------------------------------------------------->]
+  867 ms: T7  escrevendo bloco 191
+  929 ms: T8  leu   bloco 175
+  929 ms: T8  bloco  80 tem: [<--bloco 0080-------------------------------------------------->]
+  929 ms: T8  bloco 175 tem: [<--bloco 0175-------------------------------------------------->]
+  929 ms: T8  escrevendo bloco 175
+  986 ms: T9  leu   bloco 159
+  986 ms: T9  bloco  96 tem: [<--bloco 0096-------------------------------------------------->]
+  986 ms: T9  bloco 159 tem: [<--bloco 0159-------------------------------------------------->]
+  986 ms: T9  escrevendo bloco 159
+ 1048 ms: T10 leu   bloco 143
+ 1048 ms: T10 bloco 112 tem: [<--bloco 0112-------------------------------------------------->]
+ 1048 ms: T10 bloco 143 tem: [<--bloco 0143-------------------------------------------------->]
+ 1048 ms: T10 escrevendo bloco 143
+ 1203 ms: T3  escreveu   bloco 255
+ 1203 ms: T3  escrevendo bloco   0
+ 1271 ms: T4  escreveu   bloco 239
+ 1271 ms: T4  escrevendo bloco  16
+ 1323 ms: T5  escreveu   bloco 223
+ 1323 ms: T5  escrevendo bloco  32
+ 1392 ms: T6  escreveu   bloco 207
+ 1392 ms: T6  escrevendo bloco  48
+ 1464 ms: T7  escreveu   bloco 191
+ 1464 ms: T7  escrevendo bloco  64
+ 1529 ms: T8  escreveu   bloco 175
+ 1529 ms: T8  escrevendo bloco  80
+ 1602 ms: T9  escreveu   bloco 159
+ 1602 ms: T9  escrevendo bloco  96
+ 1673 ms: T10 escreveu   bloco 143
+ 1673 ms: T10 escrevendo bloco 112
+ 1869 ms: T3  escreveu   bloco   0
+ 1869 ms: T3  lendo bloco   1
+ 1933 ms: T4  escreveu   bloco  16
+ 1933 ms: T4  lendo bloco  17
+ 2004 ms: T5  escreveu   bloco  32
+ 2004 ms: T5  lendo bloco  33
+ 2061 ms: T6  escreveu   bloco  48
+ 2061 ms: T6  lendo bloco  49
+ 2112 ms: T7  escreveu   bloco  64
+ 2112 ms: T7  lendo bloco  65
+ 2173 ms: T8  escreveu   bloco  80
+ 2173 ms: T8  lendo bloco  81
+ 2226 ms: T9  escreveu   bloco  96
+ 2226 ms: T9  lendo bloco  97
+ 2280 ms: T10 escreveu   bloco 112
+ 2280 ms: T10 lendo bloco 113
+ 2444 ms: T3  leu   bloco   1
+ 2444 ms: T3  lendo bloco 254
+ 2512 ms: T4  leu   bloco  17
+ 2512 ms: T4  lendo bloco 238
+ 2563 ms: T5  leu   bloco  33
+ 2563 ms: T5  lendo bloco 222
+ 2614 ms: T6  leu   bloco  49
+ 2614 ms: T6  lendo bloco 206
+ 2685 ms: T7  leu   bloco  65
+ 2685 ms: T7  lendo bloco 190
+ 2741 ms: T8  leu   bloco  81
+ 2741 ms: T8  lendo bloco 174
+ 2790 ms: T9  leu   bloco  97
+ 2790 ms: T9  lendo bloco 158
+ 2859 ms: T10 leu   bloco 113
+ 2859 ms: T10 lendo bloco 142
+ 3052 ms: T3  leu   bloco 254
+ 3052 ms: T3  bloco   1 tem: [<--bloco 0001-------------------------------------------------->]
+ 3052 ms: T3  bloco 254 tem: [<--bloco 0254-------------------------------------------------->]
+ 3052 ms: T3  escrevendo bloco 254
+ 3121 ms: T4  leu   bloco 238
+ 3121 ms: T4  bloco  17 tem: [<--bloco 0017-------------------------------------------------->]
+ 3121 ms: T4  bloco 238 tem: [<--bloco 0238-------------------------------------------------->]
+ 3121 ms: T4  escrevendo bloco 238
+ 3185 ms: T5  leu   bloco 222
+ 3185 ms: T5  bloco  33 tem: [<--bloco 0033-------------------------------------------------->]
+ 3185 ms: T5  bloco 222 tem: [<--bloco 0222-------------------------------------------------->]
+ 3185 ms: T5  escrevendo bloco 222
+ 3233 ms: T6  leu   bloco 206
+ 3233 ms: T6  bloco  49 tem: [<--bloco 0049-------------------------------------------------->]
+ 3233 ms: T6  bloco 206 tem: [<--bloco 0206-------------------------------------------------->]
+ 3233 ms: T6  escrevendo bloco 206
+ 3289 ms: T7  leu   bloco 190
+ 3289 ms: T7  bloco  65 tem: [<--bloco 0065-------------------------------------------------->]
+ 3289 ms: T7  bloco 190 tem: [<--bloco 0190-------------------------------------------------->]
+ 3289 ms: T7  escrevendo bloco 190
+ 3359 ms: T8  leu   bloco 174
+ 3359 ms: T8  bloco  81 tem: [<--bloco 0081-------------------------------------------------->]
+ 3359 ms: T8  bloco 174 tem: [<--bloco 0174-------------------------------------------------->]
+ 3359 ms: T8  escrevendo bloco 174
+ 3420 ms: T9  leu   bloco 158
+ 3420 ms: T9  bloco  97 tem: [<--bloco 0097-------------------------------------------------->]
+ 3420 ms: T9  bloco 158 tem: [<--bloco 0158-------------------------------------------------->]
+ 3420 ms: T9  escrevendo bloco 158
+ 3482 ms: T10 leu   bloco 142
+ 3483 ms: T10 bloco 113 tem: [<--bloco 0113-------------------------------------------------->]
+ 3483 ms: T10 bloco 142 tem: [<--bloco 0142-------------------------------------------------->]
+ 3483 ms: T10 escrevendo bloco 142
+ 3647 ms: T3  escreveu   bloco 254
+ 3647 ms: T3  escrevendo bloco   1
+ 3715 ms: T4  escreveu   bloco 238
+ 3715 ms: T4  escrevendo bloco  17
+ 3770 ms: T5  escreveu   bloco 222
+ 3770 ms: T5  escrevendo bloco  33
+ 3830 ms: T6  escreveu   bloco 206
+ 3830 ms: T6  escrevendo bloco  49
+ 3887 ms: T7  escreveu   bloco 190
+ 3887 ms: T7  escrevendo bloco  65
+ 3942 ms: T8  escreveu   bloco 174
+ 3942 ms: T8  escrevendo bloco  81
+ 4001 ms: T9  escreveu   bloco 158
+ 4001 ms: T9  escrevendo bloco  97
+ 4072 ms: T10 escreveu   bloco 142
+ 4072 ms: T10 escrevendo bloco 113
+ 4272 ms: T3  escreveu   bloco   1
+ 4272 ms: T3  lendo bloco   2
+ 4324 ms: T4  escreveu   bloco  17
+ 4324 ms: T4  lendo bloco  18
+ 4378 ms: T5  escreveu   bloco  33
+ 4378 ms: T5  lendo bloco  34
+ 4446 ms: T6  escreveu   bloco  49
+ 4446 ms: T6  lendo bloco  50
+ 4512 ms: T7  escreveu   bloco  65
+ 4512 ms: T7  lendo bloco  66
+ 4573 ms: T8  escreveu   bloco  81
+ 4573 ms: T8  lendo bloco  82
+ 4621 ms: T9  escreveu   bloco  97
+ 4621 ms: T9  lendo bloco  98
+ 4676 ms: T10 escreveu   bloco 113
+ 4676 ms: T10 lendo bloco 114
+ 4828 ms: T3  leu   bloco   2
+ 4828 ms: T3  lendo bloco 253
+ 4877 ms: T4  leu   bloco  18
+ 4877 ms: T4  lendo bloco 237
+ 4933 ms: T5  leu   bloco  34
+ 4933 ms: T5  lendo bloco 221
+ 4982 ms: T6  leu   bloco  50
+ 4982 ms: T6  lendo bloco 205
+ 5038 ms: T7  leu   bloco  66
+ 5038 ms: T7  lendo bloco 189
+ 5098 ms: T8  leu   bloco  82
+ 5098 ms: T8  lendo bloco 173
+ 5167 ms: T9  leu   bloco  98
+ 5167 ms: T9  lendo bloco 157
+ 5235 ms: T10 leu   bloco 114
+ 5235 ms: T10 lendo bloco 141
+ 5418 ms: T3  leu   bloco 253
+ 5418 ms: T3  bloco   2 tem: [<--bloco 0002-------------------------------------------------->]
+ 5418 ms: T3  bloco 253 tem: [<--bloco 0253-------------------------------------------------->]
+ 5418 ms: T3  escrevendo bloco 253
+ 5477 ms: T4  leu   bloco 237
+ 5477 ms: T4  bloco  18 tem: [<--bloco 0018-------------------------------------------------->]
+ 5477 ms: T4  bloco 237 tem: [<--bloco 0237-------------------------------------------------->]
+ 5477 ms: T4  escrevendo bloco 237
+ 5548 ms: T5  leu   bloco 221
+ 5548 ms: T5  bloco  34 tem: [<--bloco 0034-------------------------------------------------->]
+ 5548 ms: T5  bloco 221 tem: [<--bloco 0221-------------------------------------------------->]
+ 5548 ms: T5  escrevendo bloco 221
+ 5611 ms: T6  leu   bloco 205
+ 5611 ms: T6  bloco  50 tem: [<--bloco 0050-------------------------------------------------->]
+ 5611 ms: T6  bloco 205 tem: [<--bloco 0205-------------------------------------------------->]
+ 5611 ms: T6  escrevendo bloco 205
+ 5665 ms: T7  leu   bloco 189
+ 5665 ms: T7  bloco  66 tem: [<--bloco 0066-------------------------------------------------->]
+ 5665 ms: T7  bloco 189 tem: [<--bloco 0189-------------------------------------------------->]
+ 5665 ms: T7  escrevendo bloco 189
+ 5721 ms: T8  leu   bloco 173
+ 5721 ms: T8  bloco  82 tem: [<--bloco 0082-------------------------------------------------->]
+ 5721 ms: T8  bloco 173 tem: [<--bloco 0173-------------------------------------------------->]
+ 5721 ms: T8  escrevendo bloco 173
+ 5770 ms: T9  leu   bloco 157
+ 5770 ms: T9  bloco  98 tem: [<--bloco 0098-------------------------------------------------->]
+ 5770 ms: T9  bloco 157 tem: [<--bloco 0157-------------------------------------------------->]
+ 5770 ms: T9  escrevendo bloco 157
+ 5839 ms: T10 leu   bloco 141
+ 5839 ms: T10 bloco 114 tem: [<--bloco 0114-------------------------------------------------->]
+ 5839 ms: T10 bloco 141 tem: [<--bloco 0141-------------------------------------------------->]
+ 5839 ms: T10 escrevendo bloco 141
+ 5989 ms: T3  escreveu   bloco 253
+ 5989 ms: T3  escrevendo bloco   2
+ 6043 ms: T4  escreveu   bloco 237
+ 6043 ms: T4  escrevendo bloco  18
+ 6099 ms: T5  escreveu   bloco 221
+ 6099 ms: T5  escrevendo bloco  34
+ 6155 ms: T6  escreveu   bloco 205
+ 6155 ms: T6  escrevendo bloco  50
+ 6217 ms: T7  escreveu   bloco 189
+ 6217 ms: T7  escrevendo bloco  66
+ 6281 ms: T8  escreveu   bloco 173
+ 6281 ms: T8  escrevendo bloco  82
+ 6331 ms: T9  escreveu   bloco 157
+ 6331 ms: T9  escrevendo bloco  98
+ 6390 ms: T10 escreveu   bloco 141
+ 6390 ms: T10 escrevendo bloco 114
+ 6589 ms: T3  escreveu   bloco   2
+ 6589 ms: T3  lendo bloco   3
+ 6646 ms: T4  escreveu   bloco  18
+ 6646 ms: T4  lendo bloco  19
+ 6697 ms: T5  escreveu   bloco  34
+ 6697 ms: T5  lendo bloco  35
+ 6759 ms: T6  escreveu   bloco  50
+ 6759 ms: T6  lendo bloco  51
+ 6826 ms: T7  escreveu   bloco  66
+ 6826 ms: T7  lendo bloco  67
+ 6875 ms: T8  escreveu   bloco  82
+ 6875 ms: T8  lendo bloco  83
+ 6941 ms: T9  escreveu   bloco  98
+ 6941 ms: T9  lendo bloco  99
+ 7014 ms: T10 escreveu   bloco 114
+ 7014 ms: T10 lendo bloco 115
+ 7162 ms: T3  leu   bloco   3
+ 7162 ms: T3  lendo bloco 252
+ 7211 ms: T4  leu   bloco  19
+ 7211 ms: T4  lendo bloco 236
+ 7283 ms: T5  leu   bloco  35
+ 7283 ms: T5  lendo bloco 220
+ 7340 ms: T6  leu   bloco  51
+ 7340 ms: T6  lendo bloco 204
+ 7400 ms: T7  leu   bloco  67
+ 7400 ms: T7  lendo bloco 188
+ 7465 ms: T8  leu   bloco  83
+ 7465 ms: T8  lendo bloco 172
+ 7518 ms: T9  leu   bloco  99
+ 7518 ms: T9  lendo bloco 156
+ 7584 ms: T10 leu   bloco 115
+ 7584 ms: T10 lendo bloco 140
+ 7759 ms: T3  leu   bloco 252
+ 7759 ms: T3  bloco   3 tem: [<--bloco 0003-------------------------------------------------->]
+ 7759 ms: T3  bloco 252 tem: [<--bloco 0252-------------------------------------------------->]
+ 7760 ms: T3  escrevendo bloco 252
+ 7807 ms: T4  leu   bloco 236
+ 7807 ms: T4  bloco  19 tem: [<--bloco 0019-------------------------------------------------->]
+ 7807 ms: T4  bloco 236 tem: [<--bloco 0236-------------------------------------------------->]
+ 7808 ms: T4  escrevendo bloco 236
+ 7861 ms: T5  leu   bloco 220
+ 7861 ms: T5  bloco  35 tem: [<--bloco 0035-------------------------------------------------->]
+ 7861 ms: T5  bloco 220 tem: [<--bloco 0220-------------------------------------------------->]
+ 7861 ms: T5  escrevendo bloco 220
+ 7916 ms: T6  leu   bloco 204
+ 7916 ms: T6  bloco  51 tem: [<--bloco 0051-------------------------------------------------->]
+ 7916 ms: T6  bloco 204 tem: [<--bloco 0204-------------------------------------------------->]
+ 7916 ms: T6  escrevendo bloco 204
+ 7970 ms: T7  leu   bloco 188
+ 7970 ms: T7  bloco  67 tem: [<--bloco 0067-------------------------------------------------->]
+ 7970 ms: T7  bloco 188 tem: [<--bloco 0188-------------------------------------------------->]
+ 7970 ms: T7  escrevendo bloco 188
+ 8023 ms: T8  leu   bloco 172
+ 8023 ms: T8  bloco  83 tem: [<--bloco 0083-------------------------------------------------->]
+ 8023 ms: T8  bloco 172 tem: [<--bloco 0172-------------------------------------------------->]
+ 8023 ms: T8  escrevendo bloco 172
+ 8074 ms: T9  leu   bloco 156
+ 8074 ms: T9  bloco  99 tem: [<--bloco 0099-------------------------------------------------->]
+ 8074 ms: T9  bloco 156 tem: [<--bloco 0156-------------------------------------------------->]
+ 8074 ms: T9  escrevendo bloco 156
+ 8125 ms: T10 leu   bloco 140
+ 8125 ms: T10 bloco 115 tem: [<--bloco 0115-------------------------------------------------->]
+ 8125 ms: T10 bloco 140 tem: [<--bloco 0140-------------------------------------------------->]
+ 8125 ms: T10 escrevendo bloco 140
+ 8290 ms: T3  escreveu   bloco 252
+ 8290 ms: T3  escrevendo bloco   3
+ 8348 ms: T4  escreveu   bloco 236
+ 8348 ms: T4  escrevendo bloco  19
+ 8406 ms: T5  escreveu   bloco 220
+ 8406 ms: T5  escrevendo bloco  35
+ 8453 ms: T6  escreveu   bloco 204
+ 8453 ms: T6  escrevendo bloco  51
+ 8502 ms: T7  escreveu   bloco 188
+ 8502 ms: T7  escrevendo bloco  67
+ 8563 ms: T8  escreveu   bloco 172
+ 8563 ms: T8  escrevendo bloco  83
+ 8616 ms: T9  escreveu   bloco 156
+ 8616 ms: T9  escrevendo bloco  99
+ 8686 ms: T10 escreveu   bloco 140
+ 8686 ms: T10 escrevendo bloco 115
+ 8883 ms: T3  escreveu   bloco   3
+ 8883 ms: T3  lendo bloco   4
+ 8936 ms: T4  escreveu   bloco  19
+ 8936 ms: T4  lendo bloco  20
+ 8991 ms: T5  escreveu   bloco  35
+ 8991 ms: T5  lendo bloco  36
+ 9053 ms: T6  escreveu   bloco  51
+ 9053 ms: T6  lendo bloco  52
+ 9108 ms: T7  escreveu   bloco  67
+ 9108 ms: T7  lendo bloco  68
+ 9156 ms: T8  escreveu   bloco  83
+ 9156 ms: T8  lendo bloco  84
+ 9214 ms: T9  escreveu   bloco  99
+ 9214 ms: T9  lendo bloco 100
+ 9267 ms: T10 escreveu   bloco 115
+ 9267 ms: T10 lendo bloco 116
+ 9414 ms: T3  leu   bloco   4
+ 9414 ms: T3  lendo bloco 251
+ 9466 ms: T4  leu   bloco  20
+ 9466 ms: T4  lendo bloco 235
+ 9526 ms: T5  leu   bloco  36
+ 9526 ms: T5  lendo bloco 219
+ 9582 ms: T6  leu   bloco  52
+ 9582 ms: T6  lendo bloco 203
+ 9653 ms: T7  leu   bloco  68
+ 9653 ms: T7  lendo bloco 187
+ 9717 ms: T8  leu   bloco  84
+ 9717 ms: T8  lendo bloco 171
+ 9764 ms: T9  leu   bloco 100
+ 9764 ms: T9  lendo bloco 155
+ 9810 ms: T10 leu   bloco 116
+ 9810 ms: T10 lendo bloco 139
+ 9998 ms: T3  leu   bloco 251
+ 9998 ms: T3  bloco   4 tem: [<--bloco 0004-------------------------------------------------->]
+ 9998 ms: T3  bloco 251 tem: [<--bloco 0251-------------------------------------------------->]
+ 9998 ms: T3  escrevendo bloco 251
+10052 ms: T4  leu   bloco 235
+10052 ms: T4  bloco  20 tem: [<--bloco 0020-------------------------------------------------->]
+10052 ms: T4  bloco 235 tem: [<--bloco 0235-------------------------------------------------->]
+10052 ms: T4  escrevendo bloco 235
+10103 ms: T5  leu   bloco 219
+10103 ms: T5  bloco  36 tem: [<--bloco 0036-------------------------------------------------->]
+10103 ms: T5  bloco 219 tem: [<--bloco 0219-------------------------------------------------->]
+10103 ms: T5  escrevendo bloco 219
+10174 ms: T6  leu   bloco 203
+10174 ms: T6  bloco  52 tem: [<--bloco 0052-------------------------------------------------->]
+10174 ms: T6  bloco 203 tem: [<--bloco 0203-------------------------------------------------->]
+10174 ms: T6  escrevendo bloco 203
+10231 ms: T7  leu   bloco 187
+10231 ms: T7  bloco  68 tem: [<--bloco 0068-------------------------------------------------->]
+10231 ms: T7  bloco 187 tem: [<--bloco 0187-------------------------------------------------->]
+10231 ms: T7  escrevendo bloco 187
+10288 ms: T8  leu   bloco 171
+10288 ms: T8  bloco  84 tem: [<--bloco 0084-------------------------------------------------->]
+10288 ms: T8  bloco 171 tem: [<--bloco 0171-------------------------------------------------->]
+10288 ms: T8  escrevendo bloco 171
+10334 ms: T9  leu   bloco 155
+10334 ms: T9  bloco 100 tem: [<--bloco 0100-------------------------------------------------->]
+10334 ms: T9  bloco 155 tem: [<--bloco 0155-------------------------------------------------->]
+10334 ms: T9  escrevendo bloco 155
+10407 ms: T10 leu   bloco 139
+10407 ms: T10 bloco 116 tem: [<--bloco 0116-------------------------------------------------->]
+10407 ms: T10 bloco 139 tem: [<--bloco 0139-------------------------------------------------->]
+10407 ms: T10 escrevendo bloco 139
+10575 ms: T3  escreveu   bloco 251
+10575 ms: T3  escrevendo bloco   4
+10633 ms: T4  escreveu   bloco 235
+10633 ms: T4  escrevendo bloco  20
+10681 ms: T5  escreveu   bloco 219
+10681 ms: T5  escrevendo bloco  36
+10747 ms: T6  escreveu   bloco 203
+10747 ms: T6  escrevendo bloco  52
+10820 ms: T7  escreveu   bloco 187
+10820 ms: T7  escrevendo bloco  68
+10873 ms: T8  escreveu   bloco 171
+10873 ms: T8  escrevendo bloco  84
+10933 ms: T9  escreveu   bloco 155
+10933 ms: T9  escrevendo bloco 100
+11002 ms: T10 escreveu   bloco 139
+11002 ms: T10 escrevendo bloco 116
+11185 ms: T3  escreveu   bloco   4
+11185 ms: T3  lendo bloco   5
+11249 ms: T4  escreveu   bloco  20
+11249 ms: T4  lendo bloco  21
+11302 ms: T5  escreveu   bloco  36
+11302 ms: T5  lendo bloco  37
+11363 ms: T6  escreveu   bloco  52
+11363 ms: T6  lendo bloco  53
+11424 ms: T7  escreveu   bloco  68
+11424 ms: T7  lendo bloco  69
+11486 ms: T8  escreveu   bloco  84
+11486 ms: T8  lendo bloco  85
+11554 ms: T9  escreveu   bloco 100
+11554 ms: T9  lendo bloco 101
+11616 ms: T10 escreveu   bloco 116
+11616 ms: T10 lendo bloco 117
+11783 ms: T3  leu   bloco   5
+11783 ms: T3  lendo bloco 250
+11838 ms: T4  leu   bloco  21
+11838 ms: T4  lendo bloco 234
+11906 ms: T5  leu   bloco  37
+11906 ms: T5  lendo bloco 218
+11967 ms: T6  leu   bloco  53
+11967 ms: T6  lendo bloco 202
+12013 ms: T7  leu   bloco  69
+12013 ms: T7  lendo bloco 186
+12082 ms: T8  leu   bloco  85
+12082 ms: T8  lendo bloco 170
+12144 ms: T9  leu   bloco 101
+12144 ms: T9  lendo bloco 154
+12203 ms: T10 leu   bloco 117
+12203 ms: T10 lendo bloco 138
+12377 ms: T3  leu   bloco 250
+12377 ms: T3  bloco   5 tem: [<--bloco 0005-------------------------------------------------->]
+12377 ms: T3  bloco 250 tem: [<--bloco 0250-------------------------------------------------->]
+12377 ms: T3  escrevendo bloco 250
+12442 ms: T4  leu   bloco 234
+12442 ms: T4  bloco  21 tem: [<--bloco 0021-------------------------------------------------->]
+12442 ms: T4  bloco 234 tem: [<--bloco 0234-------------------------------------------------->]
+12442 ms: T4  escrevendo bloco 234
+12499 ms: T5  leu   bloco 218
+12499 ms: T5  bloco  37 tem: [<--bloco 0037-------------------------------------------------->]
+12499 ms: T5  bloco 218 tem: [<--bloco 0218-------------------------------------------------->]
+12499 ms: T5  escrevendo bloco 218
+12557 ms: T6  leu   bloco 202
+12557 ms: T6  bloco  53 tem: [<--bloco 0053-------------------------------------------------->]
+12557 ms: T6  bloco 202 tem: [<--bloco 0202-------------------------------------------------->]
+12557 ms: T6  escrevendo bloco 202
+12628 ms: T7  leu   bloco 186
+12628 ms: T7  bloco  69 tem: [<--bloco 0069-------------------------------------------------->]
+12628 ms: T7  bloco 186 tem: [<--bloco 0186-------------------------------------------------->]
+12628 ms: T7  escrevendo bloco 186
+12685 ms: T8  leu   bloco 170
+12685 ms: T8  bloco  85 tem: [<--bloco 0085-------------------------------------------------->]
+12685 ms: T8  bloco 170 tem: [<--bloco 0170-------------------------------------------------->]
+12685 ms: T8  escrevendo bloco 170
+12743 ms: T9  leu   bloco 154
+12743 ms: T9  bloco 101 tem: [<--bloco 0101-------------------------------------------------->]
+12743 ms: T9  bloco 154 tem: [<--bloco 0154-------------------------------------------------->]
+12743 ms: T9  escrevendo bloco 154
+12806 ms: T10 leu   bloco 138
+12806 ms: T10 bloco 117 tem: [<--bloco 0117-------------------------------------------------->]
+12806 ms: T10 bloco 138 tem: [<--bloco 0138-------------------------------------------------->]
+12806 ms: T10 escrevendo bloco 138
+12974 ms: T3  escreveu   bloco 250
+12974 ms: T3  escrevendo bloco   5
+13030 ms: T4  escreveu   bloco 234
+13030 ms: T4  escrevendo bloco  21
+13086 ms: T5  escreveu   bloco 218
+13086 ms: T5  escrevendo bloco  37
+13152 ms: T6  escreveu   bloco 202
+13152 ms: T6  escrevendo bloco  53
+13210 ms: T7  escreveu   bloco 186
+13210 ms: T7  escrevendo bloco  69
+13276 ms: T8  escreveu   bloco 170
+13276 ms: T8  escrevendo bloco  85
+13333 ms: T9  escreveu   bloco 154
+13333 ms: T9  escrevendo bloco 101
+13401 ms: T10 escreveu   bloco 138
+13401 ms: T10 escrevendo bloco 117
+13581 ms: T3  escreveu   bloco   5
+13581 ms: T3  lendo bloco   6
+13641 ms: T4  escreveu   bloco  21
+13641 ms: T4  lendo bloco  22
+13697 ms: T5  escreveu   bloco  37
+13697 ms: T5  lendo bloco  38
+13768 ms: T6  escreveu   bloco  53
+13768 ms: T6  lendo bloco  54
+13815 ms: T7  escreveu   bloco  69
+13815 ms: T7  lendo bloco  70
+13864 ms: T8  escreveu   bloco  85
+13864 ms: T8  lendo bloco  86
+13919 ms: T9  escreveu   bloco 101
+13919 ms: T9  lendo bloco 102
+13987 ms: T10 escreveu   bloco 117
+13987 ms: T10 lendo bloco 118
+14142 ms: T3  leu   bloco   6
+14142 ms: T3  lendo bloco 249
+14192 ms: T4  leu   bloco  22
+14192 ms: T4  lendo bloco 233
+14244 ms: T5  leu   bloco  38
+14244 ms: T5  lendo bloco 217
+14293 ms: T6  leu   bloco  54
+14293 ms: T6  lendo bloco 201
+14339 ms: T7  leu   bloco  70
+14339 ms: T7  lendo bloco 185
+14408 ms: T8  leu   bloco  86
+14408 ms: T8  lendo bloco 169
+14470 ms: T9  leu   bloco 102
+14470 ms: T9  lendo bloco 153
+14517 ms: T10 leu   bloco 118
+14517 ms: T10 lendo bloco 137
+14699 ms: T3  leu   bloco 249
+14699 ms: T3  bloco   6 tem: [<--bloco 0006-------------------------------------------------->]
+14699 ms: T3  bloco 249 tem: [<--bloco 0249-------------------------------------------------->]
+14699 ms: T3  escrevendo bloco 249
+14769 ms: T4  leu   bloco 233
+14769 ms: T4  bloco  22 tem: [<--bloco 0022-------------------------------------------------->]
+14769 ms: T4  bloco 233 tem: [<--bloco 0233-------------------------------------------------->]
+14769 ms: T4  escrevendo bloco 233
+14828 ms: T5  leu   bloco 217
+14828 ms: T5  bloco  38 tem: [<--bloco 0038-------------------------------------------------->]
+14828 ms: T5  bloco 217 tem: [<--bloco 0217-------------------------------------------------->]
+14828 ms: T5  escrevendo bloco 217
+14887 ms: T6  leu   bloco 201
+14887 ms: T6  bloco  54 tem: [<--bloco 0054-------------------------------------------------->]
+14887 ms: T6  bloco 201 tem: [<--bloco 0201-------------------------------------------------->]
+14887 ms: T6  escrevendo bloco 201
+14939 ms: T7  leu   bloco 185
+14939 ms: T7  bloco  70 tem: [<--bloco 0070-------------------------------------------------->]
+14939 ms: T7  bloco 185 tem: [<--bloco 0185-------------------------------------------------->]
+14939 ms: T7  escrevendo bloco 185
+15006 ms: T8  leu   bloco 169
+15006 ms: T8  bloco  86 tem: [<--bloco 0086-------------------------------------------------->]
+15006 ms: T8  bloco 169 tem: [<--bloco 0169-------------------------------------------------->]
+15006 ms: T8  escrevendo bloco 169
+15078 ms: T9  leu   bloco 153
+15078 ms: T9  bloco 102 tem: [<--bloco 0102-------------------------------------------------->]
+15078 ms: T9  bloco 153 tem: [<--bloco 0153-------------------------------------------------->]
+15078 ms: T9  escrevendo bloco 153
+15149 ms: T10 leu   bloco 137
+15149 ms: T10 bloco 118 tem: [<--bloco 0118-------------------------------------------------->]
+15149 ms: T10 bloco 137 tem: [<--bloco 0137-------------------------------------------------->]
+15149 ms: T10 escrevendo bloco 137
+15301 ms: T3  escreveu   bloco 249
+15301 ms: T3  escrevendo bloco   6
+15353 ms: T4  escreveu   bloco 233
+15353 ms: T4  escrevendo bloco  22
+15413 ms: T5  escreveu   bloco 217
+15413 ms: T5  escrevendo bloco  38
+15470 ms: T6  escreveu   bloco 201
+15470 ms: T6  escrevendo bloco  54
+15541 ms: T7  escreveu   bloco 185
+15541 ms: T7  escrevendo bloco  70
+15608 ms: T8  escreveu   bloco 169
+15608 ms: T8  escrevendo bloco  86
+15659 ms: T9  escreveu   bloco 153
+15659 ms: T9  escrevendo bloco 102
+15709 ms: T10 escreveu   bloco 137
+15709 ms: T10 escrevendo bloco 118
+15885 ms: T3  escreveu   bloco   6
+15885 ms: T3  lendo bloco   7
+15941 ms: T4  escreveu   bloco  22
+15941 ms: T4  lendo bloco  23
+16012 ms: T5  escreveu   bloco  38
+16012 ms: T5  lendo bloco  39
+16067 ms: T6  escreveu   bloco  54
+16067 ms: T6  lendo bloco  55
+16122 ms: T7  escreveu   bloco  70
+16122 ms: T7  lendo bloco  71
+16174 ms: T8  escreveu   bloco  86
+16174 ms: T8  lendo bloco  87
+16247 ms: T9  escreveu   bloco 102
+16247 ms: T9  lendo bloco 103
+16309 ms: T10 escreveu   bloco 118
+16309 ms: T10 lendo bloco 119
+16462 ms: T3  leu   bloco   7
+16462 ms: T3  lendo bloco 248
+16514 ms: T4  leu   bloco  23
+16514 ms: T4  lendo bloco 232
+16575 ms: T5  leu   bloco  39
+16575 ms: T5  lendo bloco 216
+16624 ms: T6  leu   bloco  55
+16624 ms: T6  lendo bloco 200
+16695 ms: T7  leu   bloco  71
+16695 ms: T7  lendo bloco 184
+16742 ms: T8  leu   bloco  87
+16742 ms: T8  lendo bloco 168
+16791 ms: T9  leu   bloco 103
+16791 ms: T9  lendo bloco 152
+16846 ms: T10 leu   bloco 119
+16846 ms: T10 lendo bloco 136
+17034 ms: T3  leu   bloco 248
+17034 ms: T3  bloco   7 tem: [<--bloco 0007-------------------------------------------------->]
+17034 ms: T3  bloco 248 tem: [<--bloco 0248-------------------------------------------------->]
+17034 ms: T3  escrevendo bloco 248
+17094 ms: T4  leu   bloco 232
+17094 ms: T4  bloco  23 tem: [<--bloco 0023-------------------------------------------------->]
+17094 ms: T4  bloco 232 tem: [<--bloco 0232-------------------------------------------------->]
+17094 ms: T4  escrevendo bloco 232
+17158 ms: T5  leu   bloco 216
+17158 ms: T5  bloco  39 tem: [<--bloco 0039-------------------------------------------------->]
+17158 ms: T5  bloco 216 tem: [<--bloco 0216-------------------------------------------------->]
+17158 ms: T5  escrevendo bloco 216
+17227 ms: T6  leu   bloco 200
+17227 ms: T6  bloco  55 tem: [<--bloco 0055-------------------------------------------------->]
+17227 ms: T6  bloco 200 tem: [<--bloco 0200-------------------------------------------------->]
+17227 ms: T6  escrevendo bloco 200
+17277 ms: T7  leu   bloco 184
+17277 ms: T7  bloco  71 tem: [<--bloco 0071-------------------------------------------------->]
+17277 ms: T7  bloco 184 tem: [<--bloco 0184-------------------------------------------------->]
+17277 ms: T7  escrevendo bloco 184
+17341 ms: T8  leu   bloco 168
+17341 ms: T8  bloco  87 tem: [<--bloco 0087-------------------------------------------------->]
+17341 ms: T8  bloco 168 tem: [<--bloco 0168-------------------------------------------------->]
+17341 ms: T8  escrevendo bloco 168
+17408 ms: T9  leu   bloco 152
+17408 ms: T9  bloco 103 tem: [<--bloco 0103-------------------------------------------------->]
+17408 ms: T9  bloco 152 tem: [<--bloco 0152-------------------------------------------------->]
+17408 ms: T9  escrevendo bloco 152
+17458 ms: T10 leu   bloco 136
+17458 ms: T10 bloco 119 tem: [<--bloco 0119-------------------------------------------------->]
+17458 ms: T10 bloco 136 tem: [<--bloco 0136-------------------------------------------------->]
+17459 ms: T10 escrevendo bloco 136
+17632 ms: T3  escreveu   bloco 248
+17632 ms: T3  escrevendo bloco   7
+17683 ms: T4  escreveu   bloco 232
+17683 ms: T4  escrevendo bloco  23
+17745 ms: T5  escreveu   bloco 216
+17745 ms: T5  escrevendo bloco  39
+17810 ms: T6  escreveu   bloco 200
+17811 ms: T6  escrevendo bloco  55
+17883 ms: T7  escreveu   bloco 184
+17883 ms: T7  escrevendo bloco  71
+17945 ms: T8  escreveu   bloco 168
+17945 ms: T8  escrevendo bloco  87
+18014 ms: T9  escreveu   bloco 152
+18014 ms: T9  escrevendo bloco 103
+18063 ms: T10 escreveu   bloco 136
+18063 ms: T10 escrevendo bloco 119
+18255 ms: T3  escreveu   bloco   7
+18255 ms: T3  lendo bloco   8
+18321 ms: T4  escreveu   bloco  23
+18321 ms: T4  lendo bloco  24
+18378 ms: T5  escreveu   bloco  39
+18378 ms: T5  lendo bloco  40
+18431 ms: T6  escreveu   bloco  55
+18431 ms: T6  lendo bloco  56
+18499 ms: T7  escreveu   bloco  71
+18499 ms: T7  lendo bloco  72
+18552 ms: T8  escreveu   bloco  87
+18552 ms: T8  lendo bloco  88
+18616 ms: T9  escreveu   bloco 103
+18616 ms: T9  lendo bloco 104
+18663 ms: T10 escreveu   bloco 119
+18663 ms: T10 lendo bloco 120
+18822 ms: T3  leu   bloco   8
+18822 ms: T3  lendo bloco 247
+18870 ms: T4  leu   bloco  24
+18870 ms: T4  lendo bloco 231
+18919 ms: T5  leu   bloco  40
+18919 ms: T5  lendo bloco 215
+18971 ms: T6  leu   bloco  56
+18971 ms: T6  lendo bloco 199
+19021 ms: T7  leu   bloco  72
+19021 ms: T7  lendo bloco 183
+19070 ms: T8  leu   bloco  88
+19070 ms: T8  lendo bloco 167
+19132 ms: T9  leu   bloco 104
+19132 ms: T9  lendo bloco 151
+19200 ms: T10 leu   bloco 120
+19200 ms: T10 lendo bloco 135
+19376 ms: T3  leu   bloco 247
+19376 ms: T3  bloco   8 tem: [<--bloco 0008-------------------------------------------------->]
+19376 ms: T3  bloco 247 tem: [<--bloco 0247-------------------------------------------------->]
+19376 ms: T3  escrevendo bloco 247
+19425 ms: T4  leu   bloco 231
+19425 ms: T4  bloco  24 tem: [<--bloco 0024-------------------------------------------------->]
+19425 ms: T4  bloco 231 tem: [<--bloco 0231-------------------------------------------------->]
+19425 ms: T4  escrevendo bloco 231
+19490 ms: T5  leu   bloco 215
+19490 ms: T5  bloco  40 tem: [<--bloco 0040-------------------------------------------------->]
+19490 ms: T5  bloco 215 tem: [<--bloco 0215-------------------------------------------------->]
+19490 ms: T5  escrevendo bloco 215
+19553 ms: T6  leu   bloco 199
+19553 ms: T6  bloco  56 tem: [<--bloco 0056-------------------------------------------------->]
+19553 ms: T6  bloco 199 tem: [<--bloco 0199-------------------------------------------------->]
+19553 ms: T6  escrevendo bloco 199
+19621 ms: T7  leu   bloco 183
+19621 ms: T7  bloco  72 tem: [<--bloco 0072-------------------------------------------------->]
+19621 ms: T7  bloco 183 tem: [<--bloco 0183-------------------------------------------------->]
+19621 ms: T7  escrevendo bloco 183
+19678 ms: T8  leu   bloco 167
+19678 ms: T8  bloco  88 tem: [<--bloco 0088-------------------------------------------------->]
+19678 ms: T8  bloco 167 tem: [<--bloco 0167-------------------------------------------------->]
+19678 ms: T8  escrevendo bloco 167
+19742 ms: T9  leu   bloco 151
+19742 ms: T9  bloco 104 tem: [<--bloco 0104-------------------------------------------------->]
+19742 ms: T9  bloco 151 tem: [<--bloco 0151-------------------------------------------------->]
+19742 ms: T9  escrevendo bloco 151
+19803 ms: T10 leu   bloco 135
+19803 ms: T10 bloco 120 tem: [<--bloco 0120-------------------------------------------------->]
+19803 ms: T10 bloco 135 tem: [<--bloco 0135-------------------------------------------------->]
+19803 ms: T10 escrevendo bloco 135
+19967 ms: T3  escreveu   bloco 247
+19967 ms: T3  escrevendo bloco   8
+20019 ms: T4  escreveu   bloco 231
+20019 ms: T4  escrevendo bloco  24
+20072 ms: T5  escreveu   bloco 215
+20072 ms: T5  escrevendo bloco  40
+20129 ms: T6  escreveu   bloco 199
+20129 ms: T6  escrevendo bloco  56
+20197 ms: T7  escreveu   bloco 183
+20197 ms: T7  escrevendo bloco  72
+20269 ms: T8  escreveu   bloco 167
+20269 ms: T8  escrevendo bloco  88
+20328 ms: T9  escreveu   bloco 151
+20328 ms: T9  escrevendo bloco 104
+20391 ms: T10 escreveu   bloco 135
+20391 ms: T10 escrevendo bloco 120
+20572 ms: T3  escreveu   bloco   8
+20572 ms: T3  lendo bloco   9
+20638 ms: T4  escreveu   bloco  24
+20638 ms: T4  lendo bloco  25
+20708 ms: T5  escreveu   bloco  40
+20708 ms: T5  lendo bloco  41
+20762 ms: T6  escreveu   bloco  56
+20762 ms: T6  lendo bloco  57
+20834 ms: T7  escreveu   bloco  72
+20834 ms: T7  lendo bloco  73
+20890 ms: T8  escreveu   bloco  88
+20890 ms: T8  lendo bloco  89
+20944 ms: T9  escreveu   bloco 104
+20944 ms: T9  lendo bloco 105
+21001 ms: T10 escreveu   bloco 120
+21001 ms: T10 lendo bloco 121
+21158 ms: T3  leu   bloco   9
+21158 ms: T3  lendo bloco 246
+21211 ms: T4  leu   bloco  25
+21211 ms: T4  lendo bloco 230
+21269 ms: T5  leu   bloco  41
+21269 ms: T5  lendo bloco 214
+21327 ms: T6  leu   bloco  57
+21327 ms: T6  lendo bloco 198
+21380 ms: T7  leu   bloco  73
+21380 ms: T7  lendo bloco 182
+21427 ms: T8  leu   bloco  89
+21427 ms: T8  lendo bloco 166
+21481 ms: T9  leu   bloco 105
+21481 ms: T9  lendo bloco 150
+21548 ms: T10 leu   bloco 121
+21548 ms: T10 lendo bloco 134
+21714 ms: T3  leu   bloco 246
+21714 ms: T3  bloco   9 tem: [<--bloco 0009-------------------------------------------------->]
+21714 ms: T3  bloco 246 tem: [<--bloco 0246-------------------------------------------------->]
+21714 ms: T3  escrevendo bloco 246
+21783 ms: T4  leu   bloco 230
+21783 ms: T4  bloco  25 tem: [<--bloco 0025-------------------------------------------------->]
+21783 ms: T4  bloco 230 tem: [<--bloco 0230-------------------------------------------------->]
+21783 ms: T4  escrevendo bloco 230
+21836 ms: T5  leu   bloco 214
+21836 ms: T5  bloco  41 tem: [<--bloco 0041-------------------------------------------------->]
+21836 ms: T5  bloco 214 tem: [<--bloco 0214-------------------------------------------------->]
+21836 ms: T5  escrevendo bloco 214
+21906 ms: T6  leu   bloco 198
+21906 ms: T6  bloco  57 tem: [<--bloco 0057-------------------------------------------------->]
+21906 ms: T6  bloco 198 tem: [<--bloco 0198-------------------------------------------------->]
+21906 ms: T6  escrevendo bloco 198
+21959 ms: T7  leu   bloco 182
+21959 ms: T7  bloco  73 tem: [<--bloco 0073-------------------------------------------------->]
+21959 ms: T7  bloco 182 tem: [<--bloco 0182-------------------------------------------------->]
+21959 ms: T7  escrevendo bloco 182
+22031 ms: T8  leu   bloco 166
+22031 ms: T8  bloco  89 tem: [<--bloco 0089-------------------------------------------------->]
+22031 ms: T8  bloco 166 tem: [<--bloco 0166-------------------------------------------------->]
+22031 ms: T8  escrevendo bloco 166
+22089 ms: T9  leu   bloco 150
+22089 ms: T9  bloco 105 tem: [<--bloco 0105-------------------------------------------------->]
+22089 ms: T9  bloco 150 tem: [<--bloco 0150-------------------------------------------------->]
+22089 ms: T9  escrevendo bloco 150
+22157 ms: T10 leu   bloco 134
+22157 ms: T10 bloco 121 tem: [<--bloco 0121-------------------------------------------------->]
+22157 ms: T10 bloco 134 tem: [<--bloco 0134-------------------------------------------------->]
+22157 ms: T10 escrevendo bloco 134
+22306 ms: T3  escreveu   bloco 246
+22306 ms: T3  escrevendo bloco   9
+22368 ms: T4  escreveu   bloco 230
+22368 ms: T4  escrevendo bloco  25
+22416 ms: T5  escreveu   bloco 214
+22416 ms: T5  escrevendo bloco  41
+22481 ms: T6  escreveu   bloco 198
+22481 ms: T6  escrevendo bloco  57
+22542 ms: T7  escreveu   bloco 182
+22542 ms: T7  escrevendo bloco  73
+22602 ms: T8  escreveu   bloco 166
+22602 ms: T8  escrevendo bloco  89
+22656 ms: T9  escreveu   bloco 150
+22656 ms: T9  escrevendo bloco 105
+22703 ms: T10 escreveu   bloco 134
+22703 ms: T10 escrevendo bloco 121
+22870 ms: T3  escreveu   bloco   9
+22870 ms: T3  lendo bloco  10
+22944 ms: T4  escreveu   bloco  25
+22944 ms: T4  lendo bloco  26
+22994 ms: T5  escreveu   bloco  41
+22994 ms: T5  lendo bloco  42
+23044 ms: T6  escreveu   bloco  57
+23044 ms: T6  lendo bloco  58
+23099 ms: T7  escreveu   bloco  73
+23099 ms: T7  lendo bloco  74
+23154 ms: T8  escreveu   bloco  89
+23154 ms: T8  lendo bloco  90
+23211 ms: T9  escreveu   bloco 105
+23211 ms: T9  lendo bloco 106
+23274 ms: T10 escreveu   bloco 121
+23274 ms: T10 lendo bloco 122
+23436 ms: T3  leu   bloco  10
+23436 ms: T3  lendo bloco 245
+23505 ms: T4  leu   bloco  26
+23505 ms: T4  lendo bloco 229
+23576 ms: T5  leu   bloco  42
+23576 ms: T5  lendo bloco 213
+23642 ms: T6  leu   bloco  58
+23642 ms: T6  lendo bloco 197
+23709 ms: T7  leu   bloco  74
+23709 ms: T7  lendo bloco 181
+23757 ms: T8  leu   bloco  90
+23757 ms: T8  lendo bloco 165
+23811 ms: T9  leu   bloco 106
+23811 ms: T9  lendo bloco 149
+23879 ms: T10 leu   bloco 122
+23879 ms: T10 lendo bloco 133
+24064 ms: T3  leu   bloco 245
+24064 ms: T3  bloco  10 tem: [<--bloco 0010-------------------------------------------------->]
+24064 ms: T3  bloco 245 tem: [<--bloco 0245-------------------------------------------------->]
+24064 ms: T3  escrevendo bloco 245
+24127 ms: T4  leu   bloco 229
+24127 ms: T4  bloco  26 tem: [<--bloco 0026-------------------------------------------------->]
+24127 ms: T4  bloco 229 tem: [<--bloco 0229-------------------------------------------------->]
+24127 ms: T4  escrevendo bloco 229
+24192 ms: T5  leu   bloco 213
+24192 ms: T5  bloco  42 tem: [<--bloco 0042-------------------------------------------------->]
+24192 ms: T5  bloco 213 tem: [<--bloco 0213-------------------------------------------------->]
+24192 ms: T5  escrevendo bloco 213
+24244 ms: T6  leu   bloco 197
+24244 ms: T6  bloco  58 tem: [<--bloco 0058-------------------------------------------------->]
+24244 ms: T6  bloco 197 tem: [<--bloco 0197-------------------------------------------------->]
+24244 ms: T6  escrevendo bloco 197
+24301 ms: T7  leu   bloco 181
+24301 ms: T7  bloco  74 tem: [<--bloco 0074-------------------------------------------------->]
+24301 ms: T7  bloco 181 tem: [<--bloco 0181-------------------------------------------------->]
+24301 ms: T7  escrevendo bloco 181
+24348 ms: T8  leu   bloco 165
+24348 ms: T8  bloco  90 tem: [<--bloco 0090-------------------------------------------------->]
+24348 ms: T8  bloco 165 tem: [<--bloco 0165-------------------------------------------------->]
+24348 ms: T8  escrevendo bloco 165
+24418 ms: T9  leu   bloco 149
+24418 ms: T9  bloco 106 tem: [<--bloco 0106-------------------------------------------------->]
+24418 ms: T9  bloco 149 tem: [<--bloco 0149-------------------------------------------------->]
+24418 ms: T9  escrevendo bloco 149
+24472 ms: T10 leu   bloco 133
+24472 ms: T10 bloco 122 tem: [<--bloco 0122-------------------------------------------------->]
+24472 ms: T10 bloco 133 tem: [<--bloco 0133-------------------------------------------------->]
+24472 ms: T10 escrevendo bloco 133
+24634 ms: T3  escreveu   bloco 245
+24634 ms: T3  escrevendo bloco  10
+24707 ms: T4  escreveu   bloco 229
+24707 ms: T4  escrevendo bloco  26
+24780 ms: T5  escreveu   bloco 213
+24780 ms: T5  escrevendo bloco  42
+24850 ms: T6  escreveu   bloco 197
+24850 ms: T6  escrevendo bloco  58
+24906 ms: T7  escreveu   bloco 181
+24906 ms: T7  escrevendo bloco  74
+24957 ms: T8  escreveu   bloco 165
+24957 ms: T8  escrevendo bloco  90
+25024 ms: T9  escreveu   bloco 149
+25024 ms: T9  escrevendo bloco 106
+25085 ms: T10 escreveu   bloco 133
+25085 ms: T10 escrevendo bloco 122
+25248 ms: T3  escreveu   bloco  10
+25248 ms: T3  lendo bloco  11
+25320 ms: T4  escreveu   bloco  26
+25320 ms: T4  lendo bloco  27
+25382 ms: T5  escreveu   bloco  42
+25382 ms: T5  lendo bloco  43
+25436 ms: T6  escreveu   bloco  58
+25436 ms: T6  lendo bloco  59
+25488 ms: T7  escreveu   bloco  74
+25488 ms: T7  lendo bloco  75
+25561 ms: T8  escreveu   bloco  90
+25561 ms: T8  lendo bloco  91
+25632 ms: T9  escreveu   bloco 106
+25632 ms: T9  lendo bloco 107
+25696 ms: T10 escreveu   bloco 122
+25696 ms: T10 lendo bloco 123
+25860 ms: T3  leu   bloco  11
+25860 ms: T3  lendo bloco 244
+25928 ms: T4  leu   bloco  27
+25928 ms: T4  lendo bloco 228
+25984 ms: T5  leu   bloco  43
+25984 ms: T5  lendo bloco 212
+26037 ms: T6  leu   bloco  59
+26037 ms: T6  lendo bloco 196
+26108 ms: T7  leu   bloco  75
+26108 ms: T7  lendo bloco 180
+26172 ms: T8  leu   bloco  91
+26172 ms: T8  lendo bloco 164
+26221 ms: T9  leu   bloco 107
+26221 ms: T9  lendo bloco 148
+26287 ms: T10 leu   bloco 123
+26287 ms: T10 lendo bloco 132
+26447 ms: T3  leu   bloco 244
+26447 ms: T3  bloco  11 tem: [<--bloco 0011-------------------------------------------------->]
+26447 ms: T3  bloco 244 tem: [<--bloco 0244-------------------------------------------------->]
+26447 ms: T3  escrevendo bloco 244
+26514 ms: T4  leu   bloco 228
+26514 ms: T4  bloco  27 tem: [<--bloco 0027-------------------------------------------------->]
+26514 ms: T4  bloco 228 tem: [<--bloco 0228-------------------------------------------------->]
+26514 ms: T4  escrevendo bloco 228
+26586 ms: T5  leu   bloco 212
+26586 ms: T5  bloco  43 tem: [<--bloco 0043-------------------------------------------------->]
+26586 ms: T5  bloco 212 tem: [<--bloco 0212-------------------------------------------------->]
+26586 ms: T5  escrevendo bloco 212
+26643 ms: T6  leu   bloco 196
+26643 ms: T6  bloco  59 tem: [<--bloco 0059-------------------------------------------------->]
+26643 ms: T6  bloco 196 tem: [<--bloco 0196-------------------------------------------------->]
+26643 ms: T6  escrevendo bloco 196
+26706 ms: T7  leu   bloco 180
+26706 ms: T7  bloco  75 tem: [<--bloco 0075-------------------------------------------------->]
+26706 ms: T7  bloco 180 tem: [<--bloco 0180-------------------------------------------------->]
+26706 ms: T7  escrevendo bloco 180
+26772 ms: T8  leu   bloco 164
+26772 ms: T8  bloco  91 tem: [<--bloco 0091-------------------------------------------------->]
+26772 ms: T8  bloco 164 tem: [<--bloco 0164-------------------------------------------------->]
+26772 ms: T8  escrevendo bloco 164
+26836 ms: T9  leu   bloco 148
+26836 ms: T9  bloco 107 tem: [<--bloco 0107-------------------------------------------------->]
+26836 ms: T9  bloco 148 tem: [<--bloco 0148-------------------------------------------------->]
+26836 ms: T9  escrevendo bloco 148
+26886 ms: T10 leu   bloco 132
+26886 ms: T10 bloco 123 tem: [<--bloco 0123-------------------------------------------------->]
+26886 ms: T10 bloco 132 tem: [<--bloco 0132-------------------------------------------------->]
+26886 ms: T10 escrevendo bloco 132
+27055 ms: T3  escreveu   bloco 244
+27055 ms: T3  escrevendo bloco  11
+27116 ms: T4  escreveu   bloco 228
+27116 ms: T4  escrevendo bloco  27
+27164 ms: T5  escreveu   bloco 212
+27164 ms: T5  escrevendo bloco  43
+27236 ms: T6  escreveu   bloco 196
+27236 ms: T6  escrevendo bloco  59
+27300 ms: T7  escreveu   bloco 180
+27300 ms: T7  escrevendo bloco  75
+27364 ms: T8  escreveu   bloco 164
+27364 ms: T8  escrevendo bloco  91
+27424 ms: T9  escreveu   bloco 148
+27424 ms: T9  escrevendo bloco 107
+27492 ms: T10 escreveu   bloco 132
+27492 ms: T10 escrevendo bloco 123
+27666 ms: T3  escreveu   bloco  11
+27666 ms: T3  lendo bloco  12
+27736 ms: T4  escreveu   bloco  27
+27736 ms: T4  lendo bloco  28
+27784 ms: T5  escreveu   bloco  43
+27784 ms: T5  lendo bloco  44
+27851 ms: T6  escreveu   bloco  59
+27851 ms: T6  lendo bloco  60
+27916 ms: T7  escreveu   bloco  75
+27916 ms: T7  lendo bloco  76
+27985 ms: T8  escreveu   bloco  91
+27985 ms: T8  lendo bloco  92
+28042 ms: T9  escreveu   bloco 107
+28042 ms: T9  lendo bloco 108
+28097 ms: T10 escreveu   bloco 123
+28097 ms: T10 lendo bloco 124
+28257 ms: T3  leu   bloco  12
+28257 ms: T3  lendo bloco 243
+28318 ms: T4  leu   bloco  28
+28318 ms: T4  lendo bloco 227
+28380 ms: T5  leu   bloco  44
+28380 ms: T5  lendo bloco 211
+28433 ms: T6  leu   bloco  60
+28433 ms: T6  lendo bloco 195
+28483 ms: T7  leu   bloco  76
+28483 ms: T7  lendo bloco 179
+28545 ms: T8  leu   bloco  92
+28545 ms: T8  lendo bloco 163
+28591 ms: T9  leu   bloco 108
+28591 ms: T9  lendo bloco 147
+28643 ms: T10 leu   bloco 124
+28643 ms: T10 lendo bloco 131
+28807 ms: T3  leu   bloco 243
+28807 ms: T3  bloco  12 tem: [<--bloco 0012-------------------------------------------------->]
+28807 ms: T3  bloco 243 tem: [<--bloco 0243-------------------------------------------------->]
+28807 ms: T3  escrevendo bloco 243
+28876 ms: T4  leu   bloco 227
+28876 ms: T4  bloco  28 tem: [<--bloco 0028-------------------------------------------------->]
+28876 ms: T4  bloco 227 tem: [<--bloco 0227-------------------------------------------------->]
+28876 ms: T4  escrevendo bloco 227
+28936 ms: T5  leu   bloco 211
+28936 ms: T5  bloco  44 tem: [<--bloco 0044-------------------------------------------------->]
+28936 ms: T5  bloco 211 tem: [<--bloco 0211-------------------------------------------------->]
+28936 ms: T5  escrevendo bloco 211
+29006 ms: T6  leu   bloco 195
+29006 ms: T6  bloco  60 tem: [<--bloco 0060-------------------------------------------------->]
+29006 ms: T6  bloco 195 tem: [<--bloco 0195-------------------------------------------------->]
+29006 ms: T6  escrevendo bloco 195
+29068 ms: T7  leu   bloco 179
+29068 ms: T7  bloco  76 tem: [<--bloco 0076-------------------------------------------------->]
+29068 ms: T7  bloco 179 tem: [<--bloco 0179-------------------------------------------------->]
+29068 ms: T7  escrevendo bloco 179
+29120 ms: T8  leu   bloco 163
+29120 ms: T8  bloco  92 tem: [<--bloco 0092-------------------------------------------------->]
+29120 ms: T8  bloco 163 tem: [<--bloco 0163-------------------------------------------------->]
+29120 ms: T8  escrevendo bloco 163
+29167 ms: T9  leu   bloco 147
+29167 ms: T9  bloco 108 tem: [<--bloco 0108-------------------------------------------------->]
+29167 ms: T9  bloco 147 tem: [<--bloco 0147-------------------------------------------------->]
+29167 ms: T9  escrevendo bloco 147
+29217 ms: T10 leu   bloco 131
+29217 ms: T10 bloco 124 tem: [<--bloco 0124-------------------------------------------------->]
+29217 ms: T10 bloco 131 tem: [<--bloco 0131-------------------------------------------------->]
+29217 ms: T10 escrevendo bloco 131
+29382 ms: T3  escreveu   bloco 243
+29382 ms: T3  escrevendo bloco  12
+29454 ms: T4  escreveu   bloco 227
+29454 ms: T4  escrevendo bloco  28
+29503 ms: T5  escreveu   bloco 211
+29503 ms: T5  escrevendo bloco  44
+29557 ms: T6  escreveu   bloco 195
+29557 ms: T6  escrevendo bloco  60
+29622 ms: T7  escreveu   bloco 179
+29622 ms: T7  escrevendo bloco  76
+29679 ms: T8  escreveu   bloco 163
+29679 ms: T8  escrevendo bloco  92
+29750 ms: T9  escreveu   bloco 147
+29750 ms: T9  escrevendo bloco 108
+29801 ms: T10 escreveu   bloco 131
+29801 ms: T10 escrevendo bloco 124
+29964 ms: T3  escreveu   bloco  12
+29964 ms: T3  lendo bloco  13
+30032 ms: T4  escreveu   bloco  28
+30032 ms: T4  lendo bloco  29
+30100 ms: T5  escreveu   bloco  44
+30100 ms: T5  lendo bloco  45
+30172 ms: T6  escreveu   bloco  60
+30172 ms: T6  lendo bloco  61
+30235 ms: T7  escreveu   bloco  76
+30235 ms: T7  lendo bloco  77
+30282 ms: T8  escreveu   bloco  92
+30282 ms: T8  lendo bloco  93
+30333 ms: T9  escreveu   bloco 108
+30333 ms: T9  lendo bloco 109
+30383 ms: T10 escreveu   bloco 124
+30383 ms: T10 lendo bloco 125
+30542 ms: T3  leu   bloco  13
+30542 ms: T3  lendo bloco 242
+30603 ms: T4  leu   bloco  29
+30603 ms: T4  lendo bloco 226
+30658 ms: T5  leu   bloco  45
+30658 ms: T5  lendo bloco 210
+30719 ms: T6  leu   bloco  61
+30719 ms: T6  lendo bloco 194
+30771 ms: T7  leu   bloco  77
+30771 ms: T7  lendo bloco 178
+30823 ms: T8  leu   bloco  93
+30823 ms: T8  lendo bloco 162
+30891 ms: T9  leu   bloco 109
+30891 ms: T9  lendo bloco 146
+30947 ms: T10 leu   bloco 125
+30947 ms: T10 lendo bloco 130
+31102 ms: T3  leu   bloco 242
+31102 ms: T3  bloco  13 tem: [<--bloco 0013-------------------------------------------------->]
+31102 ms: T3  bloco 242 tem: [<--bloco 0242-------------------------------------------------->]
+31102 ms: T3  escrevendo bloco 242
+31159 ms: T4  leu   bloco 226
+31159 ms: T4  bloco  29 tem: [<--bloco 0029-------------------------------------------------->]
+31159 ms: T4  bloco 226 tem: [<--bloco 0226-------------------------------------------------->]
+31159 ms: T4  escrevendo bloco 226
+31212 ms: T5  leu   bloco 210
+31212 ms: T5  bloco  45 tem: [<--bloco 0045-------------------------------------------------->]
+31212 ms: T5  bloco 210 tem: [<--bloco 0210-------------------------------------------------->]
+31212 ms: T5  escrevendo bloco 210
+31277 ms: T6  leu   bloco 194
+31277 ms: T6  bloco  61 tem: [<--bloco 0061-------------------------------------------------->]
+31277 ms: T6  bloco 194 tem: [<--bloco 0194-------------------------------------------------->]
+31277 ms: T6  escrevendo bloco 194
+31335 ms: T7  leu   bloco 178
+31335 ms: T7  bloco  77 tem: [<--bloco 0077-------------------------------------------------->]
+31335 ms: T7  bloco 178 tem: [<--bloco 0178-------------------------------------------------->]
+31335 ms: T7  escrevendo bloco 178
+31385 ms: T8  leu   bloco 162
+31385 ms: T8  bloco  93 tem: [<--bloco 0093-------------------------------------------------->]
+31385 ms: T8  bloco 162 tem: [<--bloco 0162-------------------------------------------------->]
+31385 ms: T8  escrevendo bloco 162
+31451 ms: T9  leu   bloco 146
+31451 ms: T9  bloco 109 tem: [<--bloco 0109-------------------------------------------------->]
+31451 ms: T9  bloco 146 tem: [<--bloco 0146-------------------------------------------------->]
+31451 ms: T9  escrevendo bloco 146
+31500 ms: T10 leu   bloco 130
+31500 ms: T10 bloco 125 tem: [<--bloco 0125-------------------------------------------------->]
+31500 ms: T10 bloco 130 tem: [<--bloco 0130-------------------------------------------------->]
+31500 ms: T10 escrevendo bloco 130
+31653 ms: T3  escreveu   bloco 242
+31653 ms: T3  escrevendo bloco  13
+31722 ms: T4  escreveu   bloco 226
+31722 ms: T4  escrevendo bloco  29
+31776 ms: T5  escreveu   bloco 210
+31776 ms: T5  escrevendo bloco  45
+31840 ms: T6  escreveu   bloco 194
+31840 ms: T6  escrevendo bloco  61
+31889 ms: T7  escreveu   bloco 178
+31889 ms: T7  escrevendo bloco  77
+31940 ms: T8  escreveu   bloco 162
+31940 ms: T8  escrevendo bloco  93
+32005 ms: T9  escreveu   bloco 146
+32005 ms: T9  escrevendo bloco 109
+32060 ms: T10 escreveu   bloco 130
+32060 ms: T10 escrevendo bloco 125
+32239 ms: T3  escreveu   bloco  13
+32239 ms: T3  lendo bloco  14
+32298 ms: T4  escreveu   bloco  29
+32298 ms: T4  lendo bloco  30
+32350 ms: T5  escreveu   bloco  45
+32350 ms: T5  lendo bloco  46
+32409 ms: T6  escreveu   bloco  61
+32409 ms: T6  lendo bloco  62
+32466 ms: T7  escreveu   bloco  77
+32466 ms: T7  lendo bloco  78
+32521 ms: T8  escreveu   bloco  93
+32521 ms: T8  lendo bloco  94
+32577 ms: T9  escreveu   bloco 109
+32577 ms: T9  lendo bloco 110
+32645 ms: T10 escreveu   bloco 125
+32645 ms: T10 lendo bloco 126
+32815 ms: T3  leu   bloco  14
+32815 ms: T3  lendo bloco 241
+32876 ms: T4  leu   bloco  30
+32876 ms: T4  lendo bloco 225
+32932 ms: T5  leu   bloco  46
+32932 ms: T5  lendo bloco 209
+33002 ms: T6  leu   bloco  62
+33002 ms: T6  lendo bloco 193
+33070 ms: T7  leu   bloco  78
+33070 ms: T7  lendo bloco 177
+33118 ms: T8  leu   bloco  94
+33118 ms: T8  lendo bloco 161
+33171 ms: T9  leu   bloco 110
+33171 ms: T9  lendo bloco 145
+33242 ms: T10 leu   bloco 126
+33242 ms: T10 lendo bloco 129
+33402 ms: T3  leu   bloco 241
+33402 ms: T3  bloco  14 tem: [<--bloco 0014-------------------------------------------------->]
+33402 ms: T3  bloco 241 tem: [<--bloco 0241-------------------------------------------------->]
+33402 ms: T3  escrevendo bloco 241
+33463 ms: T4  leu   bloco 225
+33463 ms: T4  bloco  30 tem: [<--bloco 0030-------------------------------------------------->]
+33463 ms: T4  bloco 225 tem: [<--bloco 0225-------------------------------------------------->]
+33463 ms: T4  escrevendo bloco 225
+33522 ms: T5  leu   bloco 209
+33522 ms: T5  bloco  46 tem: [<--bloco 0046-------------------------------------------------->]
+33522 ms: T5  bloco 209 tem: [<--bloco 0209-------------------------------------------------->]
+33522 ms: T5  escrevendo bloco 209
+33589 ms: T6  leu   bloco 193
+33589 ms: T6  bloco  62 tem: [<--bloco 0062-------------------------------------------------->]
+33589 ms: T6  bloco 193 tem: [<--bloco 0193-------------------------------------------------->]
+33589 ms: T6  escrevendo bloco 193
+33655 ms: T7  leu   bloco 177
+33655 ms: T7  bloco  78 tem: [<--bloco 0078-------------------------------------------------->]
+33655 ms: T7  bloco 177 tem: [<--bloco 0177-------------------------------------------------->]
+33655 ms: T7  escrevendo bloco 177
+33708 ms: T8  leu   bloco 161
+33708 ms: T8  bloco  94 tem: [<--bloco 0094-------------------------------------------------->]
+33708 ms: T8  bloco 161 tem: [<--bloco 0161-------------------------------------------------->]
+33708 ms: T8  escrevendo bloco 161
+33773 ms: T9  leu   bloco 145
+33773 ms: T9  bloco 110 tem: [<--bloco 0110-------------------------------------------------->]
+33773 ms: T9  bloco 145 tem: [<--bloco 0145-------------------------------------------------->]
+33773 ms: T9  escrevendo bloco 145
+33839 ms: T10 leu   bloco 129
+33839 ms: T10 bloco 126 tem: [<--bloco 0126-------------------------------------------------->]
+33839 ms: T10 bloco 129 tem: [<--bloco 0129-------------------------------------------------->]
+33839 ms: T10 escrevendo bloco 129
+34013 ms: T3  escreveu   bloco 241
+34013 ms: T3  escrevendo bloco  14
+34082 ms: T4  escreveu   bloco 225
+34082 ms: T4  escrevendo bloco  30
+34138 ms: T5  escreveu   bloco 209
+34138 ms: T5  escrevendo bloco  46
+34186 ms: T6  escreveu   bloco 193
+34186 ms: T6  escrevendo bloco  62
+34258 ms: T7  escreveu   bloco 177
+34258 ms: T7  escrevendo bloco  78
+34306 ms: T8  escreveu   bloco 161
+34306 ms: T8  escrevendo bloco  94
+34360 ms: T9  escreveu   bloco 145
+34360 ms: T9  escrevendo bloco 110
+34427 ms: T10 escreveu   bloco 129
+34427 ms: T10 escrevendo bloco 126
+34587 ms: T3  escreveu   bloco  14
+34587 ms: T3  lendo bloco  15
+34645 ms: T4  escreveu   bloco  30
+34645 ms: T4  lendo bloco  31
+34696 ms: T5  escreveu   bloco  46
+34696 ms: T5  lendo bloco  47
+34760 ms: T6  escreveu   bloco  62
+34760 ms: T6  lendo bloco  63
+34822 ms: T7  escreveu   bloco  78
+34822 ms: T7  lendo bloco  79
+34879 ms: T8  escreveu   bloco  94
+34879 ms: T8  lendo bloco  95
+34935 ms: T9  escreveu   bloco 110
+34935 ms: T9  lendo bloco 111
+34993 ms: T10 escreveu   bloco 126
+34993 ms: T10 lendo bloco 127
+35166 ms: T3  leu   bloco  15
+35166 ms: T3  lendo bloco 240
+35231 ms: T4  leu   bloco  31
+35231 ms: T4  lendo bloco 224
+35286 ms: T5  leu   bloco  47
+35286 ms: T5  lendo bloco 208
+35354 ms: T6  leu   bloco  63
+35354 ms: T6  lendo bloco 192
+35417 ms: T7  leu   bloco  79
+35417 ms: T7  lendo bloco 176
+35475 ms: T8  leu   bloco  95
+35475 ms: T8  lendo bloco 160
+35537 ms: T9  leu   bloco 111
+35537 ms: T9  lendo bloco 144
+35609 ms: T10 leu   bloco 127
+35609 ms: T10 lendo bloco 128
+35759 ms: T3  leu   bloco 240
+35759 ms: T3  bloco  15 tem: [<--bloco 0015-------------------------------------------------->]
+35759 ms: T3  bloco 240 tem: [<--bloco 0240-------------------------------------------------->]
+35759 ms: T3  escrevendo bloco 240
+35809 ms: T4  leu   bloco 224
+35809 ms: T4  bloco  31 tem: [<--bloco 0031-------------------------------------------------->]
+35809 ms: T4  bloco 224 tem: [<--bloco 0224-------------------------------------------------->]
+35809 ms: T4  escrevendo bloco 224
+35872 ms: T5  leu   bloco 208
+35872 ms: T5  bloco  47 tem: [<--bloco 0047-------------------------------------------------->]
+35872 ms: T5  bloco 208 tem: [<--bloco 0208-------------------------------------------------->]
+35872 ms: T5  escrevendo bloco 208
+35935 ms: T6  leu   bloco 192
+35935 ms: T6  bloco  63 tem: [<--bloco 0063-------------------------------------------------->]
+35935 ms: T6  bloco 192 tem: [<--bloco 0192-------------------------------------------------->]
+35935 ms: T6  escrevendo bloco 192
+35987 ms: T7  leu   bloco 176
+35987 ms: T7  bloco  79 tem: [<--bloco 0079-------------------------------------------------->]
+35987 ms: T7  bloco 176 tem: [<--bloco 0176-------------------------------------------------->]
+35987 ms: T7  escrevendo bloco 176
+36043 ms: T8  leu   bloco 160
+36043 ms: T8  bloco  95 tem: [<--bloco 0095-------------------------------------------------->]
+36043 ms: T8  bloco 160 tem: [<--bloco 0160-------------------------------------------------->]
+36043 ms: T8  escrevendo bloco 160
+36099 ms: T9  leu   bloco 144
+36099 ms: T9  bloco 111 tem: [<--bloco 0111-------------------------------------------------->]
+36099 ms: T9  bloco 144 tem: [<--bloco 0144-------------------------------------------------->]
+36099 ms: T9  escrevendo bloco 144
+36147 ms: T10 leu   bloco 128
+36147 ms: T10 bloco 127 tem: [<--bloco 0127-------------------------------------------------->]
+36147 ms: T10 bloco 128 tem: [<--bloco 0128-------------------------------------------------->]
+36147 ms: T10 escrevendo bloco 128
+36302 ms: T3  escreveu   bloco 240
+36302 ms: T3  escrevendo bloco  15
+36365 ms: T4  escreveu   bloco 224
+36365 ms: T4  escrevendo bloco  31
+36439 ms: T5  escreveu   bloco 208
+36439 ms: T5  escrevendo bloco  47
+36486 ms: T6  escreveu   bloco 192
+36486 ms: T6  escrevendo bloco  63
+36549 ms: T7  escreveu   bloco 176
+36549 ms: T7  escrevendo bloco  79
+36603 ms: T8  escreveu   bloco 160
+36603 ms: T8  escrevendo bloco  95
+36672 ms: T9  escreveu   bloco 144
+36672 ms: T9  escrevendo bloco 111
+36739 ms: T10 escreveu   bloco 128
+36739 ms: T10 escrevendo bloco 127
+36904 ms: T3  escreveu   bloco  15
+36904 ms: T3  terminou
+PPOS: task 3 ((null)) exit code 0, 36905 ms elapsed time,     2 ms cpu time,    65 activations
+36975 ms: T4  escreveu   bloco  31
+36975 ms: T4  terminou
+PPOS: task 4 ((null)) exit code 0, 36975 ms elapsed time,     1 ms cpu time,    65 activations
+37033 ms: T5  escreveu   bloco  47
+37033 ms: T5  terminou
+PPOS: task 5 ((null)) exit code 0, 37033 ms elapsed time,     0 ms cpu time,    65 activations
+37083 ms: T6  escreveu   bloco  63
+37083 ms: T6  terminou
+PPOS: task 6 ((null)) exit code 0, 37083 ms elapsed time,     1 ms cpu time,    65 activations
+37136 ms: T7  escreveu   bloco  79
+37136 ms: T7  terminou
+PPOS: task 7 ((null)) exit code 0, 37136 ms elapsed time,     0 ms cpu time,    65 activations
+37202 ms: T8  escreveu   bloco  95
+37202 ms: T8  terminou
+PPOS: task 8 ((null)) exit code 0, 37202 ms elapsed time,     0 ms cpu time,    65 activations
+37260 ms: T9  escreveu   bloco 111
+37260 ms: T9  terminou
+PPOS: task 9 ((null)) exit code 0, 37260 ms elapsed time,     0 ms cpu time,    65 activations
+37312 ms: T10 escreveu   bloco 127
+37312 ms: T10 terminou
+PPOS: task 10 ((null)) exit code 0, 37312 ms elapsed time,     2 ms cpu time,    65 activations
+user: fim
+PPOS: task 2 (user) exit code 0, 37312 ms elapsed time,     0 ms cpu time,     9 activations
+PPOS: task 0 (kernel) exit code 0, 37312 ms elapsed time, 37303 ms cpu time,  1547 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 37312 ms)
diff --git a/ppos/test/pingpong-disco.c b/ppos/test/pingpong-disco.c
new file mode 100644 (file)
index 0000000..0a37c51
--- /dev/null
@@ -0,0 +1,81 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste das operações de acesso a disco com uma única tarefa,
+// que lê e escreve/altera todos os blocos do disco.
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+static int num_blk;     // numero de blocos no disco
+static int blk_size;    // tamanho de cada bloco (bytes)
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+    unsigned char c, *buffer;
+
+    printf("%5d ms: user: inicio\n", systime());
+
+    // busca geometria do disco
+    num_blk = block_blocks();
+    assert(num_blk);
+    blk_size = block_size();
+    assert(blk_size);
+
+    printf("%5d ms: disco contem %d blocos de %d bytes cada\n",
+           systime(), num_blk, blk_size);
+
+    // aloca o buffer para ler blocos do disco
+    buffer = mem_alloc(blk_size);
+    assert(buffer);
+
+    // lê e imprime todos os blocos do disco, um a um
+    for (int i = 0; i < num_blk; i++)
+    {
+        // lê o bloco i do disco no buffer
+        printf("%5d ms: lendo bloco %d\n", systime(), i);
+        status = block_read(i, buffer);
+        if (status)
+            printf("Erro ao ler bloco %d!\n", i);
+
+        // mostra o conteudo do buffer
+        printf("%5d ms: buffer: [", systime());
+        for (int j = 0; j < blk_size; j++)
+            printf("%c", buffer[j]);
+        printf("]\n");
+    }
+
+    // inicia gerador de números aleatórios
+    randseed(systime());
+
+    // lê e imprime todos os blocos do disco, um a um
+    for (int i = 0; i < num_blk; i++)
+    {
+
+        // preenche o buffer com um caractere aleatório
+        c = 32 + randnum() % 48;
+        for (int j = 0; j < blk_size; j++)
+            buffer[j] = c;
+
+        // escreve o buffer no bloco i do disco
+        printf("%5d ms: escrevendo bloco %d com caracteres \"%c\"\n",
+               systime(), i, c);
+        status = block_write(i, buffer);
+        if (status)
+            printf("Erro ao escrever bloco %d!\n", i);
+    }
+
+    // libera o buffer de blocos do disco
+    mem_free(buffer);
+
+    printf("%5d ms: user fim\n", systime());
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-disco.txt b/ppos/test/pingpong-disco.txt
new file mode 100644 (file)
index 0000000..8ece4f1
--- /dev/null
@@ -0,0 +1,778 @@
+PPOS: system starting
+PPOS: disk driver started (disk has 256 blocks of 64 bytes each)
+PPOS: system started (uptime 0 ms)
+    0 ms: user: inicio
+    0 ms: disco contem 256 blocos de 64 bytes cada
+    0 ms: lendo bloco 0
+   37 ms: buffer: [<--bloco 0000-------------------------------------------------->]
+   37 ms: lendo bloco 1
+   69 ms: buffer: [<--bloco 0001-------------------------------------------------->]
+   69 ms: lendo bloco 2
+  120 ms: buffer: [<--bloco 0002-------------------------------------------------->]
+  120 ms: lendo bloco 3
+  153 ms: buffer: [<--bloco 0003-------------------------------------------------->]
+  153 ms: lendo bloco 4
+  204 ms: buffer: [<--bloco 0004-------------------------------------------------->]
+  204 ms: lendo bloco 5
+  237 ms: buffer: [<--bloco 0005-------------------------------------------------->]
+  237 ms: lendo bloco 6
+  272 ms: buffer: [<--bloco 0006-------------------------------------------------->]
+  272 ms: lendo bloco 7
+  304 ms: buffer: [<--bloco 0007-------------------------------------------------->]
+  304 ms: lendo bloco 8
+  359 ms: buffer: [<--bloco 0008-------------------------------------------------->]
+  359 ms: lendo bloco 9
+  400 ms: buffer: [<--bloco 0009-------------------------------------------------->]
+  400 ms: lendo bloco 10
+  452 ms: buffer: [<--bloco 0010-------------------------------------------------->]
+  452 ms: lendo bloco 11
+  507 ms: buffer: [<--bloco 0011-------------------------------------------------->]
+  507 ms: lendo bloco 12
+  552 ms: buffer: [<--bloco 0012-------------------------------------------------->]
+  552 ms: lendo bloco 13
+  599 ms: buffer: [<--bloco 0013-------------------------------------------------->]
+  599 ms: lendo bloco 14
+  641 ms: buffer: [<--bloco 0014-------------------------------------------------->]
+  641 ms: lendo bloco 15
+  688 ms: buffer: [<--bloco 0015-------------------------------------------------->]
+  688 ms: lendo bloco 16
+  726 ms: buffer: [<--bloco 0016-------------------------------------------------->]
+  726 ms: lendo bloco 17
+  778 ms: buffer: [<--bloco 0017-------------------------------------------------->]
+  778 ms: lendo bloco 18
+  814 ms: buffer: [<--bloco 0018-------------------------------------------------->]
+  814 ms: lendo bloco 19
+  867 ms: buffer: [<--bloco 0019-------------------------------------------------->]
+  867 ms: lendo bloco 20
+  923 ms: buffer: [<--bloco 0020-------------------------------------------------->]
+  923 ms: lendo bloco 21
+  972 ms: buffer: [<--bloco 0021-------------------------------------------------->]
+  972 ms: lendo bloco 22
+ 1030 ms: buffer: [<--bloco 0022-------------------------------------------------->]
+ 1030 ms: lendo bloco 23
+ 1085 ms: buffer: [<--bloco 0023-------------------------------------------------->]
+ 1085 ms: lendo bloco 24
+ 1131 ms: buffer: [<--bloco 0024-------------------------------------------------->]
+ 1131 ms: lendo bloco 25
+ 1179 ms: buffer: [<--bloco 0025-------------------------------------------------->]
+ 1179 ms: lendo bloco 26
+ 1234 ms: buffer: [<--bloco 0026-------------------------------------------------->]
+ 1234 ms: lendo bloco 27
+ 1275 ms: buffer: [<--bloco 0027-------------------------------------------------->]
+ 1275 ms: lendo bloco 28
+ 1310 ms: buffer: [<--bloco 0028-------------------------------------------------->]
+ 1310 ms: lendo bloco 29
+ 1355 ms: buffer: [<--bloco 0029-------------------------------------------------->]
+ 1355 ms: lendo bloco 30
+ 1391 ms: buffer: [<--bloco 0030-------------------------------------------------->]
+ 1391 ms: lendo bloco 31
+ 1429 ms: buffer: [<--bloco 0031-------------------------------------------------->]
+ 1429 ms: lendo bloco 32
+ 1476 ms: buffer: [<--bloco 0032-------------------------------------------------->]
+ 1476 ms: lendo bloco 33
+ 1529 ms: buffer: [<--bloco 0033-------------------------------------------------->]
+ 1529 ms: lendo bloco 34
+ 1565 ms: buffer: [<--bloco 0034-------------------------------------------------->]
+ 1565 ms: lendo bloco 35
+ 1602 ms: buffer: [<--bloco 0035-------------------------------------------------->]
+ 1602 ms: lendo bloco 36
+ 1658 ms: buffer: [<--bloco 0036-------------------------------------------------->]
+ 1658 ms: lendo bloco 37
+ 1699 ms: buffer: [<--bloco 0037-------------------------------------------------->]
+ 1699 ms: lendo bloco 38
+ 1733 ms: buffer: [<--bloco 0038-------------------------------------------------->]
+ 1733 ms: lendo bloco 39
+ 1787 ms: buffer: [<--bloco 0039-------------------------------------------------->]
+ 1787 ms: lendo bloco 40
+ 1833 ms: buffer: [<--bloco 0040-------------------------------------------------->]
+ 1833 ms: lendo bloco 41
+ 1889 ms: buffer: [<--bloco 0041-------------------------------------------------->]
+ 1889 ms: lendo bloco 42
+ 1937 ms: buffer: [<--bloco 0042-------------------------------------------------->]
+ 1937 ms: lendo bloco 43
+ 1970 ms: buffer: [<--bloco 0043-------------------------------------------------->]
+ 1970 ms: lendo bloco 44
+ 2011 ms: buffer: [<--bloco 0044-------------------------------------------------->]
+ 2011 ms: lendo bloco 45
+ 2066 ms: buffer: [<--bloco 0045-------------------------------------------------->]
+ 2066 ms: lendo bloco 46
+ 2113 ms: buffer: [<--bloco 0046-------------------------------------------------->]
+ 2113 ms: lendo bloco 47
+ 2160 ms: buffer: [<--bloco 0047-------------------------------------------------->]
+ 2160 ms: lendo bloco 48
+ 2206 ms: buffer: [<--bloco 0048-------------------------------------------------->]
+ 2206 ms: lendo bloco 49
+ 2258 ms: buffer: [<--bloco 0049-------------------------------------------------->]
+ 2258 ms: lendo bloco 50
+ 2298 ms: buffer: [<--bloco 0050-------------------------------------------------->]
+ 2298 ms: lendo bloco 51
+ 2342 ms: buffer: [<--bloco 0051-------------------------------------------------->]
+ 2342 ms: lendo bloco 52
+ 2382 ms: buffer: [<--bloco 0052-------------------------------------------------->]
+ 2382 ms: lendo bloco 53
+ 2420 ms: buffer: [<--bloco 0053-------------------------------------------------->]
+ 2420 ms: lendo bloco 54
+ 2462 ms: buffer: [<--bloco 0054-------------------------------------------------->]
+ 2462 ms: lendo bloco 55
+ 2517 ms: buffer: [<--bloco 0055-------------------------------------------------->]
+ 2517 ms: lendo bloco 56
+ 2570 ms: buffer: [<--bloco 0056-------------------------------------------------->]
+ 2570 ms: lendo bloco 57
+ 2606 ms: buffer: [<--bloco 0057-------------------------------------------------->]
+ 2606 ms: lendo bloco 58
+ 2644 ms: buffer: [<--bloco 0058-------------------------------------------------->]
+ 2644 ms: lendo bloco 59
+ 2696 ms: buffer: [<--bloco 0059-------------------------------------------------->]
+ 2696 ms: lendo bloco 60
+ 2746 ms: buffer: [<--bloco 0060-------------------------------------------------->]
+ 2746 ms: lendo bloco 61
+ 2790 ms: buffer: [<--bloco 0061-------------------------------------------------->]
+ 2790 ms: lendo bloco 62
+ 2823 ms: buffer: [<--bloco 0062-------------------------------------------------->]
+ 2823 ms: lendo bloco 63
+ 2862 ms: buffer: [<--bloco 0063-------------------------------------------------->]
+ 2862 ms: lendo bloco 64
+ 2898 ms: buffer: [<--bloco 0064-------------------------------------------------->]
+ 2898 ms: lendo bloco 65
+ 2932 ms: buffer: [<--bloco 0065-------------------------------------------------->]
+ 2932 ms: lendo bloco 66
+ 2973 ms: buffer: [<--bloco 0066-------------------------------------------------->]
+ 2973 ms: lendo bloco 67
+ 3007 ms: buffer: [<--bloco 0067-------------------------------------------------->]
+ 3007 ms: lendo bloco 68
+ 3048 ms: buffer: [<--bloco 0068-------------------------------------------------->]
+ 3048 ms: lendo bloco 69
+ 3093 ms: buffer: [<--bloco 0069-------------------------------------------------->]
+ 3093 ms: lendo bloco 70
+ 3147 ms: buffer: [<--bloco 0070-------------------------------------------------->]
+ 3147 ms: lendo bloco 71
+ 3200 ms: buffer: [<--bloco 0071-------------------------------------------------->]
+ 3200 ms: lendo bloco 72
+ 3238 ms: buffer: [<--bloco 0072-------------------------------------------------->]
+ 3238 ms: lendo bloco 73
+ 3282 ms: buffer: [<--bloco 0073-------------------------------------------------->]
+ 3282 ms: lendo bloco 74
+ 3339 ms: buffer: [<--bloco 0074-------------------------------------------------->]
+ 3339 ms: lendo bloco 75
+ 3387 ms: buffer: [<--bloco 0075-------------------------------------------------->]
+ 3387 ms: lendo bloco 76
+ 3425 ms: buffer: [<--bloco 0076-------------------------------------------------->]
+ 3425 ms: lendo bloco 77
+ 3466 ms: buffer: [<--bloco 0077-------------------------------------------------->]
+ 3466 ms: lendo bloco 78
+ 3501 ms: buffer: [<--bloco 0078-------------------------------------------------->]
+ 3501 ms: lendo bloco 79
+ 3555 ms: buffer: [<--bloco 0079-------------------------------------------------->]
+ 3555 ms: lendo bloco 80
+ 3586 ms: buffer: [<--bloco 0080-------------------------------------------------->]
+ 3586 ms: lendo bloco 81
+ 3623 ms: buffer: [<--bloco 0081-------------------------------------------------->]
+ 3623 ms: lendo bloco 82
+ 3663 ms: buffer: [<--bloco 0082-------------------------------------------------->]
+ 3663 ms: lendo bloco 83
+ 3703 ms: buffer: [<--bloco 0083-------------------------------------------------->]
+ 3703 ms: lendo bloco 84
+ 3749 ms: buffer: [<--bloco 0084-------------------------------------------------->]
+ 3749 ms: lendo bloco 85
+ 3797 ms: buffer: [<--bloco 0085-------------------------------------------------->]
+ 3797 ms: lendo bloco 86
+ 3831 ms: buffer: [<--bloco 0086-------------------------------------------------->]
+ 3831 ms: lendo bloco 87
+ 3872 ms: buffer: [<--bloco 0087-------------------------------------------------->]
+ 3872 ms: lendo bloco 88
+ 3926 ms: buffer: [<--bloco 0088-------------------------------------------------->]
+ 3926 ms: lendo bloco 89
+ 3967 ms: buffer: [<--bloco 0089-------------------------------------------------->]
+ 3967 ms: lendo bloco 90
+ 4002 ms: buffer: [<--bloco 0090-------------------------------------------------->]
+ 4002 ms: lendo bloco 91
+ 4048 ms: buffer: [<--bloco 0091-------------------------------------------------->]
+ 4048 ms: lendo bloco 92
+ 4099 ms: buffer: [<--bloco 0092-------------------------------------------------->]
+ 4099 ms: lendo bloco 93
+ 4131 ms: buffer: [<--bloco 0093-------------------------------------------------->]
+ 4131 ms: lendo bloco 94
+ 4181 ms: buffer: [<--bloco 0094-------------------------------------------------->]
+ 4181 ms: lendo bloco 95
+ 4237 ms: buffer: [<--bloco 0095-------------------------------------------------->]
+ 4237 ms: lendo bloco 96
+ 4270 ms: buffer: [<--bloco 0096-------------------------------------------------->]
+ 4270 ms: lendo bloco 97
+ 4304 ms: buffer: [<--bloco 0097-------------------------------------------------->]
+ 4304 ms: lendo bloco 98
+ 4361 ms: buffer: [<--bloco 0098-------------------------------------------------->]
+ 4361 ms: lendo bloco 99
+ 4403 ms: buffer: [<--bloco 0099-------------------------------------------------->]
+ 4403 ms: lendo bloco 100
+ 4447 ms: buffer: [<--bloco 0100-------------------------------------------------->]
+ 4447 ms: lendo bloco 101
+ 4497 ms: buffer: [<--bloco 0101-------------------------------------------------->]
+ 4497 ms: lendo bloco 102
+ 4535 ms: buffer: [<--bloco 0102-------------------------------------------------->]
+ 4535 ms: lendo bloco 103
+ 4587 ms: buffer: [<--bloco 0103-------------------------------------------------->]
+ 4587 ms: lendo bloco 104
+ 4619 ms: buffer: [<--bloco 0104-------------------------------------------------->]
+ 4619 ms: lendo bloco 105
+ 4652 ms: buffer: [<--bloco 0105-------------------------------------------------->]
+ 4652 ms: lendo bloco 106
+ 4690 ms: buffer: [<--bloco 0106-------------------------------------------------->]
+ 4690 ms: lendo bloco 107
+ 4730 ms: buffer: [<--bloco 0107-------------------------------------------------->]
+ 4730 ms: lendo bloco 108
+ 4769 ms: buffer: [<--bloco 0108-------------------------------------------------->]
+ 4769 ms: lendo bloco 109
+ 4807 ms: buffer: [<--bloco 0109-------------------------------------------------->]
+ 4807 ms: lendo bloco 110
+ 4843 ms: buffer: [<--bloco 0110-------------------------------------------------->]
+ 4843 ms: lendo bloco 111
+ 4880 ms: buffer: [<--bloco 0111-------------------------------------------------->]
+ 4880 ms: lendo bloco 112
+ 4926 ms: buffer: [<--bloco 0112-------------------------------------------------->]
+ 4926 ms: lendo bloco 113
+ 4968 ms: buffer: [<--bloco 0113-------------------------------------------------->]
+ 4968 ms: lendo bloco 114
+ 5010 ms: buffer: [<--bloco 0114-------------------------------------------------->]
+ 5010 ms: lendo bloco 115
+ 5041 ms: buffer: [<--bloco 0115-------------------------------------------------->]
+ 5041 ms: lendo bloco 116
+ 5073 ms: buffer: [<--bloco 0116-------------------------------------------------->]
+ 5073 ms: lendo bloco 117
+ 5118 ms: buffer: [<--bloco 0117-------------------------------------------------->]
+ 5118 ms: lendo bloco 118
+ 5155 ms: buffer: [<--bloco 0118-------------------------------------------------->]
+ 5155 ms: lendo bloco 119
+ 5210 ms: buffer: [<--bloco 0119-------------------------------------------------->]
+ 5210 ms: lendo bloco 120
+ 5263 ms: buffer: [<--bloco 0120-------------------------------------------------->]
+ 5263 ms: lendo bloco 121
+ 5300 ms: buffer: [<--bloco 0121-------------------------------------------------->]
+ 5300 ms: lendo bloco 122
+ 5339 ms: buffer: [<--bloco 0122-------------------------------------------------->]
+ 5339 ms: lendo bloco 123
+ 5385 ms: buffer: [<--bloco 0123-------------------------------------------------->]
+ 5385 ms: lendo bloco 124
+ 5425 ms: buffer: [<--bloco 0124-------------------------------------------------->]
+ 5425 ms: lendo bloco 125
+ 5457 ms: buffer: [<--bloco 0125-------------------------------------------------->]
+ 5457 ms: lendo bloco 126
+ 5498 ms: buffer: [<--bloco 0126-------------------------------------------------->]
+ 5498 ms: lendo bloco 127
+ 5535 ms: buffer: [<--bloco 0127-------------------------------------------------->]
+ 5535 ms: lendo bloco 128
+ 5567 ms: buffer: [<--bloco 0128-------------------------------------------------->]
+ 5567 ms: lendo bloco 129
+ 5604 ms: buffer: [<--bloco 0129-------------------------------------------------->]
+ 5604 ms: lendo bloco 130
+ 5649 ms: buffer: [<--bloco 0130-------------------------------------------------->]
+ 5649 ms: lendo bloco 131
+ 5690 ms: buffer: [<--bloco 0131-------------------------------------------------->]
+ 5690 ms: lendo bloco 132
+ 5746 ms: buffer: [<--bloco 0132-------------------------------------------------->]
+ 5746 ms: lendo bloco 133
+ 5796 ms: buffer: [<--bloco 0133-------------------------------------------------->]
+ 5796 ms: lendo bloco 134
+ 5827 ms: buffer: [<--bloco 0134-------------------------------------------------->]
+ 5827 ms: lendo bloco 135
+ 5858 ms: buffer: [<--bloco 0135-------------------------------------------------->]
+ 5858 ms: lendo bloco 136
+ 5905 ms: buffer: [<--bloco 0136-------------------------------------------------->]
+ 5905 ms: lendo bloco 137
+ 5944 ms: buffer: [<--bloco 0137-------------------------------------------------->]
+ 5944 ms: lendo bloco 138
+ 5980 ms: buffer: [<--bloco 0138-------------------------------------------------->]
+ 5980 ms: lendo bloco 139
+ 6037 ms: buffer: [<--bloco 0139-------------------------------------------------->]
+ 6037 ms: lendo bloco 140
+ 6079 ms: buffer: [<--bloco 0140-------------------------------------------------->]
+ 6079 ms: lendo bloco 141
+ 6120 ms: buffer: [<--bloco 0141-------------------------------------------------->]
+ 6120 ms: lendo bloco 142
+ 6151 ms: buffer: [<--bloco 0142-------------------------------------------------->]
+ 6151 ms: lendo bloco 143
+ 6208 ms: buffer: [<--bloco 0143-------------------------------------------------->]
+ 6208 ms: lendo bloco 144
+ 6257 ms: buffer: [<--bloco 0144-------------------------------------------------->]
+ 6257 ms: lendo bloco 145
+ 6299 ms: buffer: [<--bloco 0145-------------------------------------------------->]
+ 6299 ms: lendo bloco 146
+ 6330 ms: buffer: [<--bloco 0146-------------------------------------------------->]
+ 6330 ms: lendo bloco 147
+ 6380 ms: buffer: [<--bloco 0147-------------------------------------------------->]
+ 6380 ms: lendo bloco 148
+ 6438 ms: buffer: [<--bloco 0148-------------------------------------------------->]
+ 6438 ms: lendo bloco 149
+ 6475 ms: buffer: [<--bloco 0149-------------------------------------------------->]
+ 6475 ms: lendo bloco 150
+ 6519 ms: buffer: [<--bloco 0150-------------------------------------------------->]
+ 6519 ms: lendo bloco 151
+ 6571 ms: buffer: [<--bloco 0151-------------------------------------------------->]
+ 6571 ms: lendo bloco 152
+ 6611 ms: buffer: [<--bloco 0152-------------------------------------------------->]
+ 6611 ms: lendo bloco 153
+ 6659 ms: buffer: [<--bloco 0153-------------------------------------------------->]
+ 6659 ms: lendo bloco 154
+ 6696 ms: buffer: [<--bloco 0154-------------------------------------------------->]
+ 6696 ms: lendo bloco 155
+ 6741 ms: buffer: [<--bloco 0155-------------------------------------------------->]
+ 6741 ms: lendo bloco 156
+ 6786 ms: buffer: [<--bloco 0156-------------------------------------------------->]
+ 6786 ms: lendo bloco 157
+ 6831 ms: buffer: [<--bloco 0157-------------------------------------------------->]
+ 6831 ms: lendo bloco 158
+ 6883 ms: buffer: [<--bloco 0158-------------------------------------------------->]
+ 6883 ms: lendo bloco 159
+ 6930 ms: buffer: [<--bloco 0159-------------------------------------------------->]
+ 6930 ms: lendo bloco 160
+ 6981 ms: buffer: [<--bloco 0160-------------------------------------------------->]
+ 6981 ms: lendo bloco 161
+ 7020 ms: buffer: [<--bloco 0161-------------------------------------------------->]
+ 7020 ms: lendo bloco 162
+ 7073 ms: buffer: [<--bloco 0162-------------------------------------------------->]
+ 7073 ms: lendo bloco 163
+ 7119 ms: buffer: [<--bloco 0163-------------------------------------------------->]
+ 7119 ms: lendo bloco 164
+ 7150 ms: buffer: [<--bloco 0164-------------------------------------------------->]
+ 7150 ms: lendo bloco 165
+ 7205 ms: buffer: [<--bloco 0165-------------------------------------------------->]
+ 7205 ms: lendo bloco 166
+ 7252 ms: buffer: [<--bloco 0166-------------------------------------------------->]
+ 7252 ms: lendo bloco 167
+ 7296 ms: buffer: [<--bloco 0167-------------------------------------------------->]
+ 7296 ms: lendo bloco 168
+ 7331 ms: buffer: [<--bloco 0168-------------------------------------------------->]
+ 7331 ms: lendo bloco 169
+ 7380 ms: buffer: [<--bloco 0169-------------------------------------------------->]
+ 7380 ms: lendo bloco 170
+ 7422 ms: buffer: [<--bloco 0170-------------------------------------------------->]
+ 7422 ms: lendo bloco 171
+ 7465 ms: buffer: [<--bloco 0171-------------------------------------------------->]
+ 7465 ms: lendo bloco 172
+ 7522 ms: buffer: [<--bloco 0172-------------------------------------------------->]
+ 7522 ms: lendo bloco 173
+ 7564 ms: buffer: [<--bloco 0173-------------------------------------------------->]
+ 7564 ms: lendo bloco 174
+ 7607 ms: buffer: [<--bloco 0174-------------------------------------------------->]
+ 7607 ms: lendo bloco 175
+ 7655 ms: buffer: [<--bloco 0175-------------------------------------------------->]
+ 7655 ms: lendo bloco 176
+ 7705 ms: buffer: [<--bloco 0176-------------------------------------------------->]
+ 7705 ms: lendo bloco 177
+ 7745 ms: buffer: [<--bloco 0177-------------------------------------------------->]
+ 7745 ms: lendo bloco 178
+ 7785 ms: buffer: [<--bloco 0178-------------------------------------------------->]
+ 7785 ms: lendo bloco 179
+ 7835 ms: buffer: [<--bloco 0179-------------------------------------------------->]
+ 7835 ms: lendo bloco 180
+ 7877 ms: buffer: [<--bloco 0180-------------------------------------------------->]
+ 7877 ms: lendo bloco 181
+ 7927 ms: buffer: [<--bloco 0181-------------------------------------------------->]
+ 7927 ms: lendo bloco 182
+ 7968 ms: buffer: [<--bloco 0182-------------------------------------------------->]
+ 7968 ms: lendo bloco 183
+ 8019 ms: buffer: [<--bloco 0183-------------------------------------------------->]
+ 8019 ms: lendo bloco 184
+ 8059 ms: buffer: [<--bloco 0184-------------------------------------------------->]
+ 8059 ms: lendo bloco 185
+ 8103 ms: buffer: [<--bloco 0185-------------------------------------------------->]
+ 8103 ms: lendo bloco 186
+ 8142 ms: buffer: [<--bloco 0186-------------------------------------------------->]
+ 8142 ms: lendo bloco 187
+ 8198 ms: buffer: [<--bloco 0187-------------------------------------------------->]
+ 8198 ms: lendo bloco 188
+ 8229 ms: buffer: [<--bloco 0188-------------------------------------------------->]
+ 8229 ms: lendo bloco 189
+ 8262 ms: buffer: [<--bloco 0189-------------------------------------------------->]
+ 8262 ms: lendo bloco 190
+ 8301 ms: buffer: [<--bloco 0190-------------------------------------------------->]
+ 8301 ms: lendo bloco 191
+ 8353 ms: buffer: [<--bloco 0191-------------------------------------------------->]
+ 8353 ms: lendo bloco 192
+ 8391 ms: buffer: [<--bloco 0192-------------------------------------------------->]
+ 8391 ms: lendo bloco 193
+ 8427 ms: buffer: [<--bloco 0193-------------------------------------------------->]
+ 8427 ms: lendo bloco 194
+ 8464 ms: buffer: [<--bloco 0194-------------------------------------------------->]
+ 8464 ms: lendo bloco 195
+ 8498 ms: buffer: [<--bloco 0195-------------------------------------------------->]
+ 8498 ms: lendo bloco 196
+ 8529 ms: buffer: [<--bloco 0196-------------------------------------------------->]
+ 8529 ms: lendo bloco 197
+ 8583 ms: buffer: [<--bloco 0197-------------------------------------------------->]
+ 8583 ms: lendo bloco 198
+ 8630 ms: buffer: [<--bloco 0198-------------------------------------------------->]
+ 8630 ms: lendo bloco 199
+ 8661 ms: buffer: [<--bloco 0199-------------------------------------------------->]
+ 8661 ms: lendo bloco 200
+ 8706 ms: buffer: [<--bloco 0200-------------------------------------------------->]
+ 8706 ms: lendo bloco 201
+ 8761 ms: buffer: [<--bloco 0201-------------------------------------------------->]
+ 8761 ms: lendo bloco 202
+ 8805 ms: buffer: [<--bloco 0202-------------------------------------------------->]
+ 8805 ms: lendo bloco 203
+ 8849 ms: buffer: [<--bloco 0203-------------------------------------------------->]
+ 8849 ms: lendo bloco 204
+ 8885 ms: buffer: [<--bloco 0204-------------------------------------------------->]
+ 8885 ms: lendo bloco 205
+ 8937 ms: buffer: [<--bloco 0205-------------------------------------------------->]
+ 8937 ms: lendo bloco 206
+ 8995 ms: buffer: [<--bloco 0206-------------------------------------------------->]
+ 8995 ms: lendo bloco 207
+ 9051 ms: buffer: [<--bloco 0207-------------------------------------------------->]
+ 9051 ms: lendo bloco 208
+ 9085 ms: buffer: [<--bloco 0208-------------------------------------------------->]
+ 9085 ms: lendo bloco 209
+ 9121 ms: buffer: [<--bloco 0209-------------------------------------------------->]
+ 9121 ms: lendo bloco 210
+ 9165 ms: buffer: [<--bloco 0210-------------------------------------------------->]
+ 9165 ms: lendo bloco 211
+ 9206 ms: buffer: [<--bloco 0211-------------------------------------------------->]
+ 9206 ms: lendo bloco 212
+ 9261 ms: buffer: [<--bloco 0212-------------------------------------------------->]
+ 9261 ms: lendo bloco 213
+ 9312 ms: buffer: [<--bloco 0213-------------------------------------------------->]
+ 9312 ms: lendo bloco 214
+ 9348 ms: buffer: [<--bloco 0214-------------------------------------------------->]
+ 9348 ms: lendo bloco 215
+ 9382 ms: buffer: [<--bloco 0215-------------------------------------------------->]
+ 9382 ms: lendo bloco 216
+ 9420 ms: buffer: [<--bloco 0216-------------------------------------------------->]
+ 9420 ms: lendo bloco 217
+ 9460 ms: buffer: [<--bloco 0217-------------------------------------------------->]
+ 9460 ms: lendo bloco 218
+ 9515 ms: buffer: [<--bloco 0218-------------------------------------------------->]
+ 9515 ms: lendo bloco 219
+ 9555 ms: buffer: [<--bloco 0219-------------------------------------------------->]
+ 9555 ms: lendo bloco 220
+ 9594 ms: buffer: [<--bloco 0220-------------------------------------------------->]
+ 9594 ms: lendo bloco 221
+ 9630 ms: buffer: [<--bloco 0221-------------------------------------------------->]
+ 9630 ms: lendo bloco 222
+ 9687 ms: buffer: [<--bloco 0222-------------------------------------------------->]
+ 9687 ms: lendo bloco 223
+ 9734 ms: buffer: [<--bloco 0223-------------------------------------------------->]
+ 9734 ms: lendo bloco 224
+ 9771 ms: buffer: [<--bloco 0224-------------------------------------------------->]
+ 9771 ms: lendo bloco 225
+ 9808 ms: buffer: [<--bloco 0225-------------------------------------------------->]
+ 9808 ms: lendo bloco 226
+ 9854 ms: buffer: [<--bloco 0226-------------------------------------------------->]
+ 9854 ms: lendo bloco 227
+ 9887 ms: buffer: [<--bloco 0227-------------------------------------------------->]
+ 9887 ms: lendo bloco 228
+ 9943 ms: buffer: [<--bloco 0228-------------------------------------------------->]
+ 9943 ms: lendo bloco 229
+ 9975 ms: buffer: [<--bloco 0229-------------------------------------------------->]
+ 9975 ms: lendo bloco 230
+10009 ms: buffer: [<--bloco 0230-------------------------------------------------->]
+10009 ms: lendo bloco 231
+10049 ms: buffer: [<--bloco 0231-------------------------------------------------->]
+10049 ms: lendo bloco 232
+10103 ms: buffer: [<--bloco 0232-------------------------------------------------->]
+10103 ms: lendo bloco 233
+10147 ms: buffer: [<--bloco 0233-------------------------------------------------->]
+10147 ms: lendo bloco 234
+10196 ms: buffer: [<--bloco 0234-------------------------------------------------->]
+10196 ms: lendo bloco 235
+10250 ms: buffer: [<--bloco 0235-------------------------------------------------->]
+10250 ms: lendo bloco 236
+10286 ms: buffer: [<--bloco 0236-------------------------------------------------->]
+10286 ms: lendo bloco 237
+10335 ms: buffer: [<--bloco 0237-------------------------------------------------->]
+10335 ms: lendo bloco 238
+10387 ms: buffer: [<--bloco 0238-------------------------------------------------->]
+10387 ms: lendo bloco 239
+10422 ms: buffer: [<--bloco 0239-------------------------------------------------->]
+10422 ms: lendo bloco 240
+10477 ms: buffer: [<--bloco 0240-------------------------------------------------->]
+10477 ms: lendo bloco 241
+10512 ms: buffer: [<--bloco 0241-------------------------------------------------->]
+10512 ms: lendo bloco 242
+10557 ms: buffer: [<--bloco 0242-------------------------------------------------->]
+10557 ms: lendo bloco 243
+10606 ms: buffer: [<--bloco 0243-------------------------------------------------->]
+10606 ms: lendo bloco 244
+10663 ms: buffer: [<--bloco 0244-------------------------------------------------->]
+10663 ms: lendo bloco 245
+10709 ms: buffer: [<--bloco 0245-------------------------------------------------->]
+10709 ms: lendo bloco 246
+10762 ms: buffer: [<--bloco 0246-------------------------------------------------->]
+10762 ms: lendo bloco 247
+10795 ms: buffer: [<--bloco 0247-------------------------------------------------->]
+10795 ms: lendo bloco 248
+10851 ms: buffer: [<--bloco 0248-------------------------------------------------->]
+10851 ms: lendo bloco 249
+10902 ms: buffer: [<--bloco 0249-------------------------------------------------->]
+10902 ms: lendo bloco 250
+10943 ms: buffer: [<--bloco 0250-------------------------------------------------->]
+10943 ms: lendo bloco 251
+10980 ms: buffer: [<--bloco 0251-------------------------------------------------->]
+10980 ms: lendo bloco 252
+11032 ms: buffer: [<--bloco 0252-------------------------------------------------->]
+11032 ms: lendo bloco 253
+11069 ms: buffer: [<--bloco 0253-------------------------------------------------->]
+11069 ms: lendo bloco 254
+11117 ms: buffer: [<--bloco 0254-------------------------------------------------->]
+11117 ms: lendo bloco 255
+11148 ms: buffer: [<--bloco 0255-------------------------------------------------->]
+11148 ms: escrevendo bloco 0 com caracteres "K"
+11459 ms: escrevendo bloco 1 com caracteres "."
+11493 ms: escrevendo bloco 2 com caracteres "E"
+11528 ms: escrevendo bloco 3 com caracteres " "
+11566 ms: escrevendo bloco 4 com caracteres "O"
+11602 ms: escrevendo bloco 5 com caracteres "B"
+11637 ms: escrevendo bloco 6 com caracteres "9"
+11684 ms: escrevendo bloco 7 com caracteres "$"
+11738 ms: escrevendo bloco 8 com caracteres "C"
+11783 ms: escrevendo bloco 9 com caracteres "F"
+11818 ms: escrevendo bloco 10 com caracteres "M"
+11870 ms: escrevendo bloco 11 com caracteres "H"
+11919 ms: escrevendo bloco 12 com caracteres "'"
+11973 ms: escrevendo bloco 13 com caracteres "J"
+12015 ms: escrevendo bloco 14 com caracteres "A"
+12065 ms: escrevendo bloco 15 com caracteres "L"
+12112 ms: escrevendo bloco 16 com caracteres "+"
+12159 ms: escrevendo bloco 17 com caracteres "."
+12196 ms: escrevendo bloco 18 com caracteres "%"
+12235 ms: escrevendo bloco 19 com caracteres "0"
+12277 ms: escrevendo bloco 20 com caracteres "O"
+12330 ms: escrevendo bloco 21 com caracteres """
+12387 ms: escrevendo bloco 22 com caracteres "9"
+12432 ms: escrevendo bloco 23 com caracteres "$"
+12480 ms: escrevendo bloco 24 com caracteres "3"
+12530 ms: escrevendo bloco 25 com caracteres "6"
+12581 ms: escrevendo bloco 26 com caracteres "M"
+12635 ms: escrevendo bloco 27 com caracteres "8"
+12674 ms: escrevendo bloco 28 com caracteres "7"
+12731 ms: escrevendo bloco 29 com caracteres "*"
+12772 ms: escrevendo bloco 30 com caracteres "A"
+12811 ms: escrevendo bloco 31 com caracteres "<"
+12854 ms: escrevendo bloco 32 com caracteres "K"
+12897 ms: escrevendo bloco 33 com caracteres "N"
+12937 ms: escrevendo bloco 34 com caracteres "5"
+12981 ms: escrevendo bloco 35 com caracteres " "
+13025 ms: escrevendo bloco 36 com caracteres "?"
+13065 ms: escrevendo bloco 37 com caracteres "2"
+13098 ms: escrevendo bloco 38 com caracteres ")"
+13138 ms: escrevendo bloco 39 com caracteres "4"
+13190 ms: escrevendo bloco 40 com caracteres "C"
+13227 ms: escrevendo bloco 41 com caracteres "&"
+13282 ms: escrevendo bloco 42 com caracteres "="
+13321 ms: escrevendo bloco 43 com caracteres "("
+13377 ms: escrevendo bloco 44 com caracteres "7"
+13416 ms: escrevendo bloco 45 com caracteres "*"
+13473 ms: escrevendo bloco 46 com caracteres "1"
+13517 ms: escrevendo bloco 47 com caracteres "<"
+13571 ms: escrevendo bloco 48 com caracteres "+"
+13604 ms: escrevendo bloco 49 com caracteres ">"
+13651 ms: escrevendo bloco 50 com caracteres "E"
+13685 ms: escrevendo bloco 51 com caracteres "@"
+13735 ms: escrevendo bloco 52 com caracteres "?"
+13780 ms: escrevendo bloco 53 com caracteres """
+13825 ms: escrevendo bloco 54 com caracteres "9"
+13864 ms: escrevendo bloco 55 com caracteres "D"
+13898 ms: escrevendo bloco 56 com caracteres "#"
+13935 ms: escrevendo bloco 57 com caracteres "F"
+13993 ms: escrevendo bloco 58 com caracteres "="
+14028 ms: escrevendo bloco 59 com caracteres "8"
+14063 ms: escrevendo bloco 60 com caracteres "7"
+14104 ms: escrevendo bloco 61 com caracteres "J"
+14145 ms: escrevendo bloco 62 com caracteres "1"
+14187 ms: escrevendo bloco 63 com caracteres "<"
+14235 ms: escrevendo bloco 64 com caracteres "+"
+14282 ms: escrevendo bloco 65 com caracteres "."
+14337 ms: escrevendo bloco 66 com caracteres "%"
+14394 ms: escrevendo bloco 67 com caracteres "0"
+14445 ms: escrevendo bloco 68 com caracteres "/"
+14498 ms: escrevendo bloco 69 com caracteres "2"
+14532 ms: escrevendo bloco 70 com caracteres ")"
+14572 ms: escrevendo bloco 71 com caracteres "D"
+14627 ms: escrevendo bloco 72 com caracteres "C"
+14685 ms: escrevendo bloco 73 com caracteres "&"
+14733 ms: escrevendo bloco 74 com caracteres "-"
+14786 ms: escrevendo bloco 75 com caracteres "8"
+14824 ms: escrevendo bloco 76 com caracteres "7"
+14867 ms: escrevendo bloco 77 com caracteres ":"
+14900 ms: escrevendo bloco 78 com caracteres "!"
+14956 ms: escrevendo bloco 79 com caracteres "L"
+14995 ms: escrevendo bloco 80 com caracteres "K"
+15040 ms: escrevendo bloco 81 com caracteres ">"
+15098 ms: escrevendo bloco 82 com caracteres "E"
+15157 ms: escrevendo bloco 83 com caracteres "@"
+15213 ms: escrevendo bloco 84 com caracteres "?"
+15254 ms: escrevendo bloco 85 com caracteres """
+15289 ms: escrevendo bloco 86 com caracteres ")"
+15341 ms: escrevendo bloco 87 com caracteres "$"
+15387 ms: escrevendo bloco 88 com caracteres "#"
+15421 ms: escrevendo bloco 89 com caracteres "&"
+15477 ms: escrevendo bloco 90 com caracteres "M"
+15524 ms: escrevendo bloco 91 com caracteres "("
+15564 ms: escrevendo bloco 92 com caracteres "'"
+15601 ms: escrevendo bloco 93 com caracteres "*"
+15658 ms: escrevendo bloco 94 com caracteres "!"
+15715 ms: escrevendo bloco 95 com caracteres "L"
+15764 ms: escrevendo bloco 96 com caracteres ";"
+15813 ms: escrevendo bloco 97 com caracteres ">"
+15867 ms: escrevendo bloco 98 com caracteres "5"
+15908 ms: escrevendo bloco 99 com caracteres "@"
+15948 ms: escrevendo bloco 100 com caracteres "?"
+16006 ms: escrevendo bloco 101 com caracteres "2"
+16057 ms: escrevendo bloco 102 com caracteres ")"
+16092 ms: escrevendo bloco 103 com caracteres "4"
+16144 ms: escrevendo bloco 104 com caracteres "C"
+16180 ms: escrevendo bloco 105 com caracteres "6"
+16233 ms: escrevendo bloco 106 com caracteres "="
+16291 ms: escrevendo bloco 107 com caracteres "("
+16334 ms: escrevendo bloco 108 com caracteres "'"
+16384 ms: escrevendo bloco 109 com caracteres "*"
+16436 ms: escrevendo bloco 110 com caracteres "1"
+16487 ms: escrevendo bloco 111 com caracteres "<"
+16524 ms: escrevendo bloco 112 com caracteres "+"
+16576 ms: escrevendo bloco 113 com caracteres ">"
+16622 ms: escrevendo bloco 114 com caracteres "5"
+16655 ms: escrevendo bloco 115 com caracteres "@"
+16711 ms: escrevendo bloco 116 com caracteres "/"
+16760 ms: escrevendo bloco 117 com caracteres "B"
+16809 ms: escrevendo bloco 118 com caracteres "9"
+16853 ms: escrevendo bloco 119 com caracteres "$"
+16905 ms: escrevendo bloco 120 com caracteres "C"
+16952 ms: escrevendo bloco 121 com caracteres "6"
+17007 ms: escrevendo bloco 122 com caracteres "-"
+17040 ms: escrevendo bloco 123 com caracteres "H"
+17093 ms: escrevendo bloco 124 com caracteres "'"
+17142 ms: escrevendo bloco 125 com caracteres "*"
+17195 ms: escrevendo bloco 126 com caracteres "1"
+17237 ms: escrevendo bloco 127 com caracteres ","
+17278 ms: escrevendo bloco 128 com caracteres "+"
+17323 ms: escrevendo bloco 129 com caracteres "N"
+17370 ms: escrevendo bloco 130 com caracteres "E"
+17418 ms: escrevendo bloco 131 com caracteres "0"
+17457 ms: escrevendo bloco 132 com caracteres "?"
+17492 ms: escrevendo bloco 133 com caracteres """
+17540 ms: escrevendo bloco 134 com caracteres "I"
+17573 ms: escrevendo bloco 135 com caracteres "4"
+17612 ms: escrevendo bloco 136 com caracteres "3"
+17653 ms: escrevendo bloco 137 com caracteres "6"
+17708 ms: escrevendo bloco 138 com caracteres "="
+17754 ms: escrevendo bloco 139 com caracteres "("
+17810 ms: escrevendo bloco 140 com caracteres "G"
+17858 ms: escrevendo bloco 141 com caracteres "*"
+17896 ms: escrevendo bloco 142 com caracteres "!"
+17929 ms: escrevendo bloco 143 com caracteres ","
+17965 ms: escrevendo bloco 144 com caracteres "+"
+18013 ms: escrevendo bloco 145 com caracteres "."
+18070 ms: escrevendo bloco 146 com caracteres "E"
+18104 ms: escrevendo bloco 147 com caracteres " "
+18143 ms: escrevendo bloco 148 com caracteres "O"
+18191 ms: escrevendo bloco 149 com caracteres "B"
+18233 ms: escrevendo bloco 150 com caracteres "I"
+18289 ms: escrevendo bloco 151 com caracteres "$"
+18325 ms: escrevendo bloco 152 com caracteres "C"
+18364 ms: escrevendo bloco 153 com caracteres "6"
+18417 ms: escrevendo bloco 154 com caracteres "-"
+18470 ms: escrevendo bloco 155 com caracteres "8"
+18527 ms: escrevendo bloco 156 com caracteres "G"
+18575 ms: escrevendo bloco 157 com caracteres "*"
+18607 ms: escrevendo bloco 158 com caracteres "A"
+18642 ms: escrevendo bloco 159 com caracteres "<"
+18676 ms: escrevendo bloco 160 com caracteres ";"
+18720 ms: escrevendo bloco 161 com caracteres "N"
+18767 ms: escrevendo bloco 162 com caracteres "5"
+18808 ms: escrevendo bloco 163 com caracteres " "
+18855 ms: escrevendo bloco 164 com caracteres "O"
+18892 ms: escrevendo bloco 165 com caracteres "B"
+18930 ms: escrevendo bloco 166 com caracteres ")"
+18984 ms: escrevendo bloco 167 com caracteres "4"
+19027 ms: escrevendo bloco 168 com caracteres "3"
+19061 ms: escrevendo bloco 169 com caracteres "&"
+19103 ms: escrevendo bloco 170 com caracteres "="
+19142 ms: escrevendo bloco 171 com caracteres "8"
+19193 ms: escrevendo bloco 172 com caracteres "7"
+19237 ms: escrevendo bloco 173 com caracteres "J"
+19273 ms: escrevendo bloco 174 com caracteres "1"
+19326 ms: escrevendo bloco 175 com caracteres "L"
+19360 ms: escrevendo bloco 176 com caracteres ";"
+19396 ms: escrevendo bloco 177 com caracteres ">"
+19451 ms: escrevendo bloco 178 com caracteres "E"
+19490 ms: escrevendo bloco 179 com caracteres "@"
+19538 ms: escrevendo bloco 180 com caracteres "/"
+19572 ms: escrevendo bloco 181 com caracteres """
+19607 ms: escrevendo bloco 182 com caracteres "9"
+19656 ms: escrevendo bloco 183 com caracteres "D"
+19699 ms: escrevendo bloco 184 com caracteres "C"
+19756 ms: escrevendo bloco 185 com caracteres "6"
+19800 ms: escrevendo bloco 186 com caracteres "="
+19836 ms: escrevendo bloco 187 com caracteres "H"
+19879 ms: escrevendo bloco 188 com caracteres "G"
+19920 ms: escrevendo bloco 189 com caracteres "*"
+19959 ms: escrevendo bloco 190 com caracteres "1"
+20000 ms: escrevendo bloco 191 com caracteres "<"
+20052 ms: escrevendo bloco 192 com caracteres ";"
+20108 ms: escrevendo bloco 193 com caracteres "."
+20155 ms: escrevendo bloco 194 com caracteres "5"
+20197 ms: escrevendo bloco 195 com caracteres "@"
+20253 ms: escrevendo bloco 196 com caracteres "?"
+20307 ms: escrevendo bloco 197 com caracteres "B"
+20341 ms: escrevendo bloco 198 com caracteres "I"
+20380 ms: escrevendo bloco 199 com caracteres "$"
+20437 ms: escrevendo bloco 200 com caracteres "#"
+20477 ms: escrevendo bloco 201 com caracteres "&"
+20525 ms: escrevendo bloco 202 com caracteres "-"
+20570 ms: escrevendo bloco 203 com caracteres "8"
+20623 ms: escrevendo bloco 204 com caracteres "G"
+20675 ms: escrevendo bloco 205 com caracteres "J"
+20714 ms: escrevendo bloco 206 com caracteres "!"
+20765 ms: escrevendo bloco 207 com caracteres "L"
+20816 ms: escrevendo bloco 208 com caracteres "K"
+20874 ms: escrevendo bloco 209 com caracteres ">"
+20929 ms: escrevendo bloco 210 com caracteres "E"
+20970 ms: escrevendo bloco 211 com caracteres "@"
+21004 ms: escrevendo bloco 212 com caracteres "/"
+21061 ms: escrevendo bloco 213 com caracteres """
+21093 ms: escrevendo bloco 214 com caracteres "9"
+21132 ms: escrevendo bloco 215 com caracteres "D"
+21184 ms: escrevendo bloco 216 com caracteres "C"
+21224 ms: escrevendo bloco 217 com caracteres "6"
+21267 ms: escrevendo bloco 218 com caracteres "="
+21303 ms: escrevendo bloco 219 com caracteres "H"
+21352 ms: escrevendo bloco 220 com caracteres "'"
+21400 ms: escrevendo bloco 221 com caracteres "*"
+21442 ms: escrevendo bloco 222 com caracteres "1"
+21483 ms: escrevendo bloco 223 com caracteres ","
+21527 ms: escrevendo bloco 224 com caracteres "K"
+21586 ms: escrevendo bloco 225 com caracteres "."
+21637 ms: escrevendo bloco 226 com caracteres "%"
+21677 ms: escrevendo bloco 227 com caracteres " "
+21731 ms: escrevendo bloco 228 com caracteres "/"
+21780 ms: escrevendo bloco 229 com caracteres "2"
+21824 ms: escrevendo bloco 230 com caracteres ")"
+21872 ms: escrevendo bloco 231 com caracteres "4"
+21930 ms: escrevendo bloco 232 com caracteres "C"
+21963 ms: escrevendo bloco 233 com caracteres "6"
+21998 ms: escrevendo bloco 234 com caracteres "M"
+22047 ms: escrevendo bloco 235 com caracteres "H"
+22096 ms: escrevendo bloco 236 com caracteres "'"
+22134 ms: escrevendo bloco 237 com caracteres ":"
+22176 ms: escrevendo bloco 238 com caracteres "1"
+22219 ms: escrevendo bloco 239 com caracteres ","
+22254 ms: escrevendo bloco 240 com caracteres "K"
+22292 ms: escrevendo bloco 241 com caracteres "N"
+22340 ms: escrevendo bloco 242 com caracteres "%"
+22398 ms: escrevendo bloco 243 com caracteres "0"
+22430 ms: escrevendo bloco 244 com caracteres "/"
+22478 ms: escrevendo bloco 245 com caracteres """
+22517 ms: escrevendo bloco 246 com caracteres "I"
+22570 ms: escrevendo bloco 247 com caracteres "D"
+22622 ms: escrevendo bloco 248 com caracteres "C"
+22669 ms: escrevendo bloco 249 com caracteres "&"
+22723 ms: escrevendo bloco 250 com caracteres "="
+22766 ms: escrevendo bloco 251 com caracteres "H"
+22801 ms: escrevendo bloco 252 com caracteres "'"
+22839 ms: escrevendo bloco 253 com caracteres "*"
+22890 ms: escrevendo bloco 254 com caracteres "!"
+22933 ms: escrevendo bloco 255 com caracteres ","
+22971 ms: user fim
+PPOS: task 2 (user) exit code 0, 22971 ms elapsed time,     1 ms cpu time,   513 activations
+PPOS: task 0 (kernel) exit code 0, 22971 ms elapsed time, 22966 ms cpu time,  1538 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 22971 ms)
diff --git a/ppos/test/pingpong-dispatcher.c b/ppos/test/pingpong-dispatcher.c
new file mode 100644 (file)
index 0000000..e4d1c29
--- /dev/null
@@ -0,0 +1,49 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste do dispatcher com escalonador FCFS
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+static struct task_t *pang, *peng, *ping, *pong, *pung;
+
+// corpo das tarefas
+void body(void *arg)
+{
+    printf("%s: inicio\n", (char *)arg);
+    for (int i = 0; i < 5; i++)
+    {
+        printf("%s: %d\n", (char *)arg, i);
+        task_yield();
+    }
+    printf("%s: fim\n", (char *)arg);
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    printf("user: criando as tarefas\n");
+
+    // cria tarefas
+    pang = task_create("pang", body, "\tPang");
+    assert(pang);
+    peng = task_create("peng", body, "\t\tPeng");
+    assert(peng);
+    ping = task_create("ping", body, "\t\t\tPing");
+    assert(ping);
+    pong = task_create("pong", body, "\t\t\t\tPong");
+    assert(pong);
+    pung = task_create("pung", body, "\t\t\t\t\tPung");
+    assert(pung);
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-dispatcher.txt b/ppos/test/pingpong-dispatcher.txt
new file mode 100644 (file)
index 0000000..766e9ab
--- /dev/null
@@ -0,0 +1,41 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: criando as tarefas
+user: fim
+       Pang: inicio
+       Pang: 0
+               Peng: inicio
+               Peng: 0
+                       Ping: inicio
+                       Ping: 0
+                               Pong: inicio
+                               Pong: 0
+                                       Pung: inicio
+                                       Pung: 0
+       Pang: 1
+               Peng: 1
+                       Ping: 1
+                               Pong: 1
+                                       Pung: 1
+       Pang: 2
+               Peng: 2
+                       Ping: 2
+                               Pong: 2
+                                       Pung: 2
+       Pang: 3
+               Peng: 3
+                       Ping: 3
+                               Pong: 3
+                                       Pung: 3
+       Pang: 4
+               Peng: 4
+                       Ping: 4
+                               Pong: 4
+                                       Pung: 4
+       Pang: fim
+               Peng: fim
+                       Ping: fim
+                               Pong: fim
+                                       Pung: fim
+PPOS: system stopping
+PPOS: system stopped (uptime 0 ms)
diff --git a/ppos/test/pingpong-memoria.c b/ppos/test/pingpong-memoria.c
new file mode 100644 (file)
index 0000000..6e2d704
--- /dev/null
@@ -0,0 +1,144 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste das operações de alocação de memória heap
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+extern int bkl;    // Big Kernel Lock (from task.c)
+
+#define MAX_BLOCKS (1024 * 1024)
+
+static unsigned char *block[MAX_BLOCKS];
+static int bsize[MAX_BLOCKS];
+
+// corpo da tarefa principal
+void user_main()
+{
+    int size, nblocks, avail, avail_before, avail_after;
+    void *ptr;
+    int status;
+
+    // testa mem_size
+    printf("Testando mem_size\n");
+    size = mem_size();
+    printf("mem_size  retornou %d bytes\n", size);
+    assert(size > 0);
+
+    // testa mem_avail
+    printf("Testando mem_avail\n");
+    avail = mem_avail();
+    printf("mem_avail retornou %d bytes\n", avail);
+    assert(avail > 0);
+    assert(avail <= size);
+
+    // testa alocação de tamanho zero
+    printf("Testando mem_alloc com tamanho 0\n");
+    ptr = mem_alloc(0);
+    assert(ptr == NULL);
+
+    // testa alocação negativa
+    printf("Testando mem_alloc com tamanho negativo\n");
+    ptr = mem_alloc(-100);
+    assert(ptr == NULL);
+
+    // testa alocação maior que a memória disponível
+    printf("Testando mem_alloc tamanho excessivo\n");
+    avail = mem_avail();
+    ptr = mem_alloc(avail + 1);
+    assert(ptr == NULL);
+
+    // testa free nulo
+    printf("Testando mem_free com ponteiro nulo\n");
+    status = mem_free(NULL);
+    assert(status == ERROR);
+
+    // testa free inválido
+    printf("Testando mem_free com ponteiro inválido\n");
+    status = mem_free(&status);
+    assert(status == ERROR);
+
+    // alocações aleatórias
+    printf("Criando blocos de tamanho aleatório\n");
+    avail_before = mem_avail();
+    nblocks = 0;
+    do
+    {
+        // aloca um bloco de tamanho aleatorio
+        size = randnum() % (mem_size() / 1024);
+        ptr = mem_alloc(size);
+
+        if (ptr)
+        {
+            // guarda o bloco alocado
+            block[nblocks] = ptr;
+            bsize[nblocks] = size;
+            nblocks++;
+
+            // ao chegar em 10 blocos, gera relatório
+            if (nblocks == 10)
+            {
+                printf("Testando mem_report (10 alocações)\n");
+                mem_report();
+            }
+        }
+    } while (mem_avail() > 4096);
+
+    printf("Foram alocados %d blocos\n", nblocks);
+
+    // testa se alocações estão alinhadas em 16 bytes
+    printf("Testando alinhamento dos blocos alocados\n");
+    for (int i = 0; i < nblocks; i++)
+        assert(((unsigned long)block[i] % 16) == 0);
+
+    // preenche os blocos alocados
+    printf("Preenchendo blocos com bytes fixos\n");
+    for (int i = 0; i < nblocks; i++)
+    {
+        // preenche bloco com valor fixo
+        for (int j = 0; j < bsize[i]; j++)
+            block[i][j] = i % 256;
+    }
+
+    // verifica o conteúdo dos blocos alocados
+    printf("Verificando conteúdo dos blocos preenchidos\n");
+    for (int i = 0; i < nblocks; i++)
+    {
+        // verifica o conteúdo do bloco
+        for (int j = 0; j < bsize[i]; j++)
+            assert(block[i][j] == i % 256);
+    }
+
+    // liberando os blocos alocados acima
+    printf("Liberando os blocos alocados\n");
+    for (int i = 0; i < nblocks; i++)
+    {
+        status = mem_free(block[i]);
+        assert(status == NOERROR);
+
+        // ao chegar aos últimos N blocos, gera relatório
+        if (nblocks - (i + 1) == 10)
+        {
+            printf("Testando mem_report (10 alocações)\n");
+            mem_report();
+        }
+    }
+
+    // verificando se toda a memória foi liberada
+    printf("Verificando a memória disponível\n");
+    avail_after = mem_avail();
+    printf("mem_avail retornou %d bytes\n", avail_after);
+    assert(avail_after == avail_before);
+    printf("Testando mem_report (sem alocações do usuário)\n");
+    mem_report();
+
+    printf("Testes concluídos com sucesso!\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-memoria.txt b/ppos/test/pingpong-memoria.txt
new file mode 100644 (file)
index 0000000..b373149
--- /dev/null
@@ -0,0 +1,72 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+Testando mem_size
+mem_size  retornou 67108864 bytes
+Testando mem_avail
+mem_avail retornou 67075456 bytes
+Testando mem_alloc com tamanho 0
+Testando mem_alloc com tamanho negativo
+Testando mem_alloc tamanho excessivo
+Testando mem_free com ponteiro nulo
+Testando mem_free com ponteiro inválido
+Criando blocos de tamanho aleatório
+Testando mem_report (10 alocações)
+heap: 435 KB allocated (16 blocks), 65100 KB free (1 blocks)
+heap: block     0: 0x0000565154c56340 - 0x0000565154c5644f aloc prev    16 next     1 size 272
+heap: block     1: 0x0000565154c56450 - 0x0000565154c5646f aloc prev     0 next     2 size 32
+heap: block     2: 0x0000565154c56470 - 0x0000565154c5648f aloc prev     1 next     3 size 32
+heap: block     3: 0x0000565154c56490 - 0x0000565154c5659f aloc prev     2 next     4 size 272
+heap: block     4: 0x0000565154c565a0 - 0x0000565154c5e59f aloc prev     3 next     5 size 32768
+heap: block     5: 0x0000565154c5e5a0 - 0x0000565154c5e5bf aloc prev     4 next     6 size 32
+heap: block     6: 0x0000565154c5e5c0 - 0x0000565154c6d91f aloc prev     5 next     7 size 62304
+heap: block     7: 0x0000565154c6d920 - 0x0000565154c7025f aloc prev     6 next     8 size 10560
+heap: block     8: 0x0000565154c70260 - 0x0000565154c7f94f aloc prev     7 next     9 size 63216
+heap: block     9: 0x0000565154c7f950 - 0x0000565154c84c8f aloc prev     8 next    10 size 21312
+heap: block    10: 0x0000565154c84c90 - 0x0000565154c9319f aloc prev     9 next    11 size 58640
+heap: block    11: 0x0000565154c931a0 - 0x0000565154c9f82f aloc prev    10 next    12 size 50832
+heap: block    12: 0x0000565154c9f830 - 0x0000565154ca645f aloc prev    11 next    13 size 27696
+heap: block    13: 0x0000565154ca6460 - 0x0000565154cac40f aloc prev    12 next    14 size 24496
+heap: block    14: 0x0000565154cac410 - 0x0000565154cb82ff aloc prev    13 next    15 size 48880
+heap: block    15: 0x0000565154cb8300 - 0x0000565154cc321f aloc prev    14 next    16 size 44832
+heap: block    16: 0x0000565154cc3220 - 0x0000565158c5633f FREE prev    15 next     0 size 66662688
+Foram alocados 2031 blocos
+Testando alinhamento dos blocos alocados
+Preenchendo blocos com bytes fixos
+Verificando conteúdo dos blocos preenchidos
+Liberando os blocos alocados
+Testando mem_report (10 alocações)
+heap: 322 KB allocated (16 blocks), 65213 KB free (2 blocks)
+heap: block     0: 0x0000565154c56340 - 0x0000565154c5644f aloc prev  2037 next     1 size 272
+heap: block     1: 0x0000565154c56450 - 0x0000565154c5646f aloc prev     0 next     2 size 32
+heap: block     2: 0x0000565154c56470 - 0x0000565154c5648f aloc prev     1 next     3 size 32
+heap: block     3: 0x0000565154c56490 - 0x0000565154c5659f aloc prev     2 next     4 size 272
+heap: block     4: 0x0000565154c565a0 - 0x0000565154c5e59f aloc prev     3 next     5 size 32768
+heap: block     5: 0x0000565154c5e5a0 - 0x0000565154c5e5bf aloc prev     4 next  2026 size 32
+heap: block  2026: 0x0000565154c5e5c0 - 0x0000565158c0cc5f FREE prev     5 next  2027 size 66774688
+heap: block  2027: 0x0000565158c0cc60 - 0x0000565158c1bb4f aloc prev  2026 next  2028 size 61168
+heap: block  2028: 0x0000565158c1bb50 - 0x0000565158c2745f aloc prev  2027 next  2029 size 47376
+heap: block  2029: 0x0000565158c27460 - 0x0000565158c2fb6f aloc prev  2028 next  2030 size 34576
+heap: block  2030: 0x0000565158c2fb70 - 0x0000565158c3fa3f aloc prev  2029 next  2031 size 65232
+heap: block  2031: 0x0000565158c3fa40 - 0x0000565158c427bf aloc prev  2030 next  2032 size 11648
+heap: block  2032: 0x0000565158c427c0 - 0x0000565158c5065f aloc prev  2031 next  2033 size 56992
+heap: block  2033: 0x0000565158c50660 - 0x0000565158c50d1f aloc prev  2032 next  2034 size 1728
+heap: block  2034: 0x0000565158c50d20 - 0x0000565158c5400f aloc prev  2033 next  2035 size 13040
+heap: block  2035: 0x0000565158c54010 - 0x0000565158c5506f aloc prev  2034 next  2036 size 4192
+heap: block  2036: 0x0000565158c55070 - 0x0000565158c553df aloc prev  2035 next  2037 size 880
+heap: block  2037: 0x0000565158c553e0 - 0x0000565158c5633f FREE prev  2036 next     0 size 3936
+Verificando a memória disponível
+mem_avail retornou 67075456 bytes
+Testando mem_report (sem alocações do usuário)
+heap: 32 KB allocated (6 blocks), 65503 KB free (1 blocks)
+heap: block     0: 0x0000565154c56340 - 0x0000565154c5644f aloc prev  2036 next     1 size 272
+heap: block     1: 0x0000565154c56450 - 0x0000565154c5646f aloc prev     0 next     2 size 32
+heap: block     2: 0x0000565154c56470 - 0x0000565154c5648f aloc prev     1 next     3 size 32
+heap: block     3: 0x0000565154c56490 - 0x0000565154c5659f aloc prev     2 next     4 size 272
+heap: block     4: 0x0000565154c565a0 - 0x0000565154c5e59f aloc prev     3 next     5 size 32768
+heap: block     5: 0x0000565154c5e5a0 - 0x0000565154c5e5bf aloc prev     4 next  2036 size 32
+heap: block  2036: 0x0000565154c5e5c0 - 0x0000565158c5633f FREE prev     5 next     0 size 67075456
+Testes concluídos com sucesso!
+PPOS: task 1 (user) exit code 0,   516 ms elapsed time,   516 ms cpu time,    52 activations
+PPOS: task 0 (kernel) exit code 0,   516 ms elapsed time,     0 ms cpu time,    53 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 516 ms)
diff --git a/ppos/test/pingpong-mqueue.c b/ppos/test/pingpong-mqueue.c
new file mode 100644 (file)
index 0000000..3590a7a
--- /dev/null
@@ -0,0 +1,163 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste das filas de mensagens
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+// estrutura com vários valores para teste
+struct pacote_t
+{
+    int v[3], prod;
+};
+
+static struct task_t *prod[3], *mult, *cons[2];
+static struct mqueue_t *fila_inteiros, *fila_pacotes;
+
+// corpo da tarefa produtor
+void body_prod()
+{
+    int valor, status;
+    char *name;
+
+    name = task_name(NULL);
+
+    printf("%5d ms: %s inicia\n", systime(), name);
+
+    for (;;)
+    {
+        // sorteia um valor inteiro e o envia na fila de valores
+        valor = 1 + randnum() % 20;
+        status = mqueue_send(fila_inteiros, &valor);
+        if (status < 0)
+            break;
+        printf("%5d ms: %s envia %d\n", systime(), name, valor);
+
+        // dorme um intervalo aleatorio
+        task_sleep(randnum() % 3000);
+    }
+
+    printf("%5d ms: %s termina\n", systime(), name);
+    task_exit(0);
+}
+
+// corpo da tarefa agrupador
+void body_agrup()
+{
+    struct pacote_t pacote;
+    char *name;
+    int status;
+
+    name = task_name(NULL);
+
+    printf("%5d ms: \t\t\t%s inicia\n", systime(), name);
+
+    for (int i = 0; i < 10; i++)
+    {
+        // recebe N valores inteiros e os põe no pacote
+        pacote.prod = 1 ;
+        for (int j = 0; j < 3; j++)
+        {
+            status = mqueue_recv(fila_inteiros, &pacote.v[j]);
+            assert(status == NOERROR);
+
+            printf("%5d ms: \t\t\t%s recebe %d\n", systime(), name,
+                   pacote.v[j]);
+            pacote.prod *= pacote.v[j] ;
+        }
+
+        // mostra o pacote
+        printf("%5d ms: \t\t\t%s envia [%d*%d*%d = %d]\n",
+               systime(), name, pacote.v[0], pacote.v[1], pacote.v[2],
+               pacote.prod);
+
+        // envia o pacote
+        status = mqueue_send(fila_pacotes, &pacote);
+        assert(status == NOERROR);
+
+        // dorme um intervalo aleatorio
+        task_sleep(randnum() % 3000);
+    }
+
+    printf("%5d ms: \t\t\t%s termina\n", systime(), name);
+    task_exit(0);
+}
+
+// corpo da tarefa consumidor
+void body_cons()
+{
+    struct pacote_t pacote;
+    char *name;
+    int status;
+
+    name = task_name(NULL);
+
+    printf("%5d ms: \t\t\t\t\t\t%s inicia\n", systime(), name);
+
+    for (;;)
+    {
+        // recebe um pacote e o imprime
+        status = mqueue_recv(fila_pacotes, &pacote);
+        if (status < 0)
+            break;
+        printf("%5d ms: \t\t\t\t\t\t%s recebe [%d*%d*%d = %d]\n",
+               systime(), name, pacote.v[0], pacote.v[1], pacote.v[2],
+               pacote.prod);
+
+        // dorme um intervalo aleatorio
+        task_sleep(randnum() % 3000);
+    }
+
+    printf("%5d ms: \t\t\t\t\t\t%s termina\n", systime(), name);
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+
+    printf("%5d ms: user inicia\n", systime());
+
+    // cria as filas de mensagens (5 valores cada)
+    fila_inteiros = mqueue_create(5, sizeof(int));
+    assert(fila_inteiros);
+    fila_pacotes = mqueue_create(5, sizeof(struct pacote_t));
+    assert(fila_pacotes);
+
+    // cria tarefas
+    mult = task_create("agrup", body_agrup, NULL);
+    assert(mult);
+    cons[0] = task_create("cons0", body_cons, NULL);
+    assert(cons[0]);
+    cons[1] = task_create("cons1", body_cons, NULL);
+    assert(cons[1]);
+    prod[0] = task_create("prod0", body_prod, NULL);
+    assert(prod[0]);
+    prod[1] = task_create("prod1", body_prod, NULL);
+    assert(prod[1]);
+    prod[2] = task_create("prod2", body_prod, NULL);
+    assert(prod[2]);
+
+    // aguarda o multiplicador encerrar
+    status = task_wait(mult);
+    assert(status == NOERROR);
+
+    // destroi as filas de mensagens
+    printf("%5d ms: user destroi fila_inteiros\n", systime());
+    status = mqueue_destroy(fila_inteiros);
+    assert(status == NOERROR);
+    printf("%5d ms: user destroi fila_pacotes\n", systime());
+    status = mqueue_destroy(fila_pacotes);
+    assert(status == NOERROR);
+
+    printf("%5d ms: user termina\n", systime());
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-mqueue.txt b/ppos/test/pingpong-mqueue.txt
new file mode 100644 (file)
index 0000000..bd87a3d
--- /dev/null
@@ -0,0 +1,113 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+    0 ms: user inicia
+    0 ms:                      agrup inicia
+    0 ms:                                              cons0 inicia
+    0 ms:                                              cons1 inicia
+    0 ms: prod0 inicia
+    0 ms: prod0 envia 4
+    0 ms: prod1 inicia
+    0 ms: prod1 envia 10
+    0 ms: prod2 inicia
+    0 ms: prod2 envia 8
+    0 ms:                      agrup recebe 4
+    0 ms:                      agrup recebe 10
+    0 ms:                      agrup recebe 8
+    0 ms:                      agrup envia [4*10*8 = 320]
+    0 ms:                                              cons0 recebe [4*10*8 = 320]
+ 1174 ms: prod2 envia 16
+ 1174 ms:                      agrup recebe 16
+ 1836 ms: prod1 envia 10
+ 1836 ms:                      agrup recebe 10
+ 2312 ms: prod1 envia 20
+ 2312 ms:                      agrup recebe 20
+ 2312 ms:                      agrup envia [16*10*20 = 3200]
+ 2312 ms:                                              cons1 recebe [16*10*20 = 3200]
+ 2762 ms: prod0 envia 16
+ 3960 ms: prod2 envia 18
+ 4077 ms:                      agrup recebe 16
+ 4077 ms:                      agrup recebe 18
+ 4094 ms: prod1 envia 8
+ 4094 ms:                      agrup recebe 8
+ 4094 ms:                      agrup envia [16*18*8 = 2304]
+ 4094 ms:                                              cons0 recebe [16*18*8 = 2304]
+ 4516 ms: prod0 envia 16
+ 4590 ms: prod0 envia 18
+ 4930 ms: prod0 envia 20
+ 5795 ms:                      agrup recebe 16
+ 5795 ms:                      agrup recebe 18
+ 5795 ms:                      agrup recebe 20
+ 5795 ms:                      agrup envia [16*18*20 = 5760]
+ 5795 ms:                                              cons0 recebe [16*18*20 = 5760]
+ 5892 ms: prod2 envia 12
+ 5892 ms:                      agrup recebe 12
+ 6380 ms: prod1 envia 2
+ 6380 ms:                      agrup recebe 2
+ 6470 ms: prod2 envia 12
+ 6470 ms:                      agrup recebe 12
+ 6470 ms:                      agrup envia [12*2*12 = 288]
+ 6470 ms:                                              cons1 recebe [12*2*12 = 288]
+ 6480 ms: prod0 envia 4
+ 7435 ms:                      agrup recebe 4
+ 8108 ms: prod2 envia 6
+ 8108 ms:                      agrup recebe 6
+ 8160 ms: prod2 envia 20
+ 8160 ms:                      agrup recebe 20
+ 8160 ms:                      agrup envia [4*6*20 = 480]
+ 8160 ms:                                              cons1 recebe [4*6*20 = 480]
+ 8674 ms: prod0 envia 12
+ 8760 ms: prod1 envia 6
+ 9565 ms:                      agrup recebe 12
+ 9565 ms:                      agrup recebe 6
+ 9756 ms: prod0 envia 8
+ 9756 ms:                      agrup recebe 8
+ 9756 ms:                      agrup envia [12*6*8 = 576]
+ 9756 ms:                                              cons0 recebe [12*6*8 = 576]
+10470 ms: prod2 envia 4
+10470 ms:                      agrup recebe 4
+11314 ms: prod0 envia 6
+11314 ms:                      agrup recebe 6
+11398 ms: prod0 envia 8
+11398 ms:                      agrup recebe 8
+11398 ms:                      agrup envia [4*6*8 = 192]
+11398 ms:                                              cons1 recebe [4*6*8 = 192]
+11548 ms: prod1 envia 16
+11694 ms: prod1 envia 2
+12336 ms: prod2 envia 16
+12876 ms: prod0 envia 14
+12978 ms: prod1 envia 12
+13915 ms:                      agrup recebe 16
+13915 ms:                      agrup recebe 2
+13915 ms:                      agrup recebe 16
+13915 ms:                      agrup envia [16*2*16 = 512]
+13915 ms: prod2 envia 10
+13915 ms:                                              cons0 recebe [16*2*16 = 512]
+13956 ms: prod0 envia 14
+13983 ms:                      agrup recebe 14
+13983 ms:                      agrup recebe 12
+13983 ms:                      agrup recebe 10
+13983 ms:                      agrup envia [14*12*10 = 1680]
+13983 ms:                                              cons1 recebe [14*12*10 = 1680]
+14710 ms: prod2 envia 18
+15100 ms: prod1 envia 8
+16068 ms: prod0 envia 2
+16858 ms: prod2 envia 20
+16870 ms:                      agrup termina
+PPOS: task 2 (agrup) exit code 0, 16870 ms elapsed time,     0 ms cpu time,    25 activations
+16870 ms: user destroi fila_inteiros
+16870 ms: user destroi fila_pacotes
+16870 ms: user termina
+PPOS: task 1 (user) exit code 0, 16870 ms elapsed time,     0 ms cpu time,     2 activations
+16870 ms:                                              cons1 termina
+PPOS: task 4 (cons1) exit code 0, 16870 ms elapsed time,     0 ms cpu time,    12 activations
+16870 ms:                                              cons0 termina
+PPOS: task 3 (cons0) exit code 0, 16870 ms elapsed time,     0 ms cpu time,    12 activations
+16980 ms: prod2 termina
+PPOS: task 7 (prod2) exit code 0, 16980 ms elapsed time,     0 ms cpu time,    14 activations
+17900 ms: prod0 termina
+PPOS: task 5 (prod0) exit code 0, 17900 ms elapsed time,     0 ms cpu time,    14 activations
+18066 ms: prod1 termina
+PPOS: task 6 (prod1) exit code 0, 18066 ms elapsed time,     0 ms cpu time,    11 activations
+PPOS: task 0 (kernel) exit code 0, 18066 ms elapsed time, 18066 ms cpu time,    91 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 18066 ms)
diff --git a/ppos/test/pingpong-preempcao.c b/ppos/test/pingpong-preempcao.c
new file mode 100644 (file)
index 0000000..508dc64
--- /dev/null
@@ -0,0 +1,62 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da preempção por tempo (quantum)
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define WORKLOAD 10000
+
+static struct task_t *pang, *peng, *ping, *pong, *pung;
+
+// simula um processamento pesado
+int hardwork(int n)
+{
+    int soma = 0;
+
+    for (int i = 0; i < n; i++)
+        for (int j = 0; j < n; j++)
+            soma += j;
+    return (soma);
+}
+
+// corpo das tarefas
+void body(void *arg)
+{
+    printf("%s: inicio\n", (char *)arg);
+    for (int i = 0; i < 10; i++)
+    {
+        printf("%s: %d\n", (char *)arg, i);
+        hardwork(WORKLOAD);
+    }
+    printf("%s: fim\n", (char *)arg);
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    printf("user: inicio\n");
+
+    // cria tarefas
+    pang = task_create("pang", body, "\tPang");
+    assert(pang);
+    peng = task_create("peng", body, "\t\tPeng");
+    assert(peng);
+    ping = task_create("ping", body, "\t\t\tPing");
+    assert(ping);
+    pong = task_create("pong", body, "\t\t\t\tPong");
+    assert(pong);
+    pung = task_create("pung", body, "\t\t\t\t\tPung");
+    assert(pung);
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-preempcao.txt b/ppos/test/pingpong-preempcao.txt
new file mode 100644 (file)
index 0000000..dc3f44f
--- /dev/null
@@ -0,0 +1,66 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+user: fim
+       Pang: inicio
+       Pang: 0
+               Peng: inicio
+               Peng: 0
+                       Ping: inicio
+                       Ping: 0
+                               Pong: inicio
+                               Pong: 0
+                                       Pung: inicio
+                                       Pung: 0
+       Pang: 1
+               Peng: 1
+                       Ping: 1
+                               Pong: 1
+                                       Pung: 1
+               Peng: 2
+       Pang: 2
+                       Ping: 2
+                               Pong: 2
+                                       Pung: 2
+               Peng: 3
+       Pang: 3
+                       Ping: 3
+                               Pong: 3
+                                       Pung: 3
+               Peng: 4
+                       Ping: 4
+       Pang: 4
+                               Pong: 4
+                                       Pung: 4
+               Peng: 5
+                       Ping: 5
+       Pang: 5
+                               Pong: 5
+                                       Pung: 5
+               Peng: 6
+                       Ping: 6
+       Pang: 6
+                               Pong: 6
+                                       Pung: 6
+               Peng: 7
+                       Ping: 7
+       Pang: 7
+                               Pong: 7
+                                       Pung: 7
+               Peng: 8
+                       Ping: 8
+       Pang: 8
+                               Pong: 8
+                                       Pung: 8
+               Peng: 9
+                       Ping: 9
+       Pang: 9
+                               Pong: 9
+                                       Pung: 9
+               Peng: fim
+                       Ping: fim
+       Pang: fim
+                               Pong: fim
+                                       Pung: fim
+PPOS: system stopping
+PPOS: system stopped (uptime 28816 ms)
diff --git a/ppos/test/pingpong-prodcons.c b/ppos/test/pingpong-prodcons.c
new file mode 100644 (file)
index 0000000..26bfa05
--- /dev/null
@@ -0,0 +1 @@
+// PingPongOS - PingPong Operating System
diff --git a/ppos/test/pingpong-prodcons.txt b/ppos/test/pingpong-prodcons.txt
new file mode 100644 (file)
index 0000000..a812eba
--- /dev/null
@@ -0,0 +1,59 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+P1 inseriu 3 (tem 1)
+       P2 inseriu 9 (tem 2)
+               P3 inseriu 7 (tem 3)
+                                       C1 consumiu 3 (tem 2)
+                                               C2 consumiu 9 (tem 1)
+       P2 inseriu 15 (tem 2)
+                                               C2 consumiu 7 (tem 1)
+                                       C1 consumiu 15 (tem 0)
+               P3 inseriu 19 (tem 1)
+                                               C2 consumiu 19 (tem 0)
+P1 inseriu 16 (tem 1)
+                                       C1 consumiu 16 (tem 0)
+               P3 inseriu 17 (tem 1)
+       P2 inseriu 7 (tem 2)
+               P3 inseriu 1 (tem 3)
+                                               C2 consumiu 17 (tem 2)
+                                       C1 consumiu 7 (tem 1)
+                                       C1 consumiu 1 (tem 0)
+       P2 inseriu 0 (tem 1)
+                                               C2 consumiu 0 (tem 0)
+               P3 inseriu 5 (tem 1)
+       P2 inseriu 11 (tem 2)
+P1 inseriu 1 (tem 3)
+                                       C1 consumiu 5 (tem 2)
+                                               C2 consumiu 11 (tem 1)
+               P3 inseriu 5 (tem 2)
+       P2 inseriu 3 (tem 3)
+                                       C1 consumiu 1 (tem 2)
+P1 inseriu 12 (tem 3)
+                                               C2 consumiu 5 (tem 2)
+P1 inseriu 5 (tem 3)
+       P2 inseriu 11 (tem 4)
+                                               C2 consumiu 3 (tem 3)
+                                       C1 consumiu 12 (tem 2)
+                                               C2 consumiu 5 (tem 1)
+               P3 inseriu 18 (tem 2)
+                                               C2 consumiu 11 (tem 1)
+P1 inseriu 3 (tem 2)
+               P3 inseriu 5 (tem 3)
+               P3 inseriu 7 (tem 4)
+       P2 inseriu 17 (tem 5)
+                                       C1 consumiu 18 (tem 4)
+                                       C1 consumiu 3 (tem 3)
+PPOS: task 6 (c2) exit code 0,  4870 ms elapsed time,     0 ms cpu time,    13 activations
+P1 inseriu 1 (tem 4)
+PPOS: task 5 (c1) exit code 0,  5012 ms elapsed time,     0 ms cpu time,    12 activations
+       P2 inseriu 15 (tem 5)
+user: destruindo semáforos
+user: fim
+PPOS: task 1 (user) exit code 0, 15000 ms elapsed time,     0 ms cpu time,     2 activations
+PPOS: task 4 (p3) exit code 0, 15000 ms elapsed time,     0 ms cpu time,    11 activations
+PPOS: task 2 (p1) exit code 0, 15000 ms elapsed time,     0 ms cpu time,     9 activations
+PPOS: task 3 (p2) exit code 0, 15000 ms elapsed time,     0 ms cpu time,    11 activations
+PPOS: task 0 (kernel) exit code 0, 15000 ms elapsed time, 15000 ms cpu time,    59 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 15000 ms)
diff --git a/ppos/test/pingpong-scheduler.c b/ppos/test/pingpong-scheduler.c
new file mode 100644 (file)
index 0000000..5b424f3
--- /dev/null
@@ -0,0 +1,57 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste do escalonador com prioridades dinâmicas
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+static struct task_t *pang, *peng, *ping, *pong, *pung;
+
+// corpo das tarefas
+void body(void *arg)
+{
+    printf("%s: inicio (prioridade %d)\n", (char *)arg, sched_getprio(NULL));
+
+    for (int i = 0; i < 10; i++)
+    {
+        printf("%s: %d\n", (char *)arg, i);
+        task_yield();
+    }
+    printf("%s: fim\n", (char *)arg);
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    printf("user: inicio\n");
+
+    // cria tarefas
+    pang = task_create("pang", body, "\tPang");
+    assert(pang);
+    peng = task_create("peng", body, "\t\tPeng");
+    assert(peng);
+    ping = task_create("ping", body, "\t\t\tPing");
+    assert(ping);
+    pong = task_create("pong", body, "\t\t\t\tPong");
+    assert(pong);
+    pung = task_create("pung", body, "\t\t\t\t\tPung");
+    assert(pung);
+
+    // ajusta prioridades
+    sched_setprio(pang, 0);
+    sched_setprio(peng, 2);
+    sched_setprio(ping, 4);
+    sched_setprio(pong, 6);
+    sched_setprio(pung, 8);
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-scheduler.txt b/ppos/test/pingpong-scheduler.txt
new file mode 100644 (file)
index 0000000..0316d77
--- /dev/null
@@ -0,0 +1,66 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+user: fim
+       Pang: inicio (prioridade 0)
+       Pang: 0
+       Pang: 1
+               Peng: inicio (prioridade 2)
+               Peng: 0
+       Pang: 2
+                       Ping: inicio (prioridade 4)
+                       Ping: 0
+       Pang: 3
+               Peng: 1
+                               Pong: inicio (prioridade 6)
+                               Pong: 0
+       Pang: 4
+                                       Pung: inicio (prioridade 8)
+                                       Pung: 0
+                       Ping: 1
+               Peng: 2
+       Pang: 5
+       Pang: 6
+                               Pong: 1
+               Peng: 3
+       Pang: 7
+                       Ping: 2
+       Pang: 8
+                                       Pung: 1
+               Peng: 4
+       Pang: 9
+                               Pong: 2
+                       Ping: 3
+       Pang: fim
+               Peng: 5
+                                       Pung: 2
+                       Ping: 4
+               Peng: 6
+                               Pong: 3
+               Peng: 7
+                       Ping: 5
+               Peng: 8
+                                       Pung: 3
+               Peng: 9
+                               Pong: 4
+                       Ping: 6
+               Peng: fim
+                       Ping: 7
+                                       Pung: 4
+                               Pong: 5
+                       Ping: 8
+                       Ping: 9
+                               Pong: 6
+                       Ping: fim
+                                       Pung: 5
+                               Pong: 7
+                               Pong: 8
+                                       Pung: 6
+                               Pong: 9
+                               Pong: fim
+                                       Pung: 7
+                                       Pung: 8
+                                       Pung: 9
+                                       Pung: fim
+PPOS: system stopping
+PPOS: system stopped (uptime 0 ms)
diff --git a/ppos/test/pingpong-semaphore-stress.c b/ppos/test/pingpong-semaphore-stress.c
new file mode 100644 (file)
index 0000000..34d1f8e
--- /dev/null
@@ -0,0 +1,99 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste de semáforos (stress)
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define NUMTASKS 64
+#define NUMSTEPS 1000000
+
+static struct task_t *task[NUMTASKS];
+static struct semaphore_t *s;
+static int soma = 0;
+
+// corpo das tarefas
+void body()
+{
+    int status;
+
+    for (int i = 0; i < NUMSTEPS; i++)
+    {
+        // incrementa contador (seção crítica)
+        status = sem_down(s);
+        if (status == ERROR)
+            break;
+
+        soma += 1;
+
+        status = sem_up(s);
+        if (status == ERROR)
+            break;
+    }
+
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+
+    printf("user: inicio\n");
+
+    // inicia semáforo em 0 (bloqueado)
+    s = sem_create(0);
+    assert(s);
+
+    printf("%d tarefas somando %d vezes cada, aguarde...\n",
+           NUMTASKS, NUMSTEPS);
+
+    // cria tarefas
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        task[i] = task_create(NULL, body, "Task");
+        assert(task[i]);
+    }
+
+    // espera um pouco para liberar o semáforo; isso faz com que todas
+    // as tarefas tenham sido criadas e possam competir pelo semáforo
+    // em pé de igualdade.
+    task_sleep(100);
+    status = sem_up(s);
+    assert(status == NOERROR);
+
+    // aguarda as tarefas encerrarem
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        status = task_wait(task[i]);
+        assert(status == NOERROR);
+    }
+
+    // destroi o semáforo
+    status = sem_destroy(s);
+    assert(status == NOERROR);
+
+    // verifica se a soma está correta
+    if (soma == (NUMTASKS * NUMSTEPS))
+        printf("A soma deu %d, valor correto!\n", soma);
+    else
+        printf("A soma deu %d, mas deveria dar %d!\n",
+               soma, NUMTASKS * NUMSTEPS);
+
+    // destroi os descritores
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        status = task_destroy(task[i]);
+        assert(status == NOERROR);
+    }
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-semaphore-stress.txt b/ppos/test/pingpong-semaphore-stress.txt
new file mode 100644 (file)
index 0000000..4d8f638
--- /dev/null
@@ -0,0 +1,74 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+64 tarefas somando 1000000 vezes cada, aguarde...
+PPOS: task 2 ((null)) exit code 0, 24236 ms elapsed time,   215 ms cpu time, 1000001 activations
+PPOS: task 3 ((null)) exit code 0, 24236 ms elapsed time,   236 ms cpu time, 1000001 activations
+PPOS: task 4 ((null)) exit code 0, 24236 ms elapsed time,   216 ms cpu time, 1000001 activations
+PPOS: task 5 ((null)) exit code 0, 24236 ms elapsed time,   246 ms cpu time, 1000001 activations
+PPOS: task 6 ((null)) exit code 0, 24236 ms elapsed time,   245 ms cpu time, 1000001 activations
+PPOS: task 7 ((null)) exit code 0, 24236 ms elapsed time,   224 ms cpu time, 1000001 activations
+PPOS: task 8 ((null)) exit code 0, 24236 ms elapsed time,   243 ms cpu time, 1000001 activations
+PPOS: task 9 ((null)) exit code 0, 24236 ms elapsed time,   204 ms cpu time, 1000001 activations
+PPOS: task 10 ((null)) exit code 0, 24236 ms elapsed time,   230 ms cpu time, 1000001 activations
+PPOS: task 11 ((null)) exit code 0, 24236 ms elapsed time,   253 ms cpu time, 1000001 activations
+PPOS: task 12 ((null)) exit code 0, 24236 ms elapsed time,   212 ms cpu time, 1000001 activations
+PPOS: task 13 ((null)) exit code 0, 24236 ms elapsed time,   196 ms cpu time, 1000001 activations
+PPOS: task 14 ((null)) exit code 0, 24236 ms elapsed time,   228 ms cpu time, 1000001 activations
+PPOS: task 15 ((null)) exit code 0, 24236 ms elapsed time,   217 ms cpu time, 1000001 activations
+PPOS: task 16 ((null)) exit code 0, 24236 ms elapsed time,   246 ms cpu time, 1000001 activations
+PPOS: task 17 ((null)) exit code 0, 24236 ms elapsed time,   237 ms cpu time, 1000001 activations
+PPOS: task 18 ((null)) exit code 0, 24236 ms elapsed time,   216 ms cpu time, 1000001 activations
+PPOS: task 19 ((null)) exit code 0, 24236 ms elapsed time,   200 ms cpu time, 1000001 activations
+PPOS: task 20 ((null)) exit code 0, 24236 ms elapsed time,   217 ms cpu time, 1000001 activations
+PPOS: task 21 ((null)) exit code 0, 24236 ms elapsed time,   282 ms cpu time, 1000001 activations
+PPOS: task 22 ((null)) exit code 0, 24236 ms elapsed time,   220 ms cpu time, 1000001 activations
+PPOS: task 23 ((null)) exit code 0, 24236 ms elapsed time,   214 ms cpu time, 1000001 activations
+PPOS: task 24 ((null)) exit code 0, 24236 ms elapsed time,   203 ms cpu time, 1000001 activations
+PPOS: task 25 ((null)) exit code 0, 24236 ms elapsed time,   219 ms cpu time, 1000001 activations
+PPOS: task 26 ((null)) exit code 0, 24236 ms elapsed time,   200 ms cpu time, 1000001 activations
+PPOS: task 27 ((null)) exit code 0, 24236 ms elapsed time,   233 ms cpu time, 1000001 activations
+PPOS: task 28 ((null)) exit code 0, 24236 ms elapsed time,   213 ms cpu time, 1000001 activations
+PPOS: task 29 ((null)) exit code 0, 24236 ms elapsed time,   235 ms cpu time, 1000001 activations
+PPOS: task 30 ((null)) exit code 0, 24236 ms elapsed time,   230 ms cpu time, 1000001 activations
+PPOS: task 31 ((null)) exit code 0, 24236 ms elapsed time,   233 ms cpu time, 1000001 activations
+PPOS: task 32 ((null)) exit code 0, 24236 ms elapsed time,   243 ms cpu time, 1000001 activations
+PPOS: task 33 ((null)) exit code 0, 24236 ms elapsed time,   195 ms cpu time, 1000001 activations
+PPOS: task 34 ((null)) exit code 0, 24236 ms elapsed time,   225 ms cpu time, 1000001 activations
+PPOS: task 35 ((null)) exit code 0, 24236 ms elapsed time,   199 ms cpu time, 1000001 activations
+PPOS: task 36 ((null)) exit code 0, 24236 ms elapsed time,   232 ms cpu time, 1000001 activations
+PPOS: task 37 ((null)) exit code 0, 24236 ms elapsed time,   210 ms cpu time, 1000001 activations
+PPOS: task 38 ((null)) exit code 0, 24236 ms elapsed time,   230 ms cpu time, 1000001 activations
+PPOS: task 39 ((null)) exit code 0, 24236 ms elapsed time,   213 ms cpu time, 1000001 activations
+PPOS: task 40 ((null)) exit code 0, 24236 ms elapsed time,   245 ms cpu time, 1000001 activations
+PPOS: task 41 ((null)) exit code 0, 24236 ms elapsed time,   220 ms cpu time, 1000001 activations
+PPOS: task 42 ((null)) exit code 0, 24236 ms elapsed time,   209 ms cpu time, 1000001 activations
+PPOS: task 43 ((null)) exit code 0, 24237 ms elapsed time,   216 ms cpu time, 1000001 activations
+PPOS: task 44 ((null)) exit code 0, 24237 ms elapsed time,   230 ms cpu time, 1000001 activations
+PPOS: task 45 ((null)) exit code 0, 24237 ms elapsed time,   230 ms cpu time, 1000001 activations
+PPOS: task 46 ((null)) exit code 0, 24237 ms elapsed time,   227 ms cpu time, 1000001 activations
+PPOS: task 47 ((null)) exit code 0, 24237 ms elapsed time,   209 ms cpu time, 1000001 activations
+PPOS: task 48 ((null)) exit code 0, 24237 ms elapsed time,   213 ms cpu time, 1000001 activations
+PPOS: task 49 ((null)) exit code 0, 24237 ms elapsed time,   206 ms cpu time, 1000001 activations
+PPOS: task 50 ((null)) exit code 0, 24237 ms elapsed time,   226 ms cpu time, 1000001 activations
+PPOS: task 51 ((null)) exit code 0, 24237 ms elapsed time,   231 ms cpu time, 1000001 activations
+PPOS: task 52 ((null)) exit code 0, 24237 ms elapsed time,   212 ms cpu time, 1000001 activations
+PPOS: task 53 ((null)) exit code 0, 24237 ms elapsed time,   240 ms cpu time, 1000001 activations
+PPOS: task 54 ((null)) exit code 0, 24237 ms elapsed time,   243 ms cpu time, 1000001 activations
+PPOS: task 55 ((null)) exit code 0, 24237 ms elapsed time,   212 ms cpu time, 1000001 activations
+PPOS: task 56 ((null)) exit code 0, 24237 ms elapsed time,   218 ms cpu time, 1000001 activations
+PPOS: task 57 ((null)) exit code 0, 24237 ms elapsed time,   191 ms cpu time, 1000001 activations
+PPOS: task 58 ((null)) exit code 0, 24237 ms elapsed time,   233 ms cpu time, 1000001 activations
+PPOS: task 59 ((null)) exit code 0, 24237 ms elapsed time,   232 ms cpu time, 1000001 activations
+PPOS: task 60 ((null)) exit code 0, 24237 ms elapsed time,   205 ms cpu time, 1000001 activations
+PPOS: task 61 ((null)) exit code 0, 24237 ms elapsed time,   245 ms cpu time, 1000001 activations
+PPOS: task 62 ((null)) exit code 0, 24237 ms elapsed time,   225 ms cpu time, 1000001 activations
+PPOS: task 63 ((null)) exit code 0, 24237 ms elapsed time,   222 ms cpu time, 1000001 activations
+PPOS: task 64 ((null)) exit code 0, 24237 ms elapsed time,   252 ms cpu time, 1000001 activations
+PPOS: task 65 ((null)) exit code 0, 24237 ms elapsed time,   251 ms cpu time, 1000001 activations
+A soma deu 64000000, valor correto!
+user: fim
+PPOS: task 1 (user) exit code 0, 24237 ms elapsed time,     0 ms cpu time,    34 activations
+PPOS: task 0 (kernel) exit code 0, 24237 ms elapsed time,  9883 ms cpu time, 64000099 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 24237 ms)
diff --git a/ppos/test/pingpong-semaphore.c b/ppos/test/pingpong-semaphore.c
new file mode 100644 (file)
index 0000000..6cd85f5
--- /dev/null
@@ -0,0 +1,113 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste de semáforos (leve)
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+static struct task_t *a1, *a2, *b1, *b2;
+static struct semaphore_t *s1, *s2;
+
+// corpo da tarefa A
+void body_a(void *arg)
+{
+    int status;
+
+    for (int i = 0; i < 5; i++)
+    {
+        status = sem_down(s1);
+        if (status == ERROR)
+            break;
+
+        printf("%5d ms: %s zig (%d)\n", systime(), (char *)arg, i);
+        task_sleep(1000);
+
+        status = sem_up(s2);
+        if (status == ERROR)
+            break;
+    }
+    task_exit(0);
+}
+
+// corpo da tarefa B
+void body_b(void *arg)
+{
+    int status;
+
+    for (int i = 0; i < 5; i++)
+    {
+        status = sem_down(s2);
+        if (status == ERROR)
+            break;
+
+        printf("%5d ms: %s zag (%d)\n", systime(), (char *)arg, i);
+        task_sleep(1000);
+
+        status = sem_up(s1);
+        if (status == ERROR)
+            break;
+    }
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+
+    printf("user: inicio\n");
+
+    // inicia semáforos
+    s1 = sem_create(1);
+    assert(s1);
+    s2 = sem_create(0);
+    assert(s2);
+
+    // cria tarefas
+    a1 = task_create("a1", body_a, "A1");
+    assert(a1);
+    a2 = task_create("a2", body_a, "\tA2");
+    assert(a2);
+    b1 = task_create("b1", body_b, "\t\t\tB1");
+    assert(b1);
+    b2 = task_create("b2", body_b, "\t\t\t\tB2");
+    assert(b2);
+
+    // aguarda a1 encerrar
+    status = task_wait(a1);
+    assert(status == NOERROR);
+
+    // destroi semáforos
+    status = sem_destroy(s1);
+    assert(status == NOERROR);
+    status = sem_destroy(s2);
+    assert(status == NOERROR);
+
+    // aguarda a2, b1 e b2 encerrarem
+    status = task_wait(a2);
+    assert(status == NOERROR);
+    status = task_wait(b1);
+    assert(status == NOERROR);
+    status = task_wait(b2);
+    assert(status == NOERROR);
+
+    // destroi os descritores das tarefas
+    status = task_destroy(a1);
+    assert(status == NOERROR);
+    status = task_destroy(a2);
+    assert(status == NOERROR);
+    status = task_destroy(b1);
+    assert(status == NOERROR);
+    status = task_destroy(b2);
+    assert(status == NOERROR);
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-semaphore.txt b/ppos/test/pingpong-semaphore.txt
new file mode 100644 (file)
index 0000000..a0315d8
--- /dev/null
@@ -0,0 +1,30 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+    0 ms: A1 zig (0)
+ 1000 ms:                      B1 zag (0)
+ 2000 ms:      A2 zig (0)
+ 3000 ms:                              B2 zag (0)
+ 4000 ms: A1 zig (1)
+ 5000 ms:                      B1 zag (1)
+ 6000 ms:      A2 zig (1)
+ 7000 ms:                              B2 zag (1)
+ 8000 ms: A1 zig (2)
+ 9000 ms:                      B1 zag (2)
+10000 ms:      A2 zig (2)
+11000 ms:                              B2 zag (2)
+12000 ms: A1 zig (3)
+13000 ms:                      B1 zag (3)
+14000 ms:      A2 zig (3)
+15000 ms:                              B2 zag (3)
+16000 ms: A1 zig (4)
+PPOS: task 2 (a1) exit code 0, 17000 ms elapsed time,     0 ms cpu time,    10 activations
+17000 ms:                      B1 zag (4)
+PPOS: task 3 (a2) exit code 0, 17000 ms elapsed time,     0 ms cpu time,    10 activations
+PPOS: task 5 (b2) exit code 0, 17000 ms elapsed time,     0 ms cpu time,    10 activations
+PPOS: task 4 (b1) exit code 0, 18000 ms elapsed time,     0 ms cpu time,    11 activations
+user: fim
+PPOS: task 1 (user) exit code 0, 18000 ms elapsed time,     0 ms cpu time,     4 activations
+PPOS: task 0 (kernel) exit code 0, 18000 ms elapsed time, 18000 ms cpu time,    46 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 18000 ms)
diff --git a/ppos/test/pingpong-sleep.c b/ppos/test/pingpong-sleep.c
new file mode 100644 (file)
index 0000000..a03c343
--- /dev/null
@@ -0,0 +1,108 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da função task_sleep()
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+static struct task_t *pang, *peng, *ping, *pong, *pung;
+
+// corpo das tarefas
+void body(void *arg)
+{
+    int i, t_sleep, t_before, t_after;
+    char *status;
+
+    printf("%5d ms: %s: inicio\n", systime(), (char *)arg);
+    for (i = 0; i < 20; i++)
+    {
+        // sorteia tempo entre 0 e 2000 ms (2s), em saltos de 100 ms
+        t_sleep = 100 * (randnum() % 21);
+
+        // informa o quanto vai dormir
+        printf("%5d ms: %s vai dormir %d ms\n",
+               systime(), (char *)arg, t_sleep);
+
+        // registra tempo antes e depois de dormir
+        t_before = systime();
+        task_sleep(t_sleep);
+        t_after = systime();
+
+        // verifica se dormiu o intervalo especificado
+        status = (t_after - t_before) == t_sleep ? "ok" : "ERRADO";
+
+        // informa o quanto efetivamente dormiu
+        printf("%5d ms: %s dormiu     %d ms (%s)\n", systime(),
+               (char *)arg, t_after - t_before, status);
+    }
+    printf("%5d ms: %s: fim\n", systime(), (char *)arg);
+    task_exit(0);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+
+    printf("%5d ms: user: inicio\n", systime());
+
+    // cria tarefas
+    pang = task_create("pang", body, "\tPang");
+    assert(pang);
+    peng = task_create("peng", body, "\t\tPeng");
+    assert(peng);
+    ping = task_create("ping", body, "\t\t\tPing");
+    assert(ping);
+    pong = task_create("pong", body, "\t\t\t\tPong");
+    assert(pong);
+    pung = task_create("pung", body, "\t\t\t\t\tPung");
+    assert(pung);
+
+    // aguarda tarefas concluirem
+    printf("%5d ms: user: espera Pang...\n", systime());
+    status = task_wait(pang);
+    assert(status == NOERROR);
+    printf("%5d ms: user: Pang acabou\n", systime());
+
+    printf("%5d ms: user: espera Peng...\n", systime());
+    status = task_wait(peng);
+    assert(status == NOERROR);
+    printf("%5d ms: user: Peng acabou\n", systime());
+
+    printf("%5d ms: user: espera Ping...\n", systime());
+    status = task_wait(ping);
+    assert(status == NOERROR);
+    printf("%5d ms: user: Ping acabou\n", systime());
+
+    printf("%5d ms: user: espera Pong...\n", systime());
+    status = task_wait(pong);
+    assert(status == NOERROR);
+    printf("%5d ms: user: Pong acabou\n", systime());
+
+    printf("%5d ms: user: espera Pung...\n", systime());
+    status = task_wait(pung);
+    assert(status == NOERROR);
+    printf("%5d ms: user: Pung acabou\n", systime());
+
+    // destroi descritores
+    status = task_destroy(pang);
+    assert(status == NOERROR);
+    status = task_destroy(peng);
+    assert(status == NOERROR);
+    status = task_destroy(ping);
+    assert(status == NOERROR);
+    status = task_destroy(pong);
+    assert(status == NOERROR);
+    status = task_destroy(pung);
+    assert(status == NOERROR);
+
+    printf("%5d ms: user: fim\n", systime());
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-sleep.txt b/ppos/test/pingpong-sleep.txt
new file mode 100644 (file)
index 0000000..187b415
--- /dev/null
@@ -0,0 +1,233 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+    0 ms: user: inicio
+    0 ms: user: espera Pang...
+    0 ms:      Pang: inicio
+    0 ms:      Pang vai dormir 1000 ms
+    0 ms:              Peng: inicio
+    0 ms:              Peng vai dormir 1100 ms
+    0 ms:                      Ping: inicio
+    0 ms:                      Ping vai dormir 500 ms
+    0 ms:                              Pong: inicio
+    0 ms:                              Pong vai dormir 0 ms
+    0 ms:                              Pong dormiu     0 ms (ok)
+    0 ms:                              Pong vai dormir 1900 ms
+    0 ms:                                      Pung: inicio
+    0 ms:                                      Pung vai dormir 1300 ms
+  500 ms:                      Ping dormiu     500 ms (ok)
+  500 ms:                      Ping vai dormir 800 ms
+ 1000 ms:      Pang dormiu     1000 ms (ok)
+ 1000 ms:      Pang vai dormir 200 ms
+ 1100 ms:              Peng dormiu     1100 ms (ok)
+ 1100 ms:              Peng vai dormir 0 ms
+ 1100 ms:              Peng dormiu     0 ms (ok)
+ 1100 ms:              Peng vai dormir 800 ms
+ 1200 ms:      Pang dormiu     200 ms (ok)
+ 1200 ms:      Pang vai dormir 300 ms
+ 1300 ms:                                      Pung dormiu     1300 ms (ok)
+ 1300 ms:                                      Pung vai dormir 500 ms
+ 1300 ms:                      Ping dormiu     800 ms (ok)
+ 1300 ms:                      Ping vai dormir 400 ms
+ 1500 ms:      Pang dormiu     300 ms (ok)
+ 1500 ms:      Pang vai dormir 300 ms
+ 1700 ms:                      Ping dormiu     400 ms (ok)
+ 1700 ms:                      Ping vai dormir 1600 ms
+ 1800 ms:                                      Pung dormiu     500 ms (ok)
+ 1800 ms:                                      Pung vai dormir 200 ms
+ 1800 ms:      Pang dormiu     300 ms (ok)
+ 1800 ms:      Pang vai dormir 1900 ms
+ 1900 ms:                              Pong dormiu     1900 ms (ok)
+ 1900 ms:                              Pong vai dormir 200 ms
+ 1900 ms:              Peng dormiu     800 ms (ok)
+ 1900 ms:              Peng vai dormir 700 ms
+ 2000 ms:                                      Pung dormiu     200 ms (ok)
+ 2000 ms:                                      Pung vai dormir 300 ms
+ 2100 ms:                              Pong dormiu     200 ms (ok)
+ 2100 ms:                              Pong vai dormir 200 ms
+ 2300 ms:                                      Pung dormiu     300 ms (ok)
+ 2300 ms:                                      Pung vai dormir 600 ms
+ 2300 ms:                              Pong dormiu     200 ms (ok)
+ 2300 ms:                              Pong vai dormir 600 ms
+ 2600 ms:              Peng dormiu     700 ms (ok)
+ 2600 ms:              Peng vai dormir 100 ms
+ 2700 ms:              Peng dormiu     100 ms (ok)
+ 2700 ms:              Peng vai dormir 600 ms
+ 2900 ms:                                      Pung dormiu     600 ms (ok)
+ 2900 ms:                                      Pung vai dormir 200 ms
+ 2900 ms:                              Pong dormiu     600 ms (ok)
+ 2900 ms:                              Pong vai dormir 1700 ms
+ 3100 ms:                                      Pung dormiu     200 ms (ok)
+ 3100 ms:                                      Pung vai dormir 400 ms
+ 3300 ms:                      Ping dormiu     1600 ms (ok)
+ 3300 ms:                      Ping vai dormir 1700 ms
+ 3300 ms:              Peng dormiu     600 ms (ok)
+ 3300 ms:              Peng vai dormir 500 ms
+ 3500 ms:                                      Pung dormiu     400 ms (ok)
+ 3500 ms:                                      Pung vai dormir 300 ms
+ 3700 ms:      Pang dormiu     1900 ms (ok)
+ 3700 ms:      Pang vai dormir 2000 ms
+ 3800 ms:              Peng dormiu     500 ms (ok)
+ 3800 ms:              Peng vai dormir 300 ms
+ 3800 ms:                                      Pung dormiu     300 ms (ok)
+ 3800 ms:                                      Pung vai dormir 1100 ms
+ 4100 ms:              Peng dormiu     300 ms (ok)
+ 4100 ms:              Peng vai dormir 1400 ms
+ 4600 ms:                              Pong dormiu     1700 ms (ok)
+ 4600 ms:                              Pong vai dormir 400 ms
+ 4900 ms:                                      Pung dormiu     1100 ms (ok)
+ 4900 ms:                                      Pung vai dormir 1600 ms
+ 5000 ms:                      Ping dormiu     1700 ms (ok)
+ 5000 ms:                      Ping vai dormir 300 ms
+ 5000 ms:                              Pong dormiu     400 ms (ok)
+ 5000 ms:                              Pong vai dormir 1400 ms
+ 5300 ms:                      Ping dormiu     300 ms (ok)
+ 5300 ms:                      Ping vai dormir 1200 ms
+ 5500 ms:              Peng dormiu     1400 ms (ok)
+ 5500 ms:              Peng vai dormir 1700 ms
+ 5700 ms:      Pang dormiu     2000 ms (ok)
+ 5700 ms:      Pang vai dormir 1600 ms
+ 6400 ms:                              Pong dormiu     1400 ms (ok)
+ 6400 ms:                              Pong vai dormir 300 ms
+ 6500 ms:                                      Pung dormiu     1600 ms (ok)
+ 6500 ms:                                      Pung vai dormir 1000 ms
+ 6500 ms:                      Ping dormiu     1200 ms (ok)
+ 6500 ms:                      Ping vai dormir 1900 ms
+ 6700 ms:                              Pong dormiu     300 ms (ok)
+ 6700 ms:                              Pong vai dormir 600 ms
+ 7200 ms:              Peng dormiu     1700 ms (ok)
+ 7200 ms:              Peng vai dormir 400 ms
+ 7300 ms:      Pang dormiu     1600 ms (ok)
+ 7300 ms:      Pang vai dormir 0 ms
+ 7300 ms:      Pang dormiu     0 ms (ok)
+ 7300 ms:      Pang vai dormir 1200 ms
+ 7300 ms:                              Pong dormiu     600 ms (ok)
+ 7300 ms:                              Pong vai dormir 1100 ms
+ 7500 ms:                                      Pung dormiu     1000 ms (ok)
+ 7500 ms:                                      Pung vai dormir 1500 ms
+ 7600 ms:              Peng dormiu     400 ms (ok)
+ 7600 ms:              Peng vai dormir 1300 ms
+ 8400 ms:                      Ping dormiu     1900 ms (ok)
+ 8400 ms:                      Ping vai dormir 700 ms
+ 8400 ms:                              Pong dormiu     1100 ms (ok)
+ 8400 ms:                              Pong vai dormir 1300 ms
+ 8500 ms:      Pang dormiu     1200 ms (ok)
+ 8500 ms:      Pang vai dormir 1700 ms
+ 8900 ms:              Peng dormiu     1300 ms (ok)
+ 8900 ms:              Peng vai dormir 700 ms
+ 9000 ms:                                      Pung dormiu     1500 ms (ok)
+ 9000 ms:                                      Pung vai dormir 1700 ms
+ 9100 ms:                      Ping dormiu     700 ms (ok)
+ 9100 ms:                      Ping vai dormir 0 ms
+ 9100 ms:                      Ping dormiu     0 ms (ok)
+ 9100 ms:                      Ping vai dormir 400 ms
+ 9500 ms:                      Ping dormiu     400 ms (ok)
+ 9500 ms:                      Ping vai dormir 900 ms
+ 9600 ms:              Peng dormiu     700 ms (ok)
+ 9600 ms:              Peng vai dormir 700 ms
+ 9700 ms:                              Pong dormiu     1300 ms (ok)
+ 9700 ms:                              Pong vai dormir 1700 ms
+10200 ms:      Pang dormiu     1700 ms (ok)
+10200 ms:      Pang vai dormir 1800 ms
+10300 ms:              Peng dormiu     700 ms (ok)
+10300 ms:              Peng vai dormir 1700 ms
+10400 ms:                      Ping dormiu     900 ms (ok)
+10400 ms:                      Ping vai dormir 1200 ms
+10700 ms:                                      Pung dormiu     1700 ms (ok)
+10700 ms:                                      Pung vai dormir 1700 ms
+11400 ms:                              Pong dormiu     1700 ms (ok)
+11400 ms:                              Pong vai dormir 1100 ms
+11600 ms:                      Ping dormiu     1200 ms (ok)
+11600 ms:                      Ping vai dormir 1500 ms
+12000 ms:      Pang dormiu     1800 ms (ok)
+12000 ms:      Pang vai dormir 1400 ms
+12000 ms:              Peng dormiu     1700 ms (ok)
+12000 ms:              Peng vai dormir 1400 ms
+12400 ms:                                      Pung dormiu     1700 ms (ok)
+12400 ms:                                      Pung vai dormir 1700 ms
+12500 ms:                              Pong dormiu     1100 ms (ok)
+12500 ms:                              Pong vai dormir 300 ms
+12800 ms:                              Pong dormiu     300 ms (ok)
+12800 ms:                              Pong vai dormir 1500 ms
+13100 ms:                      Ping dormiu     1500 ms (ok)
+13100 ms:                      Ping vai dormir 1300 ms
+13400 ms:      Pang dormiu     1400 ms (ok)
+13400 ms:      Pang vai dormir 1100 ms
+13400 ms:              Peng dormiu     1400 ms (ok)
+13400 ms:              Peng vai dormir 200 ms
+13600 ms:              Peng dormiu     200 ms (ok)
+13600 ms:              Peng vai dormir 1200 ms
+14100 ms:                                      Pung dormiu     1700 ms (ok)
+14100 ms:                                      Pung vai dormir 1700 ms
+14300 ms:                              Pong dormiu     1500 ms (ok)
+14300 ms:                              Pong vai dormir 1600 ms
+14400 ms:                      Ping dormiu     1300 ms (ok)
+14400 ms:                      Ping vai dormir 600 ms
+14500 ms:      Pang dormiu     1100 ms (ok)
+14500 ms:      Pang vai dormir 1900 ms
+14800 ms:              Peng dormiu     1200 ms (ok)
+14800 ms:              Peng vai dormir 500 ms
+15000 ms:                      Ping dormiu     600 ms (ok)
+15000 ms:                      Ping vai dormir 1900 ms
+15300 ms:              Peng dormiu     500 ms (ok)
+15300 ms:              Peng vai dormir 600 ms
+15800 ms:                                      Pung dormiu     1700 ms (ok)
+15800 ms:                                      Pung vai dormir 200 ms
+15900 ms:                              Pong dormiu     1600 ms (ok)
+15900 ms:                              Pong vai dormir 2000 ms
+15900 ms:              Peng dormiu     600 ms (ok)
+15900 ms:              Peng: fim
+PPOS: task 3 (peng) exit code 0, 15900 ms elapsed time,     0 ms cpu time,    20 activations
+16000 ms:                                      Pung dormiu     200 ms (ok)
+16000 ms:                                      Pung vai dormir 1200 ms
+16400 ms:      Pang dormiu     1900 ms (ok)
+16400 ms:      Pang vai dormir 1400 ms
+16900 ms:                      Ping dormiu     1900 ms (ok)
+16900 ms:                      Ping vai dormir 0 ms
+16900 ms:                      Ping dormiu     0 ms (ok)
+16900 ms:                      Ping vai dormir 200 ms
+17100 ms:                      Ping dormiu     200 ms (ok)
+17100 ms:                      Ping vai dormir 1900 ms
+17200 ms:                                      Pung dormiu     1200 ms (ok)
+17200 ms:                                      Pung vai dormir 100 ms
+17300 ms:                                      Pung dormiu     100 ms (ok)
+17300 ms:                                      Pung vai dormir 1400 ms
+17800 ms:      Pang dormiu     1400 ms (ok)
+17800 ms:      Pang vai dormir 1400 ms
+17900 ms:                              Pong dormiu     2000 ms (ok)
+17900 ms:                              Pong vai dormir 100 ms
+18000 ms:                              Pong dormiu     100 ms (ok)
+18000 ms:                              Pong vai dormir 200 ms
+18200 ms:                              Pong dormiu     200 ms (ok)
+18200 ms:                              Pong: fim
+PPOS: task 5 (pong) exit code 0, 18200 ms elapsed time,     0 ms cpu time,    20 activations
+18700 ms:                                      Pung dormiu     1400 ms (ok)
+18700 ms:                                      Pung: fim
+PPOS: task 6 (pung) exit code 0, 18700 ms elapsed time,     0 ms cpu time,    21 activations
+19000 ms:                      Ping dormiu     1900 ms (ok)
+19000 ms:                      Ping: fim
+PPOS: task 4 (ping) exit code 0, 19000 ms elapsed time,     0 ms cpu time,    19 activations
+19200 ms:      Pang dormiu     1400 ms (ok)
+19200 ms:      Pang vai dormir 1600 ms
+20800 ms:      Pang dormiu     1600 ms (ok)
+20800 ms:      Pang vai dormir 1900 ms
+22700 ms:      Pang dormiu     1900 ms (ok)
+22700 ms:      Pang vai dormir 1000 ms
+23700 ms:      Pang dormiu     1000 ms (ok)
+23700 ms:      Pang vai dormir 800 ms
+24500 ms:      Pang dormiu     800 ms (ok)
+24500 ms:      Pang: fim
+PPOS: task 2 (pang) exit code 0, 24500 ms elapsed time,     0 ms cpu time,    20 activations
+24500 ms: user: Pang acabou
+24500 ms: user: espera Peng...
+24500 ms: user: Peng acabou
+24500 ms: user: espera Ping...
+24500 ms: user: Ping acabou
+24500 ms: user: espera Pong...
+24500 ms: user: Pong acabou
+24500 ms: user: espera Pung...
+24500 ms: user: Pung acabou
+24500 ms: user: fim
+PPOS: task 1 (user) exit code 0, 24500 ms elapsed time,     0 ms cpu time,     2 activations
+PPOS: task 0 (kernel) exit code 0, 24500 ms elapsed time, 24500 ms cpu time,   103 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 24500 ms)
diff --git a/ppos/test/pingpong-task1.c b/ppos/test/pingpong-task1.c
new file mode 100644 (file)
index 0000000..57136af
--- /dev/null
@@ -0,0 +1,74 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da gestão básica de tarefas
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+static struct task_t *ping, *pong;
+
+// corpo da tarefa Ping
+void body_ping(void *)
+{
+    char *name = task_name(NULL);
+
+    printf("\t%s: inicio\n", name);
+    for (int i = 0; i < 4; i++)
+    {
+        printf("\t%s: %d\n", name, i);
+        task_switch(pong);
+    }
+    printf("\t%s: fim\n", name);
+    task_switch(NULL);
+}
+
+// corpo da tarefa Pong
+void body_pong(void *)
+{
+    char *name = task_name(NULL);
+
+    printf("\t\t%s: inicio\n", name);
+    for (int i = 0; i < 4; i++)
+    {
+        printf("\t\t%s: %d\n", name, i);
+        task_switch(ping);
+    }
+    printf("\t\t%s: fim\n", name);
+    task_switch(NULL);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+    char *name = task_name(NULL);
+
+    printf("%s: inicio\n", name);
+
+    ping = task_create("ping", body_ping, NULL);
+    assert(ping);
+    pong = task_create("pong", body_pong, NULL);
+    assert(pong);
+
+    status = task_switch(ping);
+    assert(status == NOERROR);
+
+    status = task_switch(pong);
+    assert(status == NOERROR);
+
+    printf("%s: fim\n", name);
+
+    status = task_destroy(ping);
+    assert(status == NOERROR);
+
+    status = task_destroy(pong);
+    assert(status == NOERROR);
+
+    task_switch(NULL);
+}
diff --git a/ppos/test/pingpong-task1.txt b/ppos/test/pingpong-task1.txt
new file mode 100644 (file)
index 0000000..32178d5
--- /dev/null
@@ -0,0 +1,18 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+       ping: inicio
+       ping: 0
+               pong: inicio
+               pong: 0
+       ping: 1
+               pong: 1
+       ping: 2
+               pong: 2
+       ping: 3
+               pong: 3
+       ping: fim
+               pong: fim
+user: fim
+PPOS: system stopping
+PPOS: system stopped (uptime 0 ms)
diff --git a/ppos/test/pingpong-task2.c b/ppos/test/pingpong-task2.c
new file mode 100644 (file)
index 0000000..ea6ba0d
--- /dev/null
@@ -0,0 +1,72 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da gestão básica de tarefas
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define NUMTASKS 512
+
+static struct task_t *task[NUMTASKS];
+
+// corpo das tarefas
+void body_task(void *arg)
+{
+    int id;
+    int next;
+
+    id = task_id(NULL);
+    printf("\tIniciei  tarefa %5d\n", id);
+
+    // passa o controle para a proxima tarefa
+    next = ((long)arg + 1) % NUMTASKS;
+    printf("\tVou mudar para a tarefa %d\n", task_id(task[next]));
+    task_switch(task[next]);
+
+    printf("\tEncerrei tarefa %5d\n", id);
+
+    task_switch(NULL);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+    char *name = task_name(NULL);
+
+    printf("%s: inicio\n", name);
+
+    // inicia tarefas
+    for (long i = 0; i < NUMTASKS; i++)
+    {
+        task[i] = task_create(NULL, body_task, (void *)i);
+        assert(task[i]);
+        printf("%s: criei a tarefa %d\n", name, task_id(task[i]));
+    }
+
+    // passa o controle para cada uma delas em sequencia
+    for (long i = 0; i < NUMTASKS; i++)
+    {
+        printf("%s: vou ativar a tarefa %d\n", name, task_id(task[i]));
+        status = task_switch(task[i]);
+        assert(status == NOERROR);
+    }
+
+    // destroi os descritores
+    for (long i = 0; i < NUMTASKS; i++)
+    {
+        printf("%s: vou destruir a tarefa %d\n", name, task_id(task[i]));
+        status = task_destroy(task[i]);
+        assert(status == NOERROR);
+    }
+
+    printf("%s: fim\n", name);
+
+    task_switch(NULL);
+}
diff --git a/ppos/test/pingpong-task2.txt b/ppos/test/pingpong-task2.txt
new file mode 100644 (file)
index 0000000..be579f2
--- /dev/null
@@ -0,0 +1,3078 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+user: criei a tarefa 2
+user: criei a tarefa 3
+user: criei a tarefa 4
+user: criei a tarefa 5
+user: criei a tarefa 6
+user: criei a tarefa 7
+user: criei a tarefa 8
+user: criei a tarefa 9
+user: criei a tarefa 10
+user: criei a tarefa 11
+user: criei a tarefa 12
+user: criei a tarefa 13
+user: criei a tarefa 14
+user: criei a tarefa 15
+user: criei a tarefa 16
+user: criei a tarefa 17
+user: criei a tarefa 18
+user: criei a tarefa 19
+user: criei a tarefa 20
+user: criei a tarefa 21
+user: criei a tarefa 22
+user: criei a tarefa 23
+user: criei a tarefa 24
+user: criei a tarefa 25
+user: criei a tarefa 26
+user: criei a tarefa 27
+user: criei a tarefa 28
+user: criei a tarefa 29
+user: criei a tarefa 30
+user: criei a tarefa 31
+user: criei a tarefa 32
+user: criei a tarefa 33
+user: criei a tarefa 34
+user: criei a tarefa 35
+user: criei a tarefa 36
+user: criei a tarefa 37
+user: criei a tarefa 38
+user: criei a tarefa 39
+user: criei a tarefa 40
+user: criei a tarefa 41
+user: criei a tarefa 42
+user: criei a tarefa 43
+user: criei a tarefa 44
+user: criei a tarefa 45
+user: criei a tarefa 46
+user: criei a tarefa 47
+user: criei a tarefa 48
+user: criei a tarefa 49
+user: criei a tarefa 50
+user: criei a tarefa 51
+user: criei a tarefa 52
+user: criei a tarefa 53
+user: criei a tarefa 54
+user: criei a tarefa 55
+user: criei a tarefa 56
+user: criei a tarefa 57
+user: criei a tarefa 58
+user: criei a tarefa 59
+user: criei a tarefa 60
+user: criei a tarefa 61
+user: criei a tarefa 62
+user: criei a tarefa 63
+user: criei a tarefa 64
+user: criei a tarefa 65
+user: criei a tarefa 66
+user: criei a tarefa 67
+user: criei a tarefa 68
+user: criei a tarefa 69
+user: criei a tarefa 70
+user: criei a tarefa 71
+user: criei a tarefa 72
+user: criei a tarefa 73
+user: criei a tarefa 74
+user: criei a tarefa 75
+user: criei a tarefa 76
+user: criei a tarefa 77
+user: criei a tarefa 78
+user: criei a tarefa 79
+user: criei a tarefa 80
+user: criei a tarefa 81
+user: criei a tarefa 82
+user: criei a tarefa 83
+user: criei a tarefa 84
+user: criei a tarefa 85
+user: criei a tarefa 86
+user: criei a tarefa 87
+user: criei a tarefa 88
+user: criei a tarefa 89
+user: criei a tarefa 90
+user: criei a tarefa 91
+user: criei a tarefa 92
+user: criei a tarefa 93
+user: criei a tarefa 94
+user: criei a tarefa 95
+user: criei a tarefa 96
+user: criei a tarefa 97
+user: criei a tarefa 98
+user: criei a tarefa 99
+user: criei a tarefa 100
+user: criei a tarefa 101
+user: criei a tarefa 102
+user: criei a tarefa 103
+user: criei a tarefa 104
+user: criei a tarefa 105
+user: criei a tarefa 106
+user: criei a tarefa 107
+user: criei a tarefa 108
+user: criei a tarefa 109
+user: criei a tarefa 110
+user: criei a tarefa 111
+user: criei a tarefa 112
+user: criei a tarefa 113
+user: criei a tarefa 114
+user: criei a tarefa 115
+user: criei a tarefa 116
+user: criei a tarefa 117
+user: criei a tarefa 118
+user: criei a tarefa 119
+user: criei a tarefa 120
+user: criei a tarefa 121
+user: criei a tarefa 122
+user: criei a tarefa 123
+user: criei a tarefa 124
+user: criei a tarefa 125
+user: criei a tarefa 126
+user: criei a tarefa 127
+user: criei a tarefa 128
+user: criei a tarefa 129
+user: criei a tarefa 130
+user: criei a tarefa 131
+user: criei a tarefa 132
+user: criei a tarefa 133
+user: criei a tarefa 134
+user: criei a tarefa 135
+user: criei a tarefa 136
+user: criei a tarefa 137
+user: criei a tarefa 138
+user: criei a tarefa 139
+user: criei a tarefa 140
+user: criei a tarefa 141
+user: criei a tarefa 142
+user: criei a tarefa 143
+user: criei a tarefa 144
+user: criei a tarefa 145
+user: criei a tarefa 146
+user: criei a tarefa 147
+user: criei a tarefa 148
+user: criei a tarefa 149
+user: criei a tarefa 150
+user: criei a tarefa 151
+user: criei a tarefa 152
+user: criei a tarefa 153
+user: criei a tarefa 154
+user: criei a tarefa 155
+user: criei a tarefa 156
+user: criei a tarefa 157
+user: criei a tarefa 158
+user: criei a tarefa 159
+user: criei a tarefa 160
+user: criei a tarefa 161
+user: criei a tarefa 162
+user: criei a tarefa 163
+user: criei a tarefa 164
+user: criei a tarefa 165
+user: criei a tarefa 166
+user: criei a tarefa 167
+user: criei a tarefa 168
+user: criei a tarefa 169
+user: criei a tarefa 170
+user: criei a tarefa 171
+user: criei a tarefa 172
+user: criei a tarefa 173
+user: criei a tarefa 174
+user: criei a tarefa 175
+user: criei a tarefa 176
+user: criei a tarefa 177
+user: criei a tarefa 178
+user: criei a tarefa 179
+user: criei a tarefa 180
+user: criei a tarefa 181
+user: criei a tarefa 182
+user: criei a tarefa 183
+user: criei a tarefa 184
+user: criei a tarefa 185
+user: criei a tarefa 186
+user: criei a tarefa 187
+user: criei a tarefa 188
+user: criei a tarefa 189
+user: criei a tarefa 190
+user: criei a tarefa 191
+user: criei a tarefa 192
+user: criei a tarefa 193
+user: criei a tarefa 194
+user: criei a tarefa 195
+user: criei a tarefa 196
+user: criei a tarefa 197
+user: criei a tarefa 198
+user: criei a tarefa 199
+user: criei a tarefa 200
+user: criei a tarefa 201
+user: criei a tarefa 202
+user: criei a tarefa 203
+user: criei a tarefa 204
+user: criei a tarefa 205
+user: criei a tarefa 206
+user: criei a tarefa 207
+user: criei a tarefa 208
+user: criei a tarefa 209
+user: criei a tarefa 210
+user: criei a tarefa 211
+user: criei a tarefa 212
+user: criei a tarefa 213
+user: criei a tarefa 214
+user: criei a tarefa 215
+user: criei a tarefa 216
+user: criei a tarefa 217
+user: criei a tarefa 218
+user: criei a tarefa 219
+user: criei a tarefa 220
+user: criei a tarefa 221
+user: criei a tarefa 222
+user: criei a tarefa 223
+user: criei a tarefa 224
+user: criei a tarefa 225
+user: criei a tarefa 226
+user: criei a tarefa 227
+user: criei a tarefa 228
+user: criei a tarefa 229
+user: criei a tarefa 230
+user: criei a tarefa 231
+user: criei a tarefa 232
+user: criei a tarefa 233
+user: criei a tarefa 234
+user: criei a tarefa 235
+user: criei a tarefa 236
+user: criei a tarefa 237
+user: criei a tarefa 238
+user: criei a tarefa 239
+user: criei a tarefa 240
+user: criei a tarefa 241
+user: criei a tarefa 242
+user: criei a tarefa 243
+user: criei a tarefa 244
+user: criei a tarefa 245
+user: criei a tarefa 246
+user: criei a tarefa 247
+user: criei a tarefa 248
+user: criei a tarefa 249
+user: criei a tarefa 250
+user: criei a tarefa 251
+user: criei a tarefa 252
+user: criei a tarefa 253
+user: criei a tarefa 254
+user: criei a tarefa 255
+user: criei a tarefa 256
+user: criei a tarefa 257
+user: criei a tarefa 258
+user: criei a tarefa 259
+user: criei a tarefa 260
+user: criei a tarefa 261
+user: criei a tarefa 262
+user: criei a tarefa 263
+user: criei a tarefa 264
+user: criei a tarefa 265
+user: criei a tarefa 266
+user: criei a tarefa 267
+user: criei a tarefa 268
+user: criei a tarefa 269
+user: criei a tarefa 270
+user: criei a tarefa 271
+user: criei a tarefa 272
+user: criei a tarefa 273
+user: criei a tarefa 274
+user: criei a tarefa 275
+user: criei a tarefa 276
+user: criei a tarefa 277
+user: criei a tarefa 278
+user: criei a tarefa 279
+user: criei a tarefa 280
+user: criei a tarefa 281
+user: criei a tarefa 282
+user: criei a tarefa 283
+user: criei a tarefa 284
+user: criei a tarefa 285
+user: criei a tarefa 286
+user: criei a tarefa 287
+user: criei a tarefa 288
+user: criei a tarefa 289
+user: criei a tarefa 290
+user: criei a tarefa 291
+user: criei a tarefa 292
+user: criei a tarefa 293
+user: criei a tarefa 294
+user: criei a tarefa 295
+user: criei a tarefa 296
+user: criei a tarefa 297
+user: criei a tarefa 298
+user: criei a tarefa 299
+user: criei a tarefa 300
+user: criei a tarefa 301
+user: criei a tarefa 302
+user: criei a tarefa 303
+user: criei a tarefa 304
+user: criei a tarefa 305
+user: criei a tarefa 306
+user: criei a tarefa 307
+user: criei a tarefa 308
+user: criei a tarefa 309
+user: criei a tarefa 310
+user: criei a tarefa 311
+user: criei a tarefa 312
+user: criei a tarefa 313
+user: criei a tarefa 314
+user: criei a tarefa 315
+user: criei a tarefa 316
+user: criei a tarefa 317
+user: criei a tarefa 318
+user: criei a tarefa 319
+user: criei a tarefa 320
+user: criei a tarefa 321
+user: criei a tarefa 322
+user: criei a tarefa 323
+user: criei a tarefa 324
+user: criei a tarefa 325
+user: criei a tarefa 326
+user: criei a tarefa 327
+user: criei a tarefa 328
+user: criei a tarefa 329
+user: criei a tarefa 330
+user: criei a tarefa 331
+user: criei a tarefa 332
+user: criei a tarefa 333
+user: criei a tarefa 334
+user: criei a tarefa 335
+user: criei a tarefa 336
+user: criei a tarefa 337
+user: criei a tarefa 338
+user: criei a tarefa 339
+user: criei a tarefa 340
+user: criei a tarefa 341
+user: criei a tarefa 342
+user: criei a tarefa 343
+user: criei a tarefa 344
+user: criei a tarefa 345
+user: criei a tarefa 346
+user: criei a tarefa 347
+user: criei a tarefa 348
+user: criei a tarefa 349
+user: criei a tarefa 350
+user: criei a tarefa 351
+user: criei a tarefa 352
+user: criei a tarefa 353
+user: criei a tarefa 354
+user: criei a tarefa 355
+user: criei a tarefa 356
+user: criei a tarefa 357
+user: criei a tarefa 358
+user: criei a tarefa 359
+user: criei a tarefa 360
+user: criei a tarefa 361
+user: criei a tarefa 362
+user: criei a tarefa 363
+user: criei a tarefa 364
+user: criei a tarefa 365
+user: criei a tarefa 366
+user: criei a tarefa 367
+user: criei a tarefa 368
+user: criei a tarefa 369
+user: criei a tarefa 370
+user: criei a tarefa 371
+user: criei a tarefa 372
+user: criei a tarefa 373
+user: criei a tarefa 374
+user: criei a tarefa 375
+user: criei a tarefa 376
+user: criei a tarefa 377
+user: criei a tarefa 378
+user: criei a tarefa 379
+user: criei a tarefa 380
+user: criei a tarefa 381
+user: criei a tarefa 382
+user: criei a tarefa 383
+user: criei a tarefa 384
+user: criei a tarefa 385
+user: criei a tarefa 386
+user: criei a tarefa 387
+user: criei a tarefa 388
+user: criei a tarefa 389
+user: criei a tarefa 390
+user: criei a tarefa 391
+user: criei a tarefa 392
+user: criei a tarefa 393
+user: criei a tarefa 394
+user: criei a tarefa 395
+user: criei a tarefa 396
+user: criei a tarefa 397
+user: criei a tarefa 398
+user: criei a tarefa 399
+user: criei a tarefa 400
+user: criei a tarefa 401
+user: criei a tarefa 402
+user: criei a tarefa 403
+user: criei a tarefa 404
+user: criei a tarefa 405
+user: criei a tarefa 406
+user: criei a tarefa 407
+user: criei a tarefa 408
+user: criei a tarefa 409
+user: criei a tarefa 410
+user: criei a tarefa 411
+user: criei a tarefa 412
+user: criei a tarefa 413
+user: criei a tarefa 414
+user: criei a tarefa 415
+user: criei a tarefa 416
+user: criei a tarefa 417
+user: criei a tarefa 418
+user: criei a tarefa 419
+user: criei a tarefa 420
+user: criei a tarefa 421
+user: criei a tarefa 422
+user: criei a tarefa 423
+user: criei a tarefa 424
+user: criei a tarefa 425
+user: criei a tarefa 426
+user: criei a tarefa 427
+user: criei a tarefa 428
+user: criei a tarefa 429
+user: criei a tarefa 430
+user: criei a tarefa 431
+user: criei a tarefa 432
+user: criei a tarefa 433
+user: criei a tarefa 434
+user: criei a tarefa 435
+user: criei a tarefa 436
+user: criei a tarefa 437
+user: criei a tarefa 438
+user: criei a tarefa 439
+user: criei a tarefa 440
+user: criei a tarefa 441
+user: criei a tarefa 442
+user: criei a tarefa 443
+user: criei a tarefa 444
+user: criei a tarefa 445
+user: criei a tarefa 446
+user: criei a tarefa 447
+user: criei a tarefa 448
+user: criei a tarefa 449
+user: criei a tarefa 450
+user: criei a tarefa 451
+user: criei a tarefa 452
+user: criei a tarefa 453
+user: criei a tarefa 454
+user: criei a tarefa 455
+user: criei a tarefa 456
+user: criei a tarefa 457
+user: criei a tarefa 458
+user: criei a tarefa 459
+user: criei a tarefa 460
+user: criei a tarefa 461
+user: criei a tarefa 462
+user: criei a tarefa 463
+user: criei a tarefa 464
+user: criei a tarefa 465
+user: criei a tarefa 466
+user: criei a tarefa 467
+user: criei a tarefa 468
+user: criei a tarefa 469
+user: criei a tarefa 470
+user: criei a tarefa 471
+user: criei a tarefa 472
+user: criei a tarefa 473
+user: criei a tarefa 474
+user: criei a tarefa 475
+user: criei a tarefa 476
+user: criei a tarefa 477
+user: criei a tarefa 478
+user: criei a tarefa 479
+user: criei a tarefa 480
+user: criei a tarefa 481
+user: criei a tarefa 482
+user: criei a tarefa 483
+user: criei a tarefa 484
+user: criei a tarefa 485
+user: criei a tarefa 486
+user: criei a tarefa 487
+user: criei a tarefa 488
+user: criei a tarefa 489
+user: criei a tarefa 490
+user: criei a tarefa 491
+user: criei a tarefa 492
+user: criei a tarefa 493
+user: criei a tarefa 494
+user: criei a tarefa 495
+user: criei a tarefa 496
+user: criei a tarefa 497
+user: criei a tarefa 498
+user: criei a tarefa 499
+user: criei a tarefa 500
+user: criei a tarefa 501
+user: criei a tarefa 502
+user: criei a tarefa 503
+user: criei a tarefa 504
+user: criei a tarefa 505
+user: criei a tarefa 506
+user: criei a tarefa 507
+user: criei a tarefa 508
+user: criei a tarefa 509
+user: criei a tarefa 510
+user: criei a tarefa 511
+user: criei a tarefa 512
+user: criei a tarefa 513
+user: vou ativar a tarefa 2
+       Iniciei  tarefa     2
+       Vou mudar para a tarefa 3
+       Iniciei  tarefa     3
+       Vou mudar para a tarefa 4
+       Iniciei  tarefa     4
+       Vou mudar para a tarefa 5
+       Iniciei  tarefa     5
+       Vou mudar para a tarefa 6
+       Iniciei  tarefa     6
+       Vou mudar para a tarefa 7
+       Iniciei  tarefa     7
+       Vou mudar para a tarefa 8
+       Iniciei  tarefa     8
+       Vou mudar para a tarefa 9
+       Iniciei  tarefa     9
+       Vou mudar para a tarefa 10
+       Iniciei  tarefa    10
+       Vou mudar para a tarefa 11
+       Iniciei  tarefa    11
+       Vou mudar para a tarefa 12
+       Iniciei  tarefa    12
+       Vou mudar para a tarefa 13
+       Iniciei  tarefa    13
+       Vou mudar para a tarefa 14
+       Iniciei  tarefa    14
+       Vou mudar para a tarefa 15
+       Iniciei  tarefa    15
+       Vou mudar para a tarefa 16
+       Iniciei  tarefa    16
+       Vou mudar para a tarefa 17
+       Iniciei  tarefa    17
+       Vou mudar para a tarefa 18
+       Iniciei  tarefa    18
+       Vou mudar para a tarefa 19
+       Iniciei  tarefa    19
+       Vou mudar para a tarefa 20
+       Iniciei  tarefa    20
+       Vou mudar para a tarefa 21
+       Iniciei  tarefa    21
+       Vou mudar para a tarefa 22
+       Iniciei  tarefa    22
+       Vou mudar para a tarefa 23
+       Iniciei  tarefa    23
+       Vou mudar para a tarefa 24
+       Iniciei  tarefa    24
+       Vou mudar para a tarefa 25
+       Iniciei  tarefa    25
+       Vou mudar para a tarefa 26
+       Iniciei  tarefa    26
+       Vou mudar para a tarefa 27
+       Iniciei  tarefa    27
+       Vou mudar para a tarefa 28
+       Iniciei  tarefa    28
+       Vou mudar para a tarefa 29
+       Iniciei  tarefa    29
+       Vou mudar para a tarefa 30
+       Iniciei  tarefa    30
+       Vou mudar para a tarefa 31
+       Iniciei  tarefa    31
+       Vou mudar para a tarefa 32
+       Iniciei  tarefa    32
+       Vou mudar para a tarefa 33
+       Iniciei  tarefa    33
+       Vou mudar para a tarefa 34
+       Iniciei  tarefa    34
+       Vou mudar para a tarefa 35
+       Iniciei  tarefa    35
+       Vou mudar para a tarefa 36
+       Iniciei  tarefa    36
+       Vou mudar para a tarefa 37
+       Iniciei  tarefa    37
+       Vou mudar para a tarefa 38
+       Iniciei  tarefa    38
+       Vou mudar para a tarefa 39
+       Iniciei  tarefa    39
+       Vou mudar para a tarefa 40
+       Iniciei  tarefa    40
+       Vou mudar para a tarefa 41
+       Iniciei  tarefa    41
+       Vou mudar para a tarefa 42
+       Iniciei  tarefa    42
+       Vou mudar para a tarefa 43
+       Iniciei  tarefa    43
+       Vou mudar para a tarefa 44
+       Iniciei  tarefa    44
+       Vou mudar para a tarefa 45
+       Iniciei  tarefa    45
+       Vou mudar para a tarefa 46
+       Iniciei  tarefa    46
+       Vou mudar para a tarefa 47
+       Iniciei  tarefa    47
+       Vou mudar para a tarefa 48
+       Iniciei  tarefa    48
+       Vou mudar para a tarefa 49
+       Iniciei  tarefa    49
+       Vou mudar para a tarefa 50
+       Iniciei  tarefa    50
+       Vou mudar para a tarefa 51
+       Iniciei  tarefa    51
+       Vou mudar para a tarefa 52
+       Iniciei  tarefa    52
+       Vou mudar para a tarefa 53
+       Iniciei  tarefa    53
+       Vou mudar para a tarefa 54
+       Iniciei  tarefa    54
+       Vou mudar para a tarefa 55
+       Iniciei  tarefa    55
+       Vou mudar para a tarefa 56
+       Iniciei  tarefa    56
+       Vou mudar para a tarefa 57
+       Iniciei  tarefa    57
+       Vou mudar para a tarefa 58
+       Iniciei  tarefa    58
+       Vou mudar para a tarefa 59
+       Iniciei  tarefa    59
+       Vou mudar para a tarefa 60
+       Iniciei  tarefa    60
+       Vou mudar para a tarefa 61
+       Iniciei  tarefa    61
+       Vou mudar para a tarefa 62
+       Iniciei  tarefa    62
+       Vou mudar para a tarefa 63
+       Iniciei  tarefa    63
+       Vou mudar para a tarefa 64
+       Iniciei  tarefa    64
+       Vou mudar para a tarefa 65
+       Iniciei  tarefa    65
+       Vou mudar para a tarefa 66
+       Iniciei  tarefa    66
+       Vou mudar para a tarefa 67
+       Iniciei  tarefa    67
+       Vou mudar para a tarefa 68
+       Iniciei  tarefa    68
+       Vou mudar para a tarefa 69
+       Iniciei  tarefa    69
+       Vou mudar para a tarefa 70
+       Iniciei  tarefa    70
+       Vou mudar para a tarefa 71
+       Iniciei  tarefa    71
+       Vou mudar para a tarefa 72
+       Iniciei  tarefa    72
+       Vou mudar para a tarefa 73
+       Iniciei  tarefa    73
+       Vou mudar para a tarefa 74
+       Iniciei  tarefa    74
+       Vou mudar para a tarefa 75
+       Iniciei  tarefa    75
+       Vou mudar para a tarefa 76
+       Iniciei  tarefa    76
+       Vou mudar para a tarefa 77
+       Iniciei  tarefa    77
+       Vou mudar para a tarefa 78
+       Iniciei  tarefa    78
+       Vou mudar para a tarefa 79
+       Iniciei  tarefa    79
+       Vou mudar para a tarefa 80
+       Iniciei  tarefa    80
+       Vou mudar para a tarefa 81
+       Iniciei  tarefa    81
+       Vou mudar para a tarefa 82
+       Iniciei  tarefa    82
+       Vou mudar para a tarefa 83
+       Iniciei  tarefa    83
+       Vou mudar para a tarefa 84
+       Iniciei  tarefa    84
+       Vou mudar para a tarefa 85
+       Iniciei  tarefa    85
+       Vou mudar para a tarefa 86
+       Iniciei  tarefa    86
+       Vou mudar para a tarefa 87
+       Iniciei  tarefa    87
+       Vou mudar para a tarefa 88
+       Iniciei  tarefa    88
+       Vou mudar para a tarefa 89
+       Iniciei  tarefa    89
+       Vou mudar para a tarefa 90
+       Iniciei  tarefa    90
+       Vou mudar para a tarefa 91
+       Iniciei  tarefa    91
+       Vou mudar para a tarefa 92
+       Iniciei  tarefa    92
+       Vou mudar para a tarefa 93
+       Iniciei  tarefa    93
+       Vou mudar para a tarefa 94
+       Iniciei  tarefa    94
+       Vou mudar para a tarefa 95
+       Iniciei  tarefa    95
+       Vou mudar para a tarefa 96
+       Iniciei  tarefa    96
+       Vou mudar para a tarefa 97
+       Iniciei  tarefa    97
+       Vou mudar para a tarefa 98
+       Iniciei  tarefa    98
+       Vou mudar para a tarefa 99
+       Iniciei  tarefa    99
+       Vou mudar para a tarefa 100
+       Iniciei  tarefa   100
+       Vou mudar para a tarefa 101
+       Iniciei  tarefa   101
+       Vou mudar para a tarefa 102
+       Iniciei  tarefa   102
+       Vou mudar para a tarefa 103
+       Iniciei  tarefa   103
+       Vou mudar para a tarefa 104
+       Iniciei  tarefa   104
+       Vou mudar para a tarefa 105
+       Iniciei  tarefa   105
+       Vou mudar para a tarefa 106
+       Iniciei  tarefa   106
+       Vou mudar para a tarefa 107
+       Iniciei  tarefa   107
+       Vou mudar para a tarefa 108
+       Iniciei  tarefa   108
+       Vou mudar para a tarefa 109
+       Iniciei  tarefa   109
+       Vou mudar para a tarefa 110
+       Iniciei  tarefa   110
+       Vou mudar para a tarefa 111
+       Iniciei  tarefa   111
+       Vou mudar para a tarefa 112
+       Iniciei  tarefa   112
+       Vou mudar para a tarefa 113
+       Iniciei  tarefa   113
+       Vou mudar para a tarefa 114
+       Iniciei  tarefa   114
+       Vou mudar para a tarefa 115
+       Iniciei  tarefa   115
+       Vou mudar para a tarefa 116
+       Iniciei  tarefa   116
+       Vou mudar para a tarefa 117
+       Iniciei  tarefa   117
+       Vou mudar para a tarefa 118
+       Iniciei  tarefa   118
+       Vou mudar para a tarefa 119
+       Iniciei  tarefa   119
+       Vou mudar para a tarefa 120
+       Iniciei  tarefa   120
+       Vou mudar para a tarefa 121
+       Iniciei  tarefa   121
+       Vou mudar para a tarefa 122
+       Iniciei  tarefa   122
+       Vou mudar para a tarefa 123
+       Iniciei  tarefa   123
+       Vou mudar para a tarefa 124
+       Iniciei  tarefa   124
+       Vou mudar para a tarefa 125
+       Iniciei  tarefa   125
+       Vou mudar para a tarefa 126
+       Iniciei  tarefa   126
+       Vou mudar para a tarefa 127
+       Iniciei  tarefa   127
+       Vou mudar para a tarefa 128
+       Iniciei  tarefa   128
+       Vou mudar para a tarefa 129
+       Iniciei  tarefa   129
+       Vou mudar para a tarefa 130
+       Iniciei  tarefa   130
+       Vou mudar para a tarefa 131
+       Iniciei  tarefa   131
+       Vou mudar para a tarefa 132
+       Iniciei  tarefa   132
+       Vou mudar para a tarefa 133
+       Iniciei  tarefa   133
+       Vou mudar para a tarefa 134
+       Iniciei  tarefa   134
+       Vou mudar para a tarefa 135
+       Iniciei  tarefa   135
+       Vou mudar para a tarefa 136
+       Iniciei  tarefa   136
+       Vou mudar para a tarefa 137
+       Iniciei  tarefa   137
+       Vou mudar para a tarefa 138
+       Iniciei  tarefa   138
+       Vou mudar para a tarefa 139
+       Iniciei  tarefa   139
+       Vou mudar para a tarefa 140
+       Iniciei  tarefa   140
+       Vou mudar para a tarefa 141
+       Iniciei  tarefa   141
+       Vou mudar para a tarefa 142
+       Iniciei  tarefa   142
+       Vou mudar para a tarefa 143
+       Iniciei  tarefa   143
+       Vou mudar para a tarefa 144
+       Iniciei  tarefa   144
+       Vou mudar para a tarefa 145
+       Iniciei  tarefa   145
+       Vou mudar para a tarefa 146
+       Iniciei  tarefa   146
+       Vou mudar para a tarefa 147
+       Iniciei  tarefa   147
+       Vou mudar para a tarefa 148
+       Iniciei  tarefa   148
+       Vou mudar para a tarefa 149
+       Iniciei  tarefa   149
+       Vou mudar para a tarefa 150
+       Iniciei  tarefa   150
+       Vou mudar para a tarefa 151
+       Iniciei  tarefa   151
+       Vou mudar para a tarefa 152
+       Iniciei  tarefa   152
+       Vou mudar para a tarefa 153
+       Iniciei  tarefa   153
+       Vou mudar para a tarefa 154
+       Iniciei  tarefa   154
+       Vou mudar para a tarefa 155
+       Iniciei  tarefa   155
+       Vou mudar para a tarefa 156
+       Iniciei  tarefa   156
+       Vou mudar para a tarefa 157
+       Iniciei  tarefa   157
+       Vou mudar para a tarefa 158
+       Iniciei  tarefa   158
+       Vou mudar para a tarefa 159
+       Iniciei  tarefa   159
+       Vou mudar para a tarefa 160
+       Iniciei  tarefa   160
+       Vou mudar para a tarefa 161
+       Iniciei  tarefa   161
+       Vou mudar para a tarefa 162
+       Iniciei  tarefa   162
+       Vou mudar para a tarefa 163
+       Iniciei  tarefa   163
+       Vou mudar para a tarefa 164
+       Iniciei  tarefa   164
+       Vou mudar para a tarefa 165
+       Iniciei  tarefa   165
+       Vou mudar para a tarefa 166
+       Iniciei  tarefa   166
+       Vou mudar para a tarefa 167
+       Iniciei  tarefa   167
+       Vou mudar para a tarefa 168
+       Iniciei  tarefa   168
+       Vou mudar para a tarefa 169
+       Iniciei  tarefa   169
+       Vou mudar para a tarefa 170
+       Iniciei  tarefa   170
+       Vou mudar para a tarefa 171
+       Iniciei  tarefa   171
+       Vou mudar para a tarefa 172
+       Iniciei  tarefa   172
+       Vou mudar para a tarefa 173
+       Iniciei  tarefa   173
+       Vou mudar para a tarefa 174
+       Iniciei  tarefa   174
+       Vou mudar para a tarefa 175
+       Iniciei  tarefa   175
+       Vou mudar para a tarefa 176
+       Iniciei  tarefa   176
+       Vou mudar para a tarefa 177
+       Iniciei  tarefa   177
+       Vou mudar para a tarefa 178
+       Iniciei  tarefa   178
+       Vou mudar para a tarefa 179
+       Iniciei  tarefa   179
+       Vou mudar para a tarefa 180
+       Iniciei  tarefa   180
+       Vou mudar para a tarefa 181
+       Iniciei  tarefa   181
+       Vou mudar para a tarefa 182
+       Iniciei  tarefa   182
+       Vou mudar para a tarefa 183
+       Iniciei  tarefa   183
+       Vou mudar para a tarefa 184
+       Iniciei  tarefa   184
+       Vou mudar para a tarefa 185
+       Iniciei  tarefa   185
+       Vou mudar para a tarefa 186
+       Iniciei  tarefa   186
+       Vou mudar para a tarefa 187
+       Iniciei  tarefa   187
+       Vou mudar para a tarefa 188
+       Iniciei  tarefa   188
+       Vou mudar para a tarefa 189
+       Iniciei  tarefa   189
+       Vou mudar para a tarefa 190
+       Iniciei  tarefa   190
+       Vou mudar para a tarefa 191
+       Iniciei  tarefa   191
+       Vou mudar para a tarefa 192
+       Iniciei  tarefa   192
+       Vou mudar para a tarefa 193
+       Iniciei  tarefa   193
+       Vou mudar para a tarefa 194
+       Iniciei  tarefa   194
+       Vou mudar para a tarefa 195
+       Iniciei  tarefa   195
+       Vou mudar para a tarefa 196
+       Iniciei  tarefa   196
+       Vou mudar para a tarefa 197
+       Iniciei  tarefa   197
+       Vou mudar para a tarefa 198
+       Iniciei  tarefa   198
+       Vou mudar para a tarefa 199
+       Iniciei  tarefa   199
+       Vou mudar para a tarefa 200
+       Iniciei  tarefa   200
+       Vou mudar para a tarefa 201
+       Iniciei  tarefa   201
+       Vou mudar para a tarefa 202
+       Iniciei  tarefa   202
+       Vou mudar para a tarefa 203
+       Iniciei  tarefa   203
+       Vou mudar para a tarefa 204
+       Iniciei  tarefa   204
+       Vou mudar para a tarefa 205
+       Iniciei  tarefa   205
+       Vou mudar para a tarefa 206
+       Iniciei  tarefa   206
+       Vou mudar para a tarefa 207
+       Iniciei  tarefa   207
+       Vou mudar para a tarefa 208
+       Iniciei  tarefa   208
+       Vou mudar para a tarefa 209
+       Iniciei  tarefa   209
+       Vou mudar para a tarefa 210
+       Iniciei  tarefa   210
+       Vou mudar para a tarefa 211
+       Iniciei  tarefa   211
+       Vou mudar para a tarefa 212
+       Iniciei  tarefa   212
+       Vou mudar para a tarefa 213
+       Iniciei  tarefa   213
+       Vou mudar para a tarefa 214
+       Iniciei  tarefa   214
+       Vou mudar para a tarefa 215
+       Iniciei  tarefa   215
+       Vou mudar para a tarefa 216
+       Iniciei  tarefa   216
+       Vou mudar para a tarefa 217
+       Iniciei  tarefa   217
+       Vou mudar para a tarefa 218
+       Iniciei  tarefa   218
+       Vou mudar para a tarefa 219
+       Iniciei  tarefa   219
+       Vou mudar para a tarefa 220
+       Iniciei  tarefa   220
+       Vou mudar para a tarefa 221
+       Iniciei  tarefa   221
+       Vou mudar para a tarefa 222
+       Iniciei  tarefa   222
+       Vou mudar para a tarefa 223
+       Iniciei  tarefa   223
+       Vou mudar para a tarefa 224
+       Iniciei  tarefa   224
+       Vou mudar para a tarefa 225
+       Iniciei  tarefa   225
+       Vou mudar para a tarefa 226
+       Iniciei  tarefa   226
+       Vou mudar para a tarefa 227
+       Iniciei  tarefa   227
+       Vou mudar para a tarefa 228
+       Iniciei  tarefa   228
+       Vou mudar para a tarefa 229
+       Iniciei  tarefa   229
+       Vou mudar para a tarefa 230
+       Iniciei  tarefa   230
+       Vou mudar para a tarefa 231
+       Iniciei  tarefa   231
+       Vou mudar para a tarefa 232
+       Iniciei  tarefa   232
+       Vou mudar para a tarefa 233
+       Iniciei  tarefa   233
+       Vou mudar para a tarefa 234
+       Iniciei  tarefa   234
+       Vou mudar para a tarefa 235
+       Iniciei  tarefa   235
+       Vou mudar para a tarefa 236
+       Iniciei  tarefa   236
+       Vou mudar para a tarefa 237
+       Iniciei  tarefa   237
+       Vou mudar para a tarefa 238
+       Iniciei  tarefa   238
+       Vou mudar para a tarefa 239
+       Iniciei  tarefa   239
+       Vou mudar para a tarefa 240
+       Iniciei  tarefa   240
+       Vou mudar para a tarefa 241
+       Iniciei  tarefa   241
+       Vou mudar para a tarefa 242
+       Iniciei  tarefa   242
+       Vou mudar para a tarefa 243
+       Iniciei  tarefa   243
+       Vou mudar para a tarefa 244
+       Iniciei  tarefa   244
+       Vou mudar para a tarefa 245
+       Iniciei  tarefa   245
+       Vou mudar para a tarefa 246
+       Iniciei  tarefa   246
+       Vou mudar para a tarefa 247
+       Iniciei  tarefa   247
+       Vou mudar para a tarefa 248
+       Iniciei  tarefa   248
+       Vou mudar para a tarefa 249
+       Iniciei  tarefa   249
+       Vou mudar para a tarefa 250
+       Iniciei  tarefa   250
+       Vou mudar para a tarefa 251
+       Iniciei  tarefa   251
+       Vou mudar para a tarefa 252
+       Iniciei  tarefa   252
+       Vou mudar para a tarefa 253
+       Iniciei  tarefa   253
+       Vou mudar para a tarefa 254
+       Iniciei  tarefa   254
+       Vou mudar para a tarefa 255
+       Iniciei  tarefa   255
+       Vou mudar para a tarefa 256
+       Iniciei  tarefa   256
+       Vou mudar para a tarefa 257
+       Iniciei  tarefa   257
+       Vou mudar para a tarefa 258
+       Iniciei  tarefa   258
+       Vou mudar para a tarefa 259
+       Iniciei  tarefa   259
+       Vou mudar para a tarefa 260
+       Iniciei  tarefa   260
+       Vou mudar para a tarefa 261
+       Iniciei  tarefa   261
+       Vou mudar para a tarefa 262
+       Iniciei  tarefa   262
+       Vou mudar para a tarefa 263
+       Iniciei  tarefa   263
+       Vou mudar para a tarefa 264
+       Iniciei  tarefa   264
+       Vou mudar para a tarefa 265
+       Iniciei  tarefa   265
+       Vou mudar para a tarefa 266
+       Iniciei  tarefa   266
+       Vou mudar para a tarefa 267
+       Iniciei  tarefa   267
+       Vou mudar para a tarefa 268
+       Iniciei  tarefa   268
+       Vou mudar para a tarefa 269
+       Iniciei  tarefa   269
+       Vou mudar para a tarefa 270
+       Iniciei  tarefa   270
+       Vou mudar para a tarefa 271
+       Iniciei  tarefa   271
+       Vou mudar para a tarefa 272
+       Iniciei  tarefa   272
+       Vou mudar para a tarefa 273
+       Iniciei  tarefa   273
+       Vou mudar para a tarefa 274
+       Iniciei  tarefa   274
+       Vou mudar para a tarefa 275
+       Iniciei  tarefa   275
+       Vou mudar para a tarefa 276
+       Iniciei  tarefa   276
+       Vou mudar para a tarefa 277
+       Iniciei  tarefa   277
+       Vou mudar para a tarefa 278
+       Iniciei  tarefa   278
+       Vou mudar para a tarefa 279
+       Iniciei  tarefa   279
+       Vou mudar para a tarefa 280
+       Iniciei  tarefa   280
+       Vou mudar para a tarefa 281
+       Iniciei  tarefa   281
+       Vou mudar para a tarefa 282
+       Iniciei  tarefa   282
+       Vou mudar para a tarefa 283
+       Iniciei  tarefa   283
+       Vou mudar para a tarefa 284
+       Iniciei  tarefa   284
+       Vou mudar para a tarefa 285
+       Iniciei  tarefa   285
+       Vou mudar para a tarefa 286
+       Iniciei  tarefa   286
+       Vou mudar para a tarefa 287
+       Iniciei  tarefa   287
+       Vou mudar para a tarefa 288
+       Iniciei  tarefa   288
+       Vou mudar para a tarefa 289
+       Iniciei  tarefa   289
+       Vou mudar para a tarefa 290
+       Iniciei  tarefa   290
+       Vou mudar para a tarefa 291
+       Iniciei  tarefa   291
+       Vou mudar para a tarefa 292
+       Iniciei  tarefa   292
+       Vou mudar para a tarefa 293
+       Iniciei  tarefa   293
+       Vou mudar para a tarefa 294
+       Iniciei  tarefa   294
+       Vou mudar para a tarefa 295
+       Iniciei  tarefa   295
+       Vou mudar para a tarefa 296
+       Iniciei  tarefa   296
+       Vou mudar para a tarefa 297
+       Iniciei  tarefa   297
+       Vou mudar para a tarefa 298
+       Iniciei  tarefa   298
+       Vou mudar para a tarefa 299
+       Iniciei  tarefa   299
+       Vou mudar para a tarefa 300
+       Iniciei  tarefa   300
+       Vou mudar para a tarefa 301
+       Iniciei  tarefa   301
+       Vou mudar para a tarefa 302
+       Iniciei  tarefa   302
+       Vou mudar para a tarefa 303
+       Iniciei  tarefa   303
+       Vou mudar para a tarefa 304
+       Iniciei  tarefa   304
+       Vou mudar para a tarefa 305
+       Iniciei  tarefa   305
+       Vou mudar para a tarefa 306
+       Iniciei  tarefa   306
+       Vou mudar para a tarefa 307
+       Iniciei  tarefa   307
+       Vou mudar para a tarefa 308
+       Iniciei  tarefa   308
+       Vou mudar para a tarefa 309
+       Iniciei  tarefa   309
+       Vou mudar para a tarefa 310
+       Iniciei  tarefa   310
+       Vou mudar para a tarefa 311
+       Iniciei  tarefa   311
+       Vou mudar para a tarefa 312
+       Iniciei  tarefa   312
+       Vou mudar para a tarefa 313
+       Iniciei  tarefa   313
+       Vou mudar para a tarefa 314
+       Iniciei  tarefa   314
+       Vou mudar para a tarefa 315
+       Iniciei  tarefa   315
+       Vou mudar para a tarefa 316
+       Iniciei  tarefa   316
+       Vou mudar para a tarefa 317
+       Iniciei  tarefa   317
+       Vou mudar para a tarefa 318
+       Iniciei  tarefa   318
+       Vou mudar para a tarefa 319
+       Iniciei  tarefa   319
+       Vou mudar para a tarefa 320
+       Iniciei  tarefa   320
+       Vou mudar para a tarefa 321
+       Iniciei  tarefa   321
+       Vou mudar para a tarefa 322
+       Iniciei  tarefa   322
+       Vou mudar para a tarefa 323
+       Iniciei  tarefa   323
+       Vou mudar para a tarefa 324
+       Iniciei  tarefa   324
+       Vou mudar para a tarefa 325
+       Iniciei  tarefa   325
+       Vou mudar para a tarefa 326
+       Iniciei  tarefa   326
+       Vou mudar para a tarefa 327
+       Iniciei  tarefa   327
+       Vou mudar para a tarefa 328
+       Iniciei  tarefa   328
+       Vou mudar para a tarefa 329
+       Iniciei  tarefa   329
+       Vou mudar para a tarefa 330
+       Iniciei  tarefa   330
+       Vou mudar para a tarefa 331
+       Iniciei  tarefa   331
+       Vou mudar para a tarefa 332
+       Iniciei  tarefa   332
+       Vou mudar para a tarefa 333
+       Iniciei  tarefa   333
+       Vou mudar para a tarefa 334
+       Iniciei  tarefa   334
+       Vou mudar para a tarefa 335
+       Iniciei  tarefa   335
+       Vou mudar para a tarefa 336
+       Iniciei  tarefa   336
+       Vou mudar para a tarefa 337
+       Iniciei  tarefa   337
+       Vou mudar para a tarefa 338
+       Iniciei  tarefa   338
+       Vou mudar para a tarefa 339
+       Iniciei  tarefa   339
+       Vou mudar para a tarefa 340
+       Iniciei  tarefa   340
+       Vou mudar para a tarefa 341
+       Iniciei  tarefa   341
+       Vou mudar para a tarefa 342
+       Iniciei  tarefa   342
+       Vou mudar para a tarefa 343
+       Iniciei  tarefa   343
+       Vou mudar para a tarefa 344
+       Iniciei  tarefa   344
+       Vou mudar para a tarefa 345
+       Iniciei  tarefa   345
+       Vou mudar para a tarefa 346
+       Iniciei  tarefa   346
+       Vou mudar para a tarefa 347
+       Iniciei  tarefa   347
+       Vou mudar para a tarefa 348
+       Iniciei  tarefa   348
+       Vou mudar para a tarefa 349
+       Iniciei  tarefa   349
+       Vou mudar para a tarefa 350
+       Iniciei  tarefa   350
+       Vou mudar para a tarefa 351
+       Iniciei  tarefa   351
+       Vou mudar para a tarefa 352
+       Iniciei  tarefa   352
+       Vou mudar para a tarefa 353
+       Iniciei  tarefa   353
+       Vou mudar para a tarefa 354
+       Iniciei  tarefa   354
+       Vou mudar para a tarefa 355
+       Iniciei  tarefa   355
+       Vou mudar para a tarefa 356
+       Iniciei  tarefa   356
+       Vou mudar para a tarefa 357
+       Iniciei  tarefa   357
+       Vou mudar para a tarefa 358
+       Iniciei  tarefa   358
+       Vou mudar para a tarefa 359
+       Iniciei  tarefa   359
+       Vou mudar para a tarefa 360
+       Iniciei  tarefa   360
+       Vou mudar para a tarefa 361
+       Iniciei  tarefa   361
+       Vou mudar para a tarefa 362
+       Iniciei  tarefa   362
+       Vou mudar para a tarefa 363
+       Iniciei  tarefa   363
+       Vou mudar para a tarefa 364
+       Iniciei  tarefa   364
+       Vou mudar para a tarefa 365
+       Iniciei  tarefa   365
+       Vou mudar para a tarefa 366
+       Iniciei  tarefa   366
+       Vou mudar para a tarefa 367
+       Iniciei  tarefa   367
+       Vou mudar para a tarefa 368
+       Iniciei  tarefa   368
+       Vou mudar para a tarefa 369
+       Iniciei  tarefa   369
+       Vou mudar para a tarefa 370
+       Iniciei  tarefa   370
+       Vou mudar para a tarefa 371
+       Iniciei  tarefa   371
+       Vou mudar para a tarefa 372
+       Iniciei  tarefa   372
+       Vou mudar para a tarefa 373
+       Iniciei  tarefa   373
+       Vou mudar para a tarefa 374
+       Iniciei  tarefa   374
+       Vou mudar para a tarefa 375
+       Iniciei  tarefa   375
+       Vou mudar para a tarefa 376
+       Iniciei  tarefa   376
+       Vou mudar para a tarefa 377
+       Iniciei  tarefa   377
+       Vou mudar para a tarefa 378
+       Iniciei  tarefa   378
+       Vou mudar para a tarefa 379
+       Iniciei  tarefa   379
+       Vou mudar para a tarefa 380
+       Iniciei  tarefa   380
+       Vou mudar para a tarefa 381
+       Iniciei  tarefa   381
+       Vou mudar para a tarefa 382
+       Iniciei  tarefa   382
+       Vou mudar para a tarefa 383
+       Iniciei  tarefa   383
+       Vou mudar para a tarefa 384
+       Iniciei  tarefa   384
+       Vou mudar para a tarefa 385
+       Iniciei  tarefa   385
+       Vou mudar para a tarefa 386
+       Iniciei  tarefa   386
+       Vou mudar para a tarefa 387
+       Iniciei  tarefa   387
+       Vou mudar para a tarefa 388
+       Iniciei  tarefa   388
+       Vou mudar para a tarefa 389
+       Iniciei  tarefa   389
+       Vou mudar para a tarefa 390
+       Iniciei  tarefa   390
+       Vou mudar para a tarefa 391
+       Iniciei  tarefa   391
+       Vou mudar para a tarefa 392
+       Iniciei  tarefa   392
+       Vou mudar para a tarefa 393
+       Iniciei  tarefa   393
+       Vou mudar para a tarefa 394
+       Iniciei  tarefa   394
+       Vou mudar para a tarefa 395
+       Iniciei  tarefa   395
+       Vou mudar para a tarefa 396
+       Iniciei  tarefa   396
+       Vou mudar para a tarefa 397
+       Iniciei  tarefa   397
+       Vou mudar para a tarefa 398
+       Iniciei  tarefa   398
+       Vou mudar para a tarefa 399
+       Iniciei  tarefa   399
+       Vou mudar para a tarefa 400
+       Iniciei  tarefa   400
+       Vou mudar para a tarefa 401
+       Iniciei  tarefa   401
+       Vou mudar para a tarefa 402
+       Iniciei  tarefa   402
+       Vou mudar para a tarefa 403
+       Iniciei  tarefa   403
+       Vou mudar para a tarefa 404
+       Iniciei  tarefa   404
+       Vou mudar para a tarefa 405
+       Iniciei  tarefa   405
+       Vou mudar para a tarefa 406
+       Iniciei  tarefa   406
+       Vou mudar para a tarefa 407
+       Iniciei  tarefa   407
+       Vou mudar para a tarefa 408
+       Iniciei  tarefa   408
+       Vou mudar para a tarefa 409
+       Iniciei  tarefa   409
+       Vou mudar para a tarefa 410
+       Iniciei  tarefa   410
+       Vou mudar para a tarefa 411
+       Iniciei  tarefa   411
+       Vou mudar para a tarefa 412
+       Iniciei  tarefa   412
+       Vou mudar para a tarefa 413
+       Iniciei  tarefa   413
+       Vou mudar para a tarefa 414
+       Iniciei  tarefa   414
+       Vou mudar para a tarefa 415
+       Iniciei  tarefa   415
+       Vou mudar para a tarefa 416
+       Iniciei  tarefa   416
+       Vou mudar para a tarefa 417
+       Iniciei  tarefa   417
+       Vou mudar para a tarefa 418
+       Iniciei  tarefa   418
+       Vou mudar para a tarefa 419
+       Iniciei  tarefa   419
+       Vou mudar para a tarefa 420
+       Iniciei  tarefa   420
+       Vou mudar para a tarefa 421
+       Iniciei  tarefa   421
+       Vou mudar para a tarefa 422
+       Iniciei  tarefa   422
+       Vou mudar para a tarefa 423
+       Iniciei  tarefa   423
+       Vou mudar para a tarefa 424
+       Iniciei  tarefa   424
+       Vou mudar para a tarefa 425
+       Iniciei  tarefa   425
+       Vou mudar para a tarefa 426
+       Iniciei  tarefa   426
+       Vou mudar para a tarefa 427
+       Iniciei  tarefa   427
+       Vou mudar para a tarefa 428
+       Iniciei  tarefa   428
+       Vou mudar para a tarefa 429
+       Iniciei  tarefa   429
+       Vou mudar para a tarefa 430
+       Iniciei  tarefa   430
+       Vou mudar para a tarefa 431
+       Iniciei  tarefa   431
+       Vou mudar para a tarefa 432
+       Iniciei  tarefa   432
+       Vou mudar para a tarefa 433
+       Iniciei  tarefa   433
+       Vou mudar para a tarefa 434
+       Iniciei  tarefa   434
+       Vou mudar para a tarefa 435
+       Iniciei  tarefa   435
+       Vou mudar para a tarefa 436
+       Iniciei  tarefa   436
+       Vou mudar para a tarefa 437
+       Iniciei  tarefa   437
+       Vou mudar para a tarefa 438
+       Iniciei  tarefa   438
+       Vou mudar para a tarefa 439
+       Iniciei  tarefa   439
+       Vou mudar para a tarefa 440
+       Iniciei  tarefa   440
+       Vou mudar para a tarefa 441
+       Iniciei  tarefa   441
+       Vou mudar para a tarefa 442
+       Iniciei  tarefa   442
+       Vou mudar para a tarefa 443
+       Iniciei  tarefa   443
+       Vou mudar para a tarefa 444
+       Iniciei  tarefa   444
+       Vou mudar para a tarefa 445
+       Iniciei  tarefa   445
+       Vou mudar para a tarefa 446
+       Iniciei  tarefa   446
+       Vou mudar para a tarefa 447
+       Iniciei  tarefa   447
+       Vou mudar para a tarefa 448
+       Iniciei  tarefa   448
+       Vou mudar para a tarefa 449
+       Iniciei  tarefa   449
+       Vou mudar para a tarefa 450
+       Iniciei  tarefa   450
+       Vou mudar para a tarefa 451
+       Iniciei  tarefa   451
+       Vou mudar para a tarefa 452
+       Iniciei  tarefa   452
+       Vou mudar para a tarefa 453
+       Iniciei  tarefa   453
+       Vou mudar para a tarefa 454
+       Iniciei  tarefa   454
+       Vou mudar para a tarefa 455
+       Iniciei  tarefa   455
+       Vou mudar para a tarefa 456
+       Iniciei  tarefa   456
+       Vou mudar para a tarefa 457
+       Iniciei  tarefa   457
+       Vou mudar para a tarefa 458
+       Iniciei  tarefa   458
+       Vou mudar para a tarefa 459
+       Iniciei  tarefa   459
+       Vou mudar para a tarefa 460
+       Iniciei  tarefa   460
+       Vou mudar para a tarefa 461
+       Iniciei  tarefa   461
+       Vou mudar para a tarefa 462
+       Iniciei  tarefa   462
+       Vou mudar para a tarefa 463
+       Iniciei  tarefa   463
+       Vou mudar para a tarefa 464
+       Iniciei  tarefa   464
+       Vou mudar para a tarefa 465
+       Iniciei  tarefa   465
+       Vou mudar para a tarefa 466
+       Iniciei  tarefa   466
+       Vou mudar para a tarefa 467
+       Iniciei  tarefa   467
+       Vou mudar para a tarefa 468
+       Iniciei  tarefa   468
+       Vou mudar para a tarefa 469
+       Iniciei  tarefa   469
+       Vou mudar para a tarefa 470
+       Iniciei  tarefa   470
+       Vou mudar para a tarefa 471
+       Iniciei  tarefa   471
+       Vou mudar para a tarefa 472
+       Iniciei  tarefa   472
+       Vou mudar para a tarefa 473
+       Iniciei  tarefa   473
+       Vou mudar para a tarefa 474
+       Iniciei  tarefa   474
+       Vou mudar para a tarefa 475
+       Iniciei  tarefa   475
+       Vou mudar para a tarefa 476
+       Iniciei  tarefa   476
+       Vou mudar para a tarefa 477
+       Iniciei  tarefa   477
+       Vou mudar para a tarefa 478
+       Iniciei  tarefa   478
+       Vou mudar para a tarefa 479
+       Iniciei  tarefa   479
+       Vou mudar para a tarefa 480
+       Iniciei  tarefa   480
+       Vou mudar para a tarefa 481
+       Iniciei  tarefa   481
+       Vou mudar para a tarefa 482
+       Iniciei  tarefa   482
+       Vou mudar para a tarefa 483
+       Iniciei  tarefa   483
+       Vou mudar para a tarefa 484
+       Iniciei  tarefa   484
+       Vou mudar para a tarefa 485
+       Iniciei  tarefa   485
+       Vou mudar para a tarefa 486
+       Iniciei  tarefa   486
+       Vou mudar para a tarefa 487
+       Iniciei  tarefa   487
+       Vou mudar para a tarefa 488
+       Iniciei  tarefa   488
+       Vou mudar para a tarefa 489
+       Iniciei  tarefa   489
+       Vou mudar para a tarefa 490
+       Iniciei  tarefa   490
+       Vou mudar para a tarefa 491
+       Iniciei  tarefa   491
+       Vou mudar para a tarefa 492
+       Iniciei  tarefa   492
+       Vou mudar para a tarefa 493
+       Iniciei  tarefa   493
+       Vou mudar para a tarefa 494
+       Iniciei  tarefa   494
+       Vou mudar para a tarefa 495
+       Iniciei  tarefa   495
+       Vou mudar para a tarefa 496
+       Iniciei  tarefa   496
+       Vou mudar para a tarefa 497
+       Iniciei  tarefa   497
+       Vou mudar para a tarefa 498
+       Iniciei  tarefa   498
+       Vou mudar para a tarefa 499
+       Iniciei  tarefa   499
+       Vou mudar para a tarefa 500
+       Iniciei  tarefa   500
+       Vou mudar para a tarefa 501
+       Iniciei  tarefa   501
+       Vou mudar para a tarefa 502
+       Iniciei  tarefa   502
+       Vou mudar para a tarefa 503
+       Iniciei  tarefa   503
+       Vou mudar para a tarefa 504
+       Iniciei  tarefa   504
+       Vou mudar para a tarefa 505
+       Iniciei  tarefa   505
+       Vou mudar para a tarefa 506
+       Iniciei  tarefa   506
+       Vou mudar para a tarefa 507
+       Iniciei  tarefa   507
+       Vou mudar para a tarefa 508
+       Iniciei  tarefa   508
+       Vou mudar para a tarefa 509
+       Iniciei  tarefa   509
+       Vou mudar para a tarefa 510
+       Iniciei  tarefa   510
+       Vou mudar para a tarefa 511
+       Iniciei  tarefa   511
+       Vou mudar para a tarefa 512
+       Iniciei  tarefa   512
+       Vou mudar para a tarefa 513
+       Iniciei  tarefa   513
+       Vou mudar para a tarefa 2
+       Encerrei tarefa     2
+user: vou ativar a tarefa 3
+       Encerrei tarefa     3
+user: vou ativar a tarefa 4
+       Encerrei tarefa     4
+user: vou ativar a tarefa 5
+       Encerrei tarefa     5
+user: vou ativar a tarefa 6
+       Encerrei tarefa     6
+user: vou ativar a tarefa 7
+       Encerrei tarefa     7
+user: vou ativar a tarefa 8
+       Encerrei tarefa     8
+user: vou ativar a tarefa 9
+       Encerrei tarefa     9
+user: vou ativar a tarefa 10
+       Encerrei tarefa    10
+user: vou ativar a tarefa 11
+       Encerrei tarefa    11
+user: vou ativar a tarefa 12
+       Encerrei tarefa    12
+user: vou ativar a tarefa 13
+       Encerrei tarefa    13
+user: vou ativar a tarefa 14
+       Encerrei tarefa    14
+user: vou ativar a tarefa 15
+       Encerrei tarefa    15
+user: vou ativar a tarefa 16
+       Encerrei tarefa    16
+user: vou ativar a tarefa 17
+       Encerrei tarefa    17
+user: vou ativar a tarefa 18
+       Encerrei tarefa    18
+user: vou ativar a tarefa 19
+       Encerrei tarefa    19
+user: vou ativar a tarefa 20
+       Encerrei tarefa    20
+user: vou ativar a tarefa 21
+       Encerrei tarefa    21
+user: vou ativar a tarefa 22
+       Encerrei tarefa    22
+user: vou ativar a tarefa 23
+       Encerrei tarefa    23
+user: vou ativar a tarefa 24
+       Encerrei tarefa    24
+user: vou ativar a tarefa 25
+       Encerrei tarefa    25
+user: vou ativar a tarefa 26
+       Encerrei tarefa    26
+user: vou ativar a tarefa 27
+       Encerrei tarefa    27
+user: vou ativar a tarefa 28
+       Encerrei tarefa    28
+user: vou ativar a tarefa 29
+       Encerrei tarefa    29
+user: vou ativar a tarefa 30
+       Encerrei tarefa    30
+user: vou ativar a tarefa 31
+       Encerrei tarefa    31
+user: vou ativar a tarefa 32
+       Encerrei tarefa    32
+user: vou ativar a tarefa 33
+       Encerrei tarefa    33
+user: vou ativar a tarefa 34
+       Encerrei tarefa    34
+user: vou ativar a tarefa 35
+       Encerrei tarefa    35
+user: vou ativar a tarefa 36
+       Encerrei tarefa    36
+user: vou ativar a tarefa 37
+       Encerrei tarefa    37
+user: vou ativar a tarefa 38
+       Encerrei tarefa    38
+user: vou ativar a tarefa 39
+       Encerrei tarefa    39
+user: vou ativar a tarefa 40
+       Encerrei tarefa    40
+user: vou ativar a tarefa 41
+       Encerrei tarefa    41
+user: vou ativar a tarefa 42
+       Encerrei tarefa    42
+user: vou ativar a tarefa 43
+       Encerrei tarefa    43
+user: vou ativar a tarefa 44
+       Encerrei tarefa    44
+user: vou ativar a tarefa 45
+       Encerrei tarefa    45
+user: vou ativar a tarefa 46
+       Encerrei tarefa    46
+user: vou ativar a tarefa 47
+       Encerrei tarefa    47
+user: vou ativar a tarefa 48
+       Encerrei tarefa    48
+user: vou ativar a tarefa 49
+       Encerrei tarefa    49
+user: vou ativar a tarefa 50
+       Encerrei tarefa    50
+user: vou ativar a tarefa 51
+       Encerrei tarefa    51
+user: vou ativar a tarefa 52
+       Encerrei tarefa    52
+user: vou ativar a tarefa 53
+       Encerrei tarefa    53
+user: vou ativar a tarefa 54
+       Encerrei tarefa    54
+user: vou ativar a tarefa 55
+       Encerrei tarefa    55
+user: vou ativar a tarefa 56
+       Encerrei tarefa    56
+user: vou ativar a tarefa 57
+       Encerrei tarefa    57
+user: vou ativar a tarefa 58
+       Encerrei tarefa    58
+user: vou ativar a tarefa 59
+       Encerrei tarefa    59
+user: vou ativar a tarefa 60
+       Encerrei tarefa    60
+user: vou ativar a tarefa 61
+       Encerrei tarefa    61
+user: vou ativar a tarefa 62
+       Encerrei tarefa    62
+user: vou ativar a tarefa 63
+       Encerrei tarefa    63
+user: vou ativar a tarefa 64
+       Encerrei tarefa    64
+user: vou ativar a tarefa 65
+       Encerrei tarefa    65
+user: vou ativar a tarefa 66
+       Encerrei tarefa    66
+user: vou ativar a tarefa 67
+       Encerrei tarefa    67
+user: vou ativar a tarefa 68
+       Encerrei tarefa    68
+user: vou ativar a tarefa 69
+       Encerrei tarefa    69
+user: vou ativar a tarefa 70
+       Encerrei tarefa    70
+user: vou ativar a tarefa 71
+       Encerrei tarefa    71
+user: vou ativar a tarefa 72
+       Encerrei tarefa    72
+user: vou ativar a tarefa 73
+       Encerrei tarefa    73
+user: vou ativar a tarefa 74
+       Encerrei tarefa    74
+user: vou ativar a tarefa 75
+       Encerrei tarefa    75
+user: vou ativar a tarefa 76
+       Encerrei tarefa    76
+user: vou ativar a tarefa 77
+       Encerrei tarefa    77
+user: vou ativar a tarefa 78
+       Encerrei tarefa    78
+user: vou ativar a tarefa 79
+       Encerrei tarefa    79
+user: vou ativar a tarefa 80
+       Encerrei tarefa    80
+user: vou ativar a tarefa 81
+       Encerrei tarefa    81
+user: vou ativar a tarefa 82
+       Encerrei tarefa    82
+user: vou ativar a tarefa 83
+       Encerrei tarefa    83
+user: vou ativar a tarefa 84
+       Encerrei tarefa    84
+user: vou ativar a tarefa 85
+       Encerrei tarefa    85
+user: vou ativar a tarefa 86
+       Encerrei tarefa    86
+user: vou ativar a tarefa 87
+       Encerrei tarefa    87
+user: vou ativar a tarefa 88
+       Encerrei tarefa    88
+user: vou ativar a tarefa 89
+       Encerrei tarefa    89
+user: vou ativar a tarefa 90
+       Encerrei tarefa    90
+user: vou ativar a tarefa 91
+       Encerrei tarefa    91
+user: vou ativar a tarefa 92
+       Encerrei tarefa    92
+user: vou ativar a tarefa 93
+       Encerrei tarefa    93
+user: vou ativar a tarefa 94
+       Encerrei tarefa    94
+user: vou ativar a tarefa 95
+       Encerrei tarefa    95
+user: vou ativar a tarefa 96
+       Encerrei tarefa    96
+user: vou ativar a tarefa 97
+       Encerrei tarefa    97
+user: vou ativar a tarefa 98
+       Encerrei tarefa    98
+user: vou ativar a tarefa 99
+       Encerrei tarefa    99
+user: vou ativar a tarefa 100
+       Encerrei tarefa   100
+user: vou ativar a tarefa 101
+       Encerrei tarefa   101
+user: vou ativar a tarefa 102
+       Encerrei tarefa   102
+user: vou ativar a tarefa 103
+       Encerrei tarefa   103
+user: vou ativar a tarefa 104
+       Encerrei tarefa   104
+user: vou ativar a tarefa 105
+       Encerrei tarefa   105
+user: vou ativar a tarefa 106
+       Encerrei tarefa   106
+user: vou ativar a tarefa 107
+       Encerrei tarefa   107
+user: vou ativar a tarefa 108
+       Encerrei tarefa   108
+user: vou ativar a tarefa 109
+       Encerrei tarefa   109
+user: vou ativar a tarefa 110
+       Encerrei tarefa   110
+user: vou ativar a tarefa 111
+       Encerrei tarefa   111
+user: vou ativar a tarefa 112
+       Encerrei tarefa   112
+user: vou ativar a tarefa 113
+       Encerrei tarefa   113
+user: vou ativar a tarefa 114
+       Encerrei tarefa   114
+user: vou ativar a tarefa 115
+       Encerrei tarefa   115
+user: vou ativar a tarefa 116
+       Encerrei tarefa   116
+user: vou ativar a tarefa 117
+       Encerrei tarefa   117
+user: vou ativar a tarefa 118
+       Encerrei tarefa   118
+user: vou ativar a tarefa 119
+       Encerrei tarefa   119
+user: vou ativar a tarefa 120
+       Encerrei tarefa   120
+user: vou ativar a tarefa 121
+       Encerrei tarefa   121
+user: vou ativar a tarefa 122
+       Encerrei tarefa   122
+user: vou ativar a tarefa 123
+       Encerrei tarefa   123
+user: vou ativar a tarefa 124
+       Encerrei tarefa   124
+user: vou ativar a tarefa 125
+       Encerrei tarefa   125
+user: vou ativar a tarefa 126
+       Encerrei tarefa   126
+user: vou ativar a tarefa 127
+       Encerrei tarefa   127
+user: vou ativar a tarefa 128
+       Encerrei tarefa   128
+user: vou ativar a tarefa 129
+       Encerrei tarefa   129
+user: vou ativar a tarefa 130
+       Encerrei tarefa   130
+user: vou ativar a tarefa 131
+       Encerrei tarefa   131
+user: vou ativar a tarefa 132
+       Encerrei tarefa   132
+user: vou ativar a tarefa 133
+       Encerrei tarefa   133
+user: vou ativar a tarefa 134
+       Encerrei tarefa   134
+user: vou ativar a tarefa 135
+       Encerrei tarefa   135
+user: vou ativar a tarefa 136
+       Encerrei tarefa   136
+user: vou ativar a tarefa 137
+       Encerrei tarefa   137
+user: vou ativar a tarefa 138
+       Encerrei tarefa   138
+user: vou ativar a tarefa 139
+       Encerrei tarefa   139
+user: vou ativar a tarefa 140
+       Encerrei tarefa   140
+user: vou ativar a tarefa 141
+       Encerrei tarefa   141
+user: vou ativar a tarefa 142
+       Encerrei tarefa   142
+user: vou ativar a tarefa 143
+       Encerrei tarefa   143
+user: vou ativar a tarefa 144
+       Encerrei tarefa   144
+user: vou ativar a tarefa 145
+       Encerrei tarefa   145
+user: vou ativar a tarefa 146
+       Encerrei tarefa   146
+user: vou ativar a tarefa 147
+       Encerrei tarefa   147
+user: vou ativar a tarefa 148
+       Encerrei tarefa   148
+user: vou ativar a tarefa 149
+       Encerrei tarefa   149
+user: vou ativar a tarefa 150
+       Encerrei tarefa   150
+user: vou ativar a tarefa 151
+       Encerrei tarefa   151
+user: vou ativar a tarefa 152
+       Encerrei tarefa   152
+user: vou ativar a tarefa 153
+       Encerrei tarefa   153
+user: vou ativar a tarefa 154
+       Encerrei tarefa   154
+user: vou ativar a tarefa 155
+       Encerrei tarefa   155
+user: vou ativar a tarefa 156
+       Encerrei tarefa   156
+user: vou ativar a tarefa 157
+       Encerrei tarefa   157
+user: vou ativar a tarefa 158
+       Encerrei tarefa   158
+user: vou ativar a tarefa 159
+       Encerrei tarefa   159
+user: vou ativar a tarefa 160
+       Encerrei tarefa   160
+user: vou ativar a tarefa 161
+       Encerrei tarefa   161
+user: vou ativar a tarefa 162
+       Encerrei tarefa   162
+user: vou ativar a tarefa 163
+       Encerrei tarefa   163
+user: vou ativar a tarefa 164
+       Encerrei tarefa   164
+user: vou ativar a tarefa 165
+       Encerrei tarefa   165
+user: vou ativar a tarefa 166
+       Encerrei tarefa   166
+user: vou ativar a tarefa 167
+       Encerrei tarefa   167
+user: vou ativar a tarefa 168
+       Encerrei tarefa   168
+user: vou ativar a tarefa 169
+       Encerrei tarefa   169
+user: vou ativar a tarefa 170
+       Encerrei tarefa   170
+user: vou ativar a tarefa 171
+       Encerrei tarefa   171
+user: vou ativar a tarefa 172
+       Encerrei tarefa   172
+user: vou ativar a tarefa 173
+       Encerrei tarefa   173
+user: vou ativar a tarefa 174
+       Encerrei tarefa   174
+user: vou ativar a tarefa 175
+       Encerrei tarefa   175
+user: vou ativar a tarefa 176
+       Encerrei tarefa   176
+user: vou ativar a tarefa 177
+       Encerrei tarefa   177
+user: vou ativar a tarefa 178
+       Encerrei tarefa   178
+user: vou ativar a tarefa 179
+       Encerrei tarefa   179
+user: vou ativar a tarefa 180
+       Encerrei tarefa   180
+user: vou ativar a tarefa 181
+       Encerrei tarefa   181
+user: vou ativar a tarefa 182
+       Encerrei tarefa   182
+user: vou ativar a tarefa 183
+       Encerrei tarefa   183
+user: vou ativar a tarefa 184
+       Encerrei tarefa   184
+user: vou ativar a tarefa 185
+       Encerrei tarefa   185
+user: vou ativar a tarefa 186
+       Encerrei tarefa   186
+user: vou ativar a tarefa 187
+       Encerrei tarefa   187
+user: vou ativar a tarefa 188
+       Encerrei tarefa   188
+user: vou ativar a tarefa 189
+       Encerrei tarefa   189
+user: vou ativar a tarefa 190
+       Encerrei tarefa   190
+user: vou ativar a tarefa 191
+       Encerrei tarefa   191
+user: vou ativar a tarefa 192
+       Encerrei tarefa   192
+user: vou ativar a tarefa 193
+       Encerrei tarefa   193
+user: vou ativar a tarefa 194
+       Encerrei tarefa   194
+user: vou ativar a tarefa 195
+       Encerrei tarefa   195
+user: vou ativar a tarefa 196
+       Encerrei tarefa   196
+user: vou ativar a tarefa 197
+       Encerrei tarefa   197
+user: vou ativar a tarefa 198
+       Encerrei tarefa   198
+user: vou ativar a tarefa 199
+       Encerrei tarefa   199
+user: vou ativar a tarefa 200
+       Encerrei tarefa   200
+user: vou ativar a tarefa 201
+       Encerrei tarefa   201
+user: vou ativar a tarefa 202
+       Encerrei tarefa   202
+user: vou ativar a tarefa 203
+       Encerrei tarefa   203
+user: vou ativar a tarefa 204
+       Encerrei tarefa   204
+user: vou ativar a tarefa 205
+       Encerrei tarefa   205
+user: vou ativar a tarefa 206
+       Encerrei tarefa   206
+user: vou ativar a tarefa 207
+       Encerrei tarefa   207
+user: vou ativar a tarefa 208
+       Encerrei tarefa   208
+user: vou ativar a tarefa 209
+       Encerrei tarefa   209
+user: vou ativar a tarefa 210
+       Encerrei tarefa   210
+user: vou ativar a tarefa 211
+       Encerrei tarefa   211
+user: vou ativar a tarefa 212
+       Encerrei tarefa   212
+user: vou ativar a tarefa 213
+       Encerrei tarefa   213
+user: vou ativar a tarefa 214
+       Encerrei tarefa   214
+user: vou ativar a tarefa 215
+       Encerrei tarefa   215
+user: vou ativar a tarefa 216
+       Encerrei tarefa   216
+user: vou ativar a tarefa 217
+       Encerrei tarefa   217
+user: vou ativar a tarefa 218
+       Encerrei tarefa   218
+user: vou ativar a tarefa 219
+       Encerrei tarefa   219
+user: vou ativar a tarefa 220
+       Encerrei tarefa   220
+user: vou ativar a tarefa 221
+       Encerrei tarefa   221
+user: vou ativar a tarefa 222
+       Encerrei tarefa   222
+user: vou ativar a tarefa 223
+       Encerrei tarefa   223
+user: vou ativar a tarefa 224
+       Encerrei tarefa   224
+user: vou ativar a tarefa 225
+       Encerrei tarefa   225
+user: vou ativar a tarefa 226
+       Encerrei tarefa   226
+user: vou ativar a tarefa 227
+       Encerrei tarefa   227
+user: vou ativar a tarefa 228
+       Encerrei tarefa   228
+user: vou ativar a tarefa 229
+       Encerrei tarefa   229
+user: vou ativar a tarefa 230
+       Encerrei tarefa   230
+user: vou ativar a tarefa 231
+       Encerrei tarefa   231
+user: vou ativar a tarefa 232
+       Encerrei tarefa   232
+user: vou ativar a tarefa 233
+       Encerrei tarefa   233
+user: vou ativar a tarefa 234
+       Encerrei tarefa   234
+user: vou ativar a tarefa 235
+       Encerrei tarefa   235
+user: vou ativar a tarefa 236
+       Encerrei tarefa   236
+user: vou ativar a tarefa 237
+       Encerrei tarefa   237
+user: vou ativar a tarefa 238
+       Encerrei tarefa   238
+user: vou ativar a tarefa 239
+       Encerrei tarefa   239
+user: vou ativar a tarefa 240
+       Encerrei tarefa   240
+user: vou ativar a tarefa 241
+       Encerrei tarefa   241
+user: vou ativar a tarefa 242
+       Encerrei tarefa   242
+user: vou ativar a tarefa 243
+       Encerrei tarefa   243
+user: vou ativar a tarefa 244
+       Encerrei tarefa   244
+user: vou ativar a tarefa 245
+       Encerrei tarefa   245
+user: vou ativar a tarefa 246
+       Encerrei tarefa   246
+user: vou ativar a tarefa 247
+       Encerrei tarefa   247
+user: vou ativar a tarefa 248
+       Encerrei tarefa   248
+user: vou ativar a tarefa 249
+       Encerrei tarefa   249
+user: vou ativar a tarefa 250
+       Encerrei tarefa   250
+user: vou ativar a tarefa 251
+       Encerrei tarefa   251
+user: vou ativar a tarefa 252
+       Encerrei tarefa   252
+user: vou ativar a tarefa 253
+       Encerrei tarefa   253
+user: vou ativar a tarefa 254
+       Encerrei tarefa   254
+user: vou ativar a tarefa 255
+       Encerrei tarefa   255
+user: vou ativar a tarefa 256
+       Encerrei tarefa   256
+user: vou ativar a tarefa 257
+       Encerrei tarefa   257
+user: vou ativar a tarefa 258
+       Encerrei tarefa   258
+user: vou ativar a tarefa 259
+       Encerrei tarefa   259
+user: vou ativar a tarefa 260
+       Encerrei tarefa   260
+user: vou ativar a tarefa 261
+       Encerrei tarefa   261
+user: vou ativar a tarefa 262
+       Encerrei tarefa   262
+user: vou ativar a tarefa 263
+       Encerrei tarefa   263
+user: vou ativar a tarefa 264
+       Encerrei tarefa   264
+user: vou ativar a tarefa 265
+       Encerrei tarefa   265
+user: vou ativar a tarefa 266
+       Encerrei tarefa   266
+user: vou ativar a tarefa 267
+       Encerrei tarefa   267
+user: vou ativar a tarefa 268
+       Encerrei tarefa   268
+user: vou ativar a tarefa 269
+       Encerrei tarefa   269
+user: vou ativar a tarefa 270
+       Encerrei tarefa   270
+user: vou ativar a tarefa 271
+       Encerrei tarefa   271
+user: vou ativar a tarefa 272
+       Encerrei tarefa   272
+user: vou ativar a tarefa 273
+       Encerrei tarefa   273
+user: vou ativar a tarefa 274
+       Encerrei tarefa   274
+user: vou ativar a tarefa 275
+       Encerrei tarefa   275
+user: vou ativar a tarefa 276
+       Encerrei tarefa   276
+user: vou ativar a tarefa 277
+       Encerrei tarefa   277
+user: vou ativar a tarefa 278
+       Encerrei tarefa   278
+user: vou ativar a tarefa 279
+       Encerrei tarefa   279
+user: vou ativar a tarefa 280
+       Encerrei tarefa   280
+user: vou ativar a tarefa 281
+       Encerrei tarefa   281
+user: vou ativar a tarefa 282
+       Encerrei tarefa   282
+user: vou ativar a tarefa 283
+       Encerrei tarefa   283
+user: vou ativar a tarefa 284
+       Encerrei tarefa   284
+user: vou ativar a tarefa 285
+       Encerrei tarefa   285
+user: vou ativar a tarefa 286
+       Encerrei tarefa   286
+user: vou ativar a tarefa 287
+       Encerrei tarefa   287
+user: vou ativar a tarefa 288
+       Encerrei tarefa   288
+user: vou ativar a tarefa 289
+       Encerrei tarefa   289
+user: vou ativar a tarefa 290
+       Encerrei tarefa   290
+user: vou ativar a tarefa 291
+       Encerrei tarefa   291
+user: vou ativar a tarefa 292
+       Encerrei tarefa   292
+user: vou ativar a tarefa 293
+       Encerrei tarefa   293
+user: vou ativar a tarefa 294
+       Encerrei tarefa   294
+user: vou ativar a tarefa 295
+       Encerrei tarefa   295
+user: vou ativar a tarefa 296
+       Encerrei tarefa   296
+user: vou ativar a tarefa 297
+       Encerrei tarefa   297
+user: vou ativar a tarefa 298
+       Encerrei tarefa   298
+user: vou ativar a tarefa 299
+       Encerrei tarefa   299
+user: vou ativar a tarefa 300
+       Encerrei tarefa   300
+user: vou ativar a tarefa 301
+       Encerrei tarefa   301
+user: vou ativar a tarefa 302
+       Encerrei tarefa   302
+user: vou ativar a tarefa 303
+       Encerrei tarefa   303
+user: vou ativar a tarefa 304
+       Encerrei tarefa   304
+user: vou ativar a tarefa 305
+       Encerrei tarefa   305
+user: vou ativar a tarefa 306
+       Encerrei tarefa   306
+user: vou ativar a tarefa 307
+       Encerrei tarefa   307
+user: vou ativar a tarefa 308
+       Encerrei tarefa   308
+user: vou ativar a tarefa 309
+       Encerrei tarefa   309
+user: vou ativar a tarefa 310
+       Encerrei tarefa   310
+user: vou ativar a tarefa 311
+       Encerrei tarefa   311
+user: vou ativar a tarefa 312
+       Encerrei tarefa   312
+user: vou ativar a tarefa 313
+       Encerrei tarefa   313
+user: vou ativar a tarefa 314
+       Encerrei tarefa   314
+user: vou ativar a tarefa 315
+       Encerrei tarefa   315
+user: vou ativar a tarefa 316
+       Encerrei tarefa   316
+user: vou ativar a tarefa 317
+       Encerrei tarefa   317
+user: vou ativar a tarefa 318
+       Encerrei tarefa   318
+user: vou ativar a tarefa 319
+       Encerrei tarefa   319
+user: vou ativar a tarefa 320
+       Encerrei tarefa   320
+user: vou ativar a tarefa 321
+       Encerrei tarefa   321
+user: vou ativar a tarefa 322
+       Encerrei tarefa   322
+user: vou ativar a tarefa 323
+       Encerrei tarefa   323
+user: vou ativar a tarefa 324
+       Encerrei tarefa   324
+user: vou ativar a tarefa 325
+       Encerrei tarefa   325
+user: vou ativar a tarefa 326
+       Encerrei tarefa   326
+user: vou ativar a tarefa 327
+       Encerrei tarefa   327
+user: vou ativar a tarefa 328
+       Encerrei tarefa   328
+user: vou ativar a tarefa 329
+       Encerrei tarefa   329
+user: vou ativar a tarefa 330
+       Encerrei tarefa   330
+user: vou ativar a tarefa 331
+       Encerrei tarefa   331
+user: vou ativar a tarefa 332
+       Encerrei tarefa   332
+user: vou ativar a tarefa 333
+       Encerrei tarefa   333
+user: vou ativar a tarefa 334
+       Encerrei tarefa   334
+user: vou ativar a tarefa 335
+       Encerrei tarefa   335
+user: vou ativar a tarefa 336
+       Encerrei tarefa   336
+user: vou ativar a tarefa 337
+       Encerrei tarefa   337
+user: vou ativar a tarefa 338
+       Encerrei tarefa   338
+user: vou ativar a tarefa 339
+       Encerrei tarefa   339
+user: vou ativar a tarefa 340
+       Encerrei tarefa   340
+user: vou ativar a tarefa 341
+       Encerrei tarefa   341
+user: vou ativar a tarefa 342
+       Encerrei tarefa   342
+user: vou ativar a tarefa 343
+       Encerrei tarefa   343
+user: vou ativar a tarefa 344
+       Encerrei tarefa   344
+user: vou ativar a tarefa 345
+       Encerrei tarefa   345
+user: vou ativar a tarefa 346
+       Encerrei tarefa   346
+user: vou ativar a tarefa 347
+       Encerrei tarefa   347
+user: vou ativar a tarefa 348
+       Encerrei tarefa   348
+user: vou ativar a tarefa 349
+       Encerrei tarefa   349
+user: vou ativar a tarefa 350
+       Encerrei tarefa   350
+user: vou ativar a tarefa 351
+       Encerrei tarefa   351
+user: vou ativar a tarefa 352
+       Encerrei tarefa   352
+user: vou ativar a tarefa 353
+       Encerrei tarefa   353
+user: vou ativar a tarefa 354
+       Encerrei tarefa   354
+user: vou ativar a tarefa 355
+       Encerrei tarefa   355
+user: vou ativar a tarefa 356
+       Encerrei tarefa   356
+user: vou ativar a tarefa 357
+       Encerrei tarefa   357
+user: vou ativar a tarefa 358
+       Encerrei tarefa   358
+user: vou ativar a tarefa 359
+       Encerrei tarefa   359
+user: vou ativar a tarefa 360
+       Encerrei tarefa   360
+user: vou ativar a tarefa 361
+       Encerrei tarefa   361
+user: vou ativar a tarefa 362
+       Encerrei tarefa   362
+user: vou ativar a tarefa 363
+       Encerrei tarefa   363
+user: vou ativar a tarefa 364
+       Encerrei tarefa   364
+user: vou ativar a tarefa 365
+       Encerrei tarefa   365
+user: vou ativar a tarefa 366
+       Encerrei tarefa   366
+user: vou ativar a tarefa 367
+       Encerrei tarefa   367
+user: vou ativar a tarefa 368
+       Encerrei tarefa   368
+user: vou ativar a tarefa 369
+       Encerrei tarefa   369
+user: vou ativar a tarefa 370
+       Encerrei tarefa   370
+user: vou ativar a tarefa 371
+       Encerrei tarefa   371
+user: vou ativar a tarefa 372
+       Encerrei tarefa   372
+user: vou ativar a tarefa 373
+       Encerrei tarefa   373
+user: vou ativar a tarefa 374
+       Encerrei tarefa   374
+user: vou ativar a tarefa 375
+       Encerrei tarefa   375
+user: vou ativar a tarefa 376
+       Encerrei tarefa   376
+user: vou ativar a tarefa 377
+       Encerrei tarefa   377
+user: vou ativar a tarefa 378
+       Encerrei tarefa   378
+user: vou ativar a tarefa 379
+       Encerrei tarefa   379
+user: vou ativar a tarefa 380
+       Encerrei tarefa   380
+user: vou ativar a tarefa 381
+       Encerrei tarefa   381
+user: vou ativar a tarefa 382
+       Encerrei tarefa   382
+user: vou ativar a tarefa 383
+       Encerrei tarefa   383
+user: vou ativar a tarefa 384
+       Encerrei tarefa   384
+user: vou ativar a tarefa 385
+       Encerrei tarefa   385
+user: vou ativar a tarefa 386
+       Encerrei tarefa   386
+user: vou ativar a tarefa 387
+       Encerrei tarefa   387
+user: vou ativar a tarefa 388
+       Encerrei tarefa   388
+user: vou ativar a tarefa 389
+       Encerrei tarefa   389
+user: vou ativar a tarefa 390
+       Encerrei tarefa   390
+user: vou ativar a tarefa 391
+       Encerrei tarefa   391
+user: vou ativar a tarefa 392
+       Encerrei tarefa   392
+user: vou ativar a tarefa 393
+       Encerrei tarefa   393
+user: vou ativar a tarefa 394
+       Encerrei tarefa   394
+user: vou ativar a tarefa 395
+       Encerrei tarefa   395
+user: vou ativar a tarefa 396
+       Encerrei tarefa   396
+user: vou ativar a tarefa 397
+       Encerrei tarefa   397
+user: vou ativar a tarefa 398
+       Encerrei tarefa   398
+user: vou ativar a tarefa 399
+       Encerrei tarefa   399
+user: vou ativar a tarefa 400
+       Encerrei tarefa   400
+user: vou ativar a tarefa 401
+       Encerrei tarefa   401
+user: vou ativar a tarefa 402
+       Encerrei tarefa   402
+user: vou ativar a tarefa 403
+       Encerrei tarefa   403
+user: vou ativar a tarefa 404
+       Encerrei tarefa   404
+user: vou ativar a tarefa 405
+       Encerrei tarefa   405
+user: vou ativar a tarefa 406
+       Encerrei tarefa   406
+user: vou ativar a tarefa 407
+       Encerrei tarefa   407
+user: vou ativar a tarefa 408
+       Encerrei tarefa   408
+user: vou ativar a tarefa 409
+       Encerrei tarefa   409
+user: vou ativar a tarefa 410
+       Encerrei tarefa   410
+user: vou ativar a tarefa 411
+       Encerrei tarefa   411
+user: vou ativar a tarefa 412
+       Encerrei tarefa   412
+user: vou ativar a tarefa 413
+       Encerrei tarefa   413
+user: vou ativar a tarefa 414
+       Encerrei tarefa   414
+user: vou ativar a tarefa 415
+       Encerrei tarefa   415
+user: vou ativar a tarefa 416
+       Encerrei tarefa   416
+user: vou ativar a tarefa 417
+       Encerrei tarefa   417
+user: vou ativar a tarefa 418
+       Encerrei tarefa   418
+user: vou ativar a tarefa 419
+       Encerrei tarefa   419
+user: vou ativar a tarefa 420
+       Encerrei tarefa   420
+user: vou ativar a tarefa 421
+       Encerrei tarefa   421
+user: vou ativar a tarefa 422
+       Encerrei tarefa   422
+user: vou ativar a tarefa 423
+       Encerrei tarefa   423
+user: vou ativar a tarefa 424
+       Encerrei tarefa   424
+user: vou ativar a tarefa 425
+       Encerrei tarefa   425
+user: vou ativar a tarefa 426
+       Encerrei tarefa   426
+user: vou ativar a tarefa 427
+       Encerrei tarefa   427
+user: vou ativar a tarefa 428
+       Encerrei tarefa   428
+user: vou ativar a tarefa 429
+       Encerrei tarefa   429
+user: vou ativar a tarefa 430
+       Encerrei tarefa   430
+user: vou ativar a tarefa 431
+       Encerrei tarefa   431
+user: vou ativar a tarefa 432
+       Encerrei tarefa   432
+user: vou ativar a tarefa 433
+       Encerrei tarefa   433
+user: vou ativar a tarefa 434
+       Encerrei tarefa   434
+user: vou ativar a tarefa 435
+       Encerrei tarefa   435
+user: vou ativar a tarefa 436
+       Encerrei tarefa   436
+user: vou ativar a tarefa 437
+       Encerrei tarefa   437
+user: vou ativar a tarefa 438
+       Encerrei tarefa   438
+user: vou ativar a tarefa 439
+       Encerrei tarefa   439
+user: vou ativar a tarefa 440
+       Encerrei tarefa   440
+user: vou ativar a tarefa 441
+       Encerrei tarefa   441
+user: vou ativar a tarefa 442
+       Encerrei tarefa   442
+user: vou ativar a tarefa 443
+       Encerrei tarefa   443
+user: vou ativar a tarefa 444
+       Encerrei tarefa   444
+user: vou ativar a tarefa 445
+       Encerrei tarefa   445
+user: vou ativar a tarefa 446
+       Encerrei tarefa   446
+user: vou ativar a tarefa 447
+       Encerrei tarefa   447
+user: vou ativar a tarefa 448
+       Encerrei tarefa   448
+user: vou ativar a tarefa 449
+       Encerrei tarefa   449
+user: vou ativar a tarefa 450
+       Encerrei tarefa   450
+user: vou ativar a tarefa 451
+       Encerrei tarefa   451
+user: vou ativar a tarefa 452
+       Encerrei tarefa   452
+user: vou ativar a tarefa 453
+       Encerrei tarefa   453
+user: vou ativar a tarefa 454
+       Encerrei tarefa   454
+user: vou ativar a tarefa 455
+       Encerrei tarefa   455
+user: vou ativar a tarefa 456
+       Encerrei tarefa   456
+user: vou ativar a tarefa 457
+       Encerrei tarefa   457
+user: vou ativar a tarefa 458
+       Encerrei tarefa   458
+user: vou ativar a tarefa 459
+       Encerrei tarefa   459
+user: vou ativar a tarefa 460
+       Encerrei tarefa   460
+user: vou ativar a tarefa 461
+       Encerrei tarefa   461
+user: vou ativar a tarefa 462
+       Encerrei tarefa   462
+user: vou ativar a tarefa 463
+       Encerrei tarefa   463
+user: vou ativar a tarefa 464
+       Encerrei tarefa   464
+user: vou ativar a tarefa 465
+       Encerrei tarefa   465
+user: vou ativar a tarefa 466
+       Encerrei tarefa   466
+user: vou ativar a tarefa 467
+       Encerrei tarefa   467
+user: vou ativar a tarefa 468
+       Encerrei tarefa   468
+user: vou ativar a tarefa 469
+       Encerrei tarefa   469
+user: vou ativar a tarefa 470
+       Encerrei tarefa   470
+user: vou ativar a tarefa 471
+       Encerrei tarefa   471
+user: vou ativar a tarefa 472
+       Encerrei tarefa   472
+user: vou ativar a tarefa 473
+       Encerrei tarefa   473
+user: vou ativar a tarefa 474
+       Encerrei tarefa   474
+user: vou ativar a tarefa 475
+       Encerrei tarefa   475
+user: vou ativar a tarefa 476
+       Encerrei tarefa   476
+user: vou ativar a tarefa 477
+       Encerrei tarefa   477
+user: vou ativar a tarefa 478
+       Encerrei tarefa   478
+user: vou ativar a tarefa 479
+       Encerrei tarefa   479
+user: vou ativar a tarefa 480
+       Encerrei tarefa   480
+user: vou ativar a tarefa 481
+       Encerrei tarefa   481
+user: vou ativar a tarefa 482
+       Encerrei tarefa   482
+user: vou ativar a tarefa 483
+       Encerrei tarefa   483
+user: vou ativar a tarefa 484
+       Encerrei tarefa   484
+user: vou ativar a tarefa 485
+       Encerrei tarefa   485
+user: vou ativar a tarefa 486
+       Encerrei tarefa   486
+user: vou ativar a tarefa 487
+       Encerrei tarefa   487
+user: vou ativar a tarefa 488
+       Encerrei tarefa   488
+user: vou ativar a tarefa 489
+       Encerrei tarefa   489
+user: vou ativar a tarefa 490
+       Encerrei tarefa   490
+user: vou ativar a tarefa 491
+       Encerrei tarefa   491
+user: vou ativar a tarefa 492
+       Encerrei tarefa   492
+user: vou ativar a tarefa 493
+       Encerrei tarefa   493
+user: vou ativar a tarefa 494
+       Encerrei tarefa   494
+user: vou ativar a tarefa 495
+       Encerrei tarefa   495
+user: vou ativar a tarefa 496
+       Encerrei tarefa   496
+user: vou ativar a tarefa 497
+       Encerrei tarefa   497
+user: vou ativar a tarefa 498
+       Encerrei tarefa   498
+user: vou ativar a tarefa 499
+       Encerrei tarefa   499
+user: vou ativar a tarefa 500
+       Encerrei tarefa   500
+user: vou ativar a tarefa 501
+       Encerrei tarefa   501
+user: vou ativar a tarefa 502
+       Encerrei tarefa   502
+user: vou ativar a tarefa 503
+       Encerrei tarefa   503
+user: vou ativar a tarefa 504
+       Encerrei tarefa   504
+user: vou ativar a tarefa 505
+       Encerrei tarefa   505
+user: vou ativar a tarefa 506
+       Encerrei tarefa   506
+user: vou ativar a tarefa 507
+       Encerrei tarefa   507
+user: vou ativar a tarefa 508
+       Encerrei tarefa   508
+user: vou ativar a tarefa 509
+       Encerrei tarefa   509
+user: vou ativar a tarefa 510
+       Encerrei tarefa   510
+user: vou ativar a tarefa 511
+       Encerrei tarefa   511
+user: vou ativar a tarefa 512
+       Encerrei tarefa   512
+user: vou ativar a tarefa 513
+       Encerrei tarefa   513
+user: vou destruir a tarefa 2
+user: vou destruir a tarefa 3
+user: vou destruir a tarefa 4
+user: vou destruir a tarefa 5
+user: vou destruir a tarefa 6
+user: vou destruir a tarefa 7
+user: vou destruir a tarefa 8
+user: vou destruir a tarefa 9
+user: vou destruir a tarefa 10
+user: vou destruir a tarefa 11
+user: vou destruir a tarefa 12
+user: vou destruir a tarefa 13
+user: vou destruir a tarefa 14
+user: vou destruir a tarefa 15
+user: vou destruir a tarefa 16
+user: vou destruir a tarefa 17
+user: vou destruir a tarefa 18
+user: vou destruir a tarefa 19
+user: vou destruir a tarefa 20
+user: vou destruir a tarefa 21
+user: vou destruir a tarefa 22
+user: vou destruir a tarefa 23
+user: vou destruir a tarefa 24
+user: vou destruir a tarefa 25
+user: vou destruir a tarefa 26
+user: vou destruir a tarefa 27
+user: vou destruir a tarefa 28
+user: vou destruir a tarefa 29
+user: vou destruir a tarefa 30
+user: vou destruir a tarefa 31
+user: vou destruir a tarefa 32
+user: vou destruir a tarefa 33
+user: vou destruir a tarefa 34
+user: vou destruir a tarefa 35
+user: vou destruir a tarefa 36
+user: vou destruir a tarefa 37
+user: vou destruir a tarefa 38
+user: vou destruir a tarefa 39
+user: vou destruir a tarefa 40
+user: vou destruir a tarefa 41
+user: vou destruir a tarefa 42
+user: vou destruir a tarefa 43
+user: vou destruir a tarefa 44
+user: vou destruir a tarefa 45
+user: vou destruir a tarefa 46
+user: vou destruir a tarefa 47
+user: vou destruir a tarefa 48
+user: vou destruir a tarefa 49
+user: vou destruir a tarefa 50
+user: vou destruir a tarefa 51
+user: vou destruir a tarefa 52
+user: vou destruir a tarefa 53
+user: vou destruir a tarefa 54
+user: vou destruir a tarefa 55
+user: vou destruir a tarefa 56
+user: vou destruir a tarefa 57
+user: vou destruir a tarefa 58
+user: vou destruir a tarefa 59
+user: vou destruir a tarefa 60
+user: vou destruir a tarefa 61
+user: vou destruir a tarefa 62
+user: vou destruir a tarefa 63
+user: vou destruir a tarefa 64
+user: vou destruir a tarefa 65
+user: vou destruir a tarefa 66
+user: vou destruir a tarefa 67
+user: vou destruir a tarefa 68
+user: vou destruir a tarefa 69
+user: vou destruir a tarefa 70
+user: vou destruir a tarefa 71
+user: vou destruir a tarefa 72
+user: vou destruir a tarefa 73
+user: vou destruir a tarefa 74
+user: vou destruir a tarefa 75
+user: vou destruir a tarefa 76
+user: vou destruir a tarefa 77
+user: vou destruir a tarefa 78
+user: vou destruir a tarefa 79
+user: vou destruir a tarefa 80
+user: vou destruir a tarefa 81
+user: vou destruir a tarefa 82
+user: vou destruir a tarefa 83
+user: vou destruir a tarefa 84
+user: vou destruir a tarefa 85
+user: vou destruir a tarefa 86
+user: vou destruir a tarefa 87
+user: vou destruir a tarefa 88
+user: vou destruir a tarefa 89
+user: vou destruir a tarefa 90
+user: vou destruir a tarefa 91
+user: vou destruir a tarefa 92
+user: vou destruir a tarefa 93
+user: vou destruir a tarefa 94
+user: vou destruir a tarefa 95
+user: vou destruir a tarefa 96
+user: vou destruir a tarefa 97
+user: vou destruir a tarefa 98
+user: vou destruir a tarefa 99
+user: vou destruir a tarefa 100
+user: vou destruir a tarefa 101
+user: vou destruir a tarefa 102
+user: vou destruir a tarefa 103
+user: vou destruir a tarefa 104
+user: vou destruir a tarefa 105
+user: vou destruir a tarefa 106
+user: vou destruir a tarefa 107
+user: vou destruir a tarefa 108
+user: vou destruir a tarefa 109
+user: vou destruir a tarefa 110
+user: vou destruir a tarefa 111
+user: vou destruir a tarefa 112
+user: vou destruir a tarefa 113
+user: vou destruir a tarefa 114
+user: vou destruir a tarefa 115
+user: vou destruir a tarefa 116
+user: vou destruir a tarefa 117
+user: vou destruir a tarefa 118
+user: vou destruir a tarefa 119
+user: vou destruir a tarefa 120
+user: vou destruir a tarefa 121
+user: vou destruir a tarefa 122
+user: vou destruir a tarefa 123
+user: vou destruir a tarefa 124
+user: vou destruir a tarefa 125
+user: vou destruir a tarefa 126
+user: vou destruir a tarefa 127
+user: vou destruir a tarefa 128
+user: vou destruir a tarefa 129
+user: vou destruir a tarefa 130
+user: vou destruir a tarefa 131
+user: vou destruir a tarefa 132
+user: vou destruir a tarefa 133
+user: vou destruir a tarefa 134
+user: vou destruir a tarefa 135
+user: vou destruir a tarefa 136
+user: vou destruir a tarefa 137
+user: vou destruir a tarefa 138
+user: vou destruir a tarefa 139
+user: vou destruir a tarefa 140
+user: vou destruir a tarefa 141
+user: vou destruir a tarefa 142
+user: vou destruir a tarefa 143
+user: vou destruir a tarefa 144
+user: vou destruir a tarefa 145
+user: vou destruir a tarefa 146
+user: vou destruir a tarefa 147
+user: vou destruir a tarefa 148
+user: vou destruir a tarefa 149
+user: vou destruir a tarefa 150
+user: vou destruir a tarefa 151
+user: vou destruir a tarefa 152
+user: vou destruir a tarefa 153
+user: vou destruir a tarefa 154
+user: vou destruir a tarefa 155
+user: vou destruir a tarefa 156
+user: vou destruir a tarefa 157
+user: vou destruir a tarefa 158
+user: vou destruir a tarefa 159
+user: vou destruir a tarefa 160
+user: vou destruir a tarefa 161
+user: vou destruir a tarefa 162
+user: vou destruir a tarefa 163
+user: vou destruir a tarefa 164
+user: vou destruir a tarefa 165
+user: vou destruir a tarefa 166
+user: vou destruir a tarefa 167
+user: vou destruir a tarefa 168
+user: vou destruir a tarefa 169
+user: vou destruir a tarefa 170
+user: vou destruir a tarefa 171
+user: vou destruir a tarefa 172
+user: vou destruir a tarefa 173
+user: vou destruir a tarefa 174
+user: vou destruir a tarefa 175
+user: vou destruir a tarefa 176
+user: vou destruir a tarefa 177
+user: vou destruir a tarefa 178
+user: vou destruir a tarefa 179
+user: vou destruir a tarefa 180
+user: vou destruir a tarefa 181
+user: vou destruir a tarefa 182
+user: vou destruir a tarefa 183
+user: vou destruir a tarefa 184
+user: vou destruir a tarefa 185
+user: vou destruir a tarefa 186
+user: vou destruir a tarefa 187
+user: vou destruir a tarefa 188
+user: vou destruir a tarefa 189
+user: vou destruir a tarefa 190
+user: vou destruir a tarefa 191
+user: vou destruir a tarefa 192
+user: vou destruir a tarefa 193
+user: vou destruir a tarefa 194
+user: vou destruir a tarefa 195
+user: vou destruir a tarefa 196
+user: vou destruir a tarefa 197
+user: vou destruir a tarefa 198
+user: vou destruir a tarefa 199
+user: vou destruir a tarefa 200
+user: vou destruir a tarefa 201
+user: vou destruir a tarefa 202
+user: vou destruir a tarefa 203
+user: vou destruir a tarefa 204
+user: vou destruir a tarefa 205
+user: vou destruir a tarefa 206
+user: vou destruir a tarefa 207
+user: vou destruir a tarefa 208
+user: vou destruir a tarefa 209
+user: vou destruir a tarefa 210
+user: vou destruir a tarefa 211
+user: vou destruir a tarefa 212
+user: vou destruir a tarefa 213
+user: vou destruir a tarefa 214
+user: vou destruir a tarefa 215
+user: vou destruir a tarefa 216
+user: vou destruir a tarefa 217
+user: vou destruir a tarefa 218
+user: vou destruir a tarefa 219
+user: vou destruir a tarefa 220
+user: vou destruir a tarefa 221
+user: vou destruir a tarefa 222
+user: vou destruir a tarefa 223
+user: vou destruir a tarefa 224
+user: vou destruir a tarefa 225
+user: vou destruir a tarefa 226
+user: vou destruir a tarefa 227
+user: vou destruir a tarefa 228
+user: vou destruir a tarefa 229
+user: vou destruir a tarefa 230
+user: vou destruir a tarefa 231
+user: vou destruir a tarefa 232
+user: vou destruir a tarefa 233
+user: vou destruir a tarefa 234
+user: vou destruir a tarefa 235
+user: vou destruir a tarefa 236
+user: vou destruir a tarefa 237
+user: vou destruir a tarefa 238
+user: vou destruir a tarefa 239
+user: vou destruir a tarefa 240
+user: vou destruir a tarefa 241
+user: vou destruir a tarefa 242
+user: vou destruir a tarefa 243
+user: vou destruir a tarefa 244
+user: vou destruir a tarefa 245
+user: vou destruir a tarefa 246
+user: vou destruir a tarefa 247
+user: vou destruir a tarefa 248
+user: vou destruir a tarefa 249
+user: vou destruir a tarefa 250
+user: vou destruir a tarefa 251
+user: vou destruir a tarefa 252
+user: vou destruir a tarefa 253
+user: vou destruir a tarefa 254
+user: vou destruir a tarefa 255
+user: vou destruir a tarefa 256
+user: vou destruir a tarefa 257
+user: vou destruir a tarefa 258
+user: vou destruir a tarefa 259
+user: vou destruir a tarefa 260
+user: vou destruir a tarefa 261
+user: vou destruir a tarefa 262
+user: vou destruir a tarefa 263
+user: vou destruir a tarefa 264
+user: vou destruir a tarefa 265
+user: vou destruir a tarefa 266
+user: vou destruir a tarefa 267
+user: vou destruir a tarefa 268
+user: vou destruir a tarefa 269
+user: vou destruir a tarefa 270
+user: vou destruir a tarefa 271
+user: vou destruir a tarefa 272
+user: vou destruir a tarefa 273
+user: vou destruir a tarefa 274
+user: vou destruir a tarefa 275
+user: vou destruir a tarefa 276
+user: vou destruir a tarefa 277
+user: vou destruir a tarefa 278
+user: vou destruir a tarefa 279
+user: vou destruir a tarefa 280
+user: vou destruir a tarefa 281
+user: vou destruir a tarefa 282
+user: vou destruir a tarefa 283
+user: vou destruir a tarefa 284
+user: vou destruir a tarefa 285
+user: vou destruir a tarefa 286
+user: vou destruir a tarefa 287
+user: vou destruir a tarefa 288
+user: vou destruir a tarefa 289
+user: vou destruir a tarefa 290
+user: vou destruir a tarefa 291
+user: vou destruir a tarefa 292
+user: vou destruir a tarefa 293
+user: vou destruir a tarefa 294
+user: vou destruir a tarefa 295
+user: vou destruir a tarefa 296
+user: vou destruir a tarefa 297
+user: vou destruir a tarefa 298
+user: vou destruir a tarefa 299
+user: vou destruir a tarefa 300
+user: vou destruir a tarefa 301
+user: vou destruir a tarefa 302
+user: vou destruir a tarefa 303
+user: vou destruir a tarefa 304
+user: vou destruir a tarefa 305
+user: vou destruir a tarefa 306
+user: vou destruir a tarefa 307
+user: vou destruir a tarefa 308
+user: vou destruir a tarefa 309
+user: vou destruir a tarefa 310
+user: vou destruir a tarefa 311
+user: vou destruir a tarefa 312
+user: vou destruir a tarefa 313
+user: vou destruir a tarefa 314
+user: vou destruir a tarefa 315
+user: vou destruir a tarefa 316
+user: vou destruir a tarefa 317
+user: vou destruir a tarefa 318
+user: vou destruir a tarefa 319
+user: vou destruir a tarefa 320
+user: vou destruir a tarefa 321
+user: vou destruir a tarefa 322
+user: vou destruir a tarefa 323
+user: vou destruir a tarefa 324
+user: vou destruir a tarefa 325
+user: vou destruir a tarefa 326
+user: vou destruir a tarefa 327
+user: vou destruir a tarefa 328
+user: vou destruir a tarefa 329
+user: vou destruir a tarefa 330
+user: vou destruir a tarefa 331
+user: vou destruir a tarefa 332
+user: vou destruir a tarefa 333
+user: vou destruir a tarefa 334
+user: vou destruir a tarefa 335
+user: vou destruir a tarefa 336
+user: vou destruir a tarefa 337
+user: vou destruir a tarefa 338
+user: vou destruir a tarefa 339
+user: vou destruir a tarefa 340
+user: vou destruir a tarefa 341
+user: vou destruir a tarefa 342
+user: vou destruir a tarefa 343
+user: vou destruir a tarefa 344
+user: vou destruir a tarefa 345
+user: vou destruir a tarefa 346
+user: vou destruir a tarefa 347
+user: vou destruir a tarefa 348
+user: vou destruir a tarefa 349
+user: vou destruir a tarefa 350
+user: vou destruir a tarefa 351
+user: vou destruir a tarefa 352
+user: vou destruir a tarefa 353
+user: vou destruir a tarefa 354
+user: vou destruir a tarefa 355
+user: vou destruir a tarefa 356
+user: vou destruir a tarefa 357
+user: vou destruir a tarefa 358
+user: vou destruir a tarefa 359
+user: vou destruir a tarefa 360
+user: vou destruir a tarefa 361
+user: vou destruir a tarefa 362
+user: vou destruir a tarefa 363
+user: vou destruir a tarefa 364
+user: vou destruir a tarefa 365
+user: vou destruir a tarefa 366
+user: vou destruir a tarefa 367
+user: vou destruir a tarefa 368
+user: vou destruir a tarefa 369
+user: vou destruir a tarefa 370
+user: vou destruir a tarefa 371
+user: vou destruir a tarefa 372
+user: vou destruir a tarefa 373
+user: vou destruir a tarefa 374
+user: vou destruir a tarefa 375
+user: vou destruir a tarefa 376
+user: vou destruir a tarefa 377
+user: vou destruir a tarefa 378
+user: vou destruir a tarefa 379
+user: vou destruir a tarefa 380
+user: vou destruir a tarefa 381
+user: vou destruir a tarefa 382
+user: vou destruir a tarefa 383
+user: vou destruir a tarefa 384
+user: vou destruir a tarefa 385
+user: vou destruir a tarefa 386
+user: vou destruir a tarefa 387
+user: vou destruir a tarefa 388
+user: vou destruir a tarefa 389
+user: vou destruir a tarefa 390
+user: vou destruir a tarefa 391
+user: vou destruir a tarefa 392
+user: vou destruir a tarefa 393
+user: vou destruir a tarefa 394
+user: vou destruir a tarefa 395
+user: vou destruir a tarefa 396
+user: vou destruir a tarefa 397
+user: vou destruir a tarefa 398
+user: vou destruir a tarefa 399
+user: vou destruir a tarefa 400
+user: vou destruir a tarefa 401
+user: vou destruir a tarefa 402
+user: vou destruir a tarefa 403
+user: vou destruir a tarefa 404
+user: vou destruir a tarefa 405
+user: vou destruir a tarefa 406
+user: vou destruir a tarefa 407
+user: vou destruir a tarefa 408
+user: vou destruir a tarefa 409
+user: vou destruir a tarefa 410
+user: vou destruir a tarefa 411
+user: vou destruir a tarefa 412
+user: vou destruir a tarefa 413
+user: vou destruir a tarefa 414
+user: vou destruir a tarefa 415
+user: vou destruir a tarefa 416
+user: vou destruir a tarefa 417
+user: vou destruir a tarefa 418
+user: vou destruir a tarefa 419
+user: vou destruir a tarefa 420
+user: vou destruir a tarefa 421
+user: vou destruir a tarefa 422
+user: vou destruir a tarefa 423
+user: vou destruir a tarefa 424
+user: vou destruir a tarefa 425
+user: vou destruir a tarefa 426
+user: vou destruir a tarefa 427
+user: vou destruir a tarefa 428
+user: vou destruir a tarefa 429
+user: vou destruir a tarefa 430
+user: vou destruir a tarefa 431
+user: vou destruir a tarefa 432
+user: vou destruir a tarefa 433
+user: vou destruir a tarefa 434
+user: vou destruir a tarefa 435
+user: vou destruir a tarefa 436
+user: vou destruir a tarefa 437
+user: vou destruir a tarefa 438
+user: vou destruir a tarefa 439
+user: vou destruir a tarefa 440
+user: vou destruir a tarefa 441
+user: vou destruir a tarefa 442
+user: vou destruir a tarefa 443
+user: vou destruir a tarefa 444
+user: vou destruir a tarefa 445
+user: vou destruir a tarefa 446
+user: vou destruir a tarefa 447
+user: vou destruir a tarefa 448
+user: vou destruir a tarefa 449
+user: vou destruir a tarefa 450
+user: vou destruir a tarefa 451
+user: vou destruir a tarefa 452
+user: vou destruir a tarefa 453
+user: vou destruir a tarefa 454
+user: vou destruir a tarefa 455
+user: vou destruir a tarefa 456
+user: vou destruir a tarefa 457
+user: vou destruir a tarefa 458
+user: vou destruir a tarefa 459
+user: vou destruir a tarefa 460
+user: vou destruir a tarefa 461
+user: vou destruir a tarefa 462
+user: vou destruir a tarefa 463
+user: vou destruir a tarefa 464
+user: vou destruir a tarefa 465
+user: vou destruir a tarefa 466
+user: vou destruir a tarefa 467
+user: vou destruir a tarefa 468
+user: vou destruir a tarefa 469
+user: vou destruir a tarefa 470
+user: vou destruir a tarefa 471
+user: vou destruir a tarefa 472
+user: vou destruir a tarefa 473
+user: vou destruir a tarefa 474
+user: vou destruir a tarefa 475
+user: vou destruir a tarefa 476
+user: vou destruir a tarefa 477
+user: vou destruir a tarefa 478
+user: vou destruir a tarefa 479
+user: vou destruir a tarefa 480
+user: vou destruir a tarefa 481
+user: vou destruir a tarefa 482
+user: vou destruir a tarefa 483
+user: vou destruir a tarefa 484
+user: vou destruir a tarefa 485
+user: vou destruir a tarefa 486
+user: vou destruir a tarefa 487
+user: vou destruir a tarefa 488
+user: vou destruir a tarefa 489
+user: vou destruir a tarefa 490
+user: vou destruir a tarefa 491
+user: vou destruir a tarefa 492
+user: vou destruir a tarefa 493
+user: vou destruir a tarefa 494
+user: vou destruir a tarefa 495
+user: vou destruir a tarefa 496
+user: vou destruir a tarefa 497
+user: vou destruir a tarefa 498
+user: vou destruir a tarefa 499
+user: vou destruir a tarefa 500
+user: vou destruir a tarefa 501
+user: vou destruir a tarefa 502
+user: vou destruir a tarefa 503
+user: vou destruir a tarefa 504
+user: vou destruir a tarefa 505
+user: vou destruir a tarefa 506
+user: vou destruir a tarefa 507
+user: vou destruir a tarefa 508
+user: vou destruir a tarefa 509
+user: vou destruir a tarefa 510
+user: vou destruir a tarefa 511
+user: vou destruir a tarefa 512
+user: vou destruir a tarefa 513
+user: fim
+PPOS: system stopping
+PPOS: system stopped (uptime 0 ms)
diff --git a/ppos/test/pingpong-task3.c b/ppos/test/pingpong-task3.c
new file mode 100644 (file)
index 0000000..8c8386e
--- /dev/null
@@ -0,0 +1,51 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da gestão básica de tarefas
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define NUMTASKS 512
+
+static struct task_t *task;
+
+// corpo das tarefas
+void body_task(void *)
+{
+    printf("\tEstou na tarefa %5d\n", task_id(NULL));
+    task_switch(NULL);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status;
+    char *name = task_name(NULL);
+
+    printf("%s: inicio\n", name);
+
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        // cria a tarefa
+        task = task_create(NULL, body_task, NULL);
+        assert(task);
+
+        // ativa a tarefa
+        status = task_switch(task);
+        assert(status == NOERROR);
+
+        // após retornar, destroi o descritor
+        status = task_destroy(task);
+        assert(status == NOERROR);
+    }
+
+    printf("%s: fim\n", name);
+
+    task_switch(NULL);
+}
diff --git a/ppos/test/pingpong-task3.txt b/ppos/test/pingpong-task3.txt
new file mode 100644 (file)
index 0000000..5358149
--- /dev/null
@@ -0,0 +1,518 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+       Estou na tarefa     2
+       Estou na tarefa     3
+       Estou na tarefa     4
+       Estou na tarefa     5
+       Estou na tarefa     6
+       Estou na tarefa     7
+       Estou na tarefa     8
+       Estou na tarefa     9
+       Estou na tarefa    10
+       Estou na tarefa    11
+       Estou na tarefa    12
+       Estou na tarefa    13
+       Estou na tarefa    14
+       Estou na tarefa    15
+       Estou na tarefa    16
+       Estou na tarefa    17
+       Estou na tarefa    18
+       Estou na tarefa    19
+       Estou na tarefa    20
+       Estou na tarefa    21
+       Estou na tarefa    22
+       Estou na tarefa    23
+       Estou na tarefa    24
+       Estou na tarefa    25
+       Estou na tarefa    26
+       Estou na tarefa    27
+       Estou na tarefa    28
+       Estou na tarefa    29
+       Estou na tarefa    30
+       Estou na tarefa    31
+       Estou na tarefa    32
+       Estou na tarefa    33
+       Estou na tarefa    34
+       Estou na tarefa    35
+       Estou na tarefa    36
+       Estou na tarefa    37
+       Estou na tarefa    38
+       Estou na tarefa    39
+       Estou na tarefa    40
+       Estou na tarefa    41
+       Estou na tarefa    42
+       Estou na tarefa    43
+       Estou na tarefa    44
+       Estou na tarefa    45
+       Estou na tarefa    46
+       Estou na tarefa    47
+       Estou na tarefa    48
+       Estou na tarefa    49
+       Estou na tarefa    50
+       Estou na tarefa    51
+       Estou na tarefa    52
+       Estou na tarefa    53
+       Estou na tarefa    54
+       Estou na tarefa    55
+       Estou na tarefa    56
+       Estou na tarefa    57
+       Estou na tarefa    58
+       Estou na tarefa    59
+       Estou na tarefa    60
+       Estou na tarefa    61
+       Estou na tarefa    62
+       Estou na tarefa    63
+       Estou na tarefa    64
+       Estou na tarefa    65
+       Estou na tarefa    66
+       Estou na tarefa    67
+       Estou na tarefa    68
+       Estou na tarefa    69
+       Estou na tarefa    70
+       Estou na tarefa    71
+       Estou na tarefa    72
+       Estou na tarefa    73
+       Estou na tarefa    74
+       Estou na tarefa    75
+       Estou na tarefa    76
+       Estou na tarefa    77
+       Estou na tarefa    78
+       Estou na tarefa    79
+       Estou na tarefa    80
+       Estou na tarefa    81
+       Estou na tarefa    82
+       Estou na tarefa    83
+       Estou na tarefa    84
+       Estou na tarefa    85
+       Estou na tarefa    86
+       Estou na tarefa    87
+       Estou na tarefa    88
+       Estou na tarefa    89
+       Estou na tarefa    90
+       Estou na tarefa    91
+       Estou na tarefa    92
+       Estou na tarefa    93
+       Estou na tarefa    94
+       Estou na tarefa    95
+       Estou na tarefa    96
+       Estou na tarefa    97
+       Estou na tarefa    98
+       Estou na tarefa    99
+       Estou na tarefa   100
+       Estou na tarefa   101
+       Estou na tarefa   102
+       Estou na tarefa   103
+       Estou na tarefa   104
+       Estou na tarefa   105
+       Estou na tarefa   106
+       Estou na tarefa   107
+       Estou na tarefa   108
+       Estou na tarefa   109
+       Estou na tarefa   110
+       Estou na tarefa   111
+       Estou na tarefa   112
+       Estou na tarefa   113
+       Estou na tarefa   114
+       Estou na tarefa   115
+       Estou na tarefa   116
+       Estou na tarefa   117
+       Estou na tarefa   118
+       Estou na tarefa   119
+       Estou na tarefa   120
+       Estou na tarefa   121
+       Estou na tarefa   122
+       Estou na tarefa   123
+       Estou na tarefa   124
+       Estou na tarefa   125
+       Estou na tarefa   126
+       Estou na tarefa   127
+       Estou na tarefa   128
+       Estou na tarefa   129
+       Estou na tarefa   130
+       Estou na tarefa   131
+       Estou na tarefa   132
+       Estou na tarefa   133
+       Estou na tarefa   134
+       Estou na tarefa   135
+       Estou na tarefa   136
+       Estou na tarefa   137
+       Estou na tarefa   138
+       Estou na tarefa   139
+       Estou na tarefa   140
+       Estou na tarefa   141
+       Estou na tarefa   142
+       Estou na tarefa   143
+       Estou na tarefa   144
+       Estou na tarefa   145
+       Estou na tarefa   146
+       Estou na tarefa   147
+       Estou na tarefa   148
+       Estou na tarefa   149
+       Estou na tarefa   150
+       Estou na tarefa   151
+       Estou na tarefa   152
+       Estou na tarefa   153
+       Estou na tarefa   154
+       Estou na tarefa   155
+       Estou na tarefa   156
+       Estou na tarefa   157
+       Estou na tarefa   158
+       Estou na tarefa   159
+       Estou na tarefa   160
+       Estou na tarefa   161
+       Estou na tarefa   162
+       Estou na tarefa   163
+       Estou na tarefa   164
+       Estou na tarefa   165
+       Estou na tarefa   166
+       Estou na tarefa   167
+       Estou na tarefa   168
+       Estou na tarefa   169
+       Estou na tarefa   170
+       Estou na tarefa   171
+       Estou na tarefa   172
+       Estou na tarefa   173
+       Estou na tarefa   174
+       Estou na tarefa   175
+       Estou na tarefa   176
+       Estou na tarefa   177
+       Estou na tarefa   178
+       Estou na tarefa   179
+       Estou na tarefa   180
+       Estou na tarefa   181
+       Estou na tarefa   182
+       Estou na tarefa   183
+       Estou na tarefa   184
+       Estou na tarefa   185
+       Estou na tarefa   186
+       Estou na tarefa   187
+       Estou na tarefa   188
+       Estou na tarefa   189
+       Estou na tarefa   190
+       Estou na tarefa   191
+       Estou na tarefa   192
+       Estou na tarefa   193
+       Estou na tarefa   194
+       Estou na tarefa   195
+       Estou na tarefa   196
+       Estou na tarefa   197
+       Estou na tarefa   198
+       Estou na tarefa   199
+       Estou na tarefa   200
+       Estou na tarefa   201
+       Estou na tarefa   202
+       Estou na tarefa   203
+       Estou na tarefa   204
+       Estou na tarefa   205
+       Estou na tarefa   206
+       Estou na tarefa   207
+       Estou na tarefa   208
+       Estou na tarefa   209
+       Estou na tarefa   210
+       Estou na tarefa   211
+       Estou na tarefa   212
+       Estou na tarefa   213
+       Estou na tarefa   214
+       Estou na tarefa   215
+       Estou na tarefa   216
+       Estou na tarefa   217
+       Estou na tarefa   218
+       Estou na tarefa   219
+       Estou na tarefa   220
+       Estou na tarefa   221
+       Estou na tarefa   222
+       Estou na tarefa   223
+       Estou na tarefa   224
+       Estou na tarefa   225
+       Estou na tarefa   226
+       Estou na tarefa   227
+       Estou na tarefa   228
+       Estou na tarefa   229
+       Estou na tarefa   230
+       Estou na tarefa   231
+       Estou na tarefa   232
+       Estou na tarefa   233
+       Estou na tarefa   234
+       Estou na tarefa   235
+       Estou na tarefa   236
+       Estou na tarefa   237
+       Estou na tarefa   238
+       Estou na tarefa   239
+       Estou na tarefa   240
+       Estou na tarefa   241
+       Estou na tarefa   242
+       Estou na tarefa   243
+       Estou na tarefa   244
+       Estou na tarefa   245
+       Estou na tarefa   246
+       Estou na tarefa   247
+       Estou na tarefa   248
+       Estou na tarefa   249
+       Estou na tarefa   250
+       Estou na tarefa   251
+       Estou na tarefa   252
+       Estou na tarefa   253
+       Estou na tarefa   254
+       Estou na tarefa   255
+       Estou na tarefa   256
+       Estou na tarefa   257
+       Estou na tarefa   258
+       Estou na tarefa   259
+       Estou na tarefa   260
+       Estou na tarefa   261
+       Estou na tarefa   262
+       Estou na tarefa   263
+       Estou na tarefa   264
+       Estou na tarefa   265
+       Estou na tarefa   266
+       Estou na tarefa   267
+       Estou na tarefa   268
+       Estou na tarefa   269
+       Estou na tarefa   270
+       Estou na tarefa   271
+       Estou na tarefa   272
+       Estou na tarefa   273
+       Estou na tarefa   274
+       Estou na tarefa   275
+       Estou na tarefa   276
+       Estou na tarefa   277
+       Estou na tarefa   278
+       Estou na tarefa   279
+       Estou na tarefa   280
+       Estou na tarefa   281
+       Estou na tarefa   282
+       Estou na tarefa   283
+       Estou na tarefa   284
+       Estou na tarefa   285
+       Estou na tarefa   286
+       Estou na tarefa   287
+       Estou na tarefa   288
+       Estou na tarefa   289
+       Estou na tarefa   290
+       Estou na tarefa   291
+       Estou na tarefa   292
+       Estou na tarefa   293
+       Estou na tarefa   294
+       Estou na tarefa   295
+       Estou na tarefa   296
+       Estou na tarefa   297
+       Estou na tarefa   298
+       Estou na tarefa   299
+       Estou na tarefa   300
+       Estou na tarefa   301
+       Estou na tarefa   302
+       Estou na tarefa   303
+       Estou na tarefa   304
+       Estou na tarefa   305
+       Estou na tarefa   306
+       Estou na tarefa   307
+       Estou na tarefa   308
+       Estou na tarefa   309
+       Estou na tarefa   310
+       Estou na tarefa   311
+       Estou na tarefa   312
+       Estou na tarefa   313
+       Estou na tarefa   314
+       Estou na tarefa   315
+       Estou na tarefa   316
+       Estou na tarefa   317
+       Estou na tarefa   318
+       Estou na tarefa   319
+       Estou na tarefa   320
+       Estou na tarefa   321
+       Estou na tarefa   322
+       Estou na tarefa   323
+       Estou na tarefa   324
+       Estou na tarefa   325
+       Estou na tarefa   326
+       Estou na tarefa   327
+       Estou na tarefa   328
+       Estou na tarefa   329
+       Estou na tarefa   330
+       Estou na tarefa   331
+       Estou na tarefa   332
+       Estou na tarefa   333
+       Estou na tarefa   334
+       Estou na tarefa   335
+       Estou na tarefa   336
+       Estou na tarefa   337
+       Estou na tarefa   338
+       Estou na tarefa   339
+       Estou na tarefa   340
+       Estou na tarefa   341
+       Estou na tarefa   342
+       Estou na tarefa   343
+       Estou na tarefa   344
+       Estou na tarefa   345
+       Estou na tarefa   346
+       Estou na tarefa   347
+       Estou na tarefa   348
+       Estou na tarefa   349
+       Estou na tarefa   350
+       Estou na tarefa   351
+       Estou na tarefa   352
+       Estou na tarefa   353
+       Estou na tarefa   354
+       Estou na tarefa   355
+       Estou na tarefa   356
+       Estou na tarefa   357
+       Estou na tarefa   358
+       Estou na tarefa   359
+       Estou na tarefa   360
+       Estou na tarefa   361
+       Estou na tarefa   362
+       Estou na tarefa   363
+       Estou na tarefa   364
+       Estou na tarefa   365
+       Estou na tarefa   366
+       Estou na tarefa   367
+       Estou na tarefa   368
+       Estou na tarefa   369
+       Estou na tarefa   370
+       Estou na tarefa   371
+       Estou na tarefa   372
+       Estou na tarefa   373
+       Estou na tarefa   374
+       Estou na tarefa   375
+       Estou na tarefa   376
+       Estou na tarefa   377
+       Estou na tarefa   378
+       Estou na tarefa   379
+       Estou na tarefa   380
+       Estou na tarefa   381
+       Estou na tarefa   382
+       Estou na tarefa   383
+       Estou na tarefa   384
+       Estou na tarefa   385
+       Estou na tarefa   386
+       Estou na tarefa   387
+       Estou na tarefa   388
+       Estou na tarefa   389
+       Estou na tarefa   390
+       Estou na tarefa   391
+       Estou na tarefa   392
+       Estou na tarefa   393
+       Estou na tarefa   394
+       Estou na tarefa   395
+       Estou na tarefa   396
+       Estou na tarefa   397
+       Estou na tarefa   398
+       Estou na tarefa   399
+       Estou na tarefa   400
+       Estou na tarefa   401
+       Estou na tarefa   402
+       Estou na tarefa   403
+       Estou na tarefa   404
+       Estou na tarefa   405
+       Estou na tarefa   406
+       Estou na tarefa   407
+       Estou na tarefa   408
+       Estou na tarefa   409
+       Estou na tarefa   410
+       Estou na tarefa   411
+       Estou na tarefa   412
+       Estou na tarefa   413
+       Estou na tarefa   414
+       Estou na tarefa   415
+       Estou na tarefa   416
+       Estou na tarefa   417
+       Estou na tarefa   418
+       Estou na tarefa   419
+       Estou na tarefa   420
+       Estou na tarefa   421
+       Estou na tarefa   422
+       Estou na tarefa   423
+       Estou na tarefa   424
+       Estou na tarefa   425
+       Estou na tarefa   426
+       Estou na tarefa   427
+       Estou na tarefa   428
+       Estou na tarefa   429
+       Estou na tarefa   430
+       Estou na tarefa   431
+       Estou na tarefa   432
+       Estou na tarefa   433
+       Estou na tarefa   434
+       Estou na tarefa   435
+       Estou na tarefa   436
+       Estou na tarefa   437
+       Estou na tarefa   438
+       Estou na tarefa   439
+       Estou na tarefa   440
+       Estou na tarefa   441
+       Estou na tarefa   442
+       Estou na tarefa   443
+       Estou na tarefa   444
+       Estou na tarefa   445
+       Estou na tarefa   446
+       Estou na tarefa   447
+       Estou na tarefa   448
+       Estou na tarefa   449
+       Estou na tarefa   450
+       Estou na tarefa   451
+       Estou na tarefa   452
+       Estou na tarefa   453
+       Estou na tarefa   454
+       Estou na tarefa   455
+       Estou na tarefa   456
+       Estou na tarefa   457
+       Estou na tarefa   458
+       Estou na tarefa   459
+       Estou na tarefa   460
+       Estou na tarefa   461
+       Estou na tarefa   462
+       Estou na tarefa   463
+       Estou na tarefa   464
+       Estou na tarefa   465
+       Estou na tarefa   466
+       Estou na tarefa   467
+       Estou na tarefa   468
+       Estou na tarefa   469
+       Estou na tarefa   470
+       Estou na tarefa   471
+       Estou na tarefa   472
+       Estou na tarefa   473
+       Estou na tarefa   474
+       Estou na tarefa   475
+       Estou na tarefa   476
+       Estou na tarefa   477
+       Estou na tarefa   478
+       Estou na tarefa   479
+       Estou na tarefa   480
+       Estou na tarefa   481
+       Estou na tarefa   482
+       Estou na tarefa   483
+       Estou na tarefa   484
+       Estou na tarefa   485
+       Estou na tarefa   486
+       Estou na tarefa   487
+       Estou na tarefa   488
+       Estou na tarefa   489
+       Estou na tarefa   490
+       Estou na tarefa   491
+       Estou na tarefa   492
+       Estou na tarefa   493
+       Estou na tarefa   494
+       Estou na tarefa   495
+       Estou na tarefa   496
+       Estou na tarefa   497
+       Estou na tarefa   498
+       Estou na tarefa   499
+       Estou na tarefa   500
+       Estou na tarefa   501
+       Estou na tarefa   502
+       Estou na tarefa   503
+       Estou na tarefa   504
+       Estou na tarefa   505
+       Estou na tarefa   506
+       Estou na tarefa   507
+       Estou na tarefa   508
+       Estou na tarefa   509
+       Estou na tarefa   510
+       Estou na tarefa   511
+       Estou na tarefa   512
+       Estou na tarefa   513
+user: fim
+PPOS: system stopping
+PPOS: system stopped (uptime 0 ms)
diff --git a/ppos/test/pingpong-wait-stress.c b/ppos/test/pingpong-wait-stress.c
new file mode 100644 (file)
index 0000000..80c9ded
--- /dev/null
@@ -0,0 +1,75 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da função task_wait() com muitas tarefas
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define WORKLOAD 3000
+#define NUMTASKS 512
+
+static struct task_t *task[NUMTASKS];
+
+// simula um processamento pesado
+int hardwork(int n)
+{
+    int soma = 0;
+
+    for (int i = 0; i < n; i++)
+        for (int j = 0; j < n; j++)
+            soma += j;
+    return (soma);
+}
+
+// corpo das tarefas
+void body()
+{
+    int max = 1 + randnum() % 5 ;
+    
+    for (int i = 0; i < max; i++)
+        hardwork(WORKLOAD + randnum() % WORKLOAD);
+
+    printf("task %3d: fim\n", task_id(NULL));
+    task_exit(task_id(NULL));
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int status, exit_code;
+
+    printf("user: inicio\n");
+
+    // cria tarefas
+    printf("Creating %d tasks\n", NUMTASKS);
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        task[i] = task_create(NULL, body, NULL);
+        assert(task[i]);
+    }
+
+    // espera tarefas encerrarem
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        printf("Waiting for task %d\n", task_id(task[i]));
+        exit_code = task_wait(task[i]);
+        assert(exit_code == task_id(task[i]));
+    }
+
+    // destroi descritores
+    for (int i = 0; i < NUMTASKS; i++)
+    {
+        status = task_destroy(task[i]);
+        assert(status == NOERROR);
+    }
+
+    printf("user: fim\n");
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-wait-stress.txt b/ppos/test/pingpong-wait-stress.txt
new file mode 100644 (file)
index 0000000..b7b6cb0
--- /dev/null
@@ -0,0 +1,1545 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+Creating 512 tasks
+Waiting for task 2
+task  14: fim
+PPOS: task 14 ((null)) exit code 14, 20607 ms elapsed time,    44 ms cpu time,     5 activations
+task 235: fim
+PPOS: task 235 ((null)) exit code 235, 22809 ms elapsed time,    43 ms cpu time,     5 activations
+task  23: fim
+PPOS: task 23 ((null)) exit code 23, 25794 ms elapsed time,    54 ms cpu time,     6 activations
+task  31: fim
+PPOS: task 31 ((null)) exit code 31, 25869 ms elapsed time,    55 ms cpu time,     6 activations
+task  34: fim
+PPOS: task 34 ((null)) exit code 34, 25896 ms elapsed time,    57 ms cpu time,     6 activations
+task  79: fim
+PPOS: task 79 ((null)) exit code 79, 26340 ms elapsed time,    54 ms cpu time,     6 activations
+task 122: fim
+PPOS: task 122 ((null)) exit code 122, 26765 ms elapsed time,    55 ms cpu time,     6 activations
+task 162: fim
+PPOS: task 162 ((null)) exit code 162, 27163 ms elapsed time,    58 ms cpu time,     6 activations
+task 446: fim
+PPOS: task 446 ((null)) exit code 446, 29990 ms elapsed time,    59 ms cpu time,     6 activations
+task 466: fim
+PPOS: task 466 ((null)) exit code 466, 30184 ms elapsed time,    54 ms cpu time,     6 activations
+task  75: fim
+PPOS: task 75 ((null)) exit code 75, 31346 ms elapsed time,    60 ms cpu time,     7 activations
+task 196: fim
+PPOS: task 196 ((null)) exit code 196, 32523 ms elapsed time,    68 ms cpu time,     7 activations
+task 234: fim
+PPOS: task 234 ((null)) exit code 234, 32896 ms elapsed time,    63 ms cpu time,     7 activations
+task 308: fim
+PPOS: task 308 ((null)) exit code 308, 33617 ms elapsed time,    61 ms cpu time,     7 activations
+task 315: fim
+PPOS: task 315 ((null)) exit code 315, 33677 ms elapsed time,    60 ms cpu time,     7 activations
+task 513: fim
+PPOS: task 513 ((null)) exit code 513, 35634 ms elapsed time,    69 ms cpu time,     7 activations
+task  81: fim
+PPOS: task 81 ((null)) exit code 81, 36367 ms elapsed time,    70 ms cpu time,     8 activations
+task 150: fim
+PPOS: task 150 ((null)) exit code 150, 37043 ms elapsed time,    76 ms cpu time,     8 activations
+task 438: fim
+PPOS: task 438 ((null)) exit code 438, 39858 ms elapsed time,    77 ms cpu time,     8 activations
+task 503: fim
+PPOS: task 503 ((null)) exit code 503, 40487 ms elapsed time,    79 ms cpu time,     8 activations
+task  76: fim
+PPOS: task 76 ((null)) exit code 76, 41277 ms elapsed time,    88 ms cpu time,     9 activations
+task 126: fim
+PPOS: task 126 ((null)) exit code 126, 41737 ms elapsed time,    80 ms cpu time,     9 activations
+task 129: fim
+PPOS: task 129 ((null)) exit code 129, 41758 ms elapsed time,    81 ms cpu time,     9 activations
+task 133: fim
+PPOS: task 133 ((null)) exit code 133, 41789 ms elapsed time,    81 ms cpu time,     9 activations
+task 143: fim
+PPOS: task 143 ((null)) exit code 143, 41879 ms elapsed time,    80 ms cpu time,     9 activations
+task 181: fim
+PPOS: task 181 ((null)) exit code 181, 42232 ms elapsed time,    84 ms cpu time,     9 activations
+task 251: fim
+PPOS: task 251 ((null)) exit code 251, 42893 ms elapsed time,    81 ms cpu time,     9 activations
+task 392: fim
+PPOS: task 392 ((null)) exit code 392, 44272 ms elapsed time,    80 ms cpu time,     9 activations
+task 402: fim
+PPOS: task 402 ((null)) exit code 402, 44368 ms elapsed time,    86 ms cpu time,     9 activations
+task  91: fim
+PPOS: task 91 ((null)) exit code 91, 46240 ms elapsed time,    90 ms cpu time,    10 activations
+task 101: fim
+PPOS: task 101 ((null)) exit code 101, 46334 ms elapsed time,    94 ms cpu time,    10 activations
+task 146: fim
+PPOS: task 146 ((null)) exit code 146, 46733 ms elapsed time,    99 ms cpu time,    10 activations
+task 148: fim
+PPOS: task 148 ((null)) exit code 148, 46749 ms elapsed time,    96 ms cpu time,    10 activations
+task 157: fim
+PPOS: task 157 ((null)) exit code 157, 46821 ms elapsed time,    92 ms cpu time,    10 activations
+task 165: fim
+PPOS: task 165 ((null)) exit code 165, 46883 ms elapsed time,    93 ms cpu time,    10 activations
+task 188: fim
+PPOS: task 188 ((null)) exit code 188, 47098 ms elapsed time,    95 ms cpu time,    10 activations
+task 220: fim
+PPOS: task 220 ((null)) exit code 220, 47400 ms elapsed time,    92 ms cpu time,    10 activations
+task 266: fim
+PPOS: task 266 ((null)) exit code 266, 47825 ms elapsed time,    95 ms cpu time,    10 activations
+task 366: fim
+PPOS: task 366 ((null)) exit code 366, 48803 ms elapsed time,    99 ms cpu time,    10 activations
+task 432: fim
+PPOS: task 432 ((null)) exit code 432, 49433 ms elapsed time,    90 ms cpu time,    10 activations
+task 501: fim
+PPOS: task 501 ((null)) exit code 501, 50083 ms elapsed time,    90 ms cpu time,    10 activations
+task  21: fim
+PPOS: task 21 ((null)) exit code 21, 50365 ms elapsed time,   100 ms cpu time,    11 activations
+task  36: fim
+PPOS: task 36 ((null)) exit code 36, 50477 ms elapsed time,   102 ms cpu time,    11 activations
+task  60: fim
+PPOS: task 60 ((null)) exit code 60, 50710 ms elapsed time,   103 ms cpu time,    11 activations
+task  85: fim
+PPOS: task 85 ((null)) exit code 85, 50914 ms elapsed time,   104 ms cpu time,    11 activations
+task 116: fim
+PPOS: task 116 ((null)) exit code 116, 51196 ms elapsed time,   102 ms cpu time,    11 activations
+task 119: fim
+PPOS: task 119 ((null)) exit code 119, 51221 ms elapsed time,   105 ms cpu time,    11 activations
+task 359: fim
+PPOS: task 359 ((null)) exit code 359, 53406 ms elapsed time,   107 ms cpu time,    11 activations
+task 395: fim
+PPOS: task 395 ((null)) exit code 395, 53739 ms elapsed time,   103 ms cpu time,    11 activations
+task 417: fim
+PPOS: task 417 ((null)) exit code 417, 53943 ms elapsed time,   104 ms cpu time,    11 activations
+task 154: fim
+PPOS: task 154 ((null)) exit code 154, 56120 ms elapsed time,   115 ms cpu time,    12 activations
+task 260: fim
+PPOS: task 260 ((null)) exit code 260, 57076 ms elapsed time,   117 ms cpu time,    12 activations
+task 286: fim
+PPOS: task 286 ((null)) exit code 286, 57318 ms elapsed time,   112 ms cpu time,    12 activations
+task 304: fim
+PPOS: task 304 ((null)) exit code 304, 57490 ms elapsed time,   112 ms cpu time,    12 activations
+task 317: fim
+PPOS: task 317 ((null)) exit code 317, 57594 ms elapsed time,   114 ms cpu time,    12 activations
+task 361: fim
+PPOS: task 361 ((null)) exit code 361, 58020 ms elapsed time,   117 ms cpu time,    12 activations
+task 423: fim
+PPOS: task 423 ((null)) exit code 423, 58581 ms elapsed time,   111 ms cpu time,    12 activations
+task 448: fim
+PPOS: task 448 ((null)) exit code 448, 58792 ms elapsed time,   111 ms cpu time,    12 activations
+task 484: fim
+PPOS: task 484 ((null)) exit code 484, 59133 ms elapsed time,   111 ms cpu time,    12 activations
+task 498: fim
+PPOS: task 498 ((null)) exit code 498, 59272 ms elapsed time,   119 ms cpu time,    12 activations
+task  10: fim
+PPOS: task 10 ((null)) exit code 10, 59475 ms elapsed time,   121 ms cpu time,    13 activations
+task  13: fim
+PPOS: task 13 ((null)) exit code 13, 59495 ms elapsed time,   120 ms cpu time,    13 activations
+task 112: fim
+PPOS: task 112 ((null)) exit code 112, 60342 ms elapsed time,   127 ms cpu time,    13 activations
+task 142: fim
+PPOS: task 142 ((null)) exit code 142, 60579 ms elapsed time,   127 ms cpu time,    13 activations
+task 145: fim
+PPOS: task 145 ((null)) exit code 145, 60589 ms elapsed time,   120 ms cpu time,    13 activations
+task 170: fim
+PPOS: task 170 ((null)) exit code 170, 60759 ms elapsed time,   121 ms cpu time,    13 activations
+task 183: fim
+PPOS: task 183 ((null)) exit code 183, 60870 ms elapsed time,   121 ms cpu time,    13 activations
+task 270: fim
+PPOS: task 270 ((null)) exit code 270, 61650 ms elapsed time,   120 ms cpu time,    13 activations
+task 311: fim
+PPOS: task 311 ((null)) exit code 311, 62021 ms elapsed time,   121 ms cpu time,    13 activations
+task 316: fim
+PPOS: task 316 ((null)) exit code 316, 62055 ms elapsed time,   124 ms cpu time,    13 activations
+task 327: fim
+PPOS: task 327 ((null)) exit code 327, 62146 ms elapsed time,   121 ms cpu time,    13 activations
+task 376: fim
+PPOS: task 376 ((null)) exit code 376, 62596 ms elapsed time,   121 ms cpu time,    13 activations
+task 386: fim
+PPOS: task 386 ((null)) exit code 386, 62695 ms elapsed time,   129 ms cpu time,    13 activations
+task 406: fim
+PPOS: task 406 ((null)) exit code 406, 62863 ms elapsed time,   128 ms cpu time,    13 activations
+task 468: fim
+PPOS: task 468 ((null)) exit code 468, 63406 ms elapsed time,   123 ms cpu time,    13 activations
+task 491: fim
+PPOS: task 491 ((null)) exit code 491, 63625 ms elapsed time,   128 ms cpu time,    13 activations
+task  72: fim
+PPOS: task 72 ((null)) exit code 72, 64418 ms elapsed time,   131 ms cpu time,    14 activations
+task 124: fim
+PPOS: task 124 ((null)) exit code 124, 64819 ms elapsed time,   131 ms cpu time,    14 activations
+task 134: fim
+PPOS: task 134 ((null)) exit code 134, 64880 ms elapsed time,   131 ms cpu time,    14 activations
+task 173: fim
+PPOS: task 173 ((null)) exit code 173, 65153 ms elapsed time,   133 ms cpu time,    14 activations
+task 257: fim
+PPOS: task 257 ((null)) exit code 257, 65910 ms elapsed time,   137 ms cpu time,    14 activations
+task 322: fim
+PPOS: task 322 ((null)) exit code 322, 66453 ms elapsed time,   133 ms cpu time,    14 activations
+task 391: fim
+PPOS: task 391 ((null)) exit code 391, 67072 ms elapsed time,   130 ms cpu time,    14 activations
+task 408: fim
+PPOS: task 408 ((null)) exit code 408, 67201 ms elapsed time,   139 ms cpu time,    14 activations
+task  17: fim
+PPOS: task 17 ((null)) exit code 17, 68239 ms elapsed time,   146 ms cpu time,    15 activations
+task 115: fim
+PPOS: task 115 ((null)) exit code 115, 69064 ms elapsed time,   144 ms cpu time,    15 activations
+task 169: fim
+PPOS: task 169 ((null)) exit code 169, 69418 ms elapsed time,   145 ms cpu time,    15 activations
+task 200: fim
+PPOS: task 200 ((null)) exit code 200, 69665 ms elapsed time,   147 ms cpu time,    15 activations
+task 228: fim
+PPOS: task 228 ((null)) exit code 228, 69928 ms elapsed time,   143 ms cpu time,    15 activations
+task 236: fim
+PPOS: task 236 ((null)) exit code 236, 69987 ms elapsed time,   148 ms cpu time,    15 activations
+task 285: fim
+PPOS: task 285 ((null)) exit code 285, 70419 ms elapsed time,   142 ms cpu time,    15 activations
+task 339: fim
+PPOS: task 339 ((null)) exit code 339, 70863 ms elapsed time,   145 ms cpu time,    15 activations
+task 401: fim
+PPOS: task 401 ((null)) exit code 401, 71393 ms elapsed time,   140 ms cpu time,    15 activations
+task 436: fim
+PPOS: task 436 ((null)) exit code 436, 71680 ms elapsed time,   147 ms cpu time,    15 activations
+task 471: fim
+PPOS: task 471 ((null)) exit code 471, 71977 ms elapsed time,   147 ms cpu time,    15 activations
+task  18: fim
+PPOS: task 18 ((null)) exit code 18, 72460 ms elapsed time,   151 ms cpu time,    16 activations
+task  35: fim
+PPOS: task 35 ((null)) exit code 35, 72583 ms elapsed time,   153 ms cpu time,    16 activations
+task  63: fim
+PPOS: task 63 ((null)) exit code 63, 72836 ms elapsed time,   153 ms cpu time,    16 activations
+task  64: fim
+PPOS: task 64 ((null)) exit code 64, 72844 ms elapsed time,   158 ms cpu time,    16 activations
+task  69: fim
+PPOS: task 69 ((null)) exit code 69, 72890 ms elapsed time,   156 ms cpu time,    16 activations
+task 158: fim
+PPOS: task 158 ((null)) exit code 158, 73511 ms elapsed time,   151 ms cpu time,    16 activations
+task 166: fim
+PPOS: task 166 ((null)) exit code 166, 73560 ms elapsed time,   150 ms cpu time,    16 activations
+task 193: fim
+PPOS: task 193 ((null)) exit code 193, 73761 ms elapsed time,   151 ms cpu time,    16 activations
+task 195: fim
+PPOS: task 195 ((null)) exit code 195, 73773 ms elapsed time,   152 ms cpu time,    16 activations
+task 219: fim
+PPOS: task 219 ((null)) exit code 219, 73988 ms elapsed time,   155 ms cpu time,    16 activations
+task 252: fim
+PPOS: task 252 ((null)) exit code 252, 74249 ms elapsed time,   151 ms cpu time,    16 activations
+task 297: fim
+PPOS: task 297 ((null)) exit code 297, 74636 ms elapsed time,   157 ms cpu time,    16 activations
+task 356: fim
+PPOS: task 356 ((null)) exit code 356, 75126 ms elapsed time,   151 ms cpu time,    16 activations
+task 441: fim
+PPOS: task 441 ((null)) exit code 441, 75800 ms elapsed time,   154 ms cpu time,    16 activations
+task  57: fim
+PPOS: task 57 ((null)) exit code 57, 76857 ms elapsed time,   165 ms cpu time,    17 activations
+task 140: fim
+PPOS: task 140 ((null)) exit code 140, 77457 ms elapsed time,   160 ms cpu time,    17 activations
+task 184: fim
+PPOS: task 184 ((null)) exit code 184, 77720 ms elapsed time,   164 ms cpu time,    17 activations
+task 244: fim
+PPOS: task 244 ((null)) exit code 244, 78206 ms elapsed time,   166 ms cpu time,    17 activations
+task 374: fim
+PPOS: task 374 ((null)) exit code 374, 79276 ms elapsed time,   161 ms cpu time,    17 activations
+task 485: fim
+PPOS: task 485 ((null)) exit code 485, 80166 ms elapsed time,   160 ms cpu time,    17 activations
+task 494: fim
+PPOS: task 494 ((null)) exit code 494, 80243 ms elapsed time,   167 ms cpu time,    17 activations
+task  20: fim
+PPOS: task 20 ((null)) exit code 20, 80527 ms elapsed time,   172 ms cpu time,    18 activations
+task  25: fim
+PPOS: task 25 ((null)) exit code 25, 80551 ms elapsed time,   174 ms cpu time,    18 activations
+task  47: fim
+PPOS: task 47 ((null)) exit code 47, 80727 ms elapsed time,   176 ms cpu time,    18 activations
+task  83: fim
+PPOS: task 83 ((null)) exit code 83, 80986 ms elapsed time,   179 ms cpu time,    18 activations
+task 309: fim
+PPOS: task 309 ((null)) exit code 309, 82689 ms elapsed time,   174 ms cpu time,    18 activations
+task 353: fim
+PPOS: task 353 ((null)) exit code 353, 83055 ms elapsed time,   177 ms cpu time,    18 activations
+task 422: fim
+PPOS: task 422 ((null)) exit code 422, 83588 ms elapsed time,   173 ms cpu time,    18 activations
+task 428: fim
+PPOS: task 428 ((null)) exit code 428, 83635 ms elapsed time,   177 ms cpu time,    18 activations
+task 464: fim
+PPOS: task 464 ((null)) exit code 464, 83927 ms elapsed time,   172 ms cpu time,    18 activations
+task 492: fim
+PPOS: task 492 ((null)) exit code 492, 84145 ms elapsed time,   178 ms cpu time,    18 activations
+task   6: fim
+PPOS: task 6 ((null)) exit code 6, 84352 ms elapsed time,   185 ms cpu time,    19 activations
+task  50: fim
+PPOS: task 50 ((null)) exit code 50, 84643 ms elapsed time,   181 ms cpu time,    19 activations
+task  70: fim
+PPOS: task 70 ((null)) exit code 70, 84791 ms elapsed time,   188 ms cpu time,    19 activations
+task 161: fim
+PPOS: task 161 ((null)) exit code 161, 85407 ms elapsed time,   186 ms cpu time,    19 activations
+task 293: fim
+PPOS: task 293 ((null)) exit code 293, 86427 ms elapsed time,   181 ms cpu time,    19 activations
+task 497: fim
+PPOS: task 497 ((null)) exit code 497, 88013 ms elapsed time,   187 ms cpu time,    19 activations
+task   9: fim
+PPOS: task 9 ((null)) exit code 9, 88200 ms elapsed time,   195 ms cpu time,    20 activations
+task  26: fim
+PPOS: task 26 ((null)) exit code 26, 88278 ms elapsed time,   198 ms cpu time,    20 activations
+task  27: fim
+PPOS: task 27 ((null)) exit code 27, 88283 ms elapsed time,   195 ms cpu time,    20 activations
+task  40: fim
+PPOS: task 40 ((null)) exit code 40, 88363 ms elapsed time,   190 ms cpu time,    20 activations
+task 108: fim
+PPOS: task 108 ((null)) exit code 108, 88863 ms elapsed time,   190 ms cpu time,    20 activations
+task 174: fim
+PPOS: task 174 ((null)) exit code 174, 89248 ms elapsed time,   196 ms cpu time,    20 activations
+task 182: fim
+PPOS: task 182 ((null)) exit code 182, 89312 ms elapsed time,   194 ms cpu time,    20 activations
+task 248: fim
+PPOS: task 248 ((null)) exit code 248, 89824 ms elapsed time,   192 ms cpu time,    20 activations
+task 336: fim
+PPOS: task 336 ((null)) exit code 336, 90511 ms elapsed time,   198 ms cpu time,    20 activations
+task 504: fim
+PPOS: task 504 ((null)) exit code 504, 91792 ms elapsed time,   191 ms cpu time,    20 activations
+task  38: fim
+PPOS: task 38 ((null)) exit code 38, 92070 ms elapsed time,   206 ms cpu time,    21 activations
+task  73: fim
+PPOS: task 73 ((null)) exit code 73, 92316 ms elapsed time,   206 ms cpu time,    21 activations
+task 138: fim
+PPOS: task 138 ((null)) exit code 138, 92770 ms elapsed time,   204 ms cpu time,    21 activations
+task 144: fim
+PPOS: task 144 ((null)) exit code 144, 92798 ms elapsed time,   207 ms cpu time,    21 activations
+task 190: fim
+PPOS: task 190 ((null)) exit code 190, 93050 ms elapsed time,   203 ms cpu time,    21 activations
+task 288: fim
+PPOS: task 288 ((null)) exit code 288, 93821 ms elapsed time,   201 ms cpu time,    21 activations
+task 306: fim
+PPOS: task 306 ((null)) exit code 306, 93970 ms elapsed time,   209 ms cpu time,    21 activations
+task 348: fim
+PPOS: task 348 ((null)) exit code 348, 94285 ms elapsed time,   206 ms cpu time,    21 activations
+task 354: fim
+PPOS: task 354 ((null)) exit code 354, 94327 ms elapsed time,   202 ms cpu time,    21 activations
+task 421: fim
+PPOS: task 421 ((null)) exit code 421, 94841 ms elapsed time,   204 ms cpu time,    21 activations
+task 452: fim
+PPOS: task 452 ((null)) exit code 452, 95056 ms elapsed time,   205 ms cpu time,    21 activations
+task 490: fim
+PPOS: task 490 ((null)) exit code 490, 95372 ms elapsed time,   206 ms cpu time,    21 activations
+task 105: fim
+PPOS: task 105 ((null)) exit code 105, 96181 ms elapsed time,   217 ms cpu time,    22 activations
+task 120: fim
+PPOS: task 120 ((null)) exit code 120, 96278 ms elapsed time,   217 ms cpu time,    22 activations
+task 261: fim
+PPOS: task 261 ((null)) exit code 261, 97197 ms elapsed time,   210 ms cpu time,    22 activations
+task 488: fim
+PPOS: task 488 ((null)) exit code 488, 98924 ms elapsed time,   218 ms cpu time,    22 activations
+task  45: fim
+PPOS: task 45 ((null)) exit code 45, 99324 ms elapsed time,   228 ms cpu time,    23 activations
+task  84: fim
+PPOS: task 84 ((null)) exit code 84, 99563 ms elapsed time,   229 ms cpu time,    23 activations
+task 128: fim
+PPOS: task 128 ((null)) exit code 128, 99866 ms elapsed time,   223 ms cpu time,    23 activations
+task 180: fim
+PPOS: task 180 ((null)) exit code 180, 100149 ms elapsed time,   224 ms cpu time,    23 activations
+task 194: fim
+PPOS: task 194 ((null)) exit code 194, 100213 ms elapsed time,   224 ms cpu time,    23 activations
+task 225: fim
+PPOS: task 225 ((null)) exit code 225, 100465 ms elapsed time,   222 ms cpu time,    23 activations
+task 249: fim
+PPOS: task 249 ((null)) exit code 249, 100639 ms elapsed time,   224 ms cpu time,    23 activations
+task 289: fim
+PPOS: task 289 ((null)) exit code 289, 100929 ms elapsed time,   220 ms cpu time,    23 activations
+task 305: fim
+PPOS: task 305 ((null)) exit code 305, 101052 ms elapsed time,   223 ms cpu time,    23 activations
+task 319: fim
+PPOS: task 319 ((null)) exit code 319, 101116 ms elapsed time,   224 ms cpu time,    23 activations
+task 445: fim
+PPOS: task 445 ((null)) exit code 445, 102073 ms elapsed time,   228 ms cpu time,    23 activations
+task 447: fim
+PPOS: task 447 ((null)) exit code 447, 102077 ms elapsed time,   224 ms cpu time,    23 activations
+task 469: fim
+PPOS: task 469 ((null)) exit code 469, 102241 ms elapsed time,   224 ms cpu time,    23 activations
+task  19: fim
+PPOS: task 19 ((null)) exit code 19, 102643 ms elapsed time,   230 ms cpu time,    24 activations
+task 136: fim
+PPOS: task 136 ((null)) exit code 136, 103344 ms elapsed time,   231 ms cpu time,    24 activations
+task 186: fim
+PPOS: task 186 ((null)) exit code 186, 103583 ms elapsed time,   230 ms cpu time,    24 activations
+task 206: fim
+PPOS: task 206 ((null)) exit code 206, 103712 ms elapsed time,   239 ms cpu time,    24 activations
+task 264: fim
+PPOS: task 264 ((null)) exit code 264, 104139 ms elapsed time,   237 ms cpu time,    24 activations
+task 375: fim
+PPOS: task 375 ((null)) exit code 375, 104943 ms elapsed time,   235 ms cpu time,    24 activations
+task 427: fim
+PPOS: task 427 ((null)) exit code 427, 105330 ms elapsed time,   237 ms cpu time,    24 activations
+task 430: fim
+PPOS: task 430 ((null)) exit code 430, 105344 ms elapsed time,   234 ms cpu time,    24 activations
+task 434: fim
+PPOS: task 434 ((null)) exit code 434, 105369 ms elapsed time,   235 ms cpu time,    24 activations
+task  32: fim
+PPOS: task 32 ((null)) exit code 32, 106058 ms elapsed time,   247 ms cpu time,    25 activations
+task  65: fim
+PPOS: task 65 ((null)) exit code 65, 106262 ms elapsed time,   244 ms cpu time,    25 activations
+task 238: fim
+PPOS: task 238 ((null)) exit code 238, 107299 ms elapsed time,   248 ms cpu time,    25 activations
+task 338: fim
+PPOS: task 338 ((null)) exit code 338, 107993 ms elapsed time,   245 ms cpu time,    25 activations
+task 403: fim
+PPOS: task 403 ((null)) exit code 403, 108468 ms elapsed time,   245 ms cpu time,    25 activations
+task 461: fim
+PPOS: task 461 ((null)) exit code 461, 108853 ms elapsed time,   245 ms cpu time,    25 activations
+task 506: fim
+PPOS: task 506 ((null)) exit code 506, 109123 ms elapsed time,   241 ms cpu time,    25 activations
+task  96: fim
+PPOS: task 96 ((null)) exit code 96, 109717 ms elapsed time,   251 ms cpu time,    26 activations
+task 125: fim
+PPOS: task 125 ((null)) exit code 125, 109901 ms elapsed time,   254 ms cpu time,    26 activations
+task 217: fim
+PPOS: task 217 ((null)) exit code 217, 110413 ms elapsed time,   253 ms cpu time,    26 activations
+task 259: fim
+PPOS: task 259 ((null)) exit code 259, 110692 ms elapsed time,   259 ms cpu time,    26 activations
+task 302: fim
+PPOS: task 302 ((null)) exit code 302, 111006 ms elapsed time,   254 ms cpu time,    26 activations
+task 307: fim
+PPOS: task 307 ((null)) exit code 307, 111022 ms elapsed time,   256 ms cpu time,    26 activations
+task 335: fim
+PPOS: task 335 ((null)) exit code 335, 111204 ms elapsed time,   253 ms cpu time,    26 activations
+task 357: fim
+PPOS: task 357 ((null)) exit code 357, 111353 ms elapsed time,   259 ms cpu time,    26 activations
+task 365: fim
+PPOS: task 365 ((null)) exit code 365, 111409 ms elapsed time,   256 ms cpu time,    26 activations
+task 389: fim
+PPOS: task 389 ((null)) exit code 389, 111591 ms elapsed time,   252 ms cpu time,    26 activations
+task 444: fim
+PPOS: task 444 ((null)) exit code 444, 111935 ms elapsed time,   254 ms cpu time,    26 activations
+task 458: fim
+PPOS: task 458 ((null)) exit code 458, 112021 ms elapsed time,   256 ms cpu time,    26 activations
+task  15: fim
+PPOS: task 15 ((null)) exit code 15, 112462 ms elapsed time,   269 ms cpu time,    27 activations
+task  55: fim
+PPOS: task 55 ((null)) exit code 55, 112664 ms elapsed time,   262 ms cpu time,    27 activations
+task  61: fim
+PPOS: task 61 ((null)) exit code 61, 112703 ms elapsed time,   269 ms cpu time,    27 activations
+task  68: fim
+PPOS: task 68 ((null)) exit code 68, 112741 ms elapsed time,   268 ms cpu time,    27 activations
+task  90: fim
+PPOS: task 90 ((null)) exit code 90, 112849 ms elapsed time,   268 ms cpu time,    27 activations
+task 191: fim
+PPOS: task 191 ((null)) exit code 191, 113383 ms elapsed time,   265 ms cpu time,    27 activations
+task 367: fim
+PPOS: task 367 ((null)) exit code 367, 114532 ms elapsed time,   260 ms cpu time,    27 activations
+task 449: fim
+PPOS: task 449 ((null)) exit code 449, 115045 ms elapsed time,   263 ms cpu time,    27 activations
+task 163: fim
+PPOS: task 163 ((null)) exit code 163, 116299 ms elapsed time,   272 ms cpu time,    28 activations
+task 192: fim
+PPOS: task 192 ((null)) exit code 192, 116435 ms elapsed time,   277 ms cpu time,    28 activations
+task 211: fim
+PPOS: task 211 ((null)) exit code 211, 116557 ms elapsed time,   272 ms cpu time,    28 activations
+task 242: fim
+PPOS: task 242 ((null)) exit code 242, 116767 ms elapsed time,   270 ms cpu time,    28 activations
+task 283: fim
+PPOS: task 283 ((null)) exit code 283, 117050 ms elapsed time,   273 ms cpu time,    28 activations
+task 400: fim
+PPOS: task 400 ((null)) exit code 400, 117789 ms elapsed time,   270 ms cpu time,    28 activations
+task 419: fim
+PPOS: task 419 ((null)) exit code 419, 117915 ms elapsed time,   276 ms cpu time,    28 activations
+task 451: fim
+PPOS: task 451 ((null)) exit code 451, 118057 ms elapsed time,   272 ms cpu time,    28 activations
+task 465: fim
+PPOS: task 465 ((null)) exit code 465, 118150 ms elapsed time,   273 ms cpu time,    28 activations
+task 117: fim
+PPOS: task 117 ((null)) exit code 117, 119077 ms elapsed time,   285 ms cpu time,    29 activations
+task 153: fim
+PPOS: task 153 ((null)) exit code 153, 119234 ms elapsed time,   287 ms cpu time,    29 activations
+task 208: fim
+PPOS: task 208 ((null)) exit code 208, 119495 ms elapsed time,   282 ms cpu time,    29 activations
+task 275: fim
+PPOS: task 275 ((null)) exit code 275, 119931 ms elapsed time,   286 ms cpu time,    29 activations
+task 287: fim
+PPOS: task 287 ((null)) exit code 287, 120020 ms elapsed time,   288 ms cpu time,    29 activations
+task 291: fim
+PPOS: task 291 ((null)) exit code 291, 120031 ms elapsed time,   281 ms cpu time,    29 activations
+task 321: fim
+PPOS: task 321 ((null)) exit code 321, 120188 ms elapsed time,   287 ms cpu time,    29 activations
+task 378: fim
+PPOS: task 378 ((null)) exit code 378, 120564 ms elapsed time,   287 ms cpu time,    29 activations
+task 384: fim
+PPOS: task 384 ((null)) exit code 384, 120615 ms elapsed time,   281 ms cpu time,    29 activations
+task 413: fim
+PPOS: task 413 ((null)) exit code 413, 120788 ms elapsed time,   283 ms cpu time,    29 activations
+task 460: fim
+PPOS: task 460 ((null)) exit code 460, 121031 ms elapsed time,   283 ms cpu time,    29 activations
+task 479: fim
+PPOS: task 479 ((null)) exit code 479, 121141 ms elapsed time,   280 ms cpu time,    29 activations
+task 487: fim
+PPOS: task 487 ((null)) exit code 487, 121191 ms elapsed time,   280 ms cpu time,    29 activations
+task  56: fim
+PPOS: task 56 ((null)) exit code 56, 121617 ms elapsed time,   294 ms cpu time,    30 activations
+task 107: fim
+PPOS: task 107 ((null)) exit code 107, 121889 ms elapsed time,   292 ms cpu time,    30 activations
+task 137: fim
+PPOS: task 137 ((null)) exit code 137, 122020 ms elapsed time,   291 ms cpu time,    30 activations
+task 201: fim
+PPOS: task 201 ((null)) exit code 201, 122280 ms elapsed time,   291 ms cpu time,    30 activations
+task 276: fim
+PPOS: task 276 ((null)) exit code 276, 122762 ms elapsed time,   292 ms cpu time,    30 activations
+task 459: fim
+PPOS: task 459 ((null)) exit code 459, 123815 ms elapsed time,   294 ms cpu time,    30 activations
+task 475: fim
+PPOS: task 475 ((null)) exit code 475, 123888 ms elapsed time,   293 ms cpu time,    30 activations
+task  53: fim
+PPOS: task 53 ((null)) exit code 53, 124370 ms elapsed time,   300 ms cpu time,    31 activations
+task 152: fim
+PPOS: task 152 ((null)) exit code 152, 124831 ms elapsed time,   301 ms cpu time,    31 activations
+task 215: fim
+PPOS: task 215 ((null)) exit code 215, 125136 ms elapsed time,   306 ms cpu time,    31 activations
+task 254: fim
+PPOS: task 254 ((null)) exit code 254, 125369 ms elapsed time,   303 ms cpu time,    31 activations
+task 278: fim
+PPOS: task 278 ((null)) exit code 278, 125516 ms elapsed time,   307 ms cpu time,    31 activations
+task 294: fim
+PPOS: task 294 ((null)) exit code 294, 125588 ms elapsed time,   302 ms cpu time,    31 activations
+task 318: fim
+PPOS: task 318 ((null)) exit code 318, 125703 ms elapsed time,   305 ms cpu time,    31 activations
+task 330: fim
+PPOS: task 330 ((null)) exit code 330, 125775 ms elapsed time,   302 ms cpu time,    31 activations
+task 334: fim
+PPOS: task 334 ((null)) exit code 334, 125814 ms elapsed time,   309 ms cpu time,    31 activations
+task 369: fim
+PPOS: task 369 ((null)) exit code 369, 126013 ms elapsed time,   300 ms cpu time,    31 activations
+task 476: fim
+PPOS: task 476 ((null)) exit code 476, 126592 ms elapsed time,   309 ms cpu time,    31 activations
+task 508: fim
+PPOS: task 508 ((null)) exit code 508, 126756 ms elapsed time,   305 ms cpu time,    31 activations
+task  28: fim
+PPOS: task 28 ((null)) exit code 28, 126913 ms elapsed time,   314 ms cpu time,    32 activations
+task  93: fim
+PPOS: task 93 ((null)) exit code 93, 127229 ms elapsed time,   316 ms cpu time,    32 activations
+task 104: fim
+PPOS: task 104 ((null)) exit code 104, 127309 ms elapsed time,   310 ms cpu time,    32 activations
+task 229: fim
+PPOS: task 229 ((null)) exit code 229, 127883 ms elapsed time,   315 ms cpu time,    32 activations
+task 237: fim
+PPOS: task 237 ((null)) exit code 237, 127930 ms elapsed time,   316 ms cpu time,    32 activations
+task   4: fim
+PPOS: task 4 ((null)) exit code 4, 129440 ms elapsed time,   329 ms cpu time,    33 activations
+task 212: fim
+PPOS: task 212 ((null)) exit code 212, 130374 ms elapsed time,   325 ms cpu time,    33 activations
+task 232: fim
+PPOS: task 232 ((null)) exit code 232, 130503 ms elapsed time,   329 ms cpu time,    33 activations
+task 325: fim
+PPOS: task 325 ((null)) exit code 325, 130959 ms elapsed time,   326 ms cpu time,    33 activations
+task 381: fim
+PPOS: task 381 ((null)) exit code 381, 131295 ms elapsed time,   327 ms cpu time,    33 activations
+task 382: fim
+PPOS: task 382 ((null)) exit code 382, 131295 ms elapsed time,   320 ms cpu time,    33 activations
+task  58: fim
+PPOS: task 58 ((null)) exit code 58, 132234 ms elapsed time,   337 ms cpu time,    34 activations
+task  59: fim
+PPOS: task 59 ((null)) exit code 59, 132235 ms elapsed time,   331 ms cpu time,    34 activations
+task 130: fim
+PPOS: task 130 ((null)) exit code 130, 132559 ms elapsed time,   334 ms cpu time,    34 activations
+task 207: fim
+PPOS: task 207 ((null)) exit code 207, 132881 ms elapsed time,   333 ms cpu time,    34 activations
+task 240: fim
+PPOS: task 240 ((null)) exit code 240, 133047 ms elapsed time,   336 ms cpu time,    34 activations
+task 247: fim
+PPOS: task 247 ((null)) exit code 247, 133096 ms elapsed time,   339 ms cpu time,    34 activations
+task 296: fim
+PPOS: task 296 ((null)) exit code 296, 133337 ms elapsed time,   331 ms cpu time,    34 activations
+task 312: fim
+PPOS: task 312 ((null)) exit code 312, 133397 ms elapsed time,   330 ms cpu time,    34 activations
+task 314: fim
+PPOS: task 314 ((null)) exit code 314, 133410 ms elapsed time,   333 ms cpu time,    34 activations
+task 332: fim
+PPOS: task 332 ((null)) exit code 332, 133484 ms elapsed time,   334 ms cpu time,    34 activations
+task 390: fim
+PPOS: task 390 ((null)) exit code 390, 133803 ms elapsed time,   330 ms cpu time,    34 activations
+task 412: fim
+PPOS: task 412 ((null)) exit code 412, 133923 ms elapsed time,   330 ms cpu time,    34 activations
+task 499: fim
+PPOS: task 499 ((null)) exit code 499, 134334 ms elapsed time,   331 ms cpu time,    34 activations
+task  11: fim
+PPOS: task 11 ((null)) exit code 11, 134475 ms elapsed time,   349 ms cpu time,    35 activations
+task  48: fim
+PPOS: task 48 ((null)) exit code 48, 134619 ms elapsed time,   344 ms cpu time,    35 activations
+task 111: fim
+PPOS: task 111 ((null)) exit code 111, 134917 ms elapsed time,   348 ms cpu time,    35 activations
+task 230: fim
+PPOS: task 230 ((null)) exit code 230, 135416 ms elapsed time,   340 ms cpu time,    35 activations
+task 267: fim
+PPOS: task 267 ((null)) exit code 267, 135574 ms elapsed time,   348 ms cpu time,    35 activations
+task 273: fim
+PPOS: task 273 ((null)) exit code 273, 135622 ms elapsed time,   348 ms cpu time,    35 activations
+task 368: fim
+PPOS: task 368 ((null)) exit code 368, 136063 ms elapsed time,   342 ms cpu time,    35 activations
+task 405: fim
+PPOS: task 405 ((null)) exit code 405, 136249 ms elapsed time,   346 ms cpu time,    35 activations
+task 478: fim
+PPOS: task 478 ((null)) exit code 478, 136602 ms elapsed time,   343 ms cpu time,    35 activations
+task 123: fim
+PPOS: task 123 ((null)) exit code 123, 137294 ms elapsed time,   350 ms cpu time,    36 activations
+task 197: fim
+PPOS: task 197 ((null)) exit code 197, 137558 ms elapsed time,   355 ms cpu time,    36 activations
+task 198: fim
+PPOS: task 198 ((null)) exit code 198, 137561 ms elapsed time,   353 ms cpu time,    36 activations
+task 245: fim
+PPOS: task 245 ((null)) exit code 245, 137782 ms elapsed time,   351 ms cpu time,    36 activations
+task 340: fim
+PPOS: task 340 ((null)) exit code 340, 138176 ms elapsed time,   355 ms cpu time,    36 activations
+task 372: fim
+PPOS: task 372 ((null)) exit code 372, 138375 ms elapsed time,   359 ms cpu time,    36 activations
+task 396: fim
+PPOS: task 396 ((null)) exit code 396, 138479 ms elapsed time,   354 ms cpu time,    36 activations
+task 344: fim
+PPOS: task 344 ((null)) exit code 344, 140464 ms elapsed time,   365 ms cpu time,    37 activations
+task 440: fim
+PPOS: task 440 ((null)) exit code 440, 140934 ms elapsed time,   360 ms cpu time,    37 activations
+task  51: fim
+PPOS: task 51 ((null)) exit code 51, 141470 ms elapsed time,   374 ms cpu time,    38 activations
+task  94: fim
+PPOS: task 94 ((null)) exit code 94, 141630 ms elapsed time,   370 ms cpu time,    38 activations
+task  99: fim
+PPOS: task 99 ((null)) exit code 99, 141668 ms elapsed time,   378 ms cpu time,    38 activations
+task 151: fim
+PPOS: task 151 ((null)) exit code 151, 141848 ms elapsed time,   370 ms cpu time,    38 activations
+task 164: fim
+PPOS: task 164 ((null)) exit code 164, 141890 ms elapsed time,   372 ms cpu time,    38 activations
+task 168: fim
+PPOS: task 168 ((null)) exit code 168, 141908 ms elapsed time,   379 ms cpu time,    38 activations
+task 310: fim
+PPOS: task 310 ((null)) exit code 310, 142511 ms elapsed time,   373 ms cpu time,    38 activations
+task 502: fim
+PPOS: task 502 ((null)) exit code 502, 143375 ms elapsed time,   375 ms cpu time,    38 activations
+task  77: fim
+PPOS: task 77 ((null)) exit code 77, 143716 ms elapsed time,   389 ms cpu time,    39 activations
+task 102: fim
+PPOS: task 102 ((null)) exit code 102, 143836 ms elapsed time,   380 ms cpu time,    39 activations
+task 155: fim
+PPOS: task 155 ((null)) exit code 155, 143997 ms elapsed time,   381 ms cpu time,    39 activations
+task 160: fim
+PPOS: task 160 ((null)) exit code 160, 144021 ms elapsed time,   384 ms cpu time,    39 activations
+task 239: fim
+PPOS: task 239 ((null)) exit code 239, 144320 ms elapsed time,   380 ms cpu time,    39 activations
+task 263: fim
+PPOS: task 263 ((null)) exit code 263, 144418 ms elapsed time,   387 ms cpu time,    39 activations
+task  12: fim
+PPOS: task 12 ((null)) exit code 12, 145589 ms elapsed time,   390 ms cpu time,    40 activations
+task  42: fim
+PPOS: task 42 ((null)) exit code 42, 145684 ms elapsed time,   395 ms cpu time,    40 activations
+task  43: fim
+PPOS: task 43 ((null)) exit code 43, 145686 ms elapsed time,   392 ms cpu time,    40 activations
+task  66: fim
+PPOS: task 66 ((null)) exit code 66, 145750 ms elapsed time,   394 ms cpu time,    40 activations
+task 139: fim
+PPOS: task 139 ((null)) exit code 139, 146021 ms elapsed time,   391 ms cpu time,    40 activations
+task 199: fim
+PPOS: task 199 ((null)) exit code 199, 146186 ms elapsed time,   396 ms cpu time,    40 activations
+task 203: fim
+PPOS: task 203 ((null)) exit code 203, 146199 ms elapsed time,   393 ms cpu time,    40 activations
+task 209: fim
+PPOS: task 209 ((null)) exit code 209, 146220 ms elapsed time,   391 ms cpu time,    40 activations
+task 241: fim
+PPOS: task 241 ((null)) exit code 241, 146352 ms elapsed time,   392 ms cpu time,    40 activations
+task 243: fim
+PPOS: task 243 ((null)) exit code 243, 146353 ms elapsed time,   391 ms cpu time,    40 activations
+task 300: fim
+PPOS: task 300 ((null)) exit code 300, 146595 ms elapsed time,   392 ms cpu time,    40 activations
+task 481: fim
+PPOS: task 481 ((null)) exit code 481, 147392 ms elapsed time,   398 ms cpu time,    40 activations
+task 482: fim
+PPOS: task 482 ((null)) exit code 482, 147394 ms elapsed time,   392 ms cpu time,    40 activations
+task 185: fim
+PPOS: task 185 ((null)) exit code 185, 148131 ms elapsed time,   406 ms cpu time,    41 activations
+task 256: fim
+PPOS: task 256 ((null)) exit code 256, 148355 ms elapsed time,   404 ms cpu time,    41 activations
+task 269: fim
+PPOS: task 269 ((null)) exit code 269, 148404 ms elapsed time,   409 ms cpu time,    41 activations
+task 380: fim
+PPOS: task 380 ((null)) exit code 380, 148879 ms elapsed time,   406 ms cpu time,    41 activations
+task 404: fim
+PPOS: task 404 ((null)) exit code 404, 148978 ms elapsed time,   409 ms cpu time,    41 activations
+task   2: fim
+PPOS: task 2 ((null)) exit code 2, 149467 ms elapsed time,   417 ms cpu time,    42 activations
+task  39: fim
+PPOS: task 39 ((null)) exit code 39, 149585 ms elapsed time,   418 ms cpu time,    42 activations
+task  41: fim
+PPOS: task 41 ((null)) exit code 41, 149586 ms elapsed time,   411 ms cpu time,    42 activations
+task 109: fim
+PPOS: task 109 ((null)) exit code 109, 149817 ms elapsed time,   411 ms cpu time,    42 activations
+task 342: fim
+PPOS: task 342 ((null)) exit code 342, 150567 ms elapsed time,   412 ms cpu time,    42 activations
+task 398: fim
+PPOS: task 398 ((null)) exit code 398, 150834 ms elapsed time,   417 ms cpu time,    42 activations
+task 455: fim
+PPOS: task 455 ((null)) exit code 455, 151082 ms elapsed time,   418 ms cpu time,    42 activations
+task 495: fim
+PPOS: task 495 ((null)) exit code 495, 151236 ms elapsed time,   414 ms cpu time,    42 activations
+Waiting for task 3
+task  44: fim
+PPOS: task 44 ((null)) exit code 44, 151434 ms elapsed time,   426 ms cpu time,    43 activations
+task  54: fim
+PPOS: task 54 ((null)) exit code 54, 151470 ms elapsed time,   426 ms cpu time,    43 activations
+task 149: fim
+PPOS: task 149 ((null)) exit code 149, 151766 ms elapsed time,   426 ms cpu time,    43 activations
+task 189: fim
+PPOS: task 189 ((null)) exit code 189, 151875 ms elapsed time,   420 ms cpu time,    43 activations
+task 290: fim
+PPOS: task 290 ((null)) exit code 290, 152209 ms elapsed time,   424 ms cpu time,    43 activations
+task 347: fim
+PPOS: task 347 ((null)) exit code 347, 152412 ms elapsed time,   424 ms cpu time,    43 activations
+task 393: fim
+PPOS: task 393 ((null)) exit code 393, 152605 ms elapsed time,   423 ms cpu time,    43 activations
+task 394: fim
+PPOS: task 394 ((null)) exit code 394, 152606 ms elapsed time,   421 ms cpu time,    43 activations
+task 407: fim
+PPOS: task 407 ((null)) exit code 407, 152631 ms elapsed time,   425 ms cpu time,    43 activations
+task 114: fim
+PPOS: task 114 ((null)) exit code 114, 153430 ms elapsed time,   437 ms cpu time,    44 activations
+task 127: fim
+PPOS: task 127 ((null)) exit code 127, 153452 ms elapsed time,   432 ms cpu time,    44 activations
+task 179: fim
+PPOS: task 179 ((null)) exit code 179, 153591 ms elapsed time,   430 ms cpu time,    44 activations
+task 265: fim
+PPOS: task 265 ((null)) exit code 265, 153827 ms elapsed time,   436 ms cpu time,    44 activations
+task 272: fim
+PPOS: task 272 ((null)) exit code 272, 153849 ms elapsed time,   432 ms cpu time,    44 activations
+task 295: fim
+PPOS: task 295 ((null)) exit code 295, 153929 ms elapsed time,   430 ms cpu time,    44 activations
+task 363: fim
+PPOS: task 363 ((null)) exit code 363, 154193 ms elapsed time,   435 ms cpu time,    44 activations
+task 373: fim
+PPOS: task 373 ((null)) exit code 373, 154232 ms elapsed time,   439 ms cpu time,    44 activations
+task  22: fim
+PPOS: task 22 ((null)) exit code 22, 154821 ms elapsed time,   447 ms cpu time,    45 activations
+task 233: fim
+PPOS: task 233 ((null)) exit code 233, 155425 ms elapsed time,   445 ms cpu time,    45 activations
+task 425: fim
+PPOS: task 425 ((null)) exit code 425, 156048 ms elapsed time,   444 ms cpu time,    45 activations
+task 472: fim
+PPOS: task 472 ((null)) exit code 472, 156228 ms elapsed time,   440 ms cpu time,    45 activations
+task  37: fim
+PPOS: task 37 ((null)) exit code 37, 156482 ms elapsed time,   452 ms cpu time,    46 activations
+task  46: fim
+PPOS: task 46 ((null)) exit code 46, 156483 ms elapsed time,   451 ms cpu time,    46 activations
+task 132: fim
+PPOS: task 132 ((null)) exit code 132, 156738 ms elapsed time,   455 ms cpu time,    46 activations
+task 172: fim
+PPOS: task 172 ((null)) exit code 172, 156808 ms elapsed time,   451 ms cpu time,    46 activations
+task 222: fim
+PPOS: task 222 ((null)) exit code 222, 156954 ms elapsed time,   456 ms cpu time,    46 activations
+task 299: fim
+PPOS: task 299 ((null)) exit code 299, 157179 ms elapsed time,   454 ms cpu time,    46 activations
+task 345: fim
+PPOS: task 345 ((null)) exit code 345, 157327 ms elapsed time,   459 ms cpu time,    46 activations
+task 355: fim
+PPOS: task 355 ((null)) exit code 355, 157382 ms elapsed time,   455 ms cpu time,    46 activations
+task 387: fim
+PPOS: task 387 ((null)) exit code 387, 157490 ms elapsed time,   458 ms cpu time,    46 activations
+task 416: fim
+PPOS: task 416 ((null)) exit code 416, 157576 ms elapsed time,   456 ms cpu time,    46 activations
+task 483: fim
+PPOS: task 483 ((null)) exit code 483, 157834 ms elapsed time,   458 ms cpu time,    46 activations
+task 507: fim
+PPOS: task 507 ((null)) exit code 507, 157900 ms elapsed time,   457 ms cpu time,    46 activations
+task  29: fim
+PPOS: task 29 ((null)) exit code 29, 158010 ms elapsed time,   467 ms cpu time,    47 activations
+task  95: fim
+PPOS: task 95 ((null)) exit code 95, 158174 ms elapsed time,   464 ms cpu time,    47 activations
+task 135: fim
+PPOS: task 135 ((null)) exit code 135, 158279 ms elapsed time,   465 ms cpu time,    47 activations
+task 435: fim
+PPOS: task 435 ((null)) exit code 435, 159139 ms elapsed time,   462 ms cpu time,    47 activations
+task 489: fim
+PPOS: task 489 ((null)) exit code 489, 159324 ms elapsed time,   465 ms cpu time,    47 activations
+task  52: fim
+PPOS: task 52 ((null)) exit code 52, 159499 ms elapsed time,   473 ms cpu time,    48 activations
+task  67: fim
+PPOS: task 67 ((null)) exit code 67, 159515 ms elapsed time,   476 ms cpu time,    48 activations
+task 156: fim
+PPOS: task 156 ((null)) exit code 156, 159740 ms elapsed time,   475 ms cpu time,    48 activations
+task 277: fim
+PPOS: task 277 ((null)) exit code 277, 160057 ms elapsed time,   478 ms cpu time,    48 activations
+task 292: fim
+PPOS: task 292 ((null)) exit code 292, 160115 ms elapsed time,   478 ms cpu time,    48 activations
+task 414: fim
+PPOS: task 414 ((null)) exit code 414, 160477 ms elapsed time,   473 ms cpu time,    48 activations
+task 418: fim
+PPOS: task 418 ((null)) exit code 418, 160495 ms elapsed time,   478 ms cpu time,    48 activations
+task 467: fim
+PPOS: task 467 ((null)) exit code 467, 160670 ms elapsed time,   475 ms cpu time,    48 activations
+task 509: fim
+PPOS: task 509 ((null)) exit code 509, 160773 ms elapsed time,   474 ms cpu time,    48 activations
+task 103: fim
+PPOS: task 103 ((null)) exit code 103, 161036 ms elapsed time,   480 ms cpu time,    49 activations
+task 246: fim
+PPOS: task 246 ((null)) exit code 246, 161341 ms elapsed time,   486 ms cpu time,    49 activations
+task 493: fim
+PPOS: task 493 ((null)) exit code 493, 162074 ms elapsed time,   484 ms cpu time,    49 activations
+task 100: fim
+PPOS: task 100 ((null)) exit code 100, 162356 ms elapsed time,   490 ms cpu time,    50 activations
+task 358: fim
+PPOS: task 358 ((null)) exit code 358, 162986 ms elapsed time,   492 ms cpu time,    50 activations
+task 457: fim
+PPOS: task 457 ((null)) exit code 457, 163294 ms elapsed time,   498 ms cpu time,    50 activations
+task  62: fim
+PPOS: task 62 ((null)) exit code 62, 163527 ms elapsed time,   501 ms cpu time,    51 activations
+task 171: fim
+PPOS: task 171 ((null)) exit code 171, 163750 ms elapsed time,   504 ms cpu time,    51 activations
+task 205: fim
+PPOS: task 205 ((null)) exit code 205, 163823 ms elapsed time,   503 ms cpu time,    51 activations
+task 258: fim
+PPOS: task 258 ((null)) exit code 258, 163964 ms elapsed time,   501 ms cpu time,    51 activations
+task 324: fim
+PPOS: task 324 ((null)) exit code 324, 164116 ms elapsed time,   502 ms cpu time,    51 activations
+task 377: fim
+PPOS: task 377 ((null)) exit code 377, 164297 ms elapsed time,   502 ms cpu time,    51 activations
+task 454: fim
+PPOS: task 454 ((null)) exit code 454, 164523 ms elapsed time,   506 ms cpu time,    51 activations
+task  88: fim
+PPOS: task 88 ((null)) exit code 88, 164841 ms elapsed time,   516 ms cpu time,    52 activations
+task 326: fim
+PPOS: task 326 ((null)) exit code 326, 165349 ms elapsed time,   519 ms cpu time,    52 activations
+task 328: fim
+PPOS: task 328 ((null)) exit code 328, 165357 ms elapsed time,   518 ms cpu time,    52 activations
+task 337: fim
+PPOS: task 337 ((null)) exit code 337, 165387 ms elapsed time,   511 ms cpu time,    52 activations
+task 370: fim
+PPOS: task 370 ((null)) exit code 370, 165496 ms elapsed time,   519 ms cpu time,    52 activations
+task 431: fim
+PPOS: task 431 ((null)) exit code 431, 165648 ms elapsed time,   512 ms cpu time,    52 activations
+task  80: fim
+PPOS: task 80 ((null)) exit code 80, 165997 ms elapsed time,   527 ms cpu time,    53 activations
+task 213: fim
+PPOS: task 213 ((null)) exit code 213, 166246 ms elapsed time,   520 ms cpu time,    53 activations
+task 255: fim
+PPOS: task 255 ((null)) exit code 255, 166365 ms elapsed time,   529 ms cpu time,    53 activations
+task 281: fim
+PPOS: task 281 ((null)) exit code 281, 166430 ms elapsed time,   525 ms cpu time,    53 activations
+task 298: fim
+PPOS: task 298 ((null)) exit code 298, 166450 ms elapsed time,   520 ms cpu time,    53 activations
+task 331: fim
+PPOS: task 331 ((null)) exit code 331, 166516 ms elapsed time,   526 ms cpu time,    53 activations
+task 333: fim
+PPOS: task 333 ((null)) exit code 333, 166523 ms elapsed time,   527 ms cpu time,    53 activations
+task 480: fim
+PPOS: task 480 ((null)) exit code 480, 166914 ms elapsed time,   522 ms cpu time,    53 activations
+task  30: fim
+PPOS: task 30 ((null)) exit code 30, 167052 ms elapsed time,   536 ms cpu time,    54 activations
+task  33: fim
+PPOS: task 33 ((null)) exit code 33, 167055 ms elapsed time,   533 ms cpu time,    54 activations
+task  98: fim
+PPOS: task 98 ((null)) exit code 98, 167164 ms elapsed time,   539 ms cpu time,    54 activations
+task 113: fim
+PPOS: task 113 ((null)) exit code 113, 167189 ms elapsed time,   535 ms cpu time,    54 activations
+task 301: fim
+PPOS: task 301 ((null)) exit code 301, 167535 ms elapsed time,   537 ms cpu time,    54 activations
+task 420: fim
+PPOS: task 420 ((null)) exit code 420, 167798 ms elapsed time,   534 ms cpu time,    54 activations
+task 437: fim
+PPOS: task 437 ((null)) exit code 437, 167842 ms elapsed time,   534 ms cpu time,    54 activations
+task  78: fim
+PPOS: task 78 ((null)) exit code 78, 168130 ms elapsed time,   546 ms cpu time,    55 activations
+task 106: fim
+PPOS: task 106 ((null)) exit code 106, 168191 ms elapsed time,   541 ms cpu time,    55 activations
+task 279: fim
+PPOS: task 279 ((null)) exit code 279, 168505 ms elapsed time,   545 ms cpu time,    55 activations
+task 303: fim
+PPOS: task 303 ((null)) exit code 303, 168541 ms elapsed time,   546 ms cpu time,    55 activations
+task 409: fim
+PPOS: task 409 ((null)) exit code 409, 168759 ms elapsed time,   549 ms cpu time,    55 activations
+task 463: fim
+PPOS: task 463 ((null)) exit code 463, 168903 ms elapsed time,   544 ms cpu time,    55 activations
+task 131: fim
+PPOS: task 131 ((null)) exit code 131, 169204 ms elapsed time,   559 ms cpu time,    56 activations
+task 216: fim
+PPOS: task 216 ((null)) exit code 216, 169336 ms elapsed time,   553 ms cpu time,    56 activations
+task 223: fim
+PPOS: task 223 ((null)) exit code 223, 169365 ms elapsed time,   559 ms cpu time,    56 activations
+task 231: fim
+PPOS: task 231 ((null)) exit code 231, 169399 ms elapsed time,   554 ms cpu time,    56 activations
+task 346: fim
+PPOS: task 346 ((null)) exit code 346, 169554 ms elapsed time,   556 ms cpu time,    56 activations
+task 360: fim
+PPOS: task 360 ((null)) exit code 360, 169598 ms elapsed time,   554 ms cpu time,    56 activations
+task 364: fim
+PPOS: task 364 ((null)) exit code 364, 169608 ms elapsed time,   550 ms cpu time,    56 activations
+task 379: fim
+PPOS: task 379 ((null)) exit code 379, 169620 ms elapsed time,   552 ms cpu time,    56 activations
+task 110: fim
+PPOS: task 110 ((null)) exit code 110, 170072 ms elapsed time,   560 ms cpu time,    57 activations
+task 210: fim
+PPOS: task 210 ((null)) exit code 210, 170203 ms elapsed time,   562 ms cpu time,    57 activations
+task 250: fim
+PPOS: task 250 ((null)) exit code 250, 170270 ms elapsed time,   567 ms cpu time,    57 activations
+task 383: fim
+PPOS: task 383 ((null)) exit code 383, 170472 ms elapsed time,   563 ms cpu time,    57 activations
+task 426: fim
+PPOS: task 426 ((null)) exit code 426, 170555 ms elapsed time,   563 ms cpu time,    57 activations
+task 450: fim
+PPOS: task 450 ((null)) exit code 450, 170611 ms elapsed time,   566 ms cpu time,    57 activations
+task 456: fim
+PPOS: task 456 ((null)) exit code 456, 170623 ms elapsed time,   562 ms cpu time,    57 activations
+task 477: fim
+PPOS: task 477 ((null)) exit code 477, 170665 ms elapsed time,   562 ms cpu time,    57 activations
+task   5: fim
+PPOS: task 5 ((null)) exit code 5, 170754 ms elapsed time,   577 ms cpu time,    58 activations
+task  74: fim
+PPOS: task 74 ((null)) exit code 74, 170820 ms elapsed time,   576 ms cpu time,    58 activations
+task  86: fim
+PPOS: task 86 ((null)) exit code 86, 170836 ms elapsed time,   576 ms cpu time,    58 activations
+task 147: fim
+PPOS: task 147 ((null)) exit code 147, 170913 ms elapsed time,   577 ms cpu time,    58 activations
+task 175: fim
+PPOS: task 175 ((null)) exit code 175, 170940 ms elapsed time,   578 ms cpu time,    58 activations
+task 350: fim
+PPOS: task 350 ((null)) exit code 350, 171209 ms elapsed time,   570 ms cpu time,    58 activations
+task 371: fim
+PPOS: task 371 ((null)) exit code 371, 171243 ms elapsed time,   574 ms cpu time,    58 activations
+task 388: fim
+PPOS: task 388 ((null)) exit code 388, 171259 ms elapsed time,   576 ms cpu time,    58 activations
+task 410: fim
+PPOS: task 410 ((null)) exit code 410, 171281 ms elapsed time,   572 ms cpu time,    58 activations
+task 141: fim
+PPOS: task 141 ((null)) exit code 141, 171623 ms elapsed time,   580 ms cpu time,    59 activations
+task 271: fim
+PPOS: task 271 ((null)) exit code 271, 171799 ms elapsed time,   587 ms cpu time,    59 activations
+task 320: fim
+PPOS: task 320 ((null)) exit code 320, 171855 ms elapsed time,   586 ms cpu time,    59 activations
+task 323: fim
+PPOS: task 323 ((null)) exit code 323, 171860 ms elapsed time,   585 ms cpu time,    59 activations
+task 343: fim
+PPOS: task 343 ((null)) exit code 343, 171880 ms elapsed time,   581 ms cpu time,    59 activations
+task 397: fim
+PPOS: task 397 ((null)) exit code 397, 171935 ms elapsed time,   585 ms cpu time,    59 activations
+task 429: fim
+PPOS: task 429 ((null)) exit code 429, 171983 ms elapsed time,   588 ms cpu time,    59 activations
+task 442: fim
+PPOS: task 442 ((null)) exit code 442, 172011 ms elapsed time,   588 ms cpu time,    59 activations
+task 462: fim
+PPOS: task 462 ((null)) exit code 462, 172031 ms elapsed time,   580 ms cpu time,    59 activations
+task 474: fim
+PPOS: task 474 ((null)) exit code 474, 172055 ms elapsed time,   584 ms cpu time,    59 activations
+task  92: fim
+PPOS: task 92 ((null)) exit code 92, 172234 ms elapsed time,   597 ms cpu time,    60 activations
+task  97: fim
+PPOS: task 97 ((null)) exit code 97, 172235 ms elapsed time,   591 ms cpu time,    60 activations
+task 159: fim
+PPOS: task 159 ((null)) exit code 159, 172264 ms elapsed time,   599 ms cpu time,    60 activations
+task 178: fim
+PPOS: task 178 ((null)) exit code 178, 172293 ms elapsed time,   590 ms cpu time,    60 activations
+task 221: fim
+PPOS: task 221 ((null)) exit code 221, 172348 ms elapsed time,   595 ms cpu time,    60 activations
+task  49: fim
+PPOS: task 49 ((null)) exit code 49, 172755 ms elapsed time,   606 ms cpu time,    61 activations
+task 268: fim
+PPOS: task 268 ((null)) exit code 268, 172944 ms elapsed time,   600 ms cpu time,    61 activations
+task 274: fim
+PPOS: task 274 ((null)) exit code 274, 172948 ms elapsed time,   604 ms cpu time,    61 activations
+task 411: fim
+PPOS: task 411 ((null)) exit code 411, 173071 ms elapsed time,   604 ms cpu time,    61 activations
+task 453: fim
+PPOS: task 453 ((null)) exit code 453, 173125 ms elapsed time,   604 ms cpu time,    61 activations
+task 218: fim
+PPOS: task 218 ((null)) exit code 218, 173397 ms elapsed time,   611 ms cpu time,    62 activations
+task 262: fim
+PPOS: task 262 ((null)) exit code 262, 173445 ms elapsed time,   618 ms cpu time,    62 activations
+task 280: fim
+PPOS: task 280 ((null)) exit code 280, 173446 ms elapsed time,   611 ms cpu time,    62 activations
+task 284: fim
+PPOS: task 284 ((null)) exit code 284, 173461 ms elapsed time,   615 ms cpu time,    62 activations
+task 329: fim
+PPOS: task 329 ((null)) exit code 329, 173471 ms elapsed time,   610 ms cpu time,    62 activations
+task 352: fim
+PPOS: task 352 ((null)) exit code 352, 173505 ms elapsed time,   615 ms cpu time,    62 activations
+task 496: fim
+PPOS: task 496 ((null)) exit code 496, 173621 ms elapsed time,   616 ms cpu time,    62 activations
+task 510: fim
+PPOS: task 510 ((null)) exit code 510, 173647 ms elapsed time,   617 ms cpu time,    62 activations
+task 118: fim
+PPOS: task 118 ((null)) exit code 118, 173767 ms elapsed time,   627 ms cpu time,    63 activations
+task 176: fim
+PPOS: task 176 ((null)) exit code 176, 173793 ms elapsed time,   627 ms cpu time,    63 activations
+task 204: fim
+PPOS: task 204 ((null)) exit code 204, 173832 ms elapsed time,   629 ms cpu time,    63 activations
+task 505: fim
+PPOS: task 505 ((null)) exit code 505, 174050 ms elapsed time,   620 ms cpu time,    63 activations
+task   7: fim
+PPOS: task 7 ((null)) exit code 7, 174085 ms elapsed time,   632 ms cpu time,    64 activations
+task 282: fim
+PPOS: task 282 ((null)) exit code 282, 174263 ms elapsed time,   639 ms cpu time,    64 activations
+task 349: fim
+PPOS: task 349 ((null)) exit code 349, 174288 ms elapsed time,   636 ms cpu time,    64 activations
+task 433: fim
+PPOS: task 433 ((null)) exit code 433, 174354 ms elapsed time,   636 ms cpu time,    64 activations
+task   3: fim
+PPOS: task 3 ((null)) exit code 3, 174436 ms elapsed time,   640 ms cpu time,    65 activations
+task  71: fim
+PPOS: task 71 ((null)) exit code 71, 174467 ms elapsed time,   641 ms cpu time,    65 activations
+task 202: fim
+PPOS: task 202 ((null)) exit code 202, 174537 ms elapsed time,   641 ms cpu time,    65 activations
+task 226: fim
+PPOS: task 226 ((null)) exit code 226, 174563 ms elapsed time,   646 ms cpu time,    65 activations
+task 227: fim
+PPOS: task 227 ((null)) exit code 227, 174567 ms elapsed time,   644 ms cpu time,    65 activations
+task 253: fim
+PPOS: task 253 ((null)) exit code 253, 174570 ms elapsed time,   643 ms cpu time,    65 activations
+task 399: fim
+PPOS: task 399 ((null)) exit code 399, 174627 ms elapsed time,   648 ms cpu time,    65 activations
+task 424: fim
+PPOS: task 424 ((null)) exit code 424, 174642 ms elapsed time,   645 ms cpu time,    65 activations
+task 511: fim
+PPOS: task 511 ((null)) exit code 511, 174708 ms elapsed time,   647 ms cpu time,    65 activations
+Waiting for task 4
+Waiting for task 5
+Waiting for task 6
+Waiting for task 7
+Waiting for task 8
+task   8: fim
+PPOS: task 8 ((null)) exit code 8, 174725 ms elapsed time,   654 ms cpu time,    66 activations
+task  82: fim
+PPOS: task 82 ((null)) exit code 82, 174747 ms elapsed time,   652 ms cpu time,    66 activations
+task 214: fim
+PPOS: task 214 ((null)) exit code 214, 174807 ms elapsed time,   651 ms cpu time,    66 activations
+task 313: fim
+PPOS: task 313 ((null)) exit code 313, 174817 ms elapsed time,   650 ms cpu time,    66 activations
+task 362: fim
+PPOS: task 362 ((null)) exit code 362, 174836 ms elapsed time,   650 ms cpu time,    66 activations
+task 470: fim
+PPOS: task 470 ((null)) exit code 470, 174876 ms elapsed time,   650 ms cpu time,    66 activations
+Waiting for task 9
+Waiting for task 10
+Waiting for task 11
+Waiting for task 12
+Waiting for task 13
+Waiting for task 14
+Waiting for task 15
+Waiting for task 16
+task 187: fim
+PPOS: task 187 ((null)) exit code 187, 174992 ms elapsed time,   665 ms cpu time,    67 activations
+task 351: fim
+PPOS: task 351 ((null)) exit code 351, 175013 ms elapsed time,   662 ms cpu time,    67 activations
+task 385: fim
+PPOS: task 385 ((null)) exit code 385, 175022 ms elapsed time,   669 ms cpu time,    67 activations
+task 443: fim
+PPOS: task 443 ((null)) exit code 443, 175049 ms elapsed time,   667 ms cpu time,    67 activations
+task 486: fim
+PPOS: task 486 ((null)) exit code 486, 175068 ms elapsed time,   669 ms cpu time,    67 activations
+task  87: fim
+PPOS: task 87 ((null)) exit code 87, 175254 ms elapsed time,   684 ms cpu time,    69 activations
+task 512: fim
+PPOS: task 512 ((null)) exit code 512, 175356 ms elapsed time,   685 ms cpu time,    69 activations
+task  89: fim
+PPOS: task 89 ((null)) exit code 89, 175387 ms elapsed time,   698 ms cpu time,    70 activations
+task 167: fim
+PPOS: task 167 ((null)) exit code 167, 175402 ms elapsed time,   696 ms cpu time,    70 activations
+task 121: fim
+PPOS: task 121 ((null)) exit code 121, 175495 ms elapsed time,   702 ms cpu time,    71 activations
+task  16: fim
+PPOS: task 16 ((null)) exit code 16, 175572 ms elapsed time,   717 ms cpu time,    72 activations
+Waiting for task 17
+Waiting for task 18
+Waiting for task 19
+Waiting for task 20
+Waiting for task 21
+Waiting for task 22
+Waiting for task 23
+Waiting for task 24
+task 500: fim
+PPOS: task 500 ((null)) exit code 500, 175725 ms elapsed time,   725 ms cpu time,    73 activations
+task 177: fim
+PPOS: task 177 ((null)) exit code 177, 175736 ms elapsed time,   730 ms cpu time,    74 activations
+task 224: fim
+PPOS: task 224 ((null)) exit code 224, 175739 ms elapsed time,   733 ms cpu time,    74 activations
+task 341: fim
+PPOS: task 341 ((null)) exit code 341, 175742 ms elapsed time,   734 ms cpu time,    74 activations
+task 439: fim
+PPOS: task 439 ((null)) exit code 439, 175761 ms elapsed time,   739 ms cpu time,    74 activations
+task 415: fim
+PPOS: task 415 ((null)) exit code 415, 175812 ms elapsed time,   751 ms cpu time,    76 activations
+task  24: fim
+PPOS: task 24 ((null)) exit code 24, 175846 ms elapsed time,   772 ms cpu time,    78 activations
+task 473: fim
+PPOS: task 473 ((null)) exit code 473, 175852 ms elapsed time,   778 ms cpu time,    78 activations
+Waiting for task 25
+Waiting for task 26
+Waiting for task 27
+Waiting for task 28
+Waiting for task 29
+Waiting for task 30
+Waiting for task 31
+Waiting for task 32
+Waiting for task 33
+Waiting for task 34
+Waiting for task 35
+Waiting for task 36
+Waiting for task 37
+Waiting for task 38
+Waiting for task 39
+Waiting for task 40
+Waiting for task 41
+Waiting for task 42
+Waiting for task 43
+Waiting for task 44
+Waiting for task 45
+Waiting for task 46
+Waiting for task 47
+Waiting for task 48
+Waiting for task 49
+Waiting for task 50
+Waiting for task 51
+Waiting for task 52
+Waiting for task 53
+Waiting for task 54
+Waiting for task 55
+Waiting for task 56
+Waiting for task 57
+Waiting for task 58
+Waiting for task 59
+Waiting for task 60
+Waiting for task 61
+Waiting for task 62
+Waiting for task 63
+Waiting for task 64
+Waiting for task 65
+Waiting for task 66
+Waiting for task 67
+Waiting for task 68
+Waiting for task 69
+Waiting for task 70
+Waiting for task 71
+Waiting for task 72
+Waiting for task 73
+Waiting for task 74
+Waiting for task 75
+Waiting for task 76
+Waiting for task 77
+Waiting for task 78
+Waiting for task 79
+Waiting for task 80
+Waiting for task 81
+Waiting for task 82
+Waiting for task 83
+Waiting for task 84
+Waiting for task 85
+Waiting for task 86
+Waiting for task 87
+Waiting for task 88
+Waiting for task 89
+Waiting for task 90
+Waiting for task 91
+Waiting for task 92
+Waiting for task 93
+Waiting for task 94
+Waiting for task 95
+Waiting for task 96
+Waiting for task 97
+Waiting for task 98
+Waiting for task 99
+Waiting for task 100
+Waiting for task 101
+Waiting for task 102
+Waiting for task 103
+Waiting for task 104
+Waiting for task 105
+Waiting for task 106
+Waiting for task 107
+Waiting for task 108
+Waiting for task 109
+Waiting for task 110
+Waiting for task 111
+Waiting for task 112
+Waiting for task 113
+Waiting for task 114
+Waiting for task 115
+Waiting for task 116
+Waiting for task 117
+Waiting for task 118
+Waiting for task 119
+Waiting for task 120
+Waiting for task 121
+Waiting for task 122
+Waiting for task 123
+Waiting for task 124
+Waiting for task 125
+Waiting for task 126
+Waiting for task 127
+Waiting for task 128
+Waiting for task 129
+Waiting for task 130
+Waiting for task 131
+Waiting for task 132
+Waiting for task 133
+Waiting for task 134
+Waiting for task 135
+Waiting for task 136
+Waiting for task 137
+Waiting for task 138
+Waiting for task 139
+Waiting for task 140
+Waiting for task 141
+Waiting for task 142
+Waiting for task 143
+Waiting for task 144
+Waiting for task 145
+Waiting for task 146
+Waiting for task 147
+Waiting for task 148
+Waiting for task 149
+Waiting for task 150
+Waiting for task 151
+Waiting for task 152
+Waiting for task 153
+Waiting for task 154
+Waiting for task 155
+Waiting for task 156
+Waiting for task 157
+Waiting for task 158
+Waiting for task 159
+Waiting for task 160
+Waiting for task 161
+Waiting for task 162
+Waiting for task 163
+Waiting for task 164
+Waiting for task 165
+Waiting for task 166
+Waiting for task 167
+Waiting for task 168
+Waiting for task 169
+Waiting for task 170
+Waiting for task 171
+Waiting for task 172
+Waiting for task 173
+Waiting for task 174
+Waiting for task 175
+Waiting for task 176
+Waiting for task 177
+Waiting for task 178
+Waiting for task 179
+Waiting for task 180
+Waiting for task 181
+Waiting for task 182
+Waiting for task 183
+Waiting for task 184
+Waiting for task 185
+Waiting for task 186
+Waiting for task 187
+Waiting for task 188
+Waiting for task 189
+Waiting for task 190
+Waiting for task 191
+Waiting for task 192
+Waiting for task 193
+Waiting for task 194
+Waiting for task 195
+Waiting for task 196
+Waiting for task 197
+Waiting for task 198
+Waiting for task 199
+Waiting for task 200
+Waiting for task 201
+Waiting for task 202
+Waiting for task 203
+Waiting for task 204
+Waiting for task 205
+Waiting for task 206
+Waiting for task 207
+Waiting for task 208
+Waiting for task 209
+Waiting for task 210
+Waiting for task 211
+Waiting for task 212
+Waiting for task 213
+Waiting for task 214
+Waiting for task 215
+Waiting for task 216
+Waiting for task 217
+Waiting for task 218
+Waiting for task 219
+Waiting for task 220
+Waiting for task 221
+Waiting for task 222
+Waiting for task 223
+Waiting for task 224
+Waiting for task 225
+Waiting for task 226
+Waiting for task 227
+Waiting for task 228
+Waiting for task 229
+Waiting for task 230
+Waiting for task 231
+Waiting for task 232
+Waiting for task 233
+Waiting for task 234
+Waiting for task 235
+Waiting for task 236
+Waiting for task 237
+Waiting for task 238
+Waiting for task 239
+Waiting for task 240
+Waiting for task 241
+Waiting for task 242
+Waiting for task 243
+Waiting for task 244
+Waiting for task 245
+Waiting for task 246
+Waiting for task 247
+Waiting for task 248
+Waiting for task 249
+Waiting for task 250
+Waiting for task 251
+Waiting for task 252
+Waiting for task 253
+Waiting for task 254
+Waiting for task 255
+Waiting for task 256
+Waiting for task 257
+Waiting for task 258
+Waiting for task 259
+Waiting for task 260
+Waiting for task 261
+Waiting for task 262
+Waiting for task 263
+Waiting for task 264
+Waiting for task 265
+Waiting for task 266
+Waiting for task 267
+Waiting for task 268
+Waiting for task 269
+Waiting for task 270
+Waiting for task 271
+Waiting for task 272
+Waiting for task 273
+Waiting for task 274
+Waiting for task 275
+Waiting for task 276
+Waiting for task 277
+Waiting for task 278
+Waiting for task 279
+Waiting for task 280
+Waiting for task 281
+Waiting for task 282
+Waiting for task 283
+Waiting for task 284
+Waiting for task 285
+Waiting for task 286
+Waiting for task 287
+Waiting for task 288
+Waiting for task 289
+Waiting for task 290
+Waiting for task 291
+Waiting for task 292
+Waiting for task 293
+Waiting for task 294
+Waiting for task 295
+Waiting for task 296
+Waiting for task 297
+Waiting for task 298
+Waiting for task 299
+Waiting for task 300
+Waiting for task 301
+Waiting for task 302
+Waiting for task 303
+Waiting for task 304
+Waiting for task 305
+Waiting for task 306
+Waiting for task 307
+Waiting for task 308
+Waiting for task 309
+Waiting for task 310
+Waiting for task 311
+Waiting for task 312
+Waiting for task 313
+Waiting for task 314
+Waiting for task 315
+Waiting for task 316
+Waiting for task 317
+Waiting for task 318
+Waiting for task 319
+Waiting for task 320
+Waiting for task 321
+Waiting for task 322
+Waiting for task 323
+Waiting for task 324
+Waiting for task 325
+Waiting for task 326
+Waiting for task 327
+Waiting for task 328
+Waiting for task 329
+Waiting for task 330
+Waiting for task 331
+Waiting for task 332
+Waiting for task 333
+Waiting for task 334
+Waiting for task 335
+Waiting for task 336
+Waiting for task 337
+Waiting for task 338
+Waiting for task 339
+Waiting for task 340
+Waiting for task 341
+Waiting for task 342
+Waiting for task 343
+Waiting for task 344
+Waiting for task 345
+Waiting for task 346
+Waiting for task 347
+Waiting for task 348
+Waiting for task 349
+Waiting for task 350
+Waiting for task 351
+Waiting for task 352
+Waiting for task 353
+Waiting for task 354
+Waiting for task 355
+Waiting for task 356
+Waiting for task 357
+Waiting for task 358
+Waiting for task 359
+Waiting for task 360
+Waiting for task 361
+Waiting for task 362
+Waiting for task 363
+Waiting for task 364
+Waiting for task 365
+Waiting for task 366
+Waiting for task 367
+Waiting for task 368
+Waiting for task 369
+Waiting for task 370
+Waiting for task 371
+Waiting for task 372
+Waiting for task 373
+Waiting for task 374
+Waiting for task 375
+Waiting for task 376
+Waiting for task 377
+Waiting for task 378
+Waiting for task 379
+Waiting for task 380
+Waiting for task 381
+Waiting for task 382
+Waiting for task 383
+Waiting for task 384
+Waiting for task 385
+Waiting for task 386
+Waiting for task 387
+Waiting for task 388
+Waiting for task 389
+Waiting for task 390
+Waiting for task 391
+Waiting for task 392
+Waiting for task 393
+Waiting for task 394
+Waiting for task 395
+Waiting for task 396
+Waiting for task 397
+Waiting for task 398
+Waiting for task 399
+Waiting for task 400
+Waiting for task 401
+Waiting for task 402
+Waiting for task 403
+Waiting for task 404
+Waiting for task 405
+Waiting for task 406
+Waiting for task 407
+Waiting for task 408
+Waiting for task 409
+Waiting for task 410
+Waiting for task 411
+Waiting for task 412
+Waiting for task 413
+Waiting for task 414
+Waiting for task 415
+Waiting for task 416
+Waiting for task 417
+Waiting for task 418
+Waiting for task 419
+Waiting for task 420
+Waiting for task 421
+Waiting for task 422
+Waiting for task 423
+Waiting for task 424
+Waiting for task 425
+Waiting for task 426
+Waiting for task 427
+Waiting for task 428
+Waiting for task 429
+Waiting for task 430
+Waiting for task 431
+Waiting for task 432
+Waiting for task 433
+Waiting for task 434
+Waiting for task 435
+Waiting for task 436
+Waiting for task 437
+Waiting for task 438
+Waiting for task 439
+Waiting for task 440
+Waiting for task 441
+Waiting for task 442
+Waiting for task 443
+Waiting for task 444
+Waiting for task 445
+Waiting for task 446
+Waiting for task 447
+Waiting for task 448
+Waiting for task 449
+Waiting for task 450
+Waiting for task 451
+Waiting for task 452
+Waiting for task 453
+Waiting for task 454
+Waiting for task 455
+Waiting for task 456
+Waiting for task 457
+Waiting for task 458
+Waiting for task 459
+Waiting for task 460
+Waiting for task 461
+Waiting for task 462
+Waiting for task 463
+Waiting for task 464
+Waiting for task 465
+Waiting for task 466
+Waiting for task 467
+Waiting for task 468
+Waiting for task 469
+Waiting for task 470
+Waiting for task 471
+Waiting for task 472
+Waiting for task 473
+Waiting for task 474
+Waiting for task 475
+Waiting for task 476
+Waiting for task 477
+Waiting for task 478
+Waiting for task 479
+Waiting for task 480
+Waiting for task 481
+Waiting for task 482
+Waiting for task 483
+Waiting for task 484
+Waiting for task 485
+Waiting for task 486
+Waiting for task 487
+Waiting for task 488
+Waiting for task 489
+Waiting for task 490
+Waiting for task 491
+Waiting for task 492
+Waiting for task 493
+Waiting for task 494
+Waiting for task 495
+Waiting for task 496
+Waiting for task 497
+Waiting for task 498
+Waiting for task 499
+Waiting for task 500
+Waiting for task 501
+Waiting for task 502
+Waiting for task 503
+Waiting for task 504
+Waiting for task 505
+Waiting for task 506
+Waiting for task 507
+Waiting for task 508
+Waiting for task 509
+Waiting for task 510
+Waiting for task 511
+Waiting for task 512
+Waiting for task 513
+user: fim
+PPOS: task 1 (user) exit code 0, 175855 ms elapsed time,     4 ms cpu time,     6 activations
+PPOS: task 0 (kernel) exit code 0, 175855 ms elapsed time,     9 ms cpu time, 17889 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 175855 ms)
diff --git a/ppos/test/pingpong-wait.c b/ppos/test/pingpong-wait.c
new file mode 100644 (file)
index 0000000..af6c0f9
--- /dev/null
@@ -0,0 +1,106 @@
+// PingPongOS - PingPong Operating System
+// Prof. Carlos A. Maziero, DINF UFPR
+// Versão 2.0 -- Junho de 2025
+
+// ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
+// ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
+
+// Teste da função task_wait() (leve)
+
+#include <assert.h>
+#include "lib/libc.h"
+#include "ppos.h"
+
+#define WORKLOAD 20000
+
+static struct task_t *pang, *peng, *ping, *pong, *pung;
+
+// simula um processamento pesado
+int hardwork(int n)
+{
+    int soma = 0;
+
+    for (int i = 0; i < n; i++)
+        for (int j = 0; j < n; j++)
+            soma += j;
+    return (soma);
+}
+
+// corpo das tarefas
+void body(void *arg)
+{
+    int max, tid;
+
+    tid = task_id(NULL);
+    max = tid * 2;
+
+    printf("%5d ms: %s inicia\n", systime(), (char *)arg);
+    for (int i = 0; i < max; i++)
+    {
+        printf("%5d ms: %s %d\n", systime(), (char *)arg, i);
+        hardwork(WORKLOAD);
+    }
+    printf("%5d ms: %s termina\n", systime(), (char *)arg);
+
+    task_exit(tid);
+}
+
+// corpo da tarefa principal
+void user_main(void *arg)
+{
+    int exit_code, status;
+
+    printf("user: inicio\n");
+
+    pang = task_create("pang", body, "\tPang");
+    assert(pang);
+    peng = task_create("peng", body, "\t\tPeng");
+    assert(peng);
+    ping = task_create("ping", body, "\t\t\tPing");
+    assert(ping);
+    pong = task_create("pong", body, "\t\t\t\tPong");
+    assert(pong);
+    pung = task_create("pung", body, "\t\t\t\t\tPung");
+    assert(pung);
+
+    for (int i = 0; i < 2; i++)
+    {
+        printf("%5d ms: user %d\n", systime(), i);
+        hardwork(WORKLOAD);
+    }
+
+    printf("%5d ms: user esperando Pang...\n", systime());
+    exit_code = task_wait(pang);
+    assert(exit_code == task_id(pang));
+
+    printf("%5d ms: user esperando Peng...\n", systime());
+    exit_code = task_wait(peng);
+    assert(exit_code == task_id(peng));
+
+    printf("%5d ms: user esperando Ping...\n", systime());
+    exit_code = task_wait(ping);
+    assert(exit_code == task_id(ping));
+
+    printf("%5d ms: user esperando Pong...\n", systime());
+    exit_code = task_wait(pong);
+    assert(exit_code == task_id(pong));
+
+    printf("%5d ms: user esperando Pung...\n", systime());
+    exit_code = task_wait(pung);
+    assert(exit_code == task_id(pung));
+
+    status = task_destroy(pang);
+    assert(status == NOERROR);
+    status = task_destroy(peng);
+    assert(status == NOERROR);
+    status = task_destroy(ping);
+    assert(status == NOERROR);
+    status = task_destroy(pong);
+    assert(status == NOERROR);
+    status = task_destroy(pung);
+    assert(status == NOERROR);
+
+    printf("%5d ms: user termina\n", systime());
+
+    task_exit(0);
+}
diff --git a/ppos/test/pingpong-wait.txt b/ppos/test/pingpong-wait.txt
new file mode 100644 (file)
index 0000000..2826824
--- /dev/null
@@ -0,0 +1,70 @@
+PPOS: system starting
+PPOS: system started (uptime 0 ms)
+user: inicio
+    0 ms: user 0
+   10 ms:      Pang inicia
+   10 ms:      Pang 0
+   20 ms:              Peng inicia
+   20 ms:              Peng 0
+   30 ms:                      Ping inicia
+   30 ms:                      Ping 0
+   40 ms:                              Pong inicia
+   40 ms:                              Pong 0
+   50 ms:                                      Pung inicia
+   50 ms:                                      Pung 0
+11557 ms:                      Ping 1
+11722 ms:              Peng 1
+11744 ms:                              Pong 1
+11767 ms: user 1
+11775 ms:      Pang 1
+11871 ms:                                      Pung 1
+21099 ms:                      Ping 2
+21200 ms:              Peng 2
+21222 ms:                              Pong 2
+21259 ms:      Pang 2
+21353 ms:                                      Pung 2
+21365 ms: user esperando Pang...
+29791 ms:                      Ping 3
+29947 ms:                              Pong 3
+30031 ms:              Peng 3
+30110 ms:                                      Pung 3
+30170 ms:      Pang 3
+40438 ms:                      Ping 4
+40599 ms:                              Pong 4
+40777 ms:              Peng 4
+40914 ms:                                      Pung 4
+40970 ms:      Pang termina
+PPOS: task 2 (pang) exit code 2, 40970 ms elapsed time,  7485 ms cpu time,   749 activations
+41010 ms: user esperando Peng...
+45585 ms:                      Ping 5
+45636 ms:                              Pong 5
+45738 ms:              Peng 5
+45802 ms:                                      Pung 5
+53901 ms:                      Ping 6
+53918 ms:                              Pong 6
+54219 ms:              Peng termina
+PPOS: task 3 (peng) exit code 3, 54219 ms elapsed time, 10799 ms cpu time,  1080 activations
+54249 ms: user esperando Ping...
+54272 ms:                                      Pung 6
+58436 ms:                              Pong 7
+58458 ms:                      Ping 7
+58683 ms:                                      Pung 7
+63056 ms:                              Pong 8
+63100 ms:                      Ping termina
+PPOS: task 4 (ping) exit code 4, 63100 ms elapsed time, 13751 ms cpu time,  1376 activations
+63120 ms: user esperando Pong...
+63170 ms:                                      Pung 8
+66786 ms:                              Pong 9
+66892 ms:                                      Pung 9
+71109 ms:                              Pong termina
+PPOS: task 5 (pong) exit code 5, 71109 ms elapsed time, 17759 ms cpu time,  1776 activations
+71119 ms: user esperando Pung...
+71203 ms:                                      Pung 10
+73347 ms:                                      Pung 11
+75189 ms:                                      Pung termina
+PPOS: task 6 (pung) exit code 6, 75189 ms elapsed time, 21830 ms cpu time,  2184 activations
+75189 ms: user termina
+PPOS: task 1 (user) exit code 0, 75189 ms elapsed time,  3565 ms cpu time,   362 activations
+PPOS: task 0 (kernel) exit code 0, 75189 ms elapsed time,     0 ms cpu time,  7528 activations
+PPOS: system stopping
+PPOS: system stopped (uptime 75189 ms)