Example #1
0
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 */
Example #2
0
int Child2(char *arg) 
{
    int i;

    USLOSS_Console("\n%s(): starting\n", arg);
    for (i = 0; i < 5; i++) {
        SemV(sem1);
        USLOSS_Console("%s(): After V attempt #%d\n", arg, i);
    }
    USLOSS_Console("%s(): done\n", arg);
    Terminate(10);
    return 0;
} /* Child2 */
Example #3
0
int
Child(char *arg)
{
    int    pid;
    char   str[64]= "This is the first page";

    GetPID(&pid);
    Tconsole("\nChild(%d): starting\n", pid);

    Tconsole("Child(%d): str = %s\n", pid, str);
    Tconsole("Child(%d): strlen(str) = %d\n", pid, strlen(str));

    memcpy(vmRegion, str, strlen(str)+1);  // +1 to copy nul character

    Tconsole("Child(%d): after memcpy\n", pid);

    if (strcmp(vmRegion, str) == 0)
        Tconsole("Child(%d): strcmp first attempt worked!\n", pid);
    else
        Tconsole("Child(%d): Wrong string read, first attempt\n", pid);

    assert(vmStats.faults == 1);
    assert(vmStats.new == 1);

    SemV(sem);  // forces a context switch with start5

    if (strcmp(vmRegion, str) == 0)
        Tconsole("Child(%d): strcmp second attempt worked!\n", pid);
    else
        Tconsole("Child(%d): Wrong string read, second attempt\n", pid);

    Tconsole("Child(%d): checking various vmStats\n", pid);
    assert(vmStats.faults == 1);
    assert(vmStats.new == 1);
    assert(vmStats.pageOuts == 0);
    assert(vmStats.pageIns == 0);

    Tconsole("Child(%d): terminating\n\n", pid);

    Terminate(117);
    return 0;
} /* Child */
Example #4
0
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 */