Exemplo n.º 1
0
int 
sys_twakeup(void)
{
    int tid;
    if(argint(0,&tid) < 0){
        return -1;
    }
        twakeup(tid);
        return 0;
}
Exemplo n.º 2
0
Arquivo: bio.c Projeto: vnea/UPMC
/**
 * @fn void iodone(struct buf *bp)
 * Permet de signaler la fin d'une E/S sur un buffer et reveille les processus endormis
 * sur le buffer (à condition qu'il en existe).
 *
 * Mark I/O complete on a buffer, release it if I/O is asynchronous,
 * and wake up anyone waiting for it.
 * @param bp : pointeur vers un buffer
 */
void iodone(struct buf *bp) {
  
  /*  if(bp->b_flags&B_MAP) */
  /*     mapfree(bp); */
  bp->b_flags |= B_DONE;
  if (bp->b_flags&B_ASYNC)
    brelse(bp);
  else {
    bp->b_flags &= ~B_WANTED;
    twakeup((caddr_t)bp);
  }
}
Exemplo n.º 3
0
void sem_signal(struct Semaphore *s)
{
  lock_acquire(&s->locksem);
  if(!empty_q(&s->t_q))
  {
      twakeup(pop_q(&s->t_q));
  }
  else
  {
    s->count++;
  }
  lock_release(&s->locksem);
}
Exemplo n.º 4
0
void sem_signal(struct Semaphore *s) {
	lock_acquire(&s->lock);
	if (s->count > 0) {
		s->count++;
		lock_release(&s->lock);
	}
	else {
		if (empty_q(&s->q) == 1)
			s->count++;
		else
			twakeup(pop_q(&s->q));
		lock_release(&s->lock);
	}
}
Exemplo n.º 5
0
Arquivo: bio.c Projeto: vnea/UPMC
/**
 * @fn void brelse(struct buf *bp)
 * Libere le buffer sans générer de E/S.
 *
 * Release the buffer, with no I/O implied.
 * @param bp : pointeur vers un buffer
 */
void brelse(struct buf *bp) {
    struct buf **backp;
    int flags; int s;
    
    if (bp->b_flags & B_WANTED) {
        twakeup((caddr_t) bp);
    }

    if (bfreelist.b_flags & B_WANTED) {
        twakeup(&bfreelist);
        bfreelist.b_flags &= ~B_WANTED;
    }
    
    s = splbio();
    spl(BDINHB);
    backp = &bfreelist.av_forw;
    (*backp)->av_forw = bp;
    bp->av_back = *backp;
    *backp = bp;
    bp->av_forw = &bfreelist;
    bp->b_flags &=~ (B_WANTED | B_BUSY | B_ASYNC);
    bfreelist.b_count++;
    spl(s);
}
Exemplo n.º 6
0
Arquivo: mesg.c Projeto: gallexis/M1
void DeposerFile(t_fmsg *f, void *d) {

	/* Code du TP à ajouter */
	while(f->nb_msg >= MAXMSG)
	    tsleep(GetElecProc(),f->file_pleine);
	
	lock();
	
	f->nb_msg++;    
	f->deposer++;
	f->deposer %= MAXMSG;	
	f->file[f->deposer].data = d;
    f->file[f->deposer].exp = GetElecProc() ;
    
    unlock();    
    
    twakeup(f->file_vide);
}	
Exemplo n.º 7
0
Arquivo: mesg.c Projeto: gallexis/M1
void *RetirerFile(t_fmsg *f, int *exp) {

	/* Code du TP à ajouter */
	while(f->nb_msg <= 0)
	    tsleep(GetElecProc(),f->file_vide);
	
	lock();
	
	f->nb_msg--;    
	f->retirer++;
	f->retirer %= MAXMSG;	
	*exp = f->file[f->retirer].exp ;

    unlock();    
    
    twakeup(f->file_pleine);
	
	return f->file[f->retirer].data;
}
Exemplo n.º 8
0
Arquivo: mesg.c Projeto: gallexis/M1
void unlock() {
	vlock = 0;
	twakeup(&vlock);
}