如何在Solaris 11中获取物理页面

时间:2017-01-06 11:53:25

标签: debugging solaris

我在Solaris 11上使用mdb。我已经使用"打开了一个文件。 tail -f file_name"另一个ssh会话中的命令。我得到了tail命令的pid和tail命令打开的文件的vnode。获得Vnode之后,我解雇了#34;步行页面"在这个文件上。不幸的是,我没有在步行中获得任何页面。如何获取虚拟页面和物理页面?

1 个答案:

答案 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

101e05205​​0: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“)... -