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

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…

fs.c static void bzero(int dev, int bno)

トップページ 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…

fs.c static void bfree(int dev, uint b)

トップページ 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…

fs.c static uint balloc(uint dev)

トップページ 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));…

fs.c static uint bmap(struct inode *ip, uint bn)

トップページ 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…

fs.c void iupdate(struct inode *ip)

トップページ 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*)…

fs.c static void itrunc(struct inode *ip)

トップページ 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…

fs.c void iput(struct inode *ip)

トップページ 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…

fs.c void iunlock(struct inode *ip)

トップページ 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…

fs.c void iunlockput(struct inode *ip)

トップページ 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ノードの…

fs.c void ilock(struct inode *ip)

トップページ 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);…

fs.c struct inode* idup(struct inode *ip)

トップページ 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関数は、引数で渡された…

fs.c static struct inode* iget(uint dev, uint inum)

トップページ 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…

fs.c struct inode* ialloc(uint dev, short type)

トップページ 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…

fs.c int writei(struct inode *ip, char *src, uint off, uint n)

トップページ 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…

fs.c int readi(struct inode *ip, char *dst, uint off, uint n)

トップページ 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-…

fs.c void iinit(int dev)

トップページ 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, …

fs.c int namecmp(const char *s, const char *t)

トップページ 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で指定されたアドレスから配置されている…

fs.c struct inode* dirlookup(struct inode *dp, char *name, uint *poff)

トップページ 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…

fs.c int dirlink(struct inode *dp, char *name, uint inum)

トップページ 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.…

fs.c static char* skipelem(char *path, char *name)

トップページ 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…

fs.c static struct inode* namex(char *path, int nameiparent, char *name)

トップページ 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…

fs.c struct inode* nameiparent(char *path, char *name)

トップページ 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で渡されたファイルパスが指…

fs.c struct inode* namei(char *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で渡されたファイルパスが指定す…

#define BBLOCK(b, sb) (b/BPB + sb.bmapstart)

トップページ 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が含まれるセクタのセ…

#define BPB (BSIZE*8)

トップページ 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単位で算出するマクロです。

#define IBLOCK(i, sb) ((i) / IPB + sb.inodestart)

トップページ 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ノードが含まれるセクタのセクタ番号を算出するマク…

#define IPB (BSIZE / sizeof(struct dinode))

トップページ 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…