当前位置:首页 > 高级OS实验一文件系统
215 第9章
Superbloick read successfully. Addr of superblock in filesys is 16. offset of cyl-block in filesys is 24. offset of inode-block in filesys is 32. offset of first data block after cg is 760. offset of sylinder group is 64.
The total amount of data blocks is 14627182. Every disk block accommodates 64 inodes.
Breakpoint 1, main() at superblock.c:51
51 printf(“Every sylinder group accommodates %d inodes.\\n”,sblock.fd_ipg); (gdb) print /x sblock
$1 = {fs_link = 0x0, fs_rolled = 0x2,fs_sblkno = 0x10, fs_cblkno = 0x18, fs_iblkno = 0x20, fs_dblkno = 0x2f8,
fs_cgoffdset = 0x40, fs_cgmask = 0xffffffc0, fs_time = 0x47db3d88, fs_size =0xdf316e, fs_dsize = 0xdbcf49,
fs_ncg = 0x12a, fs_bsize = 0x2000, fs_fsize = 0x400, fs_frag = 0x8, fs_minfree = 0x1, fs_rotdelay =0x0, fs_rps = 0x3c,
fs_bmask =0xffffe000, fs_fmask = 0xfffffc00, fs_bshift = 0xd, fs_fshift =0xa, fs_maxcontig = 0x7, fs_maxbpg = 0x800,
fs_fragshift = 0x3, fs_fsbtodb=0x1, fs_sbsize = 0x800, fs_csmask = 0xfffffe00, fs_csshift = 0x9,fs_nindir = 0x800,
fs_inopb=0x40,fs_nspf = 0x2, fs_optim = 0x0, fs_state = 0x344b5fb0, fs_si=0x1, fs_trackskew = 0x0, fs_id={0x0,
0x0}, fs_csaddr = 0x2f8, fs_cssize = 0x1400, fs_cgsize = 0x2000, fs_ntrak = 0x30, fs_nsect = 0x80, fs_spc = 0x1800,
fs_ncyl = 0x129a, fs_cpg = 0x10, fs_ipg = 0x16c0, fs_fpg = 0xc000, fs_cstotal = {cs_ndir = 0x82a5, cs_nbfree = 0x9clca,
cs_nifree = 0x160f35, cs_nffree = 0x57a6c}, fs_fmod = 0x0, fs_clean = 0xfd, fs_ronly = 0x0, fs_flags = 0x0, fs_fsmnt = {
0x2f, 0x0
0x0
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
fs_version = 0x2, fs_logbno = 0x620, fs_reclaim = 0x1, fs_sparecon2 = 0x0, fs_npsect = 0x80, fs_qbmask = {val = {0xlfff,
0x0}}, fs_qfmask = {val = {0x3ff, 0x0}, fs_postblformat = 0x1, fs_nrpos = 0x8, fs_postbloff = 0x35c,
fs_rotbloff = 0x560, fs_magic = 0x11954, fs_space = {0x8}}
6)另外开一个shell窗口,运行“mdb-k”来验证取出数据的正确性。mdb命令及结果如下: >::dnlc!grep disk.c
ffffff008bba5200 ffffff008bba5600 disk.c
可知disk.c的vnode在dnlc缓存中的地址是ffffff008bba5200.
>ffffff008bba5200::print vnode_t v_data |::print inode_t i_ufsvfs|::print ufsvfs_t vfs_bufp|::print buf_t b_un.b_fs|::print struct fs
{
fs_link = 0 fs_rolled = 0x2 fs_sblkno = 0x10 fs_cblkno = 0x18 fs_iblkno = 0x20 fs_dblkno = 0x2f8 fs_cgoffset = 0x40 fs_cgmask = 0xffffffc0 fs_time = 0x47db48bf fs_size = 0xdf316e fs_dsize = 0xdbcf49 fs_ncg = 0x12a fs_bsize = 0x2000 fs_fsize = 0x400 fs_frag = 0x8 fs_minfree = 0x1 fs_rotdelay = 0 fs_rps = 0x3c
fs_bmask = 0xffffe000 fs_fmask = 0xfffffc00 fs_bshift = 0xd fs_fshift = 0xa
fs_maxcontig = 0x7 fs_maxbpg = 0x800 fs_fragshift = 0x3 fs_fsbtodb = 0x1 fs_sbsize = 0x800
fs_csmask = 0xfffffe00 fs_csshift = 0x9 fs_nindir = 0x800 fs_inopb = 0x40 fs_nspf = 0x2 fs_optim = 0
fs_state = 0x344b5479 fs_si = 0x1
fs_trackskew = 0 fs_id = [ 0 , 0 ] fs_csaddr = 0x2f8 fs_cssize = 0x1400 fs_cgsize = 0x2000 fs_ntrak = 0x30 fs_nsect = 0x80 fs_spc = 0x1800 fs_ncy1 = 0x129a fs_cpg = 0x10 fs_ipg = 0x16c0 fs_fpg = 0xc000
fs_cstotal = { cs_ndir = 0x82a5 cs_nbfree = 0x9clc9 cs_nifree = 0x160f32 cs_nffree = 0x57a6f }
fs_fmod = '\\0' fs_clean = '\\375' fs_ronly = '\\0' fs_flags = '\\0' fs_fsmnt = [\fs_cgrotor = 0xe2 fs_u = { fs_csp_pad= [0x8553f000,0xffffff00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] fs_csp = 0xffffff008553f000 }
fs_cpc = 0x1 fs_opostbl = [ [0,0x1,0x2,0x3,0x4,0x5,0x6,0x7] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] [0,0,0,0,0,0,0,0] ] fs_sparecon = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...] fs_version = 0x2 fs_logbno = 0x620 fs_reclaim = 0 fs_sparecon2 = 0 fs_npsect = 0x80 fs_qbmask = { val = [0xlfff,0] } fs_qfmask = { val = [0x3ff,0] } fs_postblformat = 0x1
218 第9章
fs_nrpos=0x8 fs_postbloff=0x35c
fs_rotbloff=0x560 fs_magic=0x11954
fs_space=[ 0x8 ] } 可以看到,结果与gdb显示的完全吻合。 7) 在a.out中观察根目录的inode结构。 (gdb) b 88
Breakpoint 2 at 0x8050ffb: file superblock.c line 88 (gdb) c Continuing. Every sylinder group accommodates 5824 inodes. Sylinder group read successfully. The number of directories of this cg is 1626. The number of free block is 1846. The cylinder modified at year 2008,month 2,day 14. The number of data blocks is 49152. The type of file corresponding to inode 0 is 0. The type of file corresponding to inode 1 is 0. The type of file corresponding to inode 2 is 40755. The direct block address corresponding to inode 2 are 34360, 0 and 0. Root directory has 1536 bytes and holds actually 0 512-byte blocks.
Breakpoint 2, main() at superblock.c:88 88 if (pread(disk, general_buffer,DIRBLKSIZ*16, ldbtob((inode[2].ic_db[0])*2))==-1) (gdb)p/x inode[2]
$2={ic_smode=0x4led,ic_nlink=0x35,ic_Suid=0x0,ic_sgid=0x0, ic_lsize=0x600,ic_atime=0x47db3d4e, ic_atspare=0x2eef6,ic_mtime=0x47db3aef,ic_mtspare=0x29e5a,ic_ctime =0x47db3aef,ic_stspare=0x29e5a,ic_db={ 0x8638,0x0,
ADDR INUMBER DEVICE CHAIN ffffff0084c2dcf8 2 6600000000 2 可知,根目录的vnode的地址为ffffff0084c2dcf8。 > ffffff0084c2dcf8:: print inode_t
{ i_chain=[ffffff0084b18020,ffffff0084cfe608] i_freef=ffffff0084c2dcf8 i_freeb=ffffff0084c2dcf8 i_ic={
共分享92篇相关文档