int start3(char *arg) { int result; int pid; int status; USLOSS_Console("start3(): started\n"); result = SemCreate(3, &sem1); SemP(sem1); USLOSS_Console("start3(): After P in the CS\n"); Spawn("Child1", Child1, "Child1", USLOSS_MIN_STACK, 2, &pid); USLOSS_Console("\nstart3(): spawn %d\n", pid); Spawn("Child2", Child2, "Child2", USLOSS_MIN_STACK, 3, &pid); USLOSS_Console("start3(): spawn %d\n", pid); SemV(sem1); USLOSS_Console("\nstart3(): After V -- may appear before: Child1(): After P attempt #3\n"); Wait(&pid, &status); USLOSS_Console("\nstart3(): status of quit child = %d\n",status); Wait(&pid, &status); USLOSS_Console("start3(): status of quit child = %d\n",status); USLOSS_Console("start3(): Parent done\n"); Terminate(8); return 0; } /* start3 */
int Child1(char *arg) { int i; USLOSS_Console("\n%s(): starting\n", arg); for (i = 0; i < 5; i++) { SemP(sem1); if (i == 3) USLOSS_Console("%s(): After P attempt #3 -- may appear before: start3(): After V\n", arg); else USLOSS_Console("%s(): After P attempt #%d\n", arg, i); } USLOSS_Console("%s(): done\n", arg); Terminate(9); return 0; } /* Child1 */
int start5(char *arg) { int pid; int status; Tconsole("start5(): Running %s\n", TEST); Tconsole("start5(): Pagers: %d, Mappings : %d, Pages: %d, Frames: %d, Children %d, Iterations %d, Priority %d.\n", PAGERS, MAPPINGS, PAGES, FRAMES, CHILDREN, ITERATIONS, PRIORITY); vmRegion = VmInit( MAPPINGS, PAGES, FRAMES, PAGERS ); Spawn("Child", Child, 0,USLOSS_MIN_STACK*7,PRIORITY, &pid); SemP( sem); Wait(&pid, &status); verify(status == 117); Tconsole("start5 done\n"); //PrintStats(); VmDestroy(); Terminate(1); return 0; } /* start5 */
int start5(char *arg) { int pid; int status; Tconsole("start5(): Running: %s\n", TEST); Tconsole("start5(): Pagers: %d\n", PAGERS); Tconsole(" Mappings: %d\n", MAPPINGS); Tconsole(" Pages: %d\n", PAGES); Tconsole(" Frames: %d\n", FRAMES); Tconsole(" Children: %d\n", CHILDREN); Tconsole(" Iterations: %d\n", ITERATIONS); Tconsole(" Priority: %d\n", PRIORITY); status = VmInit( MAPPINGS, PAGES, FRAMES, PAGERS, &vmRegion ); Tconsole("start5(): after call to VmInit, status = %d\n\n", status); assert(status == 0); assert(vmRegion != NULL); SemCreate(0, &sem); Spawn("Child", Child, NULL, USLOSS_MIN_STACK * 7, PRIORITY, &pid); SemP( sem); Wait(&pid, &status); assert(status == 117); Tconsole("start5(): done\n"); //PrintStats(); VmDestroy(); Terminate(1); return 0; } /* start5 */