2021-10-24から1日間の記事一覧

spinlock.c void getcallerpcs(void *v, uint pcs[])

トップページ jupiteroak.hatenablog.com spinlock.c https://github.com/mit-pdos/xv6-public/blob/master/spinlock.c#L71 void getcallerpcs(void *v, uint pcs[]) { uint *ebp; int i; ebp = (uint*)v - 2; for(i = 0; i < 10; i++){ if(ebp == 0 || ebp …

spinlock.c void popcli(void)

トップページ jupiteroak.hatenablog.com spinlock.c https://github.com/mit-pdos/xv6-public/blob/master/spinlock.c#L116 void popcli(void) { if(readeflags()&FL_IF) panic("popcli - interruptible"); if(--mycpu()->ncli < 0) panic("popcli"); if(my…

spinlock.c void pushcli(void)

トップページ jupiteroak.hatenablog.com spinlock.c https://github.com/mit-pdos/xv6-public/blob/master/spinlock.c#L116 void pushcli(void) { int eflags; eflags = readeflags(); cli(); if(mycpu()->ncli == 0) mycpu()->intena = eflags & FL_IF; my…

spinlock.c void release(struct spinlock *lk)

トップページ jupiteroak.hatenablog.com spinlock.c https://github.com/mit-pdos/xv6-public/blob/master/spinlock.c#L46 void release(struct spinlock *lk) { if(!holding(lk)) panic("release"); lk->pcs[0] = 0; lk->cpu = 0; // Tell the C compiler …

spinlock.c int holding(struct spinlock *lock)

トップページ jupiteroak.hatenablog.com spinlock.c https://github.com/mit-pdos/xv6-public/blob/master/spinlock.c#L89 int holding(struct spinlock *lock) { int r; pushcli(); r = lock->locked && lock->cpu == mycpu(); popcli(); return r; }holdi…

spinlock.c void acquire(struct spinlock *lk)

トップページ jupiteroak.hatenablog.com spinlock.c https://github.com/mit-pdos/xv6-public/blob/master/spinlock.c#L24 void acquire(struct spinlock *lk) { pushcli(); // disable interrupts to avoid deadlock. if(holding(lk)) panic("acquire"); /…

spinlock.c void initlock(struct spinlock *lk, char *name)

トップページ jupiteroak.hatenablog.com spinlock.c https://github.com/mit-pdos/xv6-public/blob/master/spinlock.c#L12 void initlock(struct spinlock *lk, char *name) { lk->name = name; lk->locked = 0; lk->cpu = 0; }initlock関数は、排他制御の…