int Child(char *arg) { int pid; char *zeros; GetPID(&pid); Tconsole("Child(): starting (pid = %d)\n", pid); zeros = calloc(USLOSS_MmuPageSize(), 1); if (memcmp(vmRegion, zeros, USLOSS_MmuPageSize()) != 0) { Tconsole("Child(): VmRegion is not zero-filled\n"); abort(); } verify(vmStats.faults == 1); SemV(sem); Terminate(117); return 0; } /* Child */
int P4_Startup(void *arg) { int i; int rc; int pid; int child; int numChildren = sizeof(names) / sizeof(char *); USLOSS_Console("P4_Startup starting.\n"); rc = Sys_VmInit(PAGES, PAGES, numChildren * PAGES, 1, (void **) &vmRegion); if (rc != 0) { USLOSS_Console("Sys_VmInit failed: %d\n", rc); USLOSS_Halt(1); } pageSize = USLOSS_MmuPageSize(); for (i = 0; i < numChildren; i++) { rc = Sys_Spawn(names[i], Child, (void *) names[i], USLOSS_MIN_STACK * 2, 2, &pid); assert(rc == 0); } for (i = 0; i < numChildren; i++) { rc = Sys_Wait(&pid, &child); assert(rc == 0); } for (i = 0; i < numChildren; i++) { rc = Sys_Spawn(names[i], Child, (void *) names[i], USLOSS_MIN_STACK * 2, 2, &pid); assert(rc == 0); } for (i = 0; i < numChildren; i++) { rc = Sys_Wait(&pid, &child); assert(rc == 0); } Sys_VmDestroy(); USLOSS_Console("P4_Startup done.\n"); return 0; }