2021-10-20から1日間の記事一覧
トップページ 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…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L42 static void bzero(int dev, int bno) { struct buf *bp; bp = bread(dev, bno); memset(bp->data, 0, BSIZE); log_write(bp); brelse(bp); }bze…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L81 static void bfree(int dev, uint b) { struct buf *bp; int bi, m; bp = bread(dev, BBLOCK(b, sb)); bi = b % BPB; m = 1 << (bi % 8); if((bp…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L56 static uint balloc(uint dev) { int b, bi, m; struct buf *bp; bp = 0; for(b = 0; b < sb.size; b += BPB){ bp = bread(dev, BBLOCK(b, sb));…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L372 static uint bmap(struct inode *ip, uint bn) { uint addr, *a; struct buf *bp; if(bn < NDIRECT){ if((addr = ip->addrs[bn]) == 0) ip->add…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L220 void iupdate(struct inode *ip) { struct buf *bp; struct dinode *dip; bp = bread(ip->dev, IBLOCK(ip->inum, sb)); dip = (struct dinode*)…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L407 static void itrunc(struct inode *ip) { int i, j; struct buf *bp; uint *a; for(i = 0; i < NDIRECT; i++){ if(ip->addrs[i]){ bfree(ip->de…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L331 void iput(struct inode *ip) { acquiresleep(&ip->lock); if(ip->valid && ip->nlink == 0){ acquire(&icache.lock); int r = ip->ref; releas…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L315 void iunlock(struct inode *ip) { if(ip == 0 || !holdingsleep(&ip->lock) || ip->ref < 1) panic("iunlock"); releasesleep(&ip->lock); }iu…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L355 void iunlockput(struct inode *ip) { iunlock(ip); iput(ip); }iunlockput関数は、引数で渡されたiノードのスリープロックを解放し、iノードの…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L287 void ilock(struct inode *ip) { struct buf *bp; struct dinode *dip; if(ip == 0 || ip->ref < 1) panic("ilock"); acquiresleep(&ip->lock);…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L276 struct inode* idup(struct inode *ip) { acquire(&icache.lock); ip->ref++; release(&icache.lock); return ip; }idup関数は、引数で渡された…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L241 static struct inode* iget(uint dev, uint inum) { struct inode *ip, *empty; acquire(&icache.lock); // Is the inode already cached? empt…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L194 struct inode* ialloc(uint dev, short type) { int inum; struct buf *bp; struct dinode *dip; for(inum = 1; inum < sb.ninodes; inum++){ b…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L481 int writei(struct inode *ip, char *src, uint off, uint n) { uint tot, m; struct buf *bp; if(ip->type == T_DEV){ if(ip->major < 0 || ip…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L452 int readi(struct inode *ip, char *dst, uint off, uint n) { uint tot, m; struct buf *bp; if(ip->type == T_DEV){ if(ip->major < 0 || ip-…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L171 void iinit(int dev) { int i = 0; initlock(&icache.lock, "icache"); for(i = 0; i < NINODE; i++) { initsleeplock(&icache.inode[i].lock, …
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L516 int namecmp(const char *s, const char *t) { return strncmp(s, t, DIRSIZ); }namecmp関数は、引数pで指定されたアドレスから配置されている…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L524 struct inode* dirlookup(struct inode *dp, char *name, uint *poff) { uint off, inum; struct dirent de; if(dp->type != T_DIR) panic("dir…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L551 int dirlink(struct inode *dp, char *name, uint inum) { int off; struct dirent de; struct inode *ip; // Check that name is not present.…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L595 static char* skipelem(char *path, char *name) { char *s; int len; while(*path == '/') path++; if(*path == 0) return 0; s = path; while…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L624 static struct inode* namex(char *path, int nameiparent, char *name) { struct inode *ip, *next; if(*path == '/') ip = iget(ROOTDEV, ROO…
トップページ jupiteroak.hatenablog.comfs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L666 struct inode* nameiparent(char *path, char *name) { return namex(path, 1, name); }nameiparent関数は、引数pathで渡されたファイルパスが指…
トップページ jupiteroak.hatenablog.com fs.c https://github.com/mit-pdos/xv6-public/blob/master/fs.c#L659 struct inode* namei(char *path) { char name[DIRSIZ]; return namex(path, 0, name); }namei関数は、引数pathで渡されたファイルパスが指定す…
トップページ jupiteroak.hatenablog.com fs.h https://github.com/mit-pdos/xv6-public/blob/master/fs.h#L48 #define BBLOCK(b, sb) (b/BPB + sb.bmapstart)BBLOCKマクロは、ビットマップ領域上においてセクタ番号bに対応しているbitが含まれるセクタのセ…
トップページ jupiteroak.hatenablog.com fs.h https://github.com/mit-pdos/xv6-public/blob/master/fs.h#L45 // Bitmap bits per block #define BPB (BSIZE*8)BPBはブロック1個当たりに含まれるデータをbit単位で算出するマクロです。
トップページ jupiteroak.hatenablog.com fs.h https://github.com/mit-pdos/xv6-public/blob/master/fs.h#L42 #define IBLOCK(i, sb) ((i) / IPB + sb.inodestart)IBLOCKマクロは、iノード番号から、そのiノードが含まれるセクタのセクタ番号を算出するマク…
トップページ jupiteroak.hatenablog.com fs.h https://github.com/mit-pdos/xv6-public/blob/master/fs.h#L39 #define IPB (BSIZE / sizeof(struct dinode))IPBマクロは、ブロック1個当たりに含まれるiノード数を算出します。fs.h #define BSIZE 512 // blo…