您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ switchuvm函数代码示例

51自学网 2021-06-03 08:35:54
  C++
这篇教程C++ switchuvm函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中switchuvm函数的典型用法代码示例。如果您正苦于以下问题:C++ switchuvm函数的具体用法?C++ switchuvm怎么用?C++ switchuvm使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了switchuvm函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: handleLeftDoubleClick

void handleLeftDoubleClick(){  WindowQueue *pwindowQueue;  Widget *pwidget;  pwindowQueue = getClickedWindowQueue();  if (pwindowQueue)  {    focusDismiss();    switchuvm(pwindowQueue->proc);    pwidget = getClickedWidget(pwindowQueue->window);    if (pwidget)    {      switch (pwidget->type)      {      case iconView:        pwidget->context.iconView->onLeftDoubleClickHandler.triggered = 1;        break;      default:        break;      }    }  }  if (proc == 0)    switchkvm();  else    switchuvm(proc);}
开发者ID:finallyjustice,项目名称:xv6_gui,代码行数:28,


示例2: handleMouseDrag

void handleMouseDrag(){  if (drag_state == 0)  {    pwque = getDraggedWindowQueue();    if (pwque)    {      drag_state = 1;      if (pwque != lastWindow && pwque != &windowLine[0])        reorderQueue(pwque);    }    else      drag_state = 2;  }  else  if (drag_state == 1)  {    switchuvm(pwque->proc);    counter = (counter + 1) % 20;    if (counter == 0)      isdraw = 1;    else      isdraw = 0;    moveWindow(pwque->window, mouse_info.x_position, mouse_info.y_position, down_pos_x, down_pos_y, isdraw);  }  if (proc == 0)    switchkvm();  else    switchuvm(proc);}
开发者ID:finallyjustice,项目名称:xv6_gui,代码行数:30,


示例3: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure.intgrowproc(int n){  uint sz;  struct proc *p;  sz = proc->sz;  if(n > 0){    if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  } else if(n < 0){    if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  }  proc->sz = sz;  //other threads  int tid = proc->tid;  acquire(&ptable.lock);  for( p = ptable.proc; p < &ptable.proc[NPROC]; p++)    if(p->tid == tid)      p->sz = sz;  release(&ptable.lock);  switchuvm(proc);  return 0;}
开发者ID:sding3,项目名称:CS537,代码行数:29,


示例4: scheduler

//PAGEBREAK: 42// Per-CPU process scheduler.// Each CPU calls scheduler() after setting itself up.// Scheduler never returns.  It loops, doing://  - choose a process to run//  - swtch to start running that process//  - eventually that process transfers control//      via swtch back to the scheduler.voidscheduler(void){  struct proc *p;  for(;;){    // Enable interrupts on this processor.    sti();    // Loop over process table looking for process to run.    acquire(&ptable.lock);    for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){      if(p->state != RUNNABLE)        continue;      // Switch to chosen process.  It is the process's job      // to release ptable.lock and then reacquire it      // before jumping back to us.      proc = p;      switchuvm(p);      p->state = RUNNING;      swtch(&cpu->scheduler, proc->context);      switchkvm();      // Process is done running for now.      // It should have changed its p->state before coming back.      proc = 0;    }    release(&ptable.lock);  }}
开发者ID:haa777,项目名称:332Assignment3,代码行数:40,


示例5: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure./// Need to add locks to this function to make it work with threads!intgrowproc(int n){  uint sz;        sz = proc->sz;  if(n > 0){    if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  } else if(n < 0){    if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  }  proc->sz = sz;  switchuvm(proc);    acquire(&ptable.lock);  // Now update the sz variable for all other processes sharing this address space    struct proc *p;  for(p = ptable.proc; p < &ptable.proc[NPROC]; p++) {      if(p->pgdir == proc->pgdir && p != proc) {		p->sz = proc->sz;      }  }   release(&ptable.lock);  return 0;}
开发者ID:markcoatsworth,项目名称:CS537,代码行数:34,


示例6: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure.intgrowproc(int n){  uint sz;  struct proc* p;    sz = proc->sz;  if(n > 0){    if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  } else if(n < 0){    if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  }  proc->sz = sz;  acquire(&ptable.lock);  for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){	  if(p->state == UNUSED || p->pgdir != proc->pgdir)		  continue;	  p->sz = sz;  }  release(&ptable.lock);    switchuvm(proc);  return 0;}
开发者ID:vener91,项目名称:cs537,代码行数:27,


示例7: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure.intgrowproc(int n){    uint sz;    sz = proc->sz;    if(n > 0) {        //prevent heap from overwriting our stack        int se=proc->se;        int page_n = PGROUNDUP(n);        int heap_size = PGROUNDUP(proc->sz);        if((heap_size + page_n) > (se - PGSIZE)) {            //panic("Heap is overwriting stack!"); //just return -1 is sufficient. No need to panic!            return -1;        }        if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0)            return -1;    } else if(n < 0) {        if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0)            return -1;    }    proc->sz = sz;    switchuvm(proc);    return 0;}
开发者ID:tmfahey,项目名称:cs537,代码行数:27,


示例8: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure.intgrowproc(int n){    uint sz;    // struct proc *p;    sz = proc->sz;    acquire(&ptable.lock);    // if(proc->thread == 1){    //     for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){    //         if(proc->parent == p || p->parent == proc->parent){    //             if(n > 0){    //                 if((sz = allocuvm(p->pgdir, sz, sz + n)) == 0)    //                     return -1;    //             }else if(n < 0){    //                 if((sz = deallocuvm(p->pgdir, sz, sz + n)) == 0)    //                     return -1;    //             }    //         }    //     }    // }    if(n > 0){        if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0)            return -1;    }else if(n < 0){        if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0)            return -1;    }    proc->sz = sz;    release(&ptable.lock);    switchuvm(proc);    return 0;}
开发者ID:rgavs,项目名称:cosc301-proj04,代码行数:34,


示例9: scheduler

void scheduler(){	struct proc *p;		while(1){		/* set interrupts ??? */		for(p=ptable.proc;p<&ptable.proc[NPROC];p++){			if(p->state!=RUNNABLE){				continue;			}			/* switch to this process. */			proc=p;			switchuvm(p);			p->state=RUNNING;			swtch(&cpu.scheduler,p->context);			/* __asm__ volatile( */			/* 		"movq %0,%%rsp;" */			/* 		: */			/* 		:"r"((char *)(proc->tf) - 8) */			/* 		: */			/* 				 ); */			/* __asm__ volatile("retq;"); */					}	}}
开发者ID:karthikbox,项目名称:os,代码行数:29,


示例10: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure.intgrowproc(int n){  uint sz;  struct proc * p;  acquire(&sbrklock);  sz = proc->sz;  if(n > 0){    if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  } else if(n < 0){    if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  }  acquire(&ptable.lock);  for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){      if(p->pgdir == proc->pgdir)        p->sz = sz;  }  release(&ptable.lock);  switchuvm(proc);  release(&sbrklock);  return 0;}
开发者ID:giang12,项目名称:Introduction-to-Operating-Systems,代码行数:32,


示例11: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure.intgrowproc(int n){  uint sz;    sz = proc->sz;  uint stack;  stack = proc->stack;//  cprintf("/n/n/n/nStack %x/t Size: %x/n",(uint)PGROUNDDOWN(stack-PGSIZE),sz);  cprintf("Heap needs: [%x] more/t Stack: %x/t Process size: %x/n",n,(uint)PGROUNDDOWN(stack-PGSIZE),sz);  if (n > (uint)PGROUNDDOWN(stack-PGSIZE) - sz){//	  cprintf("Heap needs: [%x] more/t Stack: %x/t Process size: %x/n",n,(uint)PGROUNDDOWN(stack-PGSIZE),sz);	  cprintf("Heap growing too much!/n");//	  proc->killed=1;	  return -1;   }  if(n > 0){    if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  } else if(n < 0){    if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0)      return -1;  }  proc->sz = sz;  switchuvm(proc);  return 0;}
开发者ID:f2008700,项目名称:Acads,代码行数:34,


示例12: clone

intclone(void(*fcn)(void*), void *arg, void *stack){  int i, pid;  struct proc *np;  uint * sp;// ALLOCATES A NEW THREAD //  // Allocate process.  if((np = allocproc()) == 0)    return -1;  //if a thread calls clone it makes its parent the parent of the new thread  if(proc->isThread == 1){    np->parent = proc->parent;    *np->tf = *proc->parent->tf;    np->sz = proc->parent->sz;    np->pgdir = proc->parent->pgdir;  }  else{      np->parent = proc;    *np->tf = *proc->tf;    np->sz = proc->sz;    np->pgdir = proc->pgdir;  }    np->isThread = 1;  np->state = RUNNABLE;  // Clear %eax so that fork returns 0 in the child.  np->tf->eax = 0;  pid = np->pid;  for(i = 0; i < NOFILE; i++)    if(proc->ofile[i])      np->ofile[i] = filedup(proc->ofile[i]);  np->cwd = idup(proc->cwd);  safestrcpy(np->name, proc->name, sizeof(proc->name));  //safestrcpy(np->name, "ThreadChildren", sizeof("ThreadChildren"));  // Push argument strings, prepare rest of stack in ustack.  sp = (uint *) ((char *)stack + PGSIZE);  sp -= 2;  sp[0] = 0xffffffff;  // fake return PC  sp[1] = (uint) arg;  // Commit to the user image.s  np->tf->eip = (uint) fcn;  // main  np->tf->esp = (uint) sp;  //cprintf("[proc clone]-pid-%d/n",pid);  switchuvm(np);  //return pid on success not 0 yo  return pid;}
开发者ID:giang12,项目名称:Introduction-to-Operating-Systems,代码行数:58,


示例13: clone

int clone(void(*fcn)(void*), void *arg, void *stack) { // FIX THIS !  int pid;  struct proc *newtask;  // Copy process state from p.  /*if((np->pgdir = copyuvm(proc->pgdir, proc->sz)) == 0){    kfree(np->kstack);    np->kstack = 0;    np->state = UNUSED;    return -1;  }*/    // Allocate process.  if((newtask = allocproc()) == 0)    return -1;  newtask->isThread = 1; // labelling as thread  newtask->sz = proc->sz;  newtask->parent = proc;  *newtask->tf = *proc->tf;  // Clear %eax so that clone returns 0 in the child.  newtask->tf->eax = 0;  /*for(i = 0; i < NOFILE; i++)    if(proc->ofile[i])      np->ofile[i] = filedup(proc->ofile[i]);  np->cwd = idup(proc->cwd);*/  safestrcpy(newtask->name, proc->name, sizeof(proc->name));   pid = newtask->pid;  // lock to force the compiler to emit the np->state write last.  /*  acquire(&ptable.lock);  np->state = RUNNABLE;  release(&ptable.lock);*/       // temporary array to copy into the bottom of new stack   // for the thread (i.e., to the high address in stack  // page, since the stack grows downward)  uint ustack[2];  uint sp = (uint)stack+PGSIZE;  ustack[0] = 0xffffffff; // fake return PC  ustack[1] = (uint)arg;  sp -= 8; // stack grows down by 2 ints/8 bytes  if (copyout(newtask->pgdir, sp, ustack, 8) < 0) {    // failed to copy bottom of stack into new task    return -1;  }  newtask->tf->eip = (uint)fcn;  newtask->tf->esp = sp;  switchuvm(newtask);  newtask->state = RUNNABLE;    return pid;}
开发者ID:ktchungbin,项目名称:cosc301-proj04,代码行数:57,


示例14: scheduler

// Per-CPU process scheduler.// Each CPU calls scheduler() after setting itself up.// Scheduler never returns.  It loops, doing://  - choose a process to run//  - swtch to start running that process//  - eventually that process transfers control//      via swtch back to the scheduler.voidscheduler(void){  struct proc *p;  initlock(&tlock, "time");  for(;;){    // Enable interrupts on this processor.    sti();    // Loop over process table looking for process to run.    acquire(&ptable.lock);    for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){      if(p->state != RUNNABLE)        continue;      if(count_high_pri() != 0 && p->priority == 1)		continue;      // Switch to chosen process.  It is the process's job      // to release ptable.lock and then reacquire it      // before jumping back to us.      proc = p;      switchuvm(p);      p->state = RUNNING;	  //swtch(&cpu->scheduler, proc->context);	  //switchkvm();	  uint ticks0 = 0, ticks1 = 0;	  	  acquire(&tlock);//Acquire the timer lock      ticks0 = ticks;//Start timer	  release(&tlock);	  swtch(&cpu->scheduler, proc->context);      acquire(&tlock);//Acquire the timer lock      ticks1 = ticks;//Stop timer and add the ticks to htick or ltick depending upon the priority of the process.      release(&tlock);	  if (p->priority == 1) {		p->ltick = p->ltick + (ticks1 - ticks0);      } else {		p->htick = p->htick + (ticks1 - ticks0);	  }	        switchkvm();      // Process is done running for now.      // It should have changed its p->state before coming back.      proc = 0;    }    release(&ptable.lock);  }}
开发者ID:mbansal2090,项目名称:OS_XV6_HW2,代码行数:63,


示例15: scheduler

//PAGEBREAK: 42// Per-CPU process scheduler.// Each CPU calls scheduler() after setting itself up.// Scheduler never returns.  It loops, doing://  - choose a process to run//  - swtch to start running that process//  - eventually that process transfers control//      via swtch back to the scheduler.voidscheduler(void){  struct proc *p;  int makeShiftTimer = 0;  for(;;){    // Enable interrupts on this processor.    sti();        makeShiftTimer++;	if (makeShiftTimer >= 10000){		for (p = ptable.proc; p < &ptable.proc[NPROC]; p++){			if (p->pri != 1){				continue;			}				p->pri = 0;			//cprintf("Bumping up: %s", p->name);		}		makeShiftTimer = 0;	} 	int zeroCount = 0;	for (p = ptable.proc; p < &ptable.proc[NPROC]; p++){		zeroCount++;	}	//	cprintf("Number of process on queue 0: %d/n", zeroCount);	//don't uncomment this if you want to be able to use the terminal. At all.    // Loop over process table looking for process to run.    acquire(&ptable.lock);    for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){      if((p->state != RUNNABLE) || (zeroCount != 0 && p->pri == 1))	//im pretty sure the case for there being nothing on the 0 queue and stuff on the 1 queue is implicit here	//we'll wait and see I guess        continue;      // Switch to chosen process.  It is the process's job      // to release ptable.lock and then reacquire it      // before jumping back to us.      proc = p;      switchuvm(p);      p->state = RUNNING;      swtch(&cpu->scheduler, proc->context);      switchkvm();      // Process is done running for now.      // It should have changed its p->state before coming back.      proc = 0;    }    release(&ptable.lock);  }}
开发者ID:CptKirklnd,项目名称:xv6-labs,代码行数:63,


示例16: handleLeftClick

void handleLeftClick(){  WindowQueue *pwindowQueue;  Widget *pwidget;  pwindowQueue = getClickedWindowQueue();  if (pwindowQueue)  {    if (pwindowQueue != lastWindow && pwindowQueue == &windowLine[0])    {      if (proc == 0)        switchkvm();      else        switchuvm(proc);      return;    }    if (pwindowQueue != lastWindow  && pwindowQueue != &windowLine[0])    {      focusDismiss();      reorderQueue(pwindowQueue);      switchuvm(pwindowQueue->proc);    }    pwidget = getClickedWidget(pwindowQueue->window);    if (pwidget)    {      switch (pwidget->type)      {      case button:        focusDismiss();        switchuvm(pwindowQueue->proc);        pwidget->context.button->onLeftClickHandler.triggered = 1;        break;      case imageView:        focusDismiss();        switchuvm(pwindowQueue->proc);        pwidget->context.imageView->onLeftClickHandler.triggered = 1;        break;      case iconView:        focusIconView(pwidget->context.iconView);        break;      default:        focusDismiss();        switchuvm(pwindowQueue->proc);        break;      }    }    else    {        focusDismiss();        switchuvm(pwindowQueue->proc);    }  }  if (proc == 0)    switchkvm();  else    switchuvm(proc);}
开发者ID:finallyjustice,项目名称:xv6_gui,代码行数:57,


示例17: scheduler

//PAGEBREAK: 42// Per-CPU process scheduler.// Each CPU calls scheduler() after setting itself up.// Scheduler never returns.  It loops, doing://  - choose a process to run//  - swtch to start running that process//  - eventually that process transfers control//      via swtch back to the scheduler.voidscheduler(void){  struct proc *p;  int i;#if 0  for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){    if(p->state != UNUSED)      cprintf("proc %d has priority  %d/n", p->pid, p->priority);  }#endif  for(;;){    // Enable interrupts on this processor.    sti();    acquire(&ptable.lock);    // Loop through priority queues looking for runnable processe    for(i = 0; i < 32; i++) {      if(priority_q[i] != NULL) {        p = priority_q[i];#if 0      }    }    // Loop over process table looking for process to run.    for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){#endif        if(p->state != RUNNABLE)          panic("Not runnable in ready queue");        // Switch to chosen process.  It is the process's job        // to release ptable.lock and then reacquire it        // before jumping back to us.        proc = p;        switchuvm(p);        p->state = RUNNING;        //**** remove        //cprintf("remove in scheduler/n");        removefromq(p);        //****        swtch(&cpu->scheduler, proc->context);        switchkvm();        // Process is done running for now.        // It should have changed its p->state before coming back.        proc = 0;      }    }  release(&ptable.lock);  }
开发者ID:jayakumark,项目名称:advanced_os_class,代码行数:62,


示例18: SwitchToProccess

void SwitchToProccess(struct proc* process){	proc = process;	switchuvm(process);	process->state = RUNNING;	swtch(&cpu->scheduler, proc->context);	switchkvm();	// Process is done running for now.	// It should have changed its p->state before coming back.	proc = 0;}
开发者ID:jahandideh-iman,项目名称:XV6_Scheduling,代码行数:12,


示例19: clone

int clone(void(*fcn)(void*), void *arg, void *stack) {  int i, pid;	//cprintf("proc.c void *arg print: %d/n", &arg);  struct proc *newtask;	// Allocate process.  if ((newtask = allocproc()) == 0) return -1;    //newtask->kstack = stack;  newtask->isThread = 1; // labelling as thread  newtask->sz = proc->sz;	if (proc->isThread) {		newtask->parent = proc->parent;	}	else {  	newtask->parent = proc;	}  *newtask->tf = *proc->tf;  newtask->pgdir = proc->pgdir;  for(i = 0; i < NOFILE; i++)    if(proc->ofile[i])      newtask->ofile[i] = filedup(proc->ofile[i]);  newtask->cwd = idup(proc->cwd);  safestrcpy(newtask->name, proc->name, sizeof(proc->name));  // Clear %eax so that clone returns 0 in the child.  newtask->tf->eax = 0;  pid = newtask->pid;      // temporary array to copy into the bottom of new stack   // for the thread (i.e., to the high address in stack  // page, since the stack grows downward)  uint ustack[2];  uint sp = (uint)stack+PGSIZE;  ustack[0] = 0xffffffff; // fake return PC  ustack[1] = (uint)arg;  sp -= 8; // stack grows down by 2 ints/8 bytes  if (copyout(newtask->pgdir, sp, ustack, 8) < 0) {    // failed to copy bottom of stack into new task    cprintf("I'm crashing...");    return -1;  }  newtask->tf->eip = (uint)fcn;  newtask->tf->esp = sp;  switchuvm(newtask);  newtask->state = RUNNABLE;    return pid;}
开发者ID:Succubuster,项目名称:cosc301-proj04,代码行数:52,


示例20: clone

int clone(void (*fcn)(void*), void *arg, void *stack){    int i, pid;    struct proc *np;    if ((int)stack % PGSIZE != 0) {        return -1;    }    if ((np = allocproc()) == 0) {        return -1;    }    np->pgdir = proc->pgdir;    np->sz = proc->sz;    if (proc->is_thread == 1) {        np->parent = proc->parent;    }    else {        np->parent = proc;    }    *np->tf = *proc->tf;    np->is_thread = 1;    np->tf->eax = 0;    for(i = 0; i < NOFILE; i++) {        if(proc->ofile[i]) {            np->ofile[i] = filedup(proc->ofile[i]);        }    }    np->cwd = idup(proc->cwd);    safestrcpy(np->name, proc->name, sizeof(proc->name));    pid = np->pid;    uint ustack[2];    uint sp = (uint)stack+PGSIZE;    ustack[0] = 0xffffffff;    ustack[1] = (uint)arg;    sp -= 8;    if (copyout(np->pgdir, sp, ustack, 8) < 0) {        return -1;    }    np->tf->eip = (uint)fcn;    np->tf->esp = sp;    switchuvm(np);    np->state = RUNNABLE;    return pid;}
开发者ID:qsheridan,项目名称:cosc301-proj04,代码行数:51,


示例21: scheduler

voidscheduler(void){  struct proc *p;  ptable.timeToReset = MAX_TIME_TO_RESET;  for(;;){    // Enable interrupts on this processor.    sti();    // Check for procs in ready list    int pri = 0;    for (;;) {      acquire(&ptable.lock);      if(ptable.pPriQ[pri] != 0) {         // Switch to chosen process.  It is the process's job        // to release ptable.lock and then reacquire it        // before jumping back to us.        p = ptable.pPriQ[pri];	if (p->state != RUNNABLE)	  panic("scheduled unready process");        proc = p;        switchuvm(p);        p->state = RUNNING;        ptable.pPriQ[pri] = ptable.pPriQ[pri]->next;	p->next = 0;	ptable.timeToReset--;        if (ptable.timeToReset == 0)          resetPri();   // Run priority-reset function        swtch(&cpu->scheduler, proc->context);        switchkvm();        // Process is done running for now.        // It should have changed its p->state before coming back.        proc = 0;        release(&ptable.lock);	pri = 0;        break;      }      else {        release(&ptable.lock);        if (pri == N_PRI-1)          pri = 0;        else	  pri++;      }    }  }}
开发者ID:ConnorReilly,项目名称:xv6-psu-kernel-repos,代码行数:50,


示例22: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure.intgrowproc(int n){  uint sz = proc->sz;  if(n > 0){    if(!(sz = allocuvm(proc->pgdir, sz, sz + n)))      return -1;  } else if(n < 0){    if(!(sz = deallocuvm(proc->pgdir, sz, sz + n)))      return -1;  }  proc->sz = sz;  switchuvm(proc);  return 0;}
开发者ID:mmerler,项目名称:osgroup,代码行数:17,


示例23: scheduler

//PAGEBREAK: 42// Per-CPU process scheduler.// Each CPU calls scheduler() after setting itself up.// Scheduler never returns.  It loops, doing://  - choose a process to run//  - swtch to start running that process//  - eventually that process transfers control//      via swtch back to the scheduler.void scheduler(void) {	struct proc *p, *q;	unsigned long long min  ;		for(;;){		// Enable interrupts on this processor.		sti();				// Loop over process table looking for process to run.		acquire(&ptable.lock);		p = 0;		min = INFINITO ;		for(q = ptable.proc; q < &ptable.proc[NPROC]; q++){			if (q->state == RUNNABLE){				if (min > q->curr_pass){ 					p = q;					min = q->curr_pass;				}			}		}		if (p!=0){			/*Testes			if (p->pid > 3){				for(q = ptable.proc; q < &ptable.proc[NPROC]; q++){					cprintf("%d %d %d/n", q->pid, q->Ntickts, q->slices);				}				cprintf("/n/n/n/n");			}			End */						p->slices++; 			proc = p;			switchuvm(p);			p->state = RUNNING;						swtch(&cpu->scheduler, proc->context);			switchkvm();			// Process is done running for now.			p->curr_pass+=p->pass;						// It should have changed its p->state before coming back.			proc = 0;		}				release(&ptable.lock);	}}
开发者ID:Alesom,项目名称:xv6,代码行数:56,


示例24: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure.intgrowproc(int n){  uint sz;    sz = proc->sz;  if(n > 0){    if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0)  // allocate  the page      return -1;  } else if(n < 0){    if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0) // deallocate the page      return -1;  }  proc->sz = sz;  switchuvm(proc);  return 0;}
开发者ID:gttiankai,项目名称:xv6,代码行数:19,


示例25: getClickedWindowQueue

WindowQueue* getClickedWindowQueue(){  WindowQueue *p = lastWindow;  int x = mouse_info.x_position;  int y = mouse_info.y_position;  //get clicked window  while (p)  {    switchuvm(p->proc);    if (inWindowRange(p->window, x, y))    {      return (p);    }    p = p->prev;  }  return 0;}
开发者ID:finallyjustice,项目名称:xv6_gui,代码行数:17,


示例26: scheduler

//PAGEBREAK: 42// Per-CPU process scheduler.// Each CPU calls scheduler() after setting itself up.// Scheduler never returns.  It loops, doing://  - choose a process to run//  - swtch to start running that process//  - eventually that process transfers control//      via swtch back to the scheduler.voidscheduler(void){    struct proc *p;    for(;;) {        // Enable interrupts on this processor.        sti();        // Loop over process table looking for process to run.        acquire(&ptable.lock);        uint min_order = 1<<30;        uint idx = -1;        for (p = ptable.proc; p < &ptable.proc[NPROC]; p++)            if (p->state == RUNNABLE && p->order < min_order) {                min_order = p->order;                idx = p - ptable.proc;            }        if (idx == -1)        {            release(&ptable.lock);            continue;        }        //for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){        //  if(p->state != RUNNABLE)        //    continue;        // Switch to chosen process.  It is the process's job        // to release ptable.lock and then reacquire it        // before jumping back to us.        p = ptable.proc + idx;        proc = p;        switchuvm(p);        p->state = RUNNING;        swtch(&cpu->scheduler, proc->context);        switchkvm();        // Process is done running for now.        // It should have changed its p->state before coming back.        proc = 0;        //break;        //}        release(&ptable.lock);    }}
开发者ID:forwchen,项目名称:xv6-lab,代码行数:54,


示例27: scheduler

//PAGEBREAK: 42// Per-CPU process scheduler.// Each CPU calls scheduler() after setting itself up.// Scheduler never returns.  It loops, doing://  - choose a process to run//  - swtch to start running that process//  - eventually that process transfers control//      via swtch back to the scheduler.voidscheduler(void){  struct proc *p;  for(;;){    // Enable interrupts on this processor.    sti();    // Loop over process table looking for process to run.    acquire(&ptable.lock);    /*    for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){      if(p->state != RUNNABLE)        continue;    */    int i;    for(i = 0; i < PRIORITIES; i ++)      {	p = ready[i];	if(p == 0)	  continue;      // Switch to chosen process.  It is the process's job      // to release ptable.lock and then reacquire it      // before jumping back to us.      proc = p;      switchuvm(p);      p->state = RUNNING;      remove_from_ready(p);      swtch(&cpu->scheduler, proc->context);      switchkvm();      // Process is done running for now.      // It should have changed its p->state before coming back.      proc = p = 0;      /*      if(current_priority == 31)	current_priority = 0;      else      current_priority = i + 1; */    }    release(&ptable.lock);  }}
开发者ID:jayakumark,项目名称:advanced_os_class,代码行数:53,


示例28: growproc

// Grow current process's memory by n bytes.// Return 0 on success, -1 on failure.intgrowproc(int n){  uint sz;//  cprintf("Before acquire/n");   acquire(&locksbrk);  // cprintf("After acquire/n");    sz = proc->sz;  if(n > 0){    if((sz = allocuvm(proc->pgdir, sz, sz + n)) == 0)      {        release(&locksbrk);        return -1;      }  } else if(n < 0){    if((sz = deallocuvm(proc->pgdir, sz, sz + n)) == 0)      {  release(&locksbrk);	  return -1;      }  }  proc->sz = sz;    struct proc *p;  acquire(&ptable.lock);    for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){       if(/*p->parent == proc &&*/ p->pgdir == proc->pgdir)        	p->sz=proc->sz;      }    release(&ptable.lock); // cprintf("Before release/n");  release(&locksbrk); // cprintf("After release/n");    switchuvm(proc);  //release(&locksbrk);  return 0;}
开发者ID:rasiga,项目名称:OS-projects,代码行数:47,


示例29: scheduler

voidscheduler(void){  struct proc *p;  for(;;){    // Enable interrupts on this processor.    sti();    // Loop over process table looking for process to run.    acquire(&ptable.lock);    for(p = ptable.proc; p < &ptable.proc[NPROC]; p++){      if(p->state != RUNNABLE)        continue;      // Switch to chosen process.  It is the process's job      // to release ptable.lock and then reacquire it      // before jumping back to us.      if (p->allowed_cpu > -1 && p->allowed_cpu == cpu->id) {        //cprintf("/n Processing prod %d, at cpu %d", p->pid, cpu->id);      } else if (p->allowed_cpu > -1) {        //cprintf("/nSkipping proc %d at cpu %d, proc->allowed_cpu %d", p->pid, cpu->id, p->allowed_cpu);          continue;      }rerun:      proc = p;      switchuvm(p);      p->state = RUNNING;      swtch(&cpu->scheduler, proc->context);      switchkvm();      // Process is done running for now.      // It should have changed its p->state before coming back.      if (cpu->preempt_disable_count > 0) {          // Go back and reschedule the same process          goto rerun;      }      proc = 0;    }    release(&ptable.lock);  }}
开发者ID:sdharan,项目名称:xv6-rcu,代码行数:45,


示例30: handleRightClick

void handleRightClick(){  WindowQueue *pwindowQueue;  Widget *pwidget;  pwindowQueue = getClickedWindowQueue();  if (pwindowQueue)  {    pwidget = getClickedWidget(pwindowQueue->window);    if (pwidget)    {    }  }  if (proc == 0)    switchkvm();  else    switchuvm(proc);}
开发者ID:finallyjustice,项目名称:xv6_gui,代码行数:18,



注:本文中的switchuvm函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ swizzle函数代码示例
C++ switch_yield函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。