예제 #1
0
파일: scheduler.c 프로젝트: pykello/arunos
void schedule(void)
{
	int i;
	for (i = 0; i < PROCESS_COUNT_MAX; i++) {
		struct Process *proc = NULL;

		round_robin_index++;
		if (round_robin_index == PROCESS_COUNT_MAX)
		{
			round_robin_index = 0;
		}

		proc = &process_table[round_robin_index];

		if (proc->state == READY) {
			current_process = proc;
			proc_start(proc);
		}
	}

	/* no process? panic */
	mon_status(0, 0);
	dump_scheduler_status();
	kprintf("PANIC");
	while(1);
}
예제 #2
0
u32 procwrap_start(union trapped_args *args, void *pr_ctxt)
{
    u32 ret;

    ret = proc_start(((struct process_context *)pr_ctxt)->processor);
    return ret;
}
예제 #3
0
파일: proc-test.c 프로젝트: hakit-dev/hakit
int main(int argc, char *argv[])
{
	log_init(NAME);

	if (options_parse(&argc, argv, NULL) != 0) {
		exit(1);
	}

	proc_start(argc-1, argv+1,
		   (proc_out_func_t) proc_out_func,
		   (proc_out_func_t) proc_err_func,
		   (proc_term_func_t) proc_term_func, NULL);

	sys_run();

	return 0;
}
예제 #4
0
static int tool_procedural_iter(goxel_t *goxel, const inputs_t *inputs,
                                int state, const vec2_t *view_size,
                                bool inside)
{
    int snaped = 0;
    vec3_t pos, normal;
    box_t box;
    gox_proc_t *proc = &goxel->proc;
    const bool down = inputs->mouse_down[0];

    if (proc->state == PROC_PARSE_ERROR) return 0;

    // XXX: duplicate code with tool_brush_iter.
    if (inside)
        snaped = goxel_unproject(
                goxel, view_size, &inputs->mouse_pos,
                goxel->painter.op == OP_ADD && !goxel->snap_offset,
                &pos, &normal);
    if (snaped) {
        if (goxel->tool == TOOL_BRUSH && goxel->snap_offset)
            vec3_iaddk(&pos, normal, goxel->snap_offset * goxel->tool_radius);
        pos.x = round(pos.x - 0.5) + 0.5;
        pos.y = round(pos.y - 0.5) + 0.5;
        pos.z = round(pos.z - 0.5) + 0.5;
        box = bbox_from_extents(pos, 0.5, 0.5, 0.5);
        render_box(&goxel->rend, &box, false, NULL, false);
    }
    if (state == STATE_IDLE) {
        if (snaped) state = STATE_SNAPED;
    }
    if (state == STATE_SNAPED) {
        if (!snaped) return STATE_IDLE;
        if (down) {
            image_history_push(goxel->image);
            proc_stop(proc);
            proc_start(proc, &box);
            state = STATE_PAINT;
        }
    }
    if (state == STATE_PAINT) {
        if (!down) state = STATE_IDLE;
    }
    return state;
}
예제 #5
0
파일: main.c 프로젝트: defsky/FunOS
kernel_main()
{
	disp_str("-------------\"kernel_main\" start-----------------\n");

	proc_id = 0;
	ticks = 0;
	k_reenter = 0;

	pcb_init(task_tty,TASK_PROC,TTY0);
	pcb_init(TestA,USER_PROC,TTY1);
	pcb_init(TestB,USER_PROC,TTY1);
	pcb_init(TestC,USER_PROC,TTY2);

	//init_clock();

	p_proc_ready = proc_table;
	proc_start();

	//stop here
	while(1){}
}
예제 #6
0
파일: authorize.c 프로젝트: 00001/plan9port
/*
 *  Run a command to authorize or refuse entry.  Return status 0 means
 *  authorize, -1 means refuse.
 */
void
authorize(dest *dp)
{
	process *pp;
	String *errstr;

	dp->authorized = 1;
	pp = proc_start(s_to_c(dp->repl1), (stream *)0, (stream *)0, outstream(), 1, 0);
	if (pp == 0){
		dp->status = d_noforward;
		return;
	}
	errstr = s_new();
	while(s_read_line(pp->std[2]->fp, errstr))
		;
	if ((dp->pstat = proc_wait(pp)) != 0) {
		dp->repl2 = errstr;
		dp->status = d_noforward;
	} else
		s_free(errstr);
	proc_free(pp);
}
예제 #7
0
파일: translate.c 프로젝트: npe9/harvey
/* pipe an address through a command to translate it */
extern dest *
translate(dest *dp)
{
	process *pp;
	String *line;
	dest *rv;
	char *cp;
	int n;

	pp = proc_start(s_to_c(dp->repl1), (stream *)0, outstream(), outstream(), 1, 0);
	if (pp == 0) {
		dp->status = d_resource;
		return 0;
	}
	line = s_new();
	for(;;) {
		cp = Brdline(pp->std[1]->fp, '\n');
		if(cp == 0)
			break;
		if(strncmp(cp, "_nosummary_", 11) == 0){
			nosummary = 1;
			continue;
		}
		n = Blinelen(pp->std[1]->fp);
		cp[n-1] = ' ';
		s_nappend(line, cp, n);
	}
	rv = s_to_dest(s_restart(line), dp);
	s_restart(line);
	while(s_read_line(pp->std[2]->fp, line))
		;
	if ((dp->pstat = proc_wait(pp)) != 0) {
		dp->repl2 = line;
		rv = 0;
	} else
		s_free(line);
	proc_free(pp);
	return rv;
}
예제 #8
0
파일: thread_perf.c 프로젝트: hazirguo/BPLE
/* run a function under a set of processes */
static double run_processes(int nprocs, void *(*fn)(int ))
{
	int i;
	pid_t *ids = calloc(sizeof(*ids), nprocs);
	double t;

	barrier_setup(&barriers[0]);
	barrier_setup(&barriers[1]);

	for (i=0;i<nprocs;i++) {
		ids[i] = proc_start(fn, i);
		if (ids[i] == (pid_t)-1) {
			for (i--;i>=0;i--) {
				kill(ids[i], SIGTERM);
			}
			exit(1);
		}
	}

	barrier_parent(&barriers[0], nprocs);
	t = barrier_parent(&barriers[1], nprocs);

	for (i=0;i<nprocs;i++) {
		int rc;
		rc = proc_join(ids[i]);
		if (rc != 0) {
			fprintf(stderr, "Process %d failed : %s\n", i, strerror(errno));
			exit(1);
		}
	}

	barrier_cleanup(&barriers[0]);
	barrier_cleanup(&barriers[1]);

	free(ids);

	return t;
}
예제 #9
0
파일: smtpd.c 프로젝트: 99years/plan9
String*
startcmd(void)
{
	int n;
	char *filename;
	char **av;
	Link *l;
	String *cmd;

	/*
	 *  ignore the filterstate if the all the receivers prefer it.
	 */
	filterstate = optoutall(filterstate);

	switch (filterstate){
	case BLOCKED:
	case DELAY:
		rejectcount++;
		logmsg("Blocked");
		filename = dumpfile(s_to_c(senders.last->p));
		cmd = s_new();
		s_append(cmd, "cat > ");
		s_append(cmd, filename);
		pp = proc_start(s_to_c(cmd), instream(), 0, outstream(), 0, 0);
		break;
	case DIALUP:
		logmsg("Dialup");
		rejectcount++;
		reply("554 5.7.1 We don't accept mail from dial-up ports.\r\n");
		/*
		 * we could exit here, because we're never going to accept mail
		 * from this ip address, but it's unclear that RFC821 allows
		 * that.  Instead we set the hardreject flag and go stupid.
		 */
		hardreject = 1;
		return 0;
	case DENIED:
		logmsg("Denied");
		rejectcount++;
		reply("554-5.7.1 We don't accept mail from %s.\r\n",
			s_to_c(senders.last->p));
		reply("554 5.7.1 Contact postmaster@%s for more information.\r\n",
			dom);
		return 0;
	case REFUSED:
		logmsg("Refused");
		rejectcount++;
		reply("554 5.7.1 Sender domain must exist: %s\r\n",
			s_to_c(senders.last->p));
		return 0;
	default:
	case NONE:
		logmsg("Confused");
		rejectcount++;
		reply("554-5.7.0 We have had an internal mailer error "
			"classifying your message.\r\n");
		reply("554-5.7.0 Filterstate is %d\r\n", filterstate);
		reply("554 5.7.0 Contact postmaster@%s for more information.\r\n",
			dom);
		return 0;
	case ACCEPT:
		/*
		 * now that all other filters have been passed,
		 * do grey-list processing.
		 */
		if(gflag)
			vfysenderhostok();
		/* fall through */

	case TRUSTED:
		/*
		 *  set up mail command
		 */
		cmd = s_clone(mailer);
		n = 3;
		for(l = rcvers.first; l; l = l->next)
			n++;
		av = malloc(n * sizeof(char*));
		if(av == nil){
			reply("450 4.3.2 We're busy right now, try later\r\n");
			s_free(cmd);
			return 0;
		}

		n = 0;
		av[n++] = s_to_c(cmd);
		av[n++] = "-r";
		for(l = rcvers.first; l; l = l->next)
			av[n++] = s_to_c(l->p);
		av[n] = 0;
		/*
		 *  start mail process
		 */
		pp = noshell_proc_start(av, instream(), outstream(),
			outstream(), 0, 0);
		free(av);
		break;
	}
	if(pp == 0) {
		reply("450 4.3.2 We're busy right now, try later\r\n");
		s_free(cmd);
		return 0;
	}
	return cmd;
}