// mem.c — virtualización de la memoria.
// Dos copias imprimen la MISMA dirección pero valores independientes:
//   setarch -R ./mem 0 & setarch -R ./mem 100 &
// (setarch -R desactiva la aleatorización de direcciones para verlo mejor.)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "common.h"

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "uso: mem <valor inicial>\n");
        return 1;
    }
    int *p = malloc(sizeof(int));
    if (p == NULL) {
        perror("malloc");
        return 1;
    }
    *p = atoi(argv[1]);
    printf("(%d) dirección: %p\n", getpid(), (void *)p);
    for (int i = 0; i < 4; i++) {
        spin(1);
        *p = *p + 1;
        printf("(%d) *p = %d\n", getpid(), *p);
    }
    free(p);
    return 0;
}
