ºìÁªLinuxÃÅ»§
Linux°ïÖú

ÈçºÎÈ¥Àí½âLinuxÖнø³Ì£¬Ï̵߳ȸÅÄî

·¢²¼Ê±¼ä:2006-09-04 09:29:08À´Ô´:ºìÁª×÷Õß:Redassociation
1 »ù±¾¸ÅÄî

1.1. ½ø³ÌºÍÏß³Ì


¡¡¡¡¿ÉÖ´ÐÐÎļþÓÉÖ¸ÁîºÍÊý¾Ý×é³É¡£½ø³Ì¾ÍÊÇÔÚ¼ÆËã»úÉÏÔËÐеĿÉÖ´ÐÐÎļþÕë¶ÔÌØ¶¨µÄÊäÈëÊý¾ÝµÄÒ»¸öʵÀý£¬Í¬Ò»¸ö¿ÉÖ´ÐгÌÐòÎļþÈç¹û²Ù×÷²»Í¬µÄÊäÈëÊý¾Ý¾ÍÊÇÁ½¸ö²»Í¬µÄ½ø³Ì¡£

¡¡¡¡Ïß³ÌÊǽø³ÌµÄÒ»ÌõÖ´Ðз¾¶£¬Ëü°üº¬¶ÀÁ¢µÄ¶ÑÕ»ºÍCPU¼Ä´æÆ÷״̬£¬Ã¿¸öÏ̹߳²ÏíÆäËù¸½ÊôµÄ½ø³ÌµÄËùÓеÄ×ÊÔ´£¬°üÀ¨´ò¿ªµÄÎļþ¡¢Ò³±í£¨Òò´ËÒ²¾Í¹²ÏíÕû¸öÓû§Ì¬µØÖ·¿Õ¼ä£©¡¢Ðźűêʶ¼°¶¯Ì¬·ÖÅäµÄÄÚ´æµÈµÈ¡£Ï̺߳ͽø³ÌµÄ¹ØÏµÊÇ£ºÏß³ÌÊÇÊôÓÚ½ø³ÌµÄ£¬Ïß³ÌÔËÐÐÔÚ½ø³Ì¿Õ¼äÄÚ£¬Í¬Ò»½ø³ÌËù²úÉúµÄÏ̹߳²ÏíͬһÎïÀíÄÚ´æ¿Õ¼ä£¬µ±½ø³ÌÍ˳öʱ¸Ã½ø³ÌËù²úÉúµÄÏ̶߳¼»á±»Ç¿ÖÆÍ˳ö²¢Çå³ý¡£

¡¡¡¡LinuxÔÚºËÍâ²ÉÓÃ1:1Ïß³ÌÄ£ÐÍ£¬¼´ÓÃÒ»¸öºËÐĽø³Ì£¨ÇáÁ¿½ø³Ì£©¶ÔÓ¦Ò»¸öỊ̈߳¬½«Ï̵߳÷¶ÈµÈͬÓÚ½ø³Ìµ÷¶È£¬½»¸øºËÐÄÍê³É£¬¶øÆäËüÖîÈçÏß³ÌÈ¡Ïû¡¢Ï̼߳äµÄͬ²½µÈ¹¤×÷£¬¶¼ÊÇÔÚºËÍâÏ߳̿âÖÐÍê³ÉµÄ¡£Òò´Ë¿ÉÒ԰ѽø³Ì¿´×÷Ò»×éỊ̈߳¬Õâ×éÏß³ÌÓµÓÐÏàͬµÄÏß³Ì×éºÅ£¨TGID£©£¬Õâ¸öTGID¾ÍÊÇÕâ×éÏß³ÌÐòËù¸½ÊôµÄ½ø³ÌµÄIDºÅ£¬Ã¿¸öÏ̵߳ÄIDºÅ¾ÍÊÇÎÒÃÇÓÃpsÃüÁîËù¿´µ½µÄLWPºÅ¡£

¡¡¡¡ÎªÁË·½±ã£¬´ÓÏÖÔÚÆðÎÒÃÇÓÃÈÎÎñÀ´´úÌæ½ø³ÌºÍỊ̈߳¬¼´Ã¿Ìáµ½ÈÎÎñ£¬ÎÒÃǾÍÊÇÖ¸Ï̺߳ͽø³Ì£¬³ý·ÇҪǿµ÷Ï̺߳ͽø³ÌÖ®¼äµÄ²»Í¬Ö®´¦¡£ÈÎÎñµÄÖÜÆÚ´Ó±»fork¿ªÊ¼Ò»Ö±µ½¸øÈÎÎñ´Ó½ø³Ì±íÖÐÏûʧ¡£Ò»¸ö½ø³Ì°üÀ¨£ºÕýÎĶÎ(text)£¬Êý¾Ý¶Î(data)£¬Õ»¶Î(STACK)ºÍ¹²ÏíÄÚ´æ¶Î£¨SHARED MEMORY£©¡£

1.2. ÖжϺÍÐźÅ

¡¡¡¡£¨1£©ÖжÏ

¡¡¡¡ÖжÏͨ³£¶¨ÒåΪÓÃÀ´¸Ä±äCPUÖ´ÐеÄÖ¸ÁîµÄ˳ÐòµÄʼþ¡£¶ÔÓÚÆä·ÖÀà¿ÉνÊÇÈÊÕß¼ûÈÊ£¬ÖÇÕß¼ûÖÇ£¬µ«±Ï¾¹ÓÐʤÓÚÎÞ£¬ÕâÀï¸ø³öÒ»ÖÖ·ÖÀࣺӲÖжϡ¢Òì³£ÖжϺÍÈíÖжϡ£Ó²ÖжÏÒ²³ÆÎªÍⲿÖжϣ¬·ÖΪÁ½À࣬¿ÉÆÁ±ÎºÍ²»¿ÉÆÁ±Î¡£/proc/interruptsÁгöÁ˵±Ç°ÏµÍ³¶¨ÒåµÄËùÓÐÓ²Öжϡ£

¡¡¡¡Òì³£ÖжÏÊÇϵͳÔËÐгöÏÖÒ쳣ʱºòCPU×Ô¶¯²úÉúµÄÖжϣ¬Èç³ýÊýΪÁ㡢ʹÓÃÐéÄâÄÚ´æ»úÖÆÊ±µÄȱҳ±£»¤Òì³£µÈ¡£ÈíÖжÏÊÇÓɳÌÐòÖ¸ÁîÖаüº¬INT Ö¸Áî²úÉúµÄÖжϣ¬Èçµ¥²½¸úר£»¸ÃÖжϴ¦ÀíµÄÒ»²¿·ÖÈÎÎñ¿ÉÒÔÑÓ³ÙÒ»»áÔÙ´¦Àí¡£

1.3. CPU µÄ״̬

¡¡¡¡CPUµÄ״̬¿É·ÖΪÓÐ7ÖÖ£º

¡¡¡¡£¨1£©³£¹æÓû§Ì¬(Ŀ̬)£º CPUËùÖ´ÐеÄÈÎÎñÔÚ·ÃÎʸÃÈÎÎñ×Ô¼ºµÄÄÚ´æ¿Õ¼ä£»

¡¡¡¡£¨2£©ºËÐÄ̬(¹Ü̬)£ºÈç¹ûCPUÕýÔÚÔËÐкËÐijÌÐò»òÔÚCPUÉÏÔËÐеÄÈÎÎñÕýÔÚͨ¹ýϵͳµ÷ÓÃÇëÇóÄں˷þÎñ£¬ÀýÈç·ÃÎÊÓ²¼þ£¬Õâʱ¾Í³ÆCPU´¦ÓÚºËÐÄ̬£»

¡¡¡¡£¨3£©CPUÔËÐÐniceÈÎÎñ£¬Ò»¸öÓÅÏȼ¶±ðµÍÓÚÆÕͨÈÎÎñµÄÓÅÏȼ¶±ðµÄÈÎÎñ£»

¡¡¡¡£¨4£©ioµÈ´ý: ÓÉÓÚÈÎÎñµÈ´ýI/O¶øÊ¹CPU´¦ÓÚ¿ÕÏÐ״̬£¬ÕâЩI/OÖ÷ÒªÖ¸block I/O,raw I/O,VM paging/swapins£»

¡¡¡¡£¨5£©ÏÐÖãºÏµÍ³ÖеÄËùÓÐÈÎÎñÓÉÓڵȴý³ýÁËI/OÒÔÍâµÄʼþµÄ·¢Éú¶ø´¦ÓÚ˯Ãß״̬£¬»òÕßϵͳûÓÐÈÎÎñ£»

¡¡¡¡£¨6£©CPUÕýÔÚ´¦ÀíÓ²Öжϣ¬¼´ ÔÚirq״̬£»

¡¡¡¡£¨7£©CPUÕýÔÚ´¦ÀíÈíÖжϡ£

¡¡¡¡´ÓÓû§Ì¬×ª»»ÎªºËÐÄ̬µÄΨһ;¾¶ÊÇÖжϡ£CPU´¦ÓÚÓû§Ì¬Ê±£¬ËùÔËÐеijÌÐòÖ»ÄÜÖ´ÐзÇÌØÈ¨Ö¸ÁÈç¹ûÓû§³ÌÐòÔÚÓû§Ì¬ÏÂÖ´ÐÐÌØÈ¨Ö¸Á½«·¢ÉúÖжϣ¬ÓɲÙ×÷ϵͳ»ñµÃ¿ØÖÆ¡£²Ù×÷ϵͳÔÚºËÐÄ̬ÏÂÔËÐС£´ÓºËÐÄ̬µ½Óû§Ì¬¿ÉÒÔͨ¹ýÐ޸ijÌÐò״̬×ÖÀ´ÊµÏÖ£¬Õ⽫°éËæÕâÓɲÙ×÷ϵͳ³ÌÐòµ½Óû§³ÌÐòµÄת»»¡£

1.4. ÈÎÎñÓÅÏȼ¶

¡¡¡¡Ã¿¸öÈÎÎñÔÚKernel2.6 Öв»ÊÇÓɵ÷¶ÈÆ÷ͳһ¼ÆË㣬¶øÊǶÀÁ¢¼ÆËã¡£ÓÅÏȼ¶ÓÉÁ½²¿·Ö¹¹³É£º

¡¡¡¡(1)¾²Ì¬ÓÅÏȼ¶¡£NiceÊǽø³ÌµÄ¾²Ì¬ÓÅÏȼ¶¡£¾²Ì¬ÓÅÏȼ¶ÔÚÈÎÎñ´´½¨µÄʱºò¾Í±»¸³Öµ£¬²¢ÇÒ²»±ä£¨³ý·ÇÓÃϵͳµ÷ÓøıäÈÎÎñµÄniceÖµ£©£»

¡¡¡¡(2)¶¯Ì¬ÓÅÏȼ¶£¨task->counter-MAX_RT_PRIO£©¡£Ëü¶¨ÒåÁËÒ»¸öÔÚ¾ÍÐ÷¶ÓÁеĽø³Ìµ±ËüµÃµ½CPUºó¿ÉÔËÐеÄʱ¼ä¡£¼ÆËã»úÊÇÒÔʱÖÓÖжÏ×÷Ϊʱ¼äµÄ¼ÆÊýÆ÷£¬Ã¿·¢ËÍÒ»¸öʱÖÓÖжϣ¬¶¯Ì¬ÓÅÏȼ¶ÉϵÄʱ¼äƬ¾Í¼õÉÙÒ»¸öʱÖÓÖжϵÄʱ¼ä£¬Ê±¼äƬ¼õµ½0µÄʱºò¾ÍÍ˳ö¸Ã½ø³Ì¶øÖ´ÐÐÁíÒ»¸ö½ø³Ì¡£ÈÎÎñµÄ¶¯Ì¬ÓÅÏȼ¶ÔòÊǸú¾²Ì¬ÓÅÏȼ¶ºÍƽ¾ùµÈ´ýʱ¼ä£¨sleep_avg£©Óйء£¶ÔÓÚʵʱÈÎÎñµÄÓÅÏȼ¶ÔÚ´´½¨µÄʱºò¾ÍÈ·¶¨ÁË£¬¶øÇÒÒ»µ©È·¶¨ÒÔºó¾Í²»Ôٸı䣬ËùÒÔÏÂÃæ²¿·Ö½ö¶ÔÓÚ·ÇʵʱÈÎÎñ¶øÑÔ£¬ÈÎÎñµÄƽ¾ùµÈ´ýʱ¼äÔ½´ó£¬ÈÎÎñµÄ¶¯Ì¬ÓÅÏȼ¶Ò²¾ÍÔ½¸ß¡£

¡¡¡¡ÓÐÒÔϼ¸ÖÖÇé¿öÐèÒª¼ÆËãÈÎÎñµÄÓÅÏȼ¶£º

¡¡¡¡£¨1£©´´½¨ÐÂÈÎÎñ£¬Ê¹Óú¯Êýeffective_prio()£¨ÒòΪ´ËʱÈÎÎñÉÐδ½øÐе÷¶È£¬Ã»ÓÐsleep_avgºÍinteractive_credit¿ÉÑÔ£©£»

¡¡¡¡£¨2£©»½ÐѵȴýÈÎÎñʱ£¬Ê¹Óú¯Êýrecalc_task_prio ()À´¼ÆËãÈÎÎñ¶¯Ì¬ÓÅÏȼ¶¡£

¡¡¡¡£¨3£©ÈÎÎñÓÃÍêʱ¼äƬÒԺ󣬱»ÖØÐ²åÈëµ½active array»òÕßexpired arrayµÄʱºòÐèÒª

¡¡¡¡£¨4£©ÆäËüÇé¿ö£¬ÈçIDLEÈÎÎñ³õʼ»¯µÈʱºò¡£

¡¡¡¡¶¯Ì¬ÓÅÏȼ¶µÄ¼ÆË㹫ʽΪ£ºPRI=NICE+40+CPU_ PENALTY£¬´Ó¹«Ê½ÖпÉÒÔ¿´µ½´ó¶àÊýÓû§ÈÎÎñµÄÓÅÏȼ¶ÊÇ´óÓÚ40µÄ¡£¿ÉÒÔʹÓá°ps -l¡±ºÍ¡°ps -emo THREAD¡±ÃüÁî·Ö±ð²éѰÈÎÎñºÍÏ̵߳ÄCPUʹÓÃ״̬¡£Ê¹Óá°nice -n proname¡±ºÍ¡°renice +n proid¡±À´ÐÞ¸ÄÈÎÎñµÄÓÅÏȼ¶¡£niceÖµµÄϵͳȱֵΪ20¡£

[code]renice command. It uses the same priorities as nice,
but is used on processes that are already running. It can take the -p option
for a specific PID, the -g option for a process group, or -u for the processes
belonging to a specific user.[/code]

1.5. CPU¶ÓÁ㤶È

¡¡¡¡Ò»¸öÈÎÎñÈç¹ûÓµÓÐÁ˳ýCPUÒÔÍâµÄËùÓÐÔËÐÐʱËùÐèÒªµÄ×ÊÔ´£¬ÎÒÃǾͳƸÃÈÎÎñΪ¿ÉÔËÐÐÈÎÎñ¡£¿ÉÔËÐÐÈÎÎñ°üº¬µÈ´ý¶ÓÁкÍÕýÔÚCPUÉÏÔËÐеÄÈÎÎñ£¬ÕâЩÈÎÎñ¹¹³ÉÁËÔËÐжÓÁС£ÔËÐжÓÁ㤶ÈΪÈÎÎñµÄ¸öÊý£¬ÔËÐжÓÁÐÔ½³¤£¬ÈÎÎñµÈ´ýʱ¼äÔ½³¤¡£

¡¡¡¡Ò»¸ö×èÈûÈÎÎñ¿ÉÄÜÔڵȴýI/OÊý¾Ý»òµÈ´ýÒ»¸öϵͳµ÷ÓõĽá¹û¡£µ±Ò»¸öÈÎÎñ¼´½«½øÈëÔËÐжÓÁÐʱ£¬ÄÚºËÊ×ÏȼÆËãÆäÓÅÏÈȨ£¬È»ºóÔÙ·ÅÈëÏàÓ¦µÄÓÅÏȼ¶µÄÔËÐжÓÁÐÀÔÚÔËÐйý³ÌÖУ¬¿ÉÔËÐеÄÈÎÎñµÄÓÅÏȼ¶Ã¿Ãë¸üÐÂÒ»´Î£¬Òò´ËÆäÔÚ¿ÉÔËÐжÓÁеÄλÖÿɶ¯Ì¬µ÷Õû¡£

1.6. ÉÏÏÂÎÄÇл»µÄ±ÈÂÊ

¡¡¡¡CPUÒ»°ãÔÚijһʱ¿ÌÖ»ÄÜÔËÐÐÒ»¸öÈÎÎñ¡£ÎªÁ˸øÓû§Ò»¸ö²¢Ðеĸоõ£¬LinuxÄں˲»Í£ÔÚ¸÷¸öÈÎÎñÖ®¼äÇл»£¬Õâ¸öÇл»½Ð×öÉÏÏÂÎÄÇл»¡£ÉÏÏÂÎİüÀ¨£ºCPUµÄËùÓмĴæÆ÷ÖеÄÖµ¡¢ÈÎÎñµÄ״̬ÒÔ¼°¶ÑÕ»ÖеÄÄÚÈÝ¡£ÉÏÏÂÎÄÇл»µÄÖ÷ÒªÈÎÎñÊDZ£´æÀÏÈÎÎñCPU״̬£¬²¢¼ÓÔØÐÂÈÎÎñµÄ±£´æ×´Ì¬£¬ÓÃÐÂÈÎÎñµÄÄÚ´æÓ³ÏñÌæ»»ÀÏÈÎÎñµÄÄÚ´æÓ³Ïñ¡£Òò´ËÉÏÏÂÎÄÇл»µ¼Ö´óÁ¿ÐÅÏ¢µÄ×ªÒÆ£¬µ¼ÖÂÁ˰º¹óµÄÉÏÏÂÎÄÇл»¿ªÏú¡£Òò´Ë£¬Òª¾¡¿ÉÄܼõÉÙ¸ÃÇл»¡£

¡¡¡¡Òª¼õÉÙÇл»£¬±ØÐëÖªµÀÇл»ÈçºÎ·¢Éú¡£ÔÚÏÂÁÐÇé¿öÏ·¢ÉúÉÏÏÂÎÄÇл»:

¡¡¡¡ÈÎÎñ½áÊø£»

¡¡¡¡ÈÎÎñʹÓÃÍêʱ¼äƬ£¬ÎªÊ¹¸÷¸öÈÎÎñÄܹ«Æ½µØÊ¹ÓÃCPU£¬ÄÚºËͨ¹ýʱ¼äÖжÏÀ´ÊµÏÖµ÷¶È£¬²»ÄܵÄÌåϵ½á¹¹ÒÔ¼°²»Í¬µÄÄںˣ¬Ã¿Ãëʱ¼äÖжϵĴÎÊý²»Ò»Ñù£»

¡¡¡¡ÈÎÎñÐèÒªµÄ×ÊÔ´µ±Ç°²»¿ÉÓã¨Èçȱҳ£©»òÈÎÎñµÈ´ýI/O²Ù×÷µÄÍê³É£»

¡¡¡¡µ±Ë¯ÃßÈÎÎñ±»»½ÐѽøÈë¿ÉÔËÐжÓÁÐʱ£¬Èç¹û¸ÃÈÎÎñµÄÓÅÏȼ¶¸ßÓÚËùÓпÉÔËÐеÄÈÎÎñ¶øÇÒÕýÔÚÔËÐеÄÈÎÎñ¿É±»ÇÀÕ¼£»

¡¡¡¡ÈÎÎñÀûÓÃÐźŻòϵͳµ÷ÓÃ×Ô¶¯·ÅÆúCPU£»
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 5 ÌõÆÀÂÛ

  1. Impreza2012 ÓÚ 2013-05-13 10:38:58·¢±í:

    ιÊÖªÐÂ

  2. ÓÚ 2013-05-10 11:50:18·¢±í:

    ×ܽáµÄ²»´í£º£©

  3. blueeyes1004 ÓÚ 2006-09-05 09:12:46·¢±í:

    ÓÖѧÁ˲»ÉÙ£¬Ð»Ð»£¡

  4. yeliming ÓÚ 2006-09-04 19:37:35·¢±í:

    ѧϰÖУ¬Ö§³Ö

  5. Redassociation ÓÚ 2006-09-04 09:30:21·¢±í:

    1.7. ÈÎÎñ״̬

    ¡¡¡¡ÈÎÎñ×ܹ²ÓÐ6ÖÖ״̬±êÖ¾,·Ö±ðÊÇ:

    ¡¡¡¡£¨1£©¿ÉÔËÐÐ״̬£º¿ÉÔËÐÐ״̬ÊÇÄÇЩÕýÔڵȴýCPU×ÊÔ´µÄÈÎÎñµÄ״̬,ÕâЩÈÎÎñÔÚ¾ÍÐ÷¶ÓÁÐrun-queqeÖÐ.ÕâЩÈÎÎñÖ»ÒªµÃµ½CPUÔÚ¸ö×ÊÔ´¾ÍÂíÉÏ¿ÉÒÔ±»ÔËÐÐ

    ¡¡¡¡£¨2£©¿É´ò¶Ï˯Ãß״̬£º´¦Óڵȴý¶ÓÁÐÖеÄÈÎÎñ£¬´ý×ÊÔ´ÓÐЧʱ»½ÐÑ£¬Ò²¿ÉÓÉÆäËüÈÎÎñ±»ÐźÅÖжϡ¢»½ÐѺó½øÈë¾ÍÐ÷״̬

    ¡¡¡¡£¨3£©²»¿É´ò¶Ï˯Ãß״̬£º´¦Óڵȴý¶ÓÁÐÖеÄÈÎÎñ£¬Ö±½ÓµÈ´ýÓ²¼þÌõ¼þ£¬´ý×ÊÔ´ÓÐЧʱ»½ÐÑ£¬²»¿ÉÓÉÆäËüÈÎÎñͨ¹ýÐźÅÖжϡ¢»½ÐÑ£»ÕâÀà״̬µÄÈÎÎñÆä˯ÃßµÄʱ¼äÏà¶Ô±È½Ï¶Ì¡£Óë¿É´ò¶Ï˯Ãß״̬µÄÇø±ð¾ÍÊǺóÕß¿ÉÒÔÓÉÐźŻ½ÐÑ¡£

    ¡¡¡¡£¨4£©½©ËÀ״̬£ºËäÈ»´ËʱÒѾ­ÊÍ·ÅÁËÄÚ´æ¡¢ÎļþµÈ×ÊÔ´£¬µ«ÊÇ»¹Ã»ÓÐÊÍ·ÅÈÎÎñ¿ØÖÆ¿étask_structÊý¾Ý½á¹¹Ïî¡£Ëü²»½øÐÐÈκε÷¶È»ò״̬ת»»£¬µÈ´ý¸¸ÈÎÎñ½«Ëü³¹µ×ÊÍ·Å

    ¡¡¡¡£¨5£©ÔÝͣ״̬£º¿ÉÄÜÊÇÈÎÎñ¿ØÖÆÐźÅËùÖ£¬»òÕßÕýÔÚ±»¸ú×Ùµ÷ÊÔ,¶øµ¼ÖÂÔÝʱֹͣÔËÐУ»ÐèÒªÆäËüÈÎÎñµÄÐźŲÅÄÜ»½ÐÑ¡£ÈÎÎñ±»ÔÝÍ££¬Í¨¹ýÆäËüÈÎÎñµÄÐźŲÅÄÜ»½ÐÑ¡£ÕýÔÚµ÷ÊÔµÄÈÎÎñ¿ÉÒÔÔÚ¸Ãֹͣ״̬¡£

    ¡¡¡¡£¨6£©TAS_DEAD£ºÒѾ­Í˳öÇÒ²»ÐèÒª¸¸ÈÎÎñ»ØÊÕµÄÈÎÎñµÄ״̬¡£

    ¡¡¡¡Ò»¸öÈÎÎñÖ»ÄÜÔËÐÐÔÚÓû§·½Ê½£¨CPU´¦ÓÚÓû§Ì¬£©»òºËÐÄ·½Ê½£¨CPU´¦ÓÚºËÐÄ̬£©Ï¡£ÔÚÓû§·½Ê½ÏÂÈÎÎñʹÓÃÒ»°ãµÄ¶ÑÕ»£¬¶øÔÚºËÐÄ·½Ê½ÏÂÓõÄÊǹ̶¨´óСµÄ¶ÑÕ»£¨Ò»°ãΪһ¸öÎïÀíÄÚ´æÒ³´óС£©¡£

    1.8. ϵͳƽ¾ù¸ºÔØ

    ¡¡¡¡ÏµÍ³Æ½¾ù¸ºÔØÓÃÀ´ºâÁ¿ÏµÍ³¹¤×÷Á¿£¨·þÎñµÄÈÎÎñµÄÊýÄ¿£©µÄÖ¸±ê¡£Linuxϵͳ²ÉÓÃÖ¸ÊýË¥¼õÒÆ¶¯Æ½¾ùËã·¨À´¼ÆËãϵͳƽ¾ù¸ºÔØ£¬¼´µ±Ç°ÏµÍ³µÄ¸ºÔØ=ÉϴμÆËãµÄ¸ºÔØ Ë¥¼õÒò×Ó + Õâһʱ¿ÌϵͳµÄÈÎÎñÊýÄ¿*£¨1-Ë¥¼õÒò×Ó£©¡£ËùÓõÄÈÎÎñÖÖÀà°üÀ¨ÔËÐжÓÁеÄÈÎÎñºÍ²»¿É´ò¶Ï˯Ãß״̬µÄÈÎÎñ¡£È±Ê¡Ê±£¬LinuxϵͳÌṩ1·ÖÖÓ£¬·ÖÖÓºÍ15·ÖÖÓÈýÖÖÐÎʽµÄϵͳƽ¾ù¸ºÔØ£¬Îª·½±ã£¬ÎÒÃǾͳÆÖ®Îª1-·ÖÖÓÆ½¾ù¸ºÔØ¡¢5-·ÖÖÓÆ½¾ù¸ºÔØ¡¢15-·ÖÖÓÆ½¾ù¸ºÔØ¡£Ê±¼äÔ½¶Ì£¬Ë¥¼õÔ½¿ì£¨Ë¥¼õ´ó£©£¬Ô½ÄÜ·´Ó³ÏµÍ³µÄ¸ºÔØÍ»±äÇé¿ö£»Ê±¼äÔ½³¤£¬Ë¥¼õÔ½Âý£¬ÄÜ·´Ó³ÏµÍ³µÄƽ¾ùÇé¿ö¡£

    1.9. ½ø³ÌµÄcapability

    ¡¡¡¡´«Í³UNIXµÄ·ÃÎÊ¿ØÖÆÄ£Ðͷdz£¼òµ¥£¬¾ÍÊÇ¡°³¬¼¶Óû§¶ÔÆÕͨÓû§¡±Ä£ÐÍ¡£ÔÚÕâÖÖÄ£ÐÍÖУ¬Ò»¸ö½ø³Ì»òÕÊ»§ÒªÃ´Ê²Ã´¶¼ÄÜ×ö¼´¾ßÓÐÈ«²¿µÄϵͳȨÏÞ£¬ÒªÃ´¼¸ºõʲôҲ²»ÄÜ×ö¼´Ö»ÓкÜСµÄȨÏÞ£¬ÕâÈ¡¾öÓÚ½ø³ÌµÄUID¡£ÀýÈ磬Èç¹ûÒ»¸ö½ø³ÌÐèÒª¼ÓÔØ/Ð¶ÔØÄÚºËÄ£¿éÒÔ¼°¹ÜÀíÎļþϵͳµÈ²Ù×÷ʱ£¬¾ÍÐèÒªÍêÈ«µÄrootȨÏÞ¡£ºÜÏÔÈ»ÕâÑù×ö¶Ôϵͳ°²È«´æÔںܴóµÄÍþв¡£UNIXϵͳÖеÄSUIDÎÊÌâ¾ÍÊÇÓÉÕâÖÖÐÅÈÎ×´Ä£ÐÍÔì³ÉµÄ¡£ÀýÈ磬һ¸öÆÕͨÓû§ÐèҪʹÓÃpingÃüÁî¡£ÕâÊÇÒ»¸öSUIDÃüÁ»áÒÔrootµÄȨÏÞÔËÐС£¶øÊµ¼ÊÉÏÕâ¸ö³ÌÐòÖ»ÊÇÐèÒª¼ÓÔØ/Ð¶ÔØÄÚºËÄ£¿é£¬³ý´ËÖ®ÍâµÄÆäËü rootµÄȨÏÞ¶ÔÕâ¸ö³ÌÐò¶¼ÊÇûÓбØÒªµÄ¡£Èç¹û³ÌÐò±àд²»ºÃ£¬¾Í¿ÉÄܱ»¹¥»÷ÕßÀûÓ㬻ñµÃϵͳµÄ¿ØÖÆÈ¨¡£

    ¡¡¡¡Ê¹ÓÃÄÜÁ¦(capability)¿ÉÒÔ¼õСÕâÖÖ·çÏÕ¡£ÏµÍ³¹ÜÀíԱΪÁËϵͳµÄ°²È«¿ÉÒÔ°þ¶árootÓû§µÄijЩÄÜÁ¦£¬ÕâÑù¼´Ê¹rootÓû§Ò²½«ÎÞ·¨½øÐÐijЩ²Ù×÷£»¶øÕâ¸ö¹ý³ÌÓÖÊDz»¿ÉÄæµÄ£¬Ò²¾ÍÊÇ˵Èç¹ûÒ»ÖÖÄÜÁ¦±»É¾³ý£¬³ý·ÇÖØÐÂÆô¶¯ÏµÍ³£¬·ñÔò¼´Ê¹rootÓû§Ò²ÎÞ·¨ÖØÐÂÌí¼Ó±»É¾³ýµÄÄÜÁ¦¡£

    ¡¡¡¡µ±ÌØÈ¨²Ù×÷ÓÉCapability LSM Ä£¿é¿ØÖÆÊ±£¬ÏµÍ³»ùÓÚ½ø³ÌÐÅÈÎ×´£¨creds£©À´ÖÙ²ÃÌØÈ¨²Ù×÷¡£µ±Capabilityδ±»±àÒë½øÄÚºËʱ£¬ÄÚºËʹÓÃĬÈϵݲȫģ¿é£¨security/dummy.c£©ÖÙ²ÃÌØÈ¨²Ù×÷£¬»úÖÆ·Ç³£¼òµ¥£¬½ö½ö¼ì²é½ø³Ìeuid¡¢fsuid£¨½øÐÐÎļþϵͳÏà¹ØÌØÈ¨²Ù×÷ʱ£©ÊÇ·ñΪ0¡£ÔÚÕâÖÖÇé¿öÏ£¬dummyÄ£¿é¸ù±¾²»¹ØÐĽø³ÌµÄÐÅÈÎ×´£¬Ã¿¸ö½ø³ÌµÄÐÅÈÎ×´¶¼¿½±´Æä¸¸½ø³ÌµÄÐÅÈÎ×´¡£×·¸ùËÝÔ´£¬Ã¿¸ö½ø³ÌµÄÐÅÈÎ×´ÎÞÂÛ½ø³ÌÓû§ÊÇ·ñΪ³¬¼¶Óû§£¬×îÖÕ¶¼¿½±´Init½ø³ÌµÄÐÅÈÎ×´£¬ÐÅÈÎ×´Öаüº¬Óг¬¼¶Óû§½ø³ÌµÄËùÓÐȨÄÜ¡£

    ¡¡¡¡LinuxÊÇÈçºÎʹÓÃPOSIX capabilities´úÌæ´«Í³µÄÐÅÈÎ×´Ä£Ð͵Ä?ÿ¸ö½ø³ÌÓÐÈý¸öºÍÄÜÁ¦ÓйصÄλͼ£ºinheritable(I)¡¢permitted(P)ºÍeffective(E)£¬¶ÔÓ¦½ø³ÌÃèÊö·û task_struct(include/linux/sched.h)ÀïÃæµÄcap_effective, cap_inheritable, cap_permitted¡£Ã¿ÖÖÄÜÁ¦ÓÉһλ±íʾ£¬1±íʾ¾ßÓÐijÖÖÄÜÁ¦£¬0±íʾûÓС£

    ¡¡¡¡cap_effective¡£µ±Ò»¸ö½ø³ÌÒª½øÐÐij¸öÌØÈ¨²Ù×÷ʱ£¬²Ù×÷ϵͳ»á¼ì²é cap_effectiveµÄ¶ÔӦλÊÇ·ñÓÐЧ£¬¶ø²»ÔÙÊǼì²é½ø³ÌµÄÓÐЧUIDÊÇ·ñΪ0¡£ÀýÈ磬Èç¹ûÒ»¸ö½ø³ÌÒªÉèÖÃϵͳµÄʱÖÓ£¬LinuxµÄÄں˾ͻá¼ì²é cap_effectiveµÄCAP_SYS_TIMEλ(µÚ25λ)ÊÇ·ñÓÐЧ£¬

    ¡¡¡¡cap_permitted±íʾ½ø³ÌÄܹ»Ê¹ÓõÄÄÜÁ¦¡£ÔÚcap_permittedÖпÉÒÔ°üº¬cap_effectiveÖÐûÓеÄÄÜÁ¦£¬ÕâЩÄÜÁ¦ÊDZ»½ø³Ì×Ô¼ºÁÙʱ·ÅÆúµÄ£¬Ò²¿ÉÒÔ˵cap_effectiveÊÇcap_permittedµÄÒ»¸ö×Ó¼¯¡£½ø³Ì·ÅÆúûÓбØÒªµÄÄÜÁ¦¶ÔÓÚÌá¸ß°²È«ÐÔ´óÓÐÖúÒæ¡£ÀýÈ磬pingÖ»ÐèÒªCAP_NET_RAW£¬Èç¹ûËü·ÅÆú³ýÕâ¸öÄÜÁ¦Ö®ÍâµÄÆäËüÄÜÁ¦£¬¼´Ê¹´æÔÚ°²È«È±ÏÝ£¬Ò²²»»á¶ÔϵͳÔì³ÉÌ«´óµÄË𺦡£

    ¡¡¡¡cap_inheritable±íʾÄܹ»±»µ±Ç°½ø³ÌÖ´ÐеijÌÐò¼Ì³ÐµÄÄÜÁ¦¡£

    ¡¡¡¡LinuxʵÏÖÁË7¸öPOSIX 1003.1e¹æ¶¨µÄÄÜÁ¦£¬»¹ÓÐ21¸ö(½ØÖ¹µ½2.6.13°æ±¾µÄÄÚºË)LinuxËùÌØÓеģ¬ÕâЩÄÜÁ¦ÔÚ/usr/src/linux/include/linux/capability.hÎļþÖж¨Òå¡£Æäϸ½ÚÈçÏ£º

    [code]ÄÜÁ¦ ±àºÅ ½âÊÍ

    CAP_CHOWN 0 ÔÊÐí¸Ä±äÎļþµÄËùÓÐȨ

    CAP_DAC_OVERRIDE 1 ºöÂÔ¶ÔÎļþµÄËùÓÐDAC·ÃÎÊÏÞÖÆ

    CAP_DAC_READ_SEARCH 2 ºöÂÔËùÓжԶÁ¡¢ËÑË÷²Ù×÷µÄÏÞÖÆ

    CAP_FOWNER 3 Èç¹ûÎļþÊôÓÚ½ø³ÌµÄUID£¬¾ÍÈ¡Ïû¶ÔÎļþµÄÏÞÖÆ

    CAP_FSETID 4 ÔÊÐíÉèÖÃsetuidλ

    CAP_KILL 5 ÔÊÐí¶Ô²»ÊôÓÚ×Ô¼ºµÄ½ø³Ì·¢ËÍÐźÅ

    CAP_SETGID 6 ÔÊÐí¸Ä±ä×éID

    CAP_SETUID 7 ÔÊÐí¸Ä±äÓû§ID

    CAP_SETPCAP 8 8 ÔÊÐíÏòÆäËü½ø³Ì×ªÒÆÄÜÁ¦ÒÔ¼°É¾³ýÆäËü½ø³ÌµÄÈÎÒâÄÜÁ¦

    CAP_LINUX_IMMUTABLE 9 ÔÊÐíÐÞ¸ÄÎļþµÄ²»¿ÉÐÞ¸Ä(IMMUTABLE)ºÍÖ»Ìí¼Ó(APPEND-ONLY)ÊôÐÔ

    CAP_NET_BIND_SERVICE 10 ÔÊÐí°ó¶¨µ½Ð¡ÓÚ1024µÄ¶Ë¿Ú

    CAP_NET_BROADCAST 11 ÔÊÐíÍøÂç¹ã²¥ºÍ¶à²¥·ÃÎÊ

    CAP_NET_ADMIN 12 ÔÊÐíÖ´ÐÐÍøÂç¹ÜÀíÈÎÎñ£º½Ó¿Ú¡¢·À»ðǽºÍ·Óɵȣ¬ÏêÇéÇë²Î¿¼/usr/src/linux/include/linux/capability.hÎļþ

    CAP_NET_RAW 13 ÔÊÐíʹÓÃԭʼ(raw)Ì×½Ó×Ö

    CAP_IPC_LOCK 14 ÔÊÐíËø¶¨¹²ÏíÄÚ´æÆ¬¶Î

    CAP_IPC_OWNER 15 ºöÂÔIPCËùÓÐȨ¼ì²é

    CAP_SYS_MODULE 16 ²åÈëºÍɾ³ýÄÚºËÄ£¿é

    CAP_SYS_RAWIO 17 ÔÊÐí¶Ôioperm/ioplµÄ·ÃÎÊ

    CAP_SYS_CHROOT 18 ÔÊÐíʹÓÃchroot()ϵͳµ÷ÓÃ

    CAP_SYS_PTRACE 19 ÔÊÐí¸ú×ÙÈκνø³Ì

    CAP_SYS_PACCT 20 ÔÊÐíÅäÖýø³Ì¼ÇÕÊ(process accounting)

    CAP_SYS_ADMIN 21 ÔÊÐíÖ´ÐÐϵͳ¹ÜÀíÈÎÎñ£º¼ÓÔØ/Ð¶ÔØÎļþϵͳ¡¢ÉèÖôÅÅÌÅä¶î¡¢¿ª/¹Ø½»»»É豸ºÍÎļþµÈ¡£ÏêÇéÇë²Î¿¼/usr/src/linux/include/linux/capability.hÎļþ¡£

    CAP_SYS_BOOT 22 ÔÊÐíÖØÐÂÆô¶¯ÏµÍ³

    CAP_SYS_NICE 23 ÔÊÐíÌáÉýÓÅÏȼ¶£¬ÉèÖÃÆäËü½ø³ÌµÄÓÅÏȼ¶//

    CAP_SYS_RESOURCE 24 ºöÂÔ×ÊÔ´ÏÞÖÆ

    CAP_SYS_TIME 25 ÔÊÐí¸Ä±äϵͳʱÖÓ

    CAP_SYS_TTY_CONFIG 26 ÔÊÐíÅäÖÃTTYÉ豸

    CAP_MKNOD 27 ÔÊÐíʹÓÃmknod()ϵͳµ÷ÓÃ

    CAP_LEASE 28 Allow taking of leases on files[/code]