From c0612f1981dcc71fb219fe89c9e5abcbf9712cae Mon Sep 17 00:00:00 2001 From: gatieme Date: Thu, 2 Jun 2016 13:41:37 +0800 Subject: [PATCH] =?UTF-8?q?thread=5Finfo=E5=92=8C=E5=86=85=E6=A0=B8?= =?UTF-8?q?=E6=A0=88=E7=9A=84=E5=AD=A6=E4=B9=A0...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../01-process/01-task/print_thread_info/1 | Bin 0 -> 6631 bytes .../01-process/01-task/print_thread_info/1.c | 19 +++++++++++ .../print_thread_info/print_thread_info.c | 31 +++++++++--------- 3 files changed, 34 insertions(+), 16 deletions(-) create mode 100755 study/kernel/01-process/01-task/print_thread_info/1 create mode 100644 study/kernel/01-process/01-task/print_thread_info/1.c diff --git a/study/kernel/01-process/01-task/print_thread_info/1 b/study/kernel/01-process/01-task/print_thread_info/1 new file mode 100755 index 0000000000000000000000000000000000000000..a3e7156e9e37a8ab9c6ace35a3725f40b375a924 GIT binary patch literal 6631 zcmcIoeP|rV6`$KXec17bEW3#ltM!(gsU50|B+H82I$>q$>{W99h%FbFgzTMlC*7r| zJ8`!PXJd$q9FybfRDqO+{!yTQ2qsNDBS_OjhJ>8A5T%t;Ran1h6^8hl z*d&^PG~qF132{eaKC7B$-m2;a!9yf#3eXHkP`ty@1app%IQeUkp+tx8YH?KN=!pc# zj$$=bxzQ4rIP+C14xQsscBGPBTG^$Q9rJgoVGwifAN7r%4%J?VWlH|9^spN)-hovS2bGCaPcFIK6_|J^vd@`Fk*4O)FHrbiY~&?a;{g20ZjFsl4`F@>kV?i?@GyqG=oK>_F1>3TO_3SIwq11S$Xr~H; z*+j9JDpKW1J6%X6l4R0F`lw?(S;*wcUq~5P^nuauS@TPm?ZcTYB+cyV-z5dYVjbT&sb$JV83SxN#L~_ou_6~P9A+UuxRQ%`64EZ!GO_xHtFkhRswc1tba>h+Z%<}caRPof)S5Z$) zJ$LbFOI*P0k7V}!n+Hj|^sk^feKTP0oG*sQ)@~jW2!1wTmYaTtO0^B|$x4-`ACt+> z`NBtkXqtu?Aa^fZxjZ&D7FoObH1!E~PnR_KA-{I}1qmUx*5Ae9=SuC`mCG|TRECh+ z%(-Zl(wuoVS~bhjMYD3GYE~di-{6&f)eEmT8^SEVZBuBCv8~(JcS9 zUhobI%<1T2>yo9X$&8|*09^DLMemNkoDI*%%E|CG^K54&po`eqEvJbAUx=0Ma5Yvw z8HVE*!x-&b{jqJ=2g>(`%XiI7_kzRazb$-r4`ICasol~20e$aS`HNWj?oj#mKyAZ^ z=JaKZ@y)^~X63~&K3z847ONz~8)K04Sj7%+ja5#DyD+T%9A*9c;fo2xVNNgB>_;ye z7)|w^ZnomPSMdE7Yg2dB7jfpsLXBdfSx9r(J-dbIDs3r!Q>XVzv1M|l2y6;|J1m^s zlEqjVkQc$@;H{W$C2%6jKSY5OheV*%7TC0^rF90gm-Y>M!mxRjDh#Y?JEIM*Zq`nq zhGVx2@C?e`k&w?3Jg);UgNx^X&~&ERT4PMN{7`!%cs8URUBkJPiV=z=l8OAfgErPI zuU+O5Re^QN4MeLPCgy{NlvXP}-R$U}->>BfifabmjXiNuGf0(t7V%S>fwvGeuZboc zCMb^*ZFHFUisH;DrxWQazwj7!IdFa4DIXC%;xKVu#mo4N(s|6-ACjIV)-l|&Ka;9H z#!>14Rj;b_F;%YM|2yM--tVY6WJu^?#Yx#aIQT7nD|W(ddT*pR@|51w)!oyzy?eX9 z^-wCQn+e;&JG=X~2@xqCpRg0h!0m#=(=1_2NfjnVB$u~Sk%8UAopxeeY2&%6$g!ym z_UlYiL`X{~ifIu^9?zjYhua0Gt7ik+RZB*s>-fqjtVfghPkDJc>fJnV86o!eJiG;1!W=JMA1RqV{Nh zVj`8Z<NXa+Qp0%+~KiRTexk3*n2%Jvr=} z-=!H6-=!L)JmMz5{SXT8VotOFxMl#M^(*>gYHzrX*defFHU&MSM)b7W7s*l+&^Fp7)f zBjP+g@AL1JsUCWCzwZVivmL{v^V(sI_#!n-q(0nNAx7|U{G8Xw%~Jjs)sNV1pF^Jt>*Xm( z(Q3v66@rME_epnQ5Rvfy=fy+y|5GpCRR1sa;?3B93^yd@Aa+{bU)+U3j0*1?UVMe% z{lJT_tpA^S@rUa9+l#LfoR_`$>iYed7hfYdk9zU7$cu&>l5!BY0G#*Sg+Z}Sa6a?m z?e#q6#n&V6#NCjTgZNA5yy7kl;%}exg%^Lge*fUbAE}=My!b}J>(+}uDtJA5ak{1P zlCut0i&)6;6wopVi90n92&Ds005>{@ufI=7{K0YPm-vI@5CyJ@)nd};_XSzM5kIe+ zmlb|g#i_819=}b+0>GoU-JpSXKQJSH`No|6bVF{O|#^n9Ss?sbY!(b%g_^n77i2 kTr!(NiTnsWAo8-Af|AE}%fi{3Ba File Name: 1.c + > Author: gatieme + > Created Time: Thu 02 Jun 2016 01:09:41 PM CST + ************************************************************************/ + +#include +#include + + + int main(void) +{ + + long a = 10; + long *pa = &a; + printf("0x%x, 0x%x\n", ++a, a); + printf("%p\n", pa); + printf("%p\n", ++pa); +} diff --git a/study/kernel/01-process/01-task/print_thread_info/print_thread_info.c b/study/kernel/01-process/01-task/print_thread_info/print_thread_info.c index 400bf79..e9c5364 100644 --- a/study/kernel/01-process/01-task/print_thread_info/print_thread_info.c +++ b/study/kernel/01-process/01-task/print_thread_info/print_thread_info.c @@ -25,13 +25,12 @@ module_param(PID, int, 0644); struct thread_info* get_thread_info(struct task_struct *ptask) { - printk(KERN_INFO "THREAD_SIZE : %dKB", THREAD_SIZE / 1024); struct thread_info *threadinfo = NULL; /* for the struct task_struct *task is the member of the struct thread_info * we can find the threadinfo by task use container_of */ threadinfo = container_of(ptask, struct thread_info, task); - printk(KERN_INFO "thread_info : %p", threadinfo); + printk(KERN_INFO "thread_info : %p", threadinfo); return threadinfo; @@ -44,26 +43,23 @@ union thread_union* get_thread_union(struct thread_info *threadinfo) * we can find the threadinfo or stack by thread_info */ threadunion = (union thread_union *)threadinfo; - printk(KERN_INFO "thread_union address : %p\n", threadunion); + printk(KERN_INFO "thread_union address : %p\n", threadunion); threadunion = NULL; threadunion = container_of(threadinfo, union thread_union, thread_info); - printk(KERN_INFO "thread_union address : %p\n", threadunion); + printk(KERN_INFO "thread_union address : %p\n", threadunion); return threadunion; } -unsigned long show_kstack(union thread_union *thread_union) +unsigned long show_kstack(union thread_union *threadunion) { - unsigned long *kstack = (unsigned long *)thread_union->stack; - unsigned length = THREAD_SIZE / sizeof(unsigned long) - 1; - unsigned long ksatck_start = kstack + sizeof(struct thread_info); - unsigned long kstack_end = kstack + length; - printk(KERN_INFO "sizeof(struct thread_info) : %d\n", sizeof(struct thread_info)); - printk(KERN_INFO "kstack start : %p\n", kstack + sizeof(struct thread_info)); - printk(KERN_INFO "kstack end : %p\n", kstack + THREAD_SIZE); - - + unsigned long kstack = (unsigned long)threadunion->stack; + printk(KERN_INFO "THREAD_SIZE : %d == %dKB", THREAD_SIZE, THREAD_SIZE / 1024); + printk(KERN_INFO "union_stack : %p\n", (unsigned long)kstack); + printk(KERN_INFO "union_stack align : %p\n", ((unsigned long)kstack & ~(THREAD_SIZE - 1))); + printk(KERN_INFO "kstack start : %p\n", (void *)(((unsigned long) kstack & ~(THREAD_SIZE - 1)) + THREAD_SIZE - 1)); + printk(KERN_INFO "kstack end : %p\n", (void *)(((unsigned long) kstack & ~(THREAD_SIZE - 1)) + sizeof(struct thread_info))); } static void print_thread_info(int pid) @@ -77,12 +73,15 @@ static void print_thread_info(int pid) k = find_vpid(pid); ptask = pid_task(k, PIDTYPE_PID); - printk(KERN_INFO "process : %s, pid : %d\n", ptask->comm, ptask->pid); - printk(KERN_INFO "stack : %p\n", ptask->stack); + printk(KERN_INFO "process : %s, pid : %d\n", ptask->comm, ptask->pid); threadinfo = get_thread_info(ptask); + threadunion = get_thread_union(threadinfo); + show_kstack(threadunion); + + printk(KERN_INFO "task stack : %p\n", ptask->stack); }