Exemplo n.º 1
0
void KernelInit(void)
{
	KerStatInit();										/* 커널 상태 초기화								*/
	PCBListInit();										/* PCB 리스트 초기화 							*/
	ECBListInit();										/* ECB 리스트 초기화 							*/
	//ThreadInit();						/* 리눅스 커널을 이용한 쓰레드 초기화 [리눅스 포트 사용시 활성화] */
	procCreate(proc_background, &background_stack[STACK_SIZE - 1], PROC_CNT - 1);
	/* 백그라운드 프로세스 생성 */
}
Exemplo n.º 2
0
void procSetup(){
	int i, j;

	//Reset de la tabla de process
	for(i = 1 ; i < MAX_PROCESS ; i++){
		proc[i].pid = i - MAX_PROCESS;
		//Para que el pid pueda referenciarse con %MAX_PROCESS
		proc[i].status = FREE;
		for(j = 0 ; j < MAX_OPENFILES ; j++)
			proc[i].fds[j] = -1;

	}

	//Reset de la tabla de contextos
	for(i = 0 ; i < MAX_PROCESS_CONTEXTS ; i++){
		contexs[i].inUse = 0;
	}


	strcpy(proc[INIT_PROCESS].name, "init");
	proc[INIT_PROCESS].semChild = semGetID(0);
	proc[INIT_PROCESS].pid = INIT_PROCESS;
	proc[INIT_PROCESS].ppid = INIT_PROCESS;
	proc[INIT_PROCESS].status = RUNNING;
	proc[INIT_PROCESS].attachedTTY = 0;
	proc[INIT_PROCESS].fds[STDIN] = IN_0;
	proc[INIT_PROCESS].fds[STDOUT] = TTY_0;
	proc[INIT_PROCESS].fds[CURSOR] = TTY_CURSOR_0;
	proc[INIT_PROCESS].childCount = 0;


	int fds[3];
	fds[STDIN] = IN_0;
	fds[STDOUT] = TTY_0;
	fds[CURSOR] = TTY_CURSOR_0;


	schedSetUpInit(INIT_PROCESS, "init", 0);
	schedStart();
	schedSetUpIdle(procCreate("idle", (process_t)idle, (void *)getPage(), NULL,
			fds, 3, 0, NULL, 0, 0, 3));

	return;
}
Exemplo n.º 3
0
/*
 *  ======== daemon ========
 */
static Int daemon(Void)
{

    GT_0trace(curTrace, GT_1CLASS, "daemon> thread created.\n");

    for (;;) {
        Processor_Handle proc;

        switch (getCmd(&proc)) {
            case CREATE: {
                putReply(procCreate(proc) ? SUCCESS : FAILURE);
                break;
            }

            case DELETE: {
                /* GT_1trace(curTrace, GT_ENTER, "daemon(0x%x) deleting ...\n",
                 *   proc);
                 */
                procDelete(proc);
                /* GT_1trace(curTrace, GT_ENTER, "daemon(0x%x) replying ...\n",
                 *   proc);
                 */
                putReply(SUCCESS);

                break;
            }

            case EXIT: {
                //GT_0trace(curTrace, GT_1CLASS, "daemon> thread terminating\n");
                putReply(SUCCESS);
                return (0);
            }

            default: {
                break;
            }
        }
    }
}
/*
 *  ======== daemon ========
 */
static Int daemon(Void)
{

    Log_print0(Diags_USER1, "[+1] daemon> thread created.");

    for (;;) {
        Processor_Handle proc;

        switch (getCmd(&proc)) {
            case CREATE: {
                putReply(procCreate(proc) ? SUCCESS : FAILURE);
                break;
            }

            case DELETE: {
                /* Log_print1(Diags_USER1, "daemon(0x%x) deleting ...",
                 *   (IArg)proc);
                 */
                procDelete(proc);
                /* Log_print1(Diags_USER1, "daemon(0x%x) replying ...",
                 *   (IArg)proc);
                 */
                putReply(SUCCESS);

                break;
            }

            case EXIT: {
                //Log_print0(Diags_USER1, "daemon> thread terminating");
                putReply(SUCCESS);
                return (0);
            }

            default: {
                break;
            }
        }
    }
}
Exemplo n.º 5
0
/*
 *  ======== Processor_create ========
 */
Processor_Handle Processor_create(String imageName, String linkCfg,
    Processor_Attrs *attrs)
{
    Processor_Handle proc = NULL;

    Log_print3(Diags_ENTRY, "[+E] Processor_create> "
            "Enter(imageName='%s', linkCfg='%s', attrs=0x%x)",
            (IArg)imageName, (IArg)linkCfg, (IArg)attrs);

#if MESSAGEQ_ENABLED
    /* This implementation requires attrs->name to be provided */
    if ((attrs == NULL) || (attrs->cpuId == NULL)) {
        Log_print0(Diags_USER7, "[+7] Processor_create> ERROR: invalid attrs");
        return (NULL);
    }

    if ((proc = xdc_runtime_Memory_alloc(NULL, sizeof(Processor_Obj),
            0, NULL)) == NULL) {
        Log_print0(Diags_USER7, "[+7] Processor_create> "
                "ERROR: Memory_alloc failed");
        return (NULL);
    }

    proc->hHeap = NULL;
    proc->heapId = (UInt16)Processor_INVALID;

    if (!procCreate(proc, attrs->cpuId)) {
        Processor_delete(proc);
        return (NULL);
    }
#endif

    Log_print1(Diags_EXIT, "[+X] Processor_create> return (0x%x)", (IArg)proc);

    return (proc);
}
Exemplo n.º 6
0
int contextCreate(processApi_t context){
	int i, *fds = getFDs(schedCurrentProcess());
	void *stack =  (void*)getPage();

	if(stack == NULL)
		return -1;

	/* Si no seteo fds los heredo de mi padre */
	for( i = 0 ; i < MAX_OPENFILES ; i++){
		if(context->fds[i] == -1){
			context->fds[i] = fds[i];
		}
		else if(context->fds[i] == -2)
			context->fds[i] = -1;
	}

	int ret = procCreate(context->name, context->process, stack, NULL,
			context->fds, MAX_OPENFILES, context->argc, context->argv,
			procAttachedTTY(schedCurrentProcess()), 0, context->priority);

	if(ret != -1)
		contextDestroy(context);
	return ret;
}