From a2b330fa7edaa559e94333007f0a1590c9ee9199 Mon Sep 17 00:00:00 2001 From: Cheng Jian Date: Wed, 14 Mar 2018 14:07:29 +0800 Subject: [PATCH] 01-pid_namespace --- .../001-pid_namespace_with_pidmap.png | Bin 0 -> 18435 bytes .../002-pid_namespace_with_pidtype.png | Bin 0 -> 28232 bytes .../01-namespace/01-pid_namespace/README.md | 348 +++++++++++++++--- .../01-pid_namespace/pid_namespace.png | Bin 0 -> 30783 bytes .../pid_namespace_framework.png | Bin 0 -> 61670 bytes 5 files changed, 291 insertions(+), 57 deletions(-) create mode 100644 study/kernel/08-cgroup/01-namespace/01-pid_namespace/001-pid_namespace_with_pidmap.png create mode 100644 study/kernel/08-cgroup/01-namespace/01-pid_namespace/002-pid_namespace_with_pidtype.png create mode 100644 study/kernel/08-cgroup/01-namespace/01-pid_namespace/pid_namespace.png create mode 100644 study/kernel/08-cgroup/01-namespace/01-pid_namespace/pid_namespace_framework.png diff --git a/study/kernel/08-cgroup/01-namespace/01-pid_namespace/001-pid_namespace_with_pidmap.png b/study/kernel/08-cgroup/01-namespace/01-pid_namespace/001-pid_namespace_with_pidmap.png new file mode 100644 index 0000000000000000000000000000000000000000..7c72ce99392524d8e9655a7a911f815046126e07 GIT binary patch literal 18435 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 H&^WZU4Xj(9+^R{Vc7Op3RHkE3LHrfKYr!z zrfMnzi}k?pYq$FA{99WbDF5KYb&AQfq%6k*nuHz+b@p!LZke6Uu<6}g&t-kD8K{@o zs6OSx4xp>(6wnHx+hQ<91K6;3;%WXA-CRfYeASCa6BJ{U-e5YBUbP9u>UHw~D~E4P z41Qk{AS!&J1oW8l{t6|mxIJb_L5LU@iSFo3{>c(}ZQZPz(YwL~HHP6pDoj*uc4x3434~TIJLRQ5n5=T;Ql2;2?q^?-1cZ_9ZsuYG&+O!@#JC2TY(Nx< z%?uM82-@t1eAa6ydXT{ zy_jUi2?c47FxTL^tDkY*{w2OgV!vO_*^~izzQXel$HwW$HDkymK1UOg`g=)yeo4?g zOVw%!jS*Fp?l(YI+L8~#E~1Zd6G*j;0~`CSMfU7I;R%G{!!!5%MP@)#e-fTH8?f|e zyi(xo*S4oVWmJHYwv!q9r=?WghYO&PaJxPi*d>jdzhRwNy0(3FL&SV_nAmM3pXH_v*0lpb@_E3pT z%w3>(o<9!U%$;BW1RvslBrtmFRNX@tm#Iu;~=?5x&UP!SD9QjN?z8 zRE|8q46b0(?yHcl63@&>Htvcq{_Kq19QF?`IDYgvB;U?6sK~`gkb#q*3}_8A(66;< z31WiqZ5fF$_b@Gcd2ly$nQynGY&ZQ&Cv1E1};fi?Jy*tm5MSve@AqHS%s(uZju6~)i$ep{K8$x)n=Z9d2xOG{FgG>Go?x8)|J zxXp?X8Lgxw!GNy`p0acZsY9wb; z&lA|8cvP4*aS+7R
vSngzW3oxIZ>}(nQL;Ndzrt|Yvflr%segJO$>oY8UMS>c+ zz)Lkpt{q!#;Su^z0px3%;~+>&L|f;r*Hq)B$VXZswcp^(D0Lx*)Q*3Yvav_zCMY`w zBaHL8Ny>tHt{Rdp7lj#qJ6JXOgRlzjo|hdH9X#UshBk4i?G-22mNw`nRGs zn;*`4s#LkDou$bSc;md7kYa50rd=?qd|S}wF+^}Xngo*}8XF%7u4k3Z0jQfh`O;-U zNdrp2cGnzk?U$fbT(bK$ftX)}V=?J#+#l20SwH56z4pg-U3{z;J}66^WkJ6G3>P## zz1C;GfQje|ixjy{#eSV|58pTzMza{rl1oDZh_K?eIVyuk2m+4QRtE!eh5$n=4s%*w z)d!OUP&km07J@w^C*88Xi9M$ahE$S}ihPAj$+MdMJ%EPN#`~#%dgn8uHDuh?S7e4e z@ES?C62Lb*N*FQ#dtD9Oy~}ghx$r03s|QAPg`W4X!LIczxIJ;@A_2r^wkzd^{@8ni|2@8?{mmQX$;AMb4F=CKhcrrhC~+MP#3CMfmkg=9)yS>iw(?C>+v_vMy( z@0k)`;ZU+ZW(i)nzU57)Zs=>!f^_*5;#;5yV)bnfiUL5*ZfE8JM|zW}Q98yJBC zw~rxZOC841=tiZ=a=hDbyHi41YZU$_7vYfmxLk}GrSg=|@J9GS$9+zgk?HU^xC7>KKk{mbCQl`G41d_hv@ssaZf;i5Jzah0^Il3(J$dT0Vm2> zwFO4-WuW{uv*L>w5F`oDr`m<%W+&Cj`Z)UK-8G@sGgo1)b*Rmr`K_&=%C!kmflo#B z>vSDY-6n5>Q~*(8^VqRV(}iZ#XE?r#mAA#`%jVV=gH)JSE(XZ>0AL+%azC!Tn>*E4 z^vY)>L2NYghjKSxSmI})o5_)AjyRQ+5*{+AdIm0jHbrXC(wrY4uK${7yz5K_h^m); zT!2PhaMX_SBRhi+!$ZObE5f1RJZ_Le^yfg~Ifb%4JuV!75u9H_tQXZt+2YE^ZhhuK zE*@EIAPRhVd=#qxl5lO&$FI*Z)O5F5Q$0qRy)`287Lg--ZV!rr=zRVjr+5BsG5C z^V4O$+Tum_uii!{c7af~Lg>@NbK1S=0ru~h?wk9TdP|=juXK7guN#h?&cv!Jx5MP@ zmN^h(56%P_IFtL}b(L_20sWs5Zo`0QAl_1!E=4o1V@!4W%%?md;pK%5^J-Uff86vC z|G_@L5PFf%YL1bhwFf!nE4{UAQ0IxAqcd{A?k8hQ`Mc>D!Z0u;@DSQ9)B54Xh`TgR z{RBoty=GO}9<&=+YRUS3xBDw?Bl$$2TWvD(t;=cm3TbGktDB*INJK02XEOGo3^bI_ zif442j`T;EG@$0SGCwWG6mg%Kw^=IEQtCBhUoD@T>dmQOk6X|G_U>z6$lcSO=zA^2 zb3w_qRLzdIEvp}S()E{q!$|atLF_Xk6~`^6q6w!(CNs_#KPyyv+Ab7Q|oA zzX#=+;T#*#q&dW`H;ow*%FQ)Sfubw%#=t#|m)p&A<7WwvIkoSqLo!=emZYn{$Zx5@LTLhoSt8Vv8$P z9t}S72kuR~2c~iyaT~zs8h)>?Lj+t((UE7n^j;I#cl+R}wS0@wq8S!W z7nXM?!+Q)C|Hp$yTvd(T{*s&IlDzUU=YhG$9ZW;dY|)d0j#SIofR3V(ImCdgstQ&i z-UpB?mubK1<%k)ma3IM)<_7(Gx%nmMab@G%!cX!n=8umm&IaQ!PqkFb)`@YBhScxX z)hltqXEp;|;QR~!?a!bsk?z1EB%4au<~h&;C1ta%`&DadoE)wT$F~~@qFtl19&}X1 z;f09epBXcgv9GIAVRqcwzK8x3hffrDO{l~|0k$e0ul$bVpCbPnccVsX|Lgs0iNgh9 zd($SUxNV~8+~Pg<9i2U>#U6X`43+_DVgD*nlxuaSUfVC%WL;l4KOtToosR za(r$G0vo%xs{J%Cr|e`SAA*q_N60RX#>qe(A#OmMh*70cs{;LdXl+%1b;Rk43xWk= zTrORZcP~{-)ozok#_hMwrsC5m0Nj3Y;!ndPdNrb+c)2B^x3B2&YE5ZpruDFpNE}_< z30Wpgvg8@EQ~w;tE|aW}m4WVY?EiU8Oi#j{E*08qM=_zq81W5|6a9H!F(8KH2$Z-(0h5h8EY(`ncLv;?>UQy#8OJRehz0d)7iA6k`tu*?%} zuJp~2vvgcZiea-sCK=hO^`Sp9;R-066`A+xT&<%+Z|`IS(#3)_jf1tmJbUK-S4JiN zwQUT`p?R!jj5UI6-~%(nT3Xg<45#X0%% zA$6eaxDPA@kC{xVoU@?%L;3J>vJJ;)QsDsN>I`=$PKfRQDgQB-6E@$C2B*CD{^BQA zx3Ui&kBIivANjKSN$qzQvMnKSDN9OQbS>E&b*;pRynd^e{ch>L$U11(p8-(l?3 z+CBg}qs7ZdiAjYthd*A&gprQ6R3LzLo+PFG%(g9+U_7yH8#0n^NB|8}uie|*aGSwW zhj7QkX=nX%4-1#;{17%k} zS^sPX8e!r5ca*sMx=!T9gb7NOgAq2(NR@3jG9Wp0q*{;DfkX8CW;g$Gfu>0t7H7g6 zJCk$AgjP<@3~QxPR<5n#h_W-<$O@Q>!LPP=+=B0`D!eFFtBC61Zw6G4CMWA3>}FSw-dYVVeDTE3 z&!5da$8K#ucXqZIUM*m_`h%6XbVQ-X-M`)H;Oi?3wan&NNXLd$%7O^n)bk?y;6-YN zz;(MY;QIIYU*kF&AHDk(bo3o~Buj>djo=Aq)3=S&dHY#X_uEqwa==;+j6|JHJp2uAZ}iw4gnj?DX_c3kX9#1JM-Nn}gFQ;s7M9H0 zwjz`DrzmO8Bk`B1 zW%%tJNu9_TbAA0Y*n|R8EUi5KK5#RkJ(b%8fRrW|f$pOrf`9k!gYaf_<-3;uyAfdW zBe3R?PO=w`5+D#BE4(gqZr7TgyFcwE4U0rRbw}oS+i<)01K?%}#GQ~z! zIPNNSFFS2Vr45S`nIhUL+x08oh>hxHNDAT{yTZvAEXFud3N}0EGN!rSvjVc`Ko9Qd zf--`&?iQPq0?ZJkPv=*`FEy2PL=!pjxA!^b`rswHT87T{3&?#cNa&k*5X+Mh=S*(_C?Op-J4LbZ+nYW9vl#?d%NB z{on7l23GFvv}Zvmo8p75)b3NhPmay$LDS$Bc=jJqJ`^xW1coZ1kCw4&>$ss!NVBJ? z---$9mR?-(p`Ys4`nMxW8o5mPbWmPk{WtbOhhN2NSR6!hzu)_+=sL$9Hl`h5?Bodq z>(ga=Skvv+cV2(0OF%z3zkGpnc3H0x09KF*w$ZQn3@v9uIlr8q+!1aw2zJFT81GI-)~l|~ z7ae2UTkBSysHaylOar4?3uk`^@2ZEy1#_N4_rM8Ss}nD0JZB;3a%&w*HbT)Qpe(x- z5XHrV&tDiDlgl*(uEHpD+%u_&I5Nd|xPm6yljD4rFk(b`=^}R;#KJ8GmZ^ucQEItv;5LE7hws^oY?f<0o37h6N^$9N(0e<60 zet>*oLyWjCvVxs2S8|X!v;cYHjgdXQxODy)vFN@4!%ex5Y}(R2)PUGi)-J;m`Q@`P z1&XuqTpXuUOkNAz0IuZ|+v8sk%~+|@M2A&Maw2kdPYGi z)PYK)`5PP3t8z({oKtT5RH@(iwEwdiwN7o#AvzR2?RzhGW9|H7#<38HHMP~B4G>rJ ze*jZOG|VqMxM`#wa0bGkgsR2U)S5;(t-&R$4`&1mK>BiYz!Zk*cckm0IrouZBL{JU z2i5qaPJ*(@#Xp9X__pA`(Eall>44;`sTj>BNo<14#mBV7O(GO^QouOYNjK41-yzZY}H=zR7yb$_9La>zuAO#(a#7-6q87vNG%}S*;T}8^=yqiDU zVZ$TFd+#AtTMMQw==qowXs&Bl6l5GY0?xJ^D6rv|j9T6mrGs#Np#8Gp`{BngD~Ejh z==Q{WY8k|Jz+B$vfbYRW4czZ0WZ2|hPZS=o9^#>UuMIXNKDougTFlHMEgOE|L}_)* zsKixJREpplX^s3-WBWFuChvE*ifZbP{H z^n^bXj@jCq;i@!{+X)SVW##Gk{H&0ae&%57VmR2>skJ_jFxB>Tg$7ln`X?O0Z zFxYbUYvRBKg|*+ikKE(|zXZdcEkh{`I~%~$pgyWnF`Db3YysT(Tvax^B9Gvx6p?{( z&IGY8F(zgZxo=$E8E(8Ed){!cYv^!p*p{mR8Urs;qIA!ywhG=-N#3}UN*D?DOK*); zgF7kve`X(~R8-G}lTzEE!1r(BQIU5^e-hgpf7sMl3M2xh4;T{xp!wZrIc^+1ai2$m zwIDimai3rji_LjS~W)i#0ow2J|OE!xw#=-X< z4ZjF=+TpJ=q8L%=xLR}`afn`;E@GfW4NF|fN~4T{!A=EZ)ZpOqNya4(#48ufxR!mG zn1*RP)CjOtUj!K$Tp^msDAy)_zGU;WqrnG$!8C+XEB7L$+20u45ax~xCPEOnc@@1g zMpWKC)eZ$|=Gj2o+g}Ivg}0JaomL*qx_tX)hpipX@MFWSeE7gD$h(5to6bJjD6{|n zmwJNwbccr#)d^)pjczraMEOyI1`K5e$^(BkBoGU?jdZ zr(t4yYsGT4_Ci z=%^Q*zm0AWu3x-@`mzY8)VN}Bc~7_kbfwCIQ;1b;)WF~0Mu0s=s_I>r$(yL|%uiHb z{2pz|Pb|%q8B-}%E;-o|pPEv>k3{=+g(rwS<^N8R2O=pX1zSZ05A-U>s!@B79_(v7 zv07w+S$tWRv9jzUVOgvL@F7x@G=nSgM;4zvN7F{Ty2n zUrQR1U+#d;*^rlbV%vZFo%Q=vSuke&@X4HwU7AO>+4GW0&~n4e`(5o*a!O z%O{`e6*_6aEa@;W>2>luwGiK1k!|2z+ibB>)D^qw5Xep6cbfM0I4Nq4zg(Q?pR*;y z$LHrKT%4Rv*St}ABAB-s>~bzJu3H|;0~HWT*>;e_-0-dnfxjcQOp!WRb&h{jb9G|b z);&{@mh`YOjdL2ELnVO~TXj~&jSsHGqz$)_T!<%Ox-%hk##>Zj?4jJDo z`p!=J8;T3bvUL`JT*S1VCHhr7Vij@IjF^*r+uMn;A4fbZ>|%L8L5Pj41H>V$R#Q;R zP!vpb4rl98-|wq`BynUfrlQ;cOeX21{ehUY!!}%Cz$nSHt~`BwLu`AZiARX5f}DKj zpUjcNNAB(+#vGBetySOWXJP?U%bCwIWNol*L-lX{8-3zIB(~X$j;^7u&1LZYAG9Uc z<35Q`5QTK_t9O&JMy$?s{&5V&)AxSMN>L5B2CgxPR0kGhDs01D@XShFo=+dCm4>O` zN&3faCv-S0=>cpyW>k3uINa%sSL5)^@S;0#{;j2pGCpPyJ|QxuORoEKBFFd zlfBch?w@JLd0axxtAuW+MR0u;tl4*FlN$E#z~A`*VS^SAR1f@s(#1 zE3ko!$UO>bPke{uU}>l*K^_j85j`#0VGj(+{i#hNK-5)ZS! z20s1}E8>5{8U9ah!XeY70U!?@H*Ph{pAd3yb^h3*==*}=ihMt8sfoB#VB-RppU?hldU8X4}d z|1biD)4U1&N!0#Ig(el8KU@;d>HiFSxFKuyLVs$~fzovLyZ5p4%J+jzTvrsezf-{H z&@0$knvAJO$K;xq^?qWl)n>(CS@r8WqegFiDV}CDL?Kb_`mtSW>K~mhm_$5rE-0ri zqB(RHojz^2mm&CX;?eCV=#k6pP`!;nzP)uc9do8`bkwja;Yh|j^9la0@OE^8m(Dx% zQTlS&eot=kTX)eE*qHKp=Y}$s9MCP-Xi($V0hB zrLwl=5@TCcNXpl&E1mkUF0>SnU1!_SqzsJ6s7W)|$aQ;kA2Vuin@SzJ-uXeMrxc{gvf zNo80J*zRPV4Xzos-~g>!*xKn$`ODEC<{sP$Fc*x4zkALn4G0CwUGrds=-)q28!^B+ z%8MGO^(iUH=~gZi8ofz~tGd_e8PwHGL!zRCT`Y+9(6?gYz3Q~i#~c32e|-8%e`m_@ z#O&0;&7F&;GYV~|YuSIu3Myc3gs=OS)yeXf>--fu4ubCZOg#i3;$WVrw_oRW9P@rq6P!Gxt1U++>OpWiLOC^)okl~ zs|VQ!T@aU;mXDO>?e(Peq4Y`1E!wuWAeU8}Gj3Ns_v0ic;={jEtv6E#dZnjw1CdbP z4&Zp>?*s?llX;C?Gos@v^P2FtLcuLjvBb?2h_d1H4iT>XD*hB~x;^D-=%GeKhps<@0bJ^wT#FlEhDnX#{V4yRbAACfxI zzebiFw21hW@{89mfmI-|(FZtX=o9pF@VhrD^9+J)y%X2BNmi1=zZ}#(dCEDp)ALg_ z;PZ!BBaguNJ+}IZ+TjpXm@BL7Aj_zCf;5ybZxxjCia~Icqf2=wku}c23;i)S0zD|6 z>qGi;1!hfp;E2s#F`J>6)I5ibBNzfk)V`JwLtD?7MQa@>BHrXFRlI)u*HWt{SR`kr zocyr&DOZt+;8g&6F9b(dgqMKBN-0O0ygW)bHJ)Ah+Gy*6 z@us{4#uR@#_qAHeD<+r5V(j0c4T1_zu>$0BDI0^0eV1*#=c8kN@wHDP7B}`ATk376 zFfAM3zKVP#lzT8acc^hEJu=u|D>$$b7qaj6YQN@al;HJrP>n+hG;FM`u9|!xB{bS% zl42=C6UKyk+feb#<00E?VNjQreJBw)(KcI)9^0^ALf^xuqs%92z`g>r=CNVpE|{@M z@sGezn}ztt4)Wertp8!unym-zT`BA}X8q;sf-vFGr0P-2v=|{Ml0;47XS3U^CwvQv~iN;`9cz_5gc+Fzhi#E-&p^WjR z=>doptPyMoyZjj3ts$f#ssR<-OZuihgk!!~J{(qV(^#0B>t0fno9!qa{2V_Y zWASlLTs|Y};pmMZ22(IC1Hv#ixM}DhuM699_u4jlRbSC{(jNu{({OO1QCh)}q9Py3 z*Xt^M&Vaf(?&iywK1M;~7~oK=0Mna3e!-;TPch#taBTEid2w$-*}R<83!l|dA6y$#z;2*SoxPpFk2vEWFn$Y_+f*zO0*2}`XI;x@s zHS$Ag0+DK_Ohew_27dMfds$f_*vE>gPf^jzePEtB$UVf1Jhk;`RL3Lo%nQ(M$OdYPOe6^*|c|m15Q4I+!tc> z7;o*g5w2_HvNV}&*UH?m4pg%O)@fHb=?eXOR^9{>btArr6aRBWp*a}I%T41(yKW<9 zcVNG_;%0qUx_5^q-no=!q7*FN%B{)yUe?^C51he8J=``cAH#Q1N5%WPHdGj7I;OWN zZykUA0sntvUD@oxmoSyh$wXu5(L;DqDkIW9hZzuF7gGA*RM=^yZ1pcY-{*e5Xcc~R z@vgMR6oX8G(ygSh;h4#&pohVJb`olo5A$?>Ji7BQy#Mn=*hs0-cB8};4}UdoCW1m} zkw`};Z`}VY@4Nn*dcJ5O5D5e%p-Yjb2nf;zqy>nLj({Kv1W*ZxC{jdvsG);Ok>0x^ z(vjYK6I6=yCcXD^Cw_nT<^BuzC7(Q;IcM6Q*|YarYeMX>Oacu3$#3XKagS-$8$*Mz zO0^V;C_VVengKkzOAlJU)S43vx)a!o^h!?lq}cmE?(>sbFejB|h2CjR=fR+0s z_J`HrKB7YqbeaZ1!BWjo56-&Y6;{sLaAvfd%AhRIpk-?#-Fx4dw?`j@oWteOG=)k? z^}(K`1syA50JAn$*^4vokgZ*gg5qqwOu!zeb}Sv>N~qb!hkM8EQfApG5!mB)YsOD+ z?JKFYwKlDz}D@PtXS!<)`4~~BdW(ijO;N9&L=4@mND}* zzEShW+22nd1C|PxYW>{FgKsrDMK5*=h%<8C3S{Er%D_h(S4oEb&gqhPlhh};0h~%L zo^O|{x&XqAgam>M%Bvtu#A1`DcdAK?zq;U|Np0tkj#zV>6^811!+if}Z-%L8+w=LX zU4N!Q^!v^brIiKfxm-)cV2F}KSXcWsyCe^neHL)kf&s^$(Q$$~&L~nT*-IL<^s40Q zwdnJp8z+=u!9?7=_?#P?Tm6ffC?pld6HcoBXEiUju@kzC)2CxxmA{b4+tb~Dtu;S+A6JJN99(W!qO2#r zXiFax9C&@}*zMg(E(247>giL>1d@Fa`u<}8X!q5_5_$}TlgB@Z7kjiM|LSYW#GK!& z`nP5?TnWbaG4nLHl7EFLoTCok@WCK!IQ$nn|kiv{khcY zNXTz~O5m=c4#bB46%WKB{)R~W;kJ1>`s4e!bm5Ge|Nm-hkh1w&y_OzFL16Mw|5;-R z69~E#c_!BMEt;Z8ZuMZ{k~{Go`RfNiQYs{LV>!Ms4ZD+P38U;8mnBn3NX3Z5cj@30 zMfjGSOGYamU!K|T&)NL%EZEz)7+smfB}}mqq%i^xH(!`9Us+O++ZNgYMjLiPHhF)t zm(f3MLTGAG$h?^{e=SJDy)d43Ac;4%ex!D!ZahcgWZb0v{pQ9QApr8zUZcvRvKo(q zg1}ra*&O4lw1u9&18+ab;PtN1;>g+*+o9(tj+q@{LV;KfaZM5*-c-e)D}h*u@dK5^ z+qYLe@2MJDx-8bY0k80nLCjtMOP2fxt!;qH3D_n%I1>ZVb#DUy>IMD98SVtH^)NPTOBBW;jg3`o4g8z zzofXtW{{m1r}xM_{55{SXmM~U@nVJumLK&=tsF(M`3EPb8{Pl`?N#UFSKaL7(4ICJ zKL7!;n4yfO3=qx`o2h?M-D*SC#tFiCbO8h?TX|JPpr8NyGkyqDX65TeJ>Juh)?C)m{BzXK{~x;8W*EVnZ14ZejcY5 z_W@vrksZ8TQs_MidOV`pQldznVte_N2Adi^tU!K@S)b zUW`{yKG@P0j*|_LnU{z>iSy+w-ACr>;eFR{gH1v#5c^)N=&{~i(yYev`cxwm9|A=s z>s5Cr52P$tPHqz{2^LTd?p-J&^?6To0RMSxy`dj4nM%Jp&Yx0ED*guR!ao%}a}%p_ zLqT|s3Zi<%#f3c7)!L>>C^jhu%(An(Ogg{BCB$Gb@?i%fpb~zNnKMFXE4*b-f=zINre1COUXjIeqCB|;Q<>DIrfC*>r(ce3&T zzH-S^WRn5pmK%yKUbs{zvG<7mT01#aTYhm@=4*3jB7q(Btj4@moj$wcsnkW4H|)Ve z(#pvIJ126O;=E06rFO}PbJZr;2p zpZ9A)CqPacPD09WKd+0k2|fg;&mckbZ?HiM_t^B)$&nqqVHAd6A617yQ5eAICB;wf z6GvCaQgtU90xGuLt6ep2#8S%(VBN(d!0CY>Al|e3& zUL^06mmGA4QsH#Kee}xY^X{w`SiB|@*YW;43WMJpq`{4^9wtzK5wzH%NRS3uMRNi* z#IWxIj{hKwW2=2Gq@w`j6>~!(tnwk%->n%l8TPI~RMjPAi;jR(a>EEfLJS*MYsTCv zO`TXE+>qKu`{Vn;&e{XxT5}v%{{VjlUi)MUc)9F^a-W?`%w1bQT`Wlijm(e(0dD{a zSZ4Uw$l|1)h+fgpYbcE2k0%&>?(I(SODKda-)?Zr|GhNu3;;VM#+3N|v+a4xF517F z0GweVvd%E)dKV;)!WX1?mCTvvZlf_ddL9S;ApyR{hMI&FapFC)aTcSEHiZVEdj|m# z&p~Bw#PMrI>V1M2m&`6cSpqsmW5+LYQFEoEZ+GkU9lXB);0Lg$$bxr@b6JIt{NB;v za^p*+F6x11q*D|d>`wm?Ayta}ZkvnR=XrT4#$~zl`CAwWKSCvvm<3;vGN@2j@IX#q z59{J`^Hu1vFYf0*@TZ{MKa1tps#xt~!`n|T8P+4A0QICkAO8}noiWvl%I24RDGxqj zm`8&v-8)(H|D}yf84GDuhSs>)&JGnEeKe`sC#kV5u5fs*K|}D0fSHoc$I~A!AV5DG zT6CkbJ@!Cc+jZ2|W&A zc5?r?&xv|uRb+~FqtRx&N4}k2<>hNiu()D8kUHU4gYW&rv)Z*M7j+r{u&T+{DBe&&M^` z8KZ9fi;aou;Oeba3)TAFkk-HPe&z`xJTgrWZMec=`Bgia%b)TLMks9%#cRUhf z%>McQxr->m>UU|)+Y4~?J+AJ*Htw8Sbt~4RKXVxf+`Rd|t6F3YQ&ojUpF*FnL@Hzc z_QxC7?w`SrS&RX8fut`P;u^{oy83k|ryaKr&xi*X;wjX<@BTYK}PFeBjX>zW=udM$)#?QzA zFLs`ner*bGLGEkl7MOPDEB8q$MjLtoaIz)L5jHh?s+3%T{qdlh?|%fmQro8~+%J*5 zA2T?`^S*V|vW-jk8~&18jr5=(BpNd+U#lLHA0TmO71r|*z2T@i;peKQ7rSfS%i9&! zSGggA{Cy9Rv5_XeBOpocXAHNhVa4y%CRQ(y<9ZIW_8ZnpsXQ)5vcJYQ0@jP(JF6Kf zN}pT_J|wnuAxq!6=jKZ|Z*Fsn2`qn1fY&SqfOVdPMbHUUD|Pn!gi;nVHoWmOXl5$x z8#Jt^f+jQy;W}9=G>(TKgjb*xo`3~{A57@ys%9Z$e=~v&S3ZT!GeT71dR-YeT1>iC zv^~3F*0IEvcQAto*YX3rGUm^uEdVYByUX8*L0%RGr&y434xPJC)d&EO(uDc)N@HS%QaDU^ zx%?7rw=q$`AE!rcyxeRht9>`QV1Y5(yZ7@`?NXnmz9l;Q95_fPwNFAu0ZDO>f5;jZ@a<}F*B2ku!p0Bj)dj~k2l9(-bz$@= zRtXX$DQCkU_`kk=a|yN+2Sq1~!U0S{@G)a9VPUDbe_Y7gLe2hCng`fBw+@uTC6!_4 z>1ntqnbACo@Nm{Q=%DY7%r_4?2~a$={7h9oCd_2@(`$NsMe;pC z&ieE&MOvJD98K$lZRU*Y_M#5y9a8sAlX0vJNQu9?jyPJhz11r++{`|rax)io^?C70 z`aLPgD|>ZQ2Rug%4E7LsZ;*P^l1ah{_E z^!m_k(&9`jti!(b?rnei{RFdJHzuU;g0jm9Y&DV+4E?94`hs(adk4NSU>U$zt5^97 z3pjNCf2{|6q9Xud6AZ|^vyq-Zk9xa#L`RSfh~&ct~QY4!vhG%Fc4b)XNR z|5fQEJw|gbFmLTC99IEs-$czVz4V+t`g=Ew^6DyMQ^Q)=<>4=@j1k32tG#w$X&q{4 zey{sTqMaX+NULn>YTE&r6R{4a+htv5xAX^A0SZ^1S3w74G+DSH&+@O-hJD%ls4ckl z@co2XA&idJ6v$jC9sx{uZGQE3!|9BJ_foS-iB~Vj$E0uMzm`}oKV=R1aw87cH%anV zG)Xe+_zDAV!SK%cjzgTuWiZ5;PP33Oa5m$PGnq(F4z%&dW)b)yw|0dxe;)X)uh*V; zjcdFtJ@RWg)RiwgYa1Y)Za{|`Z_N_Cn<}j^X*B6T;#N{!hYQd4_9FlR8A*|m zuQboCn+yqxNKsJeo1_Oi0}tHh)l=t-VuRilKm3hqUfVbssar8T55DmD0;6bY%;PQ$ zkMah;mZpn*x?H52L|{^H$DZpp)=qg{ZNnIl22A2=-z29z!}MH*mUx*+0ho#ay7)Dp zPK;qsh|u%a=r_*RVtI!{E4SX)A2cVcMBKaVzxPr6IZ6sJL<+Pe2Vm4{97_XXf}hb*>#9JH zRYib^9G^k_>&>#FlPPFbvFP~GXy|5HjrBWb_*D><9jys3ph;@*?t_SYs{==(Mt)L> z*C=`>#3f$@$S*{A4IMC=H7bioO9u9r#b&91cZxDF#TY9_kg8mTys6j4O)(q7>Lo+P z{d>V;&07mJVL7bf7%s;}n(&G`RN;XxEJ_=wP*bOX1tkt$4-u&Pdi?N~KC1;Q*EwrcwNt38^J5_S6CEf6RB1ig8JzZ~+kno1 z?_IwM7t8fkEe7AOySr#iAFS!vlxL-Xgm~gmKXc_O796&PRw_w+&w~6Zx*!%K&rMEq zduK+cU{ax7iX$x#fm(_D*{k74(vU)N0vOk4((w_JnJosO8Njz~tVk zJGGTxUQ>quHsrvNMtz4{AYkCZ=2fb+FPRs$VMvf?? z(A$=^=y`Kq@C)REeifS##M@ncwOVfagS$w@Z?Hj>xbv; zf?C(Y{mz5DCvk_q(*?qrIAz=Lftet%%lh3>%+EaT>}9T3g3<-U2nm9$GYqe&J@~rb zo#d2RYb2IMO3)uwWJY@&6K2__60fO8kDX+X$rf=S4#erwueMnR)eX#m z+N&w%v*GyOb$+U1p%7iY+kP94wIH6F^G1U(JGM#twmqF%H^a@u!=3TO<;Rw_x%_?8 z(Zou~u3|l0R7_T1bfjML;Q^(OpIUvGki%-l*bEcSswruq7~t$iDkifn)6x^dC?VYe zlG-d>q^Utql98Sz-O$(~zf#EtR;Snr=bf_!f5^WKxadl%DgWV&IEqr80BbCd}+P3!27N77xrlFHm1pG3>7?Xyct zP6`RR7UIp+`|$9HX{Zc z_ed}2u{5Er3(hv%mjh6GQNd%jT1amL#b3Wusi52tu>OE$1Oodd{cGN|h%6Y;n^tptOBuOmr1AJ)eH_I%~NrB=@=IIl+Rr)ip z`4lY9;4#tBy8X;+fhRZgFtav4*h44eo{S1177<__A#_?Fg!A#F?u_sqg}_JH{_`+c z@R*#E1GeyyyVE%5IiO)~Nh`4RP(YV1)n){Vv@D-Ul>CsD5$<|jav1Cxj zAJWnkAid8H6uNz05qIs^eWa!<`@ZSSS?vd-Y~L6fXVBR_J8*a`LF)XUhA3gb;(`OQ zUOOOsZB-*^=y45_=AaN12PlWV+90C9BqKgz(5(L9F4-L zNm9$3$B&0n5~n~6+gAuwmA8awj8^HPMOh1xdLDUT8KNNx<{l?A( z=6D0OiTV&_A2!=PGTM6-w-~+R?dBVQ$^Wb!CUhk~93zNdcXz6`aOJyT^O0Y;Mv~kj z^dXBqMbGC{oj!6X-&xzgZL1Zs2tkuCMwa>)I)2v06;`<2wK|@V8i_ZFRs~&t=DMl} z1W0VLxbnwD*GHSaz`qXup~V#{a@>M$ej2sQ$O=R}o&B(p2BuAtpr^@fj4xZXVlsV| zERul?mD z*W(75?#Q?QtJegiQ7rGZqV0-T*=-^{%t_mCQDOfijHaqNOyRtCPsLqko1+*tCipd0 z5QA`3UqGLnfHTm|eM-hHy+0feXI0ECjkdy0K)rA%0Z%?*EbcCY)-@9qdZu6B4>vQu zywxmYyp{#s`n&KQY_g~ZK~G-}K&1JiNFF@=mlkJxJDC@8Tl-BzZB&&j*xq4v5Pz#9 z#Jdi9gww#10+(=087(xGV0HO6!k$7z6JEfxp?QH5Q|HdU-TJkK>AUJYWcT~Ka<0Lv zGimQCR!z-n+)N?$Lfxg`|$FOF|>}R1y8Hqrivvf zT?Z?k-Jnj4g9X#n&?Ue@DIr2B8Uate*Zt>-h|_Chg2-%`3{s{GNK@ZIf0!(C3L#9+ zE8!k!OjBLPj{SztS|kb8fkEDp--Z;B;7`tjzHe9H(&DpAeJiYmFr|8+rC-*(oC^JD zz)^U@4N1EzIAnpQ;NL{b!u~zn1s;}o&Gk-JQPELlajC({sMzxb{7O9dz?F!(#`}f0 zT1vtu;g-Zkf}TmuKvqjcdp9YgCz3uzp6J?pf7uDq4sxr?BT-{U!O200j_N0$E{~j* zuzXzwyVLrk>2Ed~6TcRt|1F~zA zT`v~D18nnpwV=l{v&cU|Z(FC&+~yAnU#o&P9j&{4=)Aw<{0sy?i2)#5<3LKm+MkL>NiC;cVEcb87AjKDOkef zYX*JK{C#ypZTifJbL-F^SAI%fUafk44yen&rA&sxUXvMegfbY6oMar2|J^GYb52cQ z)8lyMAq{uclf+Zj*X^jV)=tSKIr#E83d?Hh(!b4 zw|?V3pl&-~QGoRY?i;9CWy%TzfM>37_Ao(svIeCgLfTHQ=Ddo+kfWUeRW0d0IL`7Y z**nh~JdzZi#en*>2;`8sW$-8O-v1#hNMOJhKsV-^e`^l96dmZaRM6r?AFA}pw|%O$ zOQpZA+V$n>%rewzz8EDc=vi4h!S+J&RF(hnz3|bk*E#59vKh;x2Ok4cO%U32vo!Dj z-gO!(MzIQdwp+A4W6k~BsBfUNkbd@!pl3NWgOA|}ETDB+m|3KF*F#=h_bC%eS1Z2L zvpD4e`A)$lEUeSI9s&RW=pE|T_0$qxoV+hE$fgDe(@R{bf_)8erl%L4HOQND39rZ? zR`>6s=O#;xyY!Y4o`m|!Ox_=W1bnO8=;FV1?r5^sLw_@MRh7%x5sg8=QcKr>_tQ5S zNIjI%u8Cx1af3fuWxCr_lWE8GV2#W8nlfq2vb(QiDZUVRA5-3T39P)#ZoO?{gX56l zh6^9r4P$`#jItetVHF5qHov5tNi! z`%qG{Q&g3WH6#)%hzPEmrTFqLy>Ar6kwZS^D|3>EF@G|5@Q%-9P!DS_8fb@PG5c>i z$V`aF3JA@d57FSxMhzz3qCzO|h?rI=p2!ci|Jg9a;uZ}sOYLRWW}Kf3gveJr@O6D^ z1>G!3<0o#;U!IBIGWNDmf-jm97t6T$7CN=F7`)BJIS0mwGSu{L(L6cOse8fcf%Lf=`OHaEq zqqaa`##{X&Uqm(eL@Wb70=n_6ev#bO7DRE?qH1BgRsnTd-39A$=FJ*v1$Fy}&I{<^ zF@$C$1FRXcTP>E!QsPs3)x$VF5M8Ya>CjhQFBxB@GjESXsI zYt4eDniD^5;yl*cYq)KbHZz5Lf~#6vj6q8L~!UW+UR z|5=OJvPWamZSH>4xDY~{iln$rod0pNaeFHU4Bm(LJ>nsg%AuDzZ@i&XB)dy`XCw2< z@<*+Uo;=RPN`q~_Yei0AWu$?_4pQc!a@0(zarv(tT)#xYf_tk6j?|#A2p-(8Nxb&e z8!=?$osj1TR2l`?)8>%VW+bk#*7ueX5eiRy>0n9?;Wt-vSYs^U>BnAt3Y)uo(A*#a z9w}FEzjgoMq7%ZaFGy(q1xYEwJ}FLT*8@>H~6xs5P^lF*?dWwbF*x;`{~e=QX={A>?s;$W2U{}995t^={)n^ zVI-!YbbX1WkmyIFw!QcvC8 z2WR%zP0W1sfl%S`l?2+)2MDEeTT^Z-Rs=G;UR~|yRZMwH8QTo-MZ>6|u$5$(FX??3 z9o_F^i?I#XnzJW8Wx;P6f^KT~!v^Oc@~kNVIu-}n?N|gZCtdoP@hf41-;WXDZmS_E zlijs(BYD+%z5{NO$?mOIn~x0c&hSKeZUDlz-4B9JikY*BeY83;OR;On7p|Q`{mDYmaEv>5HQPu0OroU+5m3%()Qk>rLecmeh zl->Py%1O*OAhIQc~s8JKA+~Y&okI9&Y)6=jLX$WrL}SoLRn35pyjB9E)yvse`L)4sGv6 zL515?oazX7i9D2)stMnl);t_3Hz1N^E@SbcuEm85&dU}(bzAK;5k$6WDk%x}iPiW> z{RY%dV*ibRn4@}E(ay_5{-$Eu9i5 zu9O0)@)3S~Bd=CpupCT2e;~Am(ec~0&CZs$!&#B{roCg9I~L`)wrG0gi$ zh%A%k-A)aSej%}Vlt3|8iLcY@>X97kfZ!X3>@||-FF(t;k}AVr@Ejgv{x;W^Y3|;= z`i5X(9yN+a(YBnSva4o{%A|Kz{5I^TUlBj%GV7KW*cg?m=n91k)7<^^ zD}jPk4sTG>VETeE7b+fT050<+_RIlrShK<0~Yv0TE_>$XN1WQKD}kJ^A%g z;v=X7Bxads!;kofla6lAB&o0@(KQkbyhriZ+35F)NuP*1@88XJ(nOcHE)HFX=REPD z>eW%LgyQScJs?h}$TA|r8wV8ykZHBajP>`#pTpEBPB_y1t~L8{^8N1qHZ>RZ*`B?s zPYQMs-#9%vKg0b#KwoioN{gs;l6B!L`b4Mc$8`&W2S;UyB7<|32ND6XS7;&FyG(z_ zy=$!d`hax$ey5F7iY+1-T4y@!liaxA{Y$F_g62?Q{&)RWAB4Pw2pQAI(%VT0L;yb% z*x{xB_dc$h;A~B}uj`*R{QHYi0+3RkotEuymV`pdgo}AD{3{QRQvi!8oFbVR{eLg{ zBHa@Eue@Nm7N84|S8rBX|0{$g)cwEmSe%ccCvdn!7M=k|oCtgnT;~OD+4=YP${+-d zQFN#y>C?6V literal 0 HcmV?d00001 diff --git a/study/kernel/08-cgroup/01-namespace/01-pid_namespace/README.md b/study/kernel/08-cgroup/01-namespace/01-pid_namespace/README.md index 5665c2b..a513113 100644 --- a/study/kernel/08-cgroup/01-namespace/01-pid_namespace/README.md +++ b/study/kernel/08-cgroup/01-namespace/01-pid_namespace/README.md @@ -1,4 +1,22 @@ -#1 pid namespace框架 +AderXCoding +======= + +| CSDN | GitHub | +|:----:|:------:| +| [Aderstep--紫夜阑珊-青伶巷草](http://blog.csdn.net/gatieme) | [`AderXCoding/system/tools`](https://github.com/gatieme/AderXCoding/tree/master/system/tools) | + +
+ +知识共享许可协议 + +本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 + +因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦 + +
+ + +#1 pid namespace框架和数据结构分析 ------- @@ -34,9 +52,14 @@ struct task_struct 那么前面分配的进程如果结束了, 那么分配的 `pid` 就需要回收掉, 直到分配到 `pid` 的最大值, 然后从头再继续. 好吧, 这或许是个办法, 但是是不是需要标记一下那些pid可用呢? -到此为此这看起来似乎是个解决方案,但是考虑到这个方案是要放进内核,开发 `linux` 的那帮家伙肯定会想近一切办法进行优化的,的确如此,他们使用了 `pid` 位图,但是基本思想没有变,同样需要标记 `pid` 是否可用,只不过使用 `pid` 位图的方式更加节约内存. 想象一下, 通过将每一位设置为 `0` 或者是 `1`, 可以用来表示是否可用,第 `1` 位的 `0` 和 `1` 用来表示pid为1是否可用,以此类推. 到此为此一个看似还不错的 `pid` 框架设计完成了,下图是目前整个框架的整体效果. +到此为此这看起来似乎是个解决方案,但是考虑到这个方案是要放进内核,开发 `linux` 的那帮家伙肯定会想近一切办法进行优化的,的确如此,他们使用了 `pid` 位图,但是基本思想没有变,同样需要标记 `pid` 是否可用,只不过使用 `pid` 位图的方式更加节约内存. 想象一下, 通过将每一位设置为 `0` 或者是 `1`, 可以用来表示是否可用,第 `1` 位的 `0` 和 `1` 用来表示pid为1是否可用,以此类推. 到此为此一个看似还不错的 `pid` 框架设计完成了,下图是使用 `pidmap` 的 `pid` 框架的整体效果. +![带 `pidmap` 的 `pid_namespace`](001-pid_namespace_framework.png) + +> 从图中可以看到每个进程都用唯一的 `pid_t pid` 来标识 +> 内核通过一个 `pid` 位图 `pidmap` 来分配 `pid` + ```cpp // http://elixir.free-electrons.com/linux/latest/source/include/linux/pid_namespace.h#L14 struct pidmap { @@ -51,30 +74,39 @@ struct pidmap { > -##1.3 引入PID类型后的PID框架 +##1.3 引入 `PID` 类型后的 `PID` 框架 ------ -熟悉linux的读者应该知道一个进程不光光只有一个进程 `pid`, 还会有进程组 `id` ,还有会话 `id` ,(关于进程组和会话请参考(进程之间的关系)那么引入 `pid` 类型后,框架变成了下面这个样子, +但是 `linux` 内核中一个进程不光光只有一个进程 `pid`, 还会有进程组 `id` ,还有会话 `id` ,(关于进程组和会话请参考([进程之间的关系](http://blog.csdn.net/zhangyifei216/article/details/49705515)), 那么引入 `pid` 类型后,框架变成了下面这个样子, + ```cpp -// http://elixir.free-electrons.com/linux/v4.15-rc7/source/include/linux/sched.h#L696 struct task_struct { .... - /* PID/PID hash table linkage. */ - struct pid_link pids[PIDTYPE_MAX]; - struct list_head thread_group; - struct list_head thread_node; + pid_t pid; + pid_t session; + struct task_struct *group_leader; .... } + +struct signal +{ + .... + pid_t __pgrp; + .... +} +来自于 kernel 2.6.24 早期代码 ``` + + 对于进程组 `id` 来说, 信号需要知道这这个 `id`, 通过这个 `id`, 可以实现对一组进程进行控制, 所以这个 `id` 出现在了 `signal` 这个结构体中. ```cpp -// http://elixir.free-electrons.com/linux/v4.15-rc7/source/include/linux/sched/signal.h#L79 +// http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/sched/signal.h#L79 struct signal { .... @@ -94,27 +126,90 @@ struct signal 随着内核不断的添加新的内核特性, 尤其是 `PID Namespace` 机制的引入, 这导致 `PID` 存在命名空间的概念, 并且命名空间还有层级的概念存在, 高级别的可以被低级别的看到, 这就导致高级别的进程有多个 `PID` ,比如说在默认命名空间下, 创建了一个新的命名空间,占且叫做 `level1`, 默认命名空间这里称之为 `level0`, 在 `level1` 中运行了一个进程在 `level1` 中这个进程的 `pid` 为 `1`, 因为高级别的 `pid namespace` 需要被低级别的 `pid namespace` 所看见,所以这个进程在 `level0` 中会有另外一个 `pid`, 为 `xxx`. 套用上面说到的 `pid` 位图的概念, 可想而知, 对于每一个 `pid namespace` 来说都应该有一个 `pidmap`, 上文中提到的 `level1` 进程有两个 `pid` 一个是 `1` ,另一个是 `xxx`,其中 `pid` 为 `1` 是在 `level1` 中的 `pidmap` 进行分配的, `pid` 为 `xxx` 则是在 `level0` 的 `pidmap` 中分配的. 下面这幅图是整个 `pidnamespace` 的一个框架 -.引入了PID命名空间后,一个pid就不仅仅是一个数值那么简单了,还要包含这个pid所在的命名空间,父命名空间,命名空间多对应的pidmap,命名空间的pid等等.因此内核对pid做了一个封装,封装成struct pid,一个名为pid的结构体,下面是其定义: +![引入 `pidtype` 之后的 `pid_namespace`](002-pid_namespace_with_pidtype.png) +首先内核引入了一种通用的方法定义不同类型的 `pid`, 用 `pid_type` 描述, 分别对应进程 `pid`, 进程组 `pid` 和会话组 `pid`. + + + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/pid.h#L58 enum pid_type { - PIDTYPE_PID, - PIDTYPE_PGID, - PIDTYPE_SID, - PIDTYPE_MAX + PIDTYPE_PID, // 当前进程的pid + PIDTYPE_PGID, // 进程组组长的pid + PIDTYPE_SID, // 进程会话组组长的pid + PIDTYPE_MAX, + /* only valid to __task_pid_nr_ns() */ + __PIDTYPE_TGID }; +``` + +这样要获取某个进程对应类型的 `pid` 只需要使用类似于 `pids[PIDTYPE_XXX]` 的形式即可. +其中 `__PIDTYPE_TGID` 用于获取到线程主进程的 `PID`. + +引入了 `PID` 命名空间后, 一个 `pid` 就不仅仅是一个数值那么简单了,还要包含这个 `pid` 所在的命名空间, 父命名空间, 命名空间多对应的 `pidmap` , 命名空间的 `pid` 等等. 因此内核对 `pid` 做了一个封装,封装成 `struct pid` ,一个名为 `pid` 的结构体,下面是其定义: + + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/pid.h#L60 struct pid { - unsigned int level; //这个pid所在的层级 - /* lists of tasks that use this pid */ - struct hlist_head tasks[PIDTYPE_MAX]; //一个hash表,又三个表头,分别是pid表头,进程组id表头,会话id表头,后面再具体介绍 - struct upid numbers[1]; //这个pid对应的命名空间,一个pid不仅要包含当前的pid,还有包含父命名空间,默认大小为1,所以就处于根命名空间中 + atomic_t count; // 当前pid的引用计数器 + unsigned int level; // 这个pid所在的层级 + /* lists of tasks that use this pid */ + struct hlist_head tasks[PIDTYPE_MAX]; // 共享该pid的所有进程 + struct rcu_head rcu; + struct upid numbers[1]; // 这个task_struct在多个命名空间的显示, 一个upid就是一个namespace的pid的表示. }; +``` + +这里最重要的成员变量就是 `numbers`, 它是个变长数组, 表示一个 `task_struct` 在每个 `namespace` 的 `pid`(这个 `id` 就是`getpid()` 所得到的值), `number[0]` 表示最顶层的 `namespace`level=0`, `number[1]` 表示 `level=1`, 以此类推. + +一个进程在不同的命名空间`namespace` 呈现不同的 `pid`, 因此内核将每个 `namespace` 下的 `pid` 抽象为一个 `upid`, 一个进程属于几个`namespace` 就有几个 `upid`, 因此采用变长数组 `struct upid numbers[1]` 的形式表示. + + + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/pid.h#L53 struct upid { //包装命名空间所抽象出来的一个结构体 int nr; //pid在该命名空间中的pid数值 struct pid_namespace *ns; //对应的命名空间 - struct hlist_node pid_chain; //通过pidhash将一个pid对应的所有的命名空间连接起来. + struct hlist_node pid_chain; //通过pidhash将一个pid对应的所有的命名空间连接起来.[已经移除] }; +``` + +这里 `nr` 和 `ns` 成对出现, 表示进程的在这个 `ns` 命名空间的 `pid` 为 `nr`. 管理这些 `pid` 结构, 通常把他们放置在 `hash` 表中, `pid_chain` 是 `hash` 链表结构中的一个节点, 系统会把 `UPID` 的 `nr` 和 `namespace` 的 `ns` 经过某种 `hash`, 得到在一个全局的 `Hash` 数组中的下标, 此 `UPID` 便会加入到对应下标的链表中. 所以 `pid_chain` 就是 `hash` 表和数据之间的桥梁. + + + +>这里 `linux` 内核中广泛的使用这种 `hash` 表, `hash` 表中每个元素都是 `hlist_node`, 那么取得每个元素所代表的 `value`, 就要通过指针和结构体, 来倒推 `value` 的指针. 实现机理通过函数 `container_of`. + + +那么进程 `task_struct` 中如何关联 `PID` 的呢? + + + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/pid.h#L72 +struct pid_link +{ + /* PID/PID hash table linkage. */ + struct pid_link pids[PIDTYPE_MAX]; + struct list_head thread_group; + struct list_head thread_node; +}; +``` + +`thread_group` 和 `thread_node` 作为一个节点加入到所有引用同一 `PID` 结构的进程链表中; + +`pid` 指向该进程引用的 `PID` 结构. + +命名空间 `namespace` 本身又是一个树状的层次结构, 用 `pid_namespace` 来描述, 该结构中包含了当前 `namespace` 的层次关系和 `pid` 位图信息, 每次创建一个新的 `namespace`, 就会创建一个新的 `pid_namespace`. 其中作为初始化的根命名空间就是 `struct pid_namespace init_pid_ns`. 进程的 `task_struct->pid` 就是进程在根命名空间中的 `pid` 值. 即 `pid->numbers[0].nr` + + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/pid_namespace.h#L31 struct pid_namespace { struct kref kref; struct pidmap pidmap[PIDMAP_ENTRIES]; //上文说到的,一个pid命名空间应该有其独立的pidmap @@ -131,71 +226,192 @@ struct pid_namespace { int reboot; /* group exit code if this pidns was rebooted */ unsigned int proc_inum; }; +``` -//上面还有一些复杂的成员,这里的讨论占且用不到 -引入了pid namespace后,的确变得很复杂了,多了很多看不懂的数据结构.进程如何和struct pid关联起来呢,内核为了统一管理pid,进程组id,会话id,将这三类id,进行了整合,也就是现在task_struct要和三个struct pid关联,还要区分struct pid的类型.所以内核又引入了中间结构将task_struct和pid进行了1:3的关联.其结构如下: -struct pid_link -{ - struct hlist_node node; - struct pid *pid; -}; + + + +内核为了统一管理 `pid`, 进程组 `id`, 会话 `id`, 将这三类 `id` 整合后, 在 `task_struct` 中通过 `pids[PIDTYPE_MAX]` 将这三者 `pid` 关联, 因此 `task_struct` 和 `pid` 是 `1:n=3` 的关联.其结构如下: + + +```cpp +// http://elixir.free-electrons.com/linux/v4.15-rc7/source/include/linux/sched.h#L696 struct task_struct { - ............. - pid_t pid; - struct pid_link pids[PIDTYPE_MAX]; - ............. + .... + /* PID/PID hash table linkage. */ + struct pid_link pids[PIDTYPE_MAX]; + struct list_head thread_group; + struct list_head thread_node; + .... } -struct pid -{ - unsigned int level; //这个pid所在的层级 - /* lists of tasks that use this pid */ - struct hlist_head tasks[PIDTYPE_MAX]; //一个hash表,又三个表头,分别是pid表头,进程组id表头,会话id表头,用于和task_struct进行关联 - struct upid numbers[1]; //这个pid对应的命名空间,一个pid不仅要包含当前的pid,还有包含父命名空间,默认大小为1,所以就处于根命名空间中 -}; +``` -到此为止一个看起来已经比较完善的pid框架构建完成了,整个框架的效果如下: -其中进程A,B,C是一个进程组的,A是组长进程,所以B,和C的task_struct结构体中的pid_link成员的node字段就被邻接到进程A对应的struct pid中的tasks[1].struct upid通过pid_hash和pid数值关联了起来,这样就可以通过pid数值快速的找到所有命名空间的upid结构,numbers是一个struct pid的最后一个成员,利用可变数组来表示这个pid结构当前有多少个命名空间. -注: 2016/08/28 修正上图的一个错误,pid_hash的key并不是nr,应该是pid_hashfn(upid->nr, upid->ns)]唯一确定一个upid结构(具体可以参考pid_hashfn的实现),这样就可以通过nr和ns来找到其对应的upid结构了。 -为了验证我们这个框架,下面是一些PID相关的函数,通过函数的实现来验证下这个框架. -进程PID相关的API分析 -获取三种类型的pid结构 +到此为止一个看起来已经比较完善的pid框架构建完成了,整个框架的效果如下: +![pid_namespace 框架](./pid_namespace.png) + +可以看到 3个进程共享同一个 `struct pid` 结构(`Task[0, 1, 2]`), 该 `pid` 属于 `3` 个命名空间(`Leve 0, 1 2`) + + +![整个框架的效果](./pid_namespace_framework.png) + +其中进程 `A, B,C` 是一个进程组的, `A` 是组长进程, 所以 `B` 和 `C` 的 `task_struct` 结构体中的 `pid_link` 成员的 `node` 字段就被邻接到进程 `A` 对应的 `struct pid` 中的 `tasks[1]`. `struct upid` 通过 `pid_hash` 和 `pid` 数值关联了起来, 这样就可以通过pid数值快速的找到所有命名空间的upid结构,numbers是一个struct pid的最后一个成员,利用可变数组来表示这个pid结构当前有多少个命名空间. + +>注: 2016/08/28 修正上图的一个错误,pid_hash的key并不是nr,应该是pid_hashfn(upid->nr, upid->ns)]唯一确定一个upid结构(具体可以参考pid_hashfn的实现),这样就可以通过nr和ns来找到其对应的upid结构了。 + + +##1.5 pid_namespace 总结 +------- + + + + +#2 进程 `PID` 相关的 `API` 分析 +------- + + + +##2.1 获取三种类型的pid结构 +------- + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/sched.h#L1118 static inline struct pid *task_pid(struct task_struct *task) { - return task->pids[PIDTYPE_PID].pid; + return task->pids[PIDTYPE_PID].pid; } + +static inline struct pid *task_tgid(struct task_struct *task) +{ + return task->group_leader->pids[PIDTYPE_PID].pid; +} + /* -* Without tasklist or rcu lock it is not safe to dereference -* the result of task_pgrp/task_session even if task == current, -* we can race with another thread doing sys_setsid/sys_setpgid. -*/ + * Without tasklist or RCU lock it is not safe to dereference + * the result of task_pgrp/task_session even if task == current, + * we can race with another thread doing sys_setsid/sys_setpgid. + */ static inline struct pid *task_pgrp(struct task_struct *task) { - return task->group_leader->pids[PIDTYPE_PGID].pid; + return task->group_leader->pids[PIDTYPE_PGID].pid; } + static inline struct pid *task_session(struct task_struct *task) { - return task->group_leader->pids[PIDTYPE_SID].pid; + return task->group_leader->pids[PIDTYPE_SID].pid; } +``` -获取pid结构中的某一个名字空间的pid数值 +##2.2 获取pid结构中的某一个名字空间的pid数值 +------- + +| 函数 | 功能 | 定义 | +|:-----:|:-----:|:-----:| +| [`pid_nr()`](http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/pid.h#L167) | 进程的全局 `PID`, 在 `init_namespace` 中的 PID 值 | `pid->numbers[0].nr` | +| [`pid_vnr()`](http://elixir.free-electrons.com/linux/v4.14.12/source/kernel/pid.c#L515) | 进程的虚拟 `PID`, 在 `current namespace` 中的 `PID` 值 | `pid_nr_ns(pid, task_active_pid_ns(current))` | +| [`pid_nr_ns()`](http://elixir.free-electrons.com/linux/v4.14.12/source/kernel/pid.c#L501) | 进程在指定的 `namespace` 中的 `PID` 值 | `pid->numbers[ns->level].nr` | + +其中进程在 `fork` 的时候, `task->pid = pid_nr()`, 即是其全局(相对于 `init_namespace`) 的 `PID` 值. + + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/kernel/pid.c#L501 pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns) { struct upid *upid; pid_t nr = 0; - //判断传入的pid namespace层级是否符合要求 + // 判断传入的pid namespace层级是否符合要求 if (pid && ns->level <= pid->level) { - upid = &pid->numbers[ns->level]; //去到对应pid namespace的strut upid结构 - if (upid->ns == ns) //判断命名空间是否一致 - nr = upid->nr; //获取pid数值 + upid = &pid->numbers[ns->level]; // 取到对应pid namespace的strut upid结构 + if (upid->ns == ns) // 判断命名空间是否一致 + nr = upid->nr; // 获取pid数值 } return nr; } +``` -看看如何分配一个pid吧 +我们获取进程 `pid` 系统调用的 `getpid()` 和 `gettid()` 就是通过这个函数实现的, 他们的区别在于前者获取的是当前进程的 `PID` 值, 对于多线程应用而言, 对子线程执行 `getpid( )` 获取的是主线程的 `PID` 值, 即可理解为进程 `PID`, 而后者 `gettid( )` 获取的是当前进程/线程的实际 `PID` 值, 即线程 `PID`. 如果不是多线程应用或者是主线程则 `getpid()` 和 `gettid()` 获取到的 `PID` 相同. + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/kernel/sys.c#L829 +/** + * sys_getpid - return the thread group id of the current process + * + * Note, despite the name, this returns the tgid not the pid. The tgid and + * the pid are identical unless CLONE_THREAD was specified on clone() in + * which case the tgid is the same in all threads of the same group. + * + * This is SMP safe as current->tgid does not change. + */ +SYSCALL_DEFINE0(getpid) +{ + return task_tgid_vnr(current); +} + +/* Thread ID - the internal kernel "pid" */ +SYSCALL_DEFINE0(gettid) +{ + return task_pid_vnr(current); +} +``` + +其中 + +* gettid-=>task_pid_vnr 获取的是进程 `PIDTYPE_PID` 类型的 `PID` 值 + +* getpid-=>task_tgid_vnr 获取的是进程 `__PIDTYPE_TGID` 类型的 `PID` 值 + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/sched.h#L1166 +static inline pid_t task_pid_vnr(struct task_struct *tsk) +{ + return __task_pid_nr_ns(tsk, PIDTYPE_PID, NULL); +} + +// http://elixir.free-electrons.com/linux/v4.14.12/source/include/linux/sched.h#L1218 +static inline pid_t task_tgid_vnr(struct task_struct *tsk) +{ + return __task_pid_nr_ns(tsk, __PIDTYPE_TGID, NULL); +} +``` + +`__task_pid_nr_ns` 函数用于获取进程 `task` 在 `ns` 命名空间下 `type` 类型的 `PID` 值 +这里 `__PIDTYPE_TGID` 获取进程组组长的 `PID` 有点hack的方法. 首先将 `task` 指向其 `group_leader`, 接着获取其 `PIDTYPE_PID` 即可获取较到一个线程主进程的 `PID`. + +```cpp +// http://elixir.free-electrons.com/linux/v4.14.12/source/kernel/pid.c#L521 +pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, + struct pid_namespace *ns) +{ + pid_t nr = 0; + + rcu_read_lock(); + if (!ns) + ns = task_active_pid_ns(current); // 获取 current 进程的当前命名空间 + if (likely(pid_alive(task))) { + if (type != PIDTYPE_PID) { // 如果不是获取进程本身的PID PIDTYPE_PID, 则是获取其进程组组长的PID信息 + if (type == __PIDTYPE_TGID) + type = PIDTYPE_PID; + task = task->group_leader; + } + nr = pid_nr_ns(rcu_dereference(task->pids[type].pid), ns); // 获取进程的对应命名空间ns的 PID + } + rcu_read_unlock(); + + return nr; +} +``` + + +##2.3 `pid` 的分配 +------- + + +###2.3.1 使用 `pidmap` 分配 +------- struct pid *alloc_pid(struct pid_namespace *ns) //pid分配要依赖与pid namespace,也就是说这个pid是属于哪个pid namespace { @@ -249,3 +465,21 @@ out_free: pid = NULL; goto out; } + + + +##2.4 多个进程共享pid结构 +------- + +附录 +附录A 参考链接 + +Linux 内核进程管理之进程ID + +
+ +* 本作品/博文 ( [AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚(gatieme)](http://blog.csdn.net/gatieme) 创作. + +* 采用知识共享许可协议知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的. + +* 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问,请与我联系. diff --git a/study/kernel/08-cgroup/01-namespace/01-pid_namespace/pid_namespace.png b/study/kernel/08-cgroup/01-namespace/01-pid_namespace/pid_namespace.png new file mode 100644 index 0000000000000000000000000000000000000000..d65d480f7ab4d07470a95b14e53cfd45193a34af GIT binary patch literal 30783 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