From: phfr24 Date: Sun, 8 Mar 2026 20:06:33 +0000 (-0300) Subject: add ppos/ X-Git-Url: https://git.wirehaze.ovh/ppos.git/commitdiff_plain/f0f504ecf7d69d520311484390142913b4b8bdf0?ds=inline add ppos/ --- diff --git a/ppos/hardware/cpu.c b/ppos/hardware/cpu.c new file mode 100644 index 0000000..c10b75b --- /dev/null +++ b/ppos/hardware/cpu.c @@ -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 +#include +#include +#include +#include +#include +#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 index 0000000..2edf89e --- /dev/null +++ b/ppos/hardware/cpu.h @@ -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 index 0000000..41f4353 --- /dev/null +++ b/ppos/hardware/disk.c @@ -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 +#include +#include +#include +#include +#include +#include +#include +#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 index 0000000..29c7d48 --- /dev/null +++ b/ppos/hardware/disk.dat @@ -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 index 0000000..a765a9d --- /dev/null +++ b/ppos/hardware/disk.dat-final @@ -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 index 0000000..29c7d48 --- /dev/null +++ b/ppos/hardware/disk.dat-inicial @@ -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 index 0000000..bcca766 --- /dev/null +++ b/ppos/hardware/disk.h @@ -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 index 0000000..15fe34b --- /dev/null +++ b/ppos/hardware/makefile @@ -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 index 0000000..3ec9d60 --- /dev/null +++ b/ppos/hardware/serial.c @@ -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 +#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 index 0000000..d79d490 --- /dev/null +++ b/ppos/hardware/serial.h @@ -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 index 0000000..84e490c --- /dev/null +++ b/ppos/kernel/block.c @@ -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 index 0000000..f6c0643 --- /dev/null +++ b/ppos/kernel/block.h @@ -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 index 0000000..e664909 --- /dev/null +++ b/ppos/kernel/ctx.h @@ -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 + +#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 index 0000000..b410d25 --- /dev/null +++ b/ppos/kernel/ctx.s @@ -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 index 0000000..7e66246 --- /dev/null +++ b/ppos/kernel/dispatcher.c @@ -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 index 0000000..37d8ac1 --- /dev/null +++ b/ppos/kernel/dispatcher.h @@ -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 index 0000000..e080ed2 --- /dev/null +++ b/ppos/kernel/macros.h @@ -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 +#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 index 0000000..0770bc4 --- /dev/null +++ b/ppos/kernel/makefile @@ -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 index 0000000..1f1c1ba --- /dev/null +++ b/ppos/kernel/memory.c @@ -0,0 +1,20 @@ +// PingPongOS - PingPong Operating System + +// implementação trivial, a ser substituída no projeto de alocação de heap. + +#include + +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 index 0000000..b9b6a48 --- /dev/null +++ b/ppos/kernel/memory.h @@ -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 index 0000000..0576555 --- /dev/null +++ b/ppos/kernel/mqueue.c @@ -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 index 0000000..77c6205 --- /dev/null +++ b/ppos/kernel/mqueue.h @@ -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 index 0000000..dec4be2 --- /dev/null +++ b/ppos/kernel/ppos.c @@ -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 index 0000000..2b67487 --- /dev/null +++ b/ppos/kernel/ppos.h @@ -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 index 0000000..bf0cc67 --- /dev/null +++ b/ppos/kernel/scheduler.c @@ -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 index 0000000..7197ee4 --- /dev/null +++ b/ppos/kernel/scheduler.h @@ -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 index 0000000..53f56c5 --- /dev/null +++ b/ppos/kernel/semaphore.c @@ -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 index 0000000..f115ef6 --- /dev/null +++ b/ppos/kernel/semaphore.h @@ -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 index 0000000..a97fee7 --- /dev/null +++ b/ppos/kernel/task.c @@ -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 index 0000000..1821198 --- /dev/null +++ b/ppos/kernel/task.h @@ -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 index 0000000..d93897a --- /dev/null +++ b/ppos/kernel/tcb.h @@ -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 index 0000000..bbc0e7b --- /dev/null +++ b/ppos/kernel/time.c @@ -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 index 0000000..5159e52 --- /dev/null +++ b/ppos/kernel/time.h @@ -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 index 0000000..1db78e1 --- /dev/null +++ b/ppos/leia-me.txt @@ -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 index 0000000..08540ee --- /dev/null +++ b/ppos/lib/libc.c @@ -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 +#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 index 0000000..5f62ef0 --- /dev/null +++ b/ppos/lib/libc.h @@ -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 index 0000000..91366a1 --- /dev/null +++ b/ppos/lib/makefile @@ -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 index 0000000..26bfa05 --- /dev/null +++ b/ppos/lib/queue.c @@ -0,0 +1 @@ +// PingPongOS - PingPong Operating System diff --git a/ppos/lib/queue.h b/ppos/lib/queue.h new file mode 100644 index 0000000..6cb94b6 --- /dev/null +++ b/ppos/lib/queue.h @@ -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 + +// 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 index 0000000..31dc66a --- /dev/null +++ b/ppos/makefile @@ -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 index 0000000..654907d --- /dev/null +++ b/ppos/test/makefile @@ -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 index 0000000..0c4035f --- /dev/null +++ b/ppos/test/pingpong-cache-off.c @@ -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 +#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 index 0000000..b767a44 --- /dev/null +++ b/ppos/test/pingpong-cache-off.txt @@ -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 index 0000000..6f0e09d --- /dev/null +++ b/ppos/test/pingpong-cache-on.c @@ -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 +#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 index 0000000..97be6f3 --- /dev/null +++ b/ppos/test/pingpong-cache-on.txt @@ -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 index 0000000..b9e551f --- /dev/null +++ b/ppos/test/pingpong-contab-prio.c @@ -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 +#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 index 0000000..277efc5 --- /dev/null +++ b/ppos/test/pingpong-contab-prio.txt @@ -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 index 0000000..f9fc4e8 --- /dev/null +++ b/ppos/test/pingpong-contab-stress.c @@ -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 +#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 index 0000000..c7614e3 --- /dev/null +++ b/ppos/test/pingpong-contab-stress.txt @@ -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 index 0000000..9a21884 --- /dev/null +++ b/ppos/test/pingpong-contab.c @@ -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 +#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 index 0000000..73ea967 --- /dev/null +++ b/ppos/test/pingpong-contab.txt @@ -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 index 0000000..8c7f706 --- /dev/null +++ b/ppos/test/pingpong-disco-stress.c @@ -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 +#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 index 0000000..6a2650f --- /dev/null +++ b/ppos/test/pingpong-disco-stress.txt @@ -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 index 0000000..0a37c51 --- /dev/null +++ b/ppos/test/pingpong-disco.c @@ -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 +#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 index 0000000..8ece4f1 --- /dev/null +++ b/ppos/test/pingpong-disco.txt @@ -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 index 0000000..e4d1c29 --- /dev/null +++ b/ppos/test/pingpong-dispatcher.c @@ -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 +#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 index 0000000..766e9ab --- /dev/null +++ b/ppos/test/pingpong-dispatcher.txt @@ -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 index 0000000..6e2d704 --- /dev/null +++ b/ppos/test/pingpong-memoria.c @@ -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 +#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 index 0000000..b373149 --- /dev/null +++ b/ppos/test/pingpong-memoria.txt @@ -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 index 0000000..3590a7a --- /dev/null +++ b/ppos/test/pingpong-mqueue.c @@ -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 +#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 index 0000000..bd87a3d --- /dev/null +++ b/ppos/test/pingpong-mqueue.txt @@ -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 index 0000000..508dc64 --- /dev/null +++ b/ppos/test/pingpong-preempcao.c @@ -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 +#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 index 0000000..dc3f44f --- /dev/null +++ b/ppos/test/pingpong-preempcao.txt @@ -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 index 0000000..26bfa05 --- /dev/null +++ b/ppos/test/pingpong-prodcons.c @@ -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 index 0000000..a812eba --- /dev/null +++ b/ppos/test/pingpong-prodcons.txt @@ -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 index 0000000..5b424f3 --- /dev/null +++ b/ppos/test/pingpong-scheduler.c @@ -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 +#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 index 0000000..0316d77 --- /dev/null +++ b/ppos/test/pingpong-scheduler.txt @@ -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 index 0000000..34d1f8e --- /dev/null +++ b/ppos/test/pingpong-semaphore-stress.c @@ -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 +#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 index 0000000..4d8f638 --- /dev/null +++ b/ppos/test/pingpong-semaphore-stress.txt @@ -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 index 0000000..6cd85f5 --- /dev/null +++ b/ppos/test/pingpong-semaphore.c @@ -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 +#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 index 0000000..a0315d8 --- /dev/null +++ b/ppos/test/pingpong-semaphore.txt @@ -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 index 0000000..a03c343 --- /dev/null +++ b/ppos/test/pingpong-sleep.c @@ -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 +#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 index 0000000..187b415 --- /dev/null +++ b/ppos/test/pingpong-sleep.txt @@ -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 index 0000000..57136af --- /dev/null +++ b/ppos/test/pingpong-task1.c @@ -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 +#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 index 0000000..32178d5 --- /dev/null +++ b/ppos/test/pingpong-task1.txt @@ -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 index 0000000..ea6ba0d --- /dev/null +++ b/ppos/test/pingpong-task2.c @@ -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 +#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 index 0000000..be579f2 --- /dev/null +++ b/ppos/test/pingpong-task2.txt @@ -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 index 0000000..8c8386e --- /dev/null +++ b/ppos/test/pingpong-task3.c @@ -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 +#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 index 0000000..5358149 --- /dev/null +++ b/ppos/test/pingpong-task3.txt @@ -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 index 0000000..80c9ded --- /dev/null +++ b/ppos/test/pingpong-wait-stress.c @@ -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 +#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 index 0000000..b7b6cb0 --- /dev/null +++ b/ppos/test/pingpong-wait-stress.txt @@ -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 index 0000000..af6c0f9 --- /dev/null +++ b/ppos/test/pingpong-wait.c @@ -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 +#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 index 0000000..2826824 --- /dev/null +++ b/ppos/test/pingpong-wait.txt @@ -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)