Пример #1
0
int P2_Startup(void *arg){
	
	USLOSS_Console(" \n---------Starting Test 9 ----------\n");
		
	sem = P1_SemCreate(0);  
	
	int childpid1, child_status1, exit_childpid1;
	int childpid2, child_status2, exit_childpid2;


	childpid1 = P1_Fork("child_p", child_p, NULL, USLOSS_MIN_STACK * 4, 2);
  	USLOSS_Console("Child PID created %d \n", childpid1);	

	childpid2 = P1_Fork("killer", killer, &childpid1, USLOSS_MIN_STACK * 4, 3);
  	USLOSS_Console("Child PID created %d \n", childpid2);

	exit_childpid1 = P1_Join(&child_status1);	

	exit_childpid2 = P1_Join(&child_status2);


	USLOSS_Console("end first %d (should be %d)        status %d (should be 444)\nend second %d (should be %d)        status %d (should be -4)\n",
			exit_childpid1,childpid1,child_status1,exit_childpid2,childpid2, child_status2);
		

	USLOSS_Console(" ---------Ending Test 9 ----------\n");
	return 0;
}
Пример #2
0
int P3_Startup(void *notused) 
{
    	USLOSS_Console("P3_Startup\n");
    	P1_Fork("P5_Startup", P5_Startup, NULL, 4 *  USLOSS_MIN_STACK, 5);
 	int i;
	for (i = 0; i < 40; i++) {
    		P1_Fork("P4_Startup", P4_Startup, NULL, 4 *  USLOSS_MIN_STACK, 5);
	}	
	P1_DumpProcesses();
	int status = 2;
	int val = P1_Join(&status);
	printf("P1_Join return value: %d\n", val);
	P1_DumpProcesses();
    	P1_Fork("P8_Startup", P8_Startup, NULL, 4 *  USLOSS_MIN_STACK, 3);
	USLOSS_Console("P3_Finished\n");
	return 0; 
}
Пример #3
0
int TermDriver(void *arg){
        int unit = (int) arg;
        termReaderMB[unit] = P2_MboxCreate(1,INT_SIZE);
        termLookAhead[unit] = P2_MboxCreate(10,MAX_LINE);
	termCharToWrite[unit] = P2_MboxCreate(1,INT_SIZE);
	termWriteSem[unit] = P1_SemCreate(1);
        termRunningSem[unit] = P1_SemCreate(0);
        P1_Fork("Term Reader", TermReader, (void *) unit,USLOSS_MIN_STACK, 2);
        P1_P(termRunningSem[unit]);
        /*Turn on Terminal interrupts*/
        int ctrl = 0;
	int ctrl2 = 0;
        ctrl = USLOSS_TERM_CTRL_RECV_INT(ctrl);
        USLOSS_DeviceOutput(USLOSS_TERM_DEV,unit,(void *)ctrl);
        P1_V(running);
        int status = 0;
	int c = 0;
        int result;
        while(1){
                result = P1_WaitDevice(USLOSS_TERM_DEV,unit,&status);
                if(result != 0 || done != 0){
                        break;
                }
                if(USLOSS_TERM_STAT_RECV(status) == USLOSS_DEV_BUSY){
                        P2_MboxSend(termReaderMB[unit],&status,&INT_SIZE);
                }
		if(USLOSS_TERM_STAT_XMIT(status) == USLOSS_DEV_READY){
			if(P2_MboxCondReceive(termCharToWrite[unit],&c,&INT_SIZE) != -2){
				ctrl2 = 0;
				ctrl2 = USLOSS_TERM_CTRL_XMIT_INT(ctrl2);
				ctrl2 = USLOSS_TERM_CTRL_RECV_INT(ctrl2);
				ctrl2 = USLOSS_TERM_CTRL_CHAR(ctrl2, c);
				ctrl2 = USLOSS_TERM_CTRL_XMIT_CHAR(ctrl2);
				USLOSS_DeviceOutput(USLOSS_TERM_DEV, unit, (void *)ctrl2);
			}else{
				ctrl2 = 0;
				ctrl2 = USLOSS_TERM_CTRL_RECV_INT(ctrl2);
				USLOSS_DeviceOutput(USLOSS_TERM_DEV, unit, (void *)ctrl2);
			}
		}
        }
        status = 0;
        P2_MboxCondSend(termReaderMB[unit],&ctrl,&status);
        P1_Join(&status);
        return unit;
}
Пример #4
0
int P2_Wait(int *status){
        if (permissionCheck()) {
                return -1;
        }
	return P1_Join(status);
}