我在Solaris 11上使用mdb。我已经使用"打开了一个文件。 tail -f file_name"另一个ssh会话中的命令。我得到了tail命令的pid和tail命令打开的文件的vnode。获得Vnode之后,我解雇了#34;步行页面"在这个文件上。不幸的是,我没有在步行中获得任何页面。如何获取虚拟页面和物理页面?
答案 0 :(得分:0)
我做了以下。
1)用'tail -f'打开文件。
2)获取mdb中的pid。获取打开文件的Vnode。
3)从打开文件的Vnode_t获取page_t。
4)左移到页码为0xD,它将给出pp2pa效果。
以下是mdb中的dcmds。
> :: pgrep tail
S PID PPID PGID SID UID FLAGS ADDR NAME
R 2889 2882 2889 2850 0 0x4a004000 0000060013f29890尾部
> 0000060013f29890 :: PFILES
FD TYPE VNODE INFO
0 REG 00000600162f6740 /export/home/chaitanya/OpenSolaris/README.opensolaris
1 CHR 000006001a290400 / devices / pseudo / pts @ 0:2
2 CHR 000006001a290400 / devices / pseudo / pts @ 0:2
> 00000600162f6740 ::步行页
70004781480
700040b0400
> 70004781480 :: print -at page_t
{
70004781480 u_offset_t p_offset = 0x2000
70004781488 struct vnode *p_vnode = 0x600162f6740
70004781490 selock_t p_selock = 0
70004781494 uint_t p_vpmref = 0x11d9d
70004781498 struct page *p_hash = 0x70002f79b00
700047814a0 struct page *p_vpnext = 0x700040b0400
700047814a8 struct page *p_vpprev = 0x700040b0400
700047814b0 struct page *p_next = 0x70004781480
700047814b8 struct page *p_prev = 0x70004781480
700047814c0 ushort_t p_lckcnt = 0
700047814c2 ushort_t p_cowcnt = 0
700047814c4 kcondvar_t p_cv = {
700047814c4 ushort_t _opaque = 0
}
700047814c6 kcondvar_t p_io_cv = {
700047814c6 ushort_t _opaque = 0
}
700047814c8 uchar_t p_iolock_state = 0
700047814c9 volatile uchar_t p_szc = 0
700047814ca uchar_t p_fsdata = 0
700047814cb uchar_t p_state = 0x40
700047814cc uchar_t p_nrm = 0x2
700047814cd uchar_t p_vcolor = 0x2
700047814ce uchar_t p_index = 0
700047814cf uchar_t p_toxic = 0
700047814d0 void *p_mapping = 0
700047814d8 pfn_t p_pagenum = 0x80f029
700047814e0 uint_t p_share = 0
700047814e4 uint_t p_sharepad = 0
700047814e8 uint_t p_slckcnt = 0
700047814ec uint_t p_kpmref = 0
700047814f0 struct kpme *p_kpmelist = 0
700047814f8 kmutex_t p_ilock = {
700047814f8 void *[1] _opaque = [ 0 ]
}
}
用0xD左移到页码0x80f029,它将给出pp2pa
> 101E052000,100 :: dump -p
\/ 1 2 3 4 5 6 7 8 9 a b c d e f v123456789abcdef
101e052000:75742069 742e2020 4e6f7220 646f2079 ut it。也不是吗
101e052010:6f752068 61766520 746f206b 65657020你必须保持
101e052020:7468650a 20202020 206e616d 65206f70。名称op
101e052030:656e736f 6c617269 732e7368 2c206275 ensolaris.sh,bu
101e052040:74207468 61742773 20746865 206e616d这就是nam
101e052050:65207765 276c6c20 75736520 696e2074 e我们将在t
中使用101e052060:68657365 206e6f74 65732e0a 0a202020 hese notes ...
101e052070:20205468 656e206d 616b6520 74686520然后制作
101e052080:666f6c6c 6f77696e 67206368 616e6765更改后
101e052090:7320696e 20796f75 72206f70 656e736f s在您的openso中
101e0520a0:6c617269 732e7368 3a0a0a20 20202d20 laris.sh:.. -
101e0520b0:6368616e 67652047 41544520 746f2074将GATE更改为t
101e0520c0:6865206e 616d6520 6f662074 68652074他的名字
101e0520d0:6f702d6c 6576656c 20646972 6563746f op-level directo
101e0520e0:72792028 652e672e 2c0a2020 20202022 ry(例如,“
101e0520f0:74657374 77732229 2e0a0a20 20202d20 testws“)... -