2021-10-01から1ヶ月間の記事一覧

sleeplock.c void releasesleep(struct sleeplock *lk)

トップページ jupiteroak.hatenablog.com sleeplock.c https://github.com/mit-pdos/xv6-public/blob/master/sleeplock.c#L34 void releasesleep(struct sleeplock *lk) { acquire(&lk->lk); lk->locked = 0; lk->pid = 0; wakeup(lk); release(&lk->lk); }r…

sleeplock.c int holdingsleep(struct sleeplock *lk)

トップページ jupiteroak.hatenablog.com sleeplock.c https://github.com/mit-pdos/xv6-public/blob/master/sleeplock.c#L44 int holdingsleep(struct sleeplock *lk) { int r; acquire(&lk->lk); r = lk->locked && (lk->pid == myproc()->pid); release(&…

sleeplock.c void acquiresleep(struct sleeplock *lk)

トップページ jupiteroak.hatenablog.com sleeplock.c https://github.com/mit-pdos/xv6-public/blob/master/sleeplock.c#L22 void acquiresleep(struct sleeplock *lk) { acquire(&lk->lk); while (lk->locked) { sleep(lk, &lk->lk); } lk->locked = 1; lk…

sleeplock.c void initsleeplock(struct sleeplock *lk, char *name)

トップページ jupiteroak.hatenablog.com sleeplock.c https://github.com/mit-pdos/xv6-public/blob/master/sleeplock.c#L13 void initsleeplock(struct sleeplock *lk, char *name) { initlock(&lk->lk, "sleep lock"); lk->name = name; lk->locked = 0; …

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関数は、排他制御の…

ide.c static void idestart(struct buf *b)

トップページ jupiteroak.hatenablog.com ide.c https://github.com/mit-pdos/xv6-public/blob/master/ide.c#L73 static void idestart(struct buf *b) { if(b == 0) panic("idestart"); if(b->blockno >= FSSIZE) panic("incorrect blockno"); int sector_p…

ide.c void iderw(struct buf *b)

トップページ jupiteroak.hatenablog.com ide.c https://github.com/mit-pdos/xv6-public/blob/master/ide.c#L137 void iderw(struct buf *b) { struct buf **pp; if(!holdingsleep(&b->lock)) panic("iderw: buf not locked"); if((b->flags & (B_VALID|B_D…

ide.c static int idewait(int checkerr)

トップページ jupiteroak.hatenablog.com ide.c https://github.com/mit-pdos/xv6-public/blob/master/ide.c#L38 static int idewait(int checkerr) { int r; while(((r = inb(0x1f7)) & (IDE_BSY|IDE_DRDY)) != IDE_DRDY) ; if(checkerr && (r & (IDE_DF|ID…

ide.c void ideintr(void)

トップページ jupiteroak.hatenablog.com ide.c https://github.com/mit-pdos/xv6-public/blob/master/ide.c#L103 void ideintr(void) { struct buf *b; // First queued buffer is the active request. acquire(&idelock); if((b = idequeue) == 0){ releas…

bio.c void brelse(struct buf *b)

トップページ jupiteroak.hatenablog.com bio.c https://github.com/mit-pdos/xv6-public/blob/master/bio.c#L120 void brelse(struct buf *b) { if(!holdingsleep(&b->lock)) panic("brelse"); releasesleep(&b->lock); acquire(&bcache.lock); b->refcnt--…

bio.c void bwrite(struct buf *b)

トップページ jupiteroak.hatenablog.com bio.c https://github.com/mit-pdos/xv6-public/blob/master/bio.c#L109 void bwrite(struct buf *b) { if(!holdingsleep(&b->lock)) panic("bwrite"); b->flags |= B_DIRTY; iderw(b); }bwrite関数は、バッファbに…

bio.c static struct buf* bget(uint dev, uint blockno)

トップページ jupiteroak.hatenablog.com bio.c https://github.com/mit-pdos/xv6-public/blob/master/bio.c#L61 static struct buf* bget(uint dev, uint blockno) { struct buf *b; acquire(&bcache.lock); // Is the block already cached? for(b = bcach…

bio.c struct buf* bread(uint dev, uint blockno)

トップページ jupiteroak.hatenablog.com bio.c https://github.com/mit-pdos/xv6-public/blob/master/bio.c#L96 struct buf* bread(uint dev, uint blockno) { struct buf *b; b = bget(dev, blockno); if((b->flags & B_VALID) == 0) { iderw(b); } return…

log.c static void read_head(void)

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L85 static void read_head(void) { struct buf *buf = bread(log.dev, log.start); struct logheader *lh = (struct logheader *) (buf->data); i…

log.c static void write_head(void)

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L101 static void write_head(void) { struct buf *buf = bread(log.dev, log.start); struct logheader *hb = (struct logheader *) (buf->data);…

log.c static void write_log(void)

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L177 static void write_log(void) { int tail; for (tail = 0; tail < log.lh.n; tail++) { struct buf *to = bread(log.dev, log.start+tail+1);…

log.c static void install_trans(void)

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L69 static void install_trans(void) { int tail; for (tail = 0; tail < log.lh.n; tail++) { struct buf *lbuf = bread(log.dev, log.start+tai…

log.c void log_write(struct buf *b)

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L213 void log_write(struct buf *b) { int i; if (log.lh.n >= LOGSIZE || log.lh.n >= log.size - 1) panic("too big a transaction"); if (log.…

log.c static void commit()

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L192 static void commit() { if (log.lh.n > 0) { write_log(); // Write modified blocks from cache to log write_head(); // Write header to …

log.c void end_op(void)

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L145 void end_op(void) { int do_commit = 0; acquire(&log.lock); log.outstanding -= 1; if(log.committing) panic("log.committing"); if(log.…

log.c void begin_op(void)

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L125 void begin_op(void) { acquire(&log.lock); while(1){ if(log.committing){ sleep(&log, &log.lock); } else if(log.lh.n + (log.outstandin…

log.c static void recover_from_log(void)

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L115 static void recover_from_log(void) { read_head(); install_trans(); // if committed, copy from log to disk log.lh.n = 0; write_head()…

log.c void initlog(int dev)

トップページ jupiteroak.hatenablog.com log.c https://github.com/mit-pdos/xv6-public/blob/master/log.c#L53 void initlog(int dev) { if (sizeof(struct logheader) >= BSIZE) panic("initlog: too big logheader"); struct superblock sb; initlock(&l…

fs.c void readsb(int dev, struct superblock *sb)

トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L31 void readsb(int dev, struct superblock *sb) { struct buf *bp; bp = bread(dev, 1); memmove(sb, bp->data, sizeof(*sb)); brelse(bp); }read…