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£»
                  	
				

Impreza2012 ÓÚ 2013-05-13 10:38:58·¢±í:
ιÊÖªÐÂ
ÓÚ 2013-05-10 11:50:18·¢±í:
×ܽáµÄ²»´í£º£©
blueeyes1004 ÓÚ 2006-09-05 09:12:46·¢±í:
ÓÖѧÁ˲»ÉÙ£¬Ð»Ð»£¡
yeliming ÓÚ 2006-09-04 19:37:35·¢±í:
ѧϰÖУ¬Ö§³Ö
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]