static void allstep () { 
    long i; 
    for (i=0; i<procs; i++) { 
	if (!process_step(i,processes[i])) { 
	    if (processes[i] && processes[i]->active) { 
		// document final PC position 
		if (output) fprintf(output, "%ld,%ld,%ld,%ld,%ld,unload\n", 
		    sysclock, i, processes[i]->pid, 
		    processes[i]->kind, processes[i]->pc);
		if (pages) { 
		    long j;
		    for (j=0; j<MAXPROCPAGES; j++) 
			fprintf(pages,"%ld,%ld,%ld,%ld,%ld,out\n",
			    sysclock,i,j,processes[i]->pid, processes[i]->kind); 
		} 
		process_unload(i,processes[i]); 
	    } 
	    processes[i]=NULL; 
            if (!empty()) {
		processes[i]=dequeue();
	        sim_log(LOG_LOAD,"process %2d; pc %04d: loaded\n",i, processes[i]->pc); 
		if (output) fprintf(output, "%ld,%ld,%ld,%ld,%ld,load\n", 
		    sysclock, i, processes[i]->pid, 
		    processes[i]->kind, processes[i]->pc);
	    } 
	} 
    } 
} 
示例#2
0
文件: omnius.c 项目: zvxr-tech/omnius
/*
 * This is the entry point for unloading a process with omnius.
 */
int
omnius_unload(blob_t *blob) {
    int ret = EXIT_FAILURE;

    /* find the proc based on pid */
    secmem_process_t *proc = g_pid_lookup[blob->head.pid];
    if (proc) {
        ret = process_unload(blob, proc);
        free(proc);
    }

    g_pid_lookup[blob->head.pid] = NULL;

    return ret;
}