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

Linux ºËÐÄ--Linux½ø³Ì

·¢²¼Ê±¼ä:2005-09-08 12:13:27À´Ô´:ºìÁª×÷Õß:»ð
±¾ÕÂÖصãÌÖÂÛLinuxÄÚºËÈçºÎÔÚϵͳÖд´½¨¡¢¹ÜÀíÒÔ¼°É¾³ý½ø³Ì¡£¡¡

½ø³ÌÔÚ²Ù×÷ϵͳÖÐÖ´ÐÐÌض¨µÄÈÎÎñ¡£¶ø³ÌÐòÊÇ´æ´¢ÔÚ´ÅÅÌÉÏ°üº¬¿ÉÖ´ÐлúÆ÷Ö¸ÁîºÍÊý¾ÝµÄ¾²Ì¬ÊµÌå¡£½ø³Ì»òÕßÈÎÎñÊÇ´¦Óڻ״̬µÄ¼ÆËã»ú³ÌÐò¡£¡¡

½ø³ÌÊÇÒ»¸öËæÖ´Ðйý³Ì²»¶Ï±ä»¯µÄʵÌå¡£ºÍ³ÌÐòÒª°üº¬Ö¸ÁîºÍÊý¾ÝÒ»Ñù£¬½ø³ÌÒ²°üº¬³ÌÐò¼ÆÊýÆ÷ºÍËùÓÐCPU¼Ä´æÆ÷µÄÖµ£¬Í¬Ê±ËüµÄ¶ÑÕ»Öд洢×ÅÈç×Ó³ÌÐò²ÎÊý¡¢·µ»ØµØÖ·ÒÔ¼°±äÁ¿Ö®ÀàµÄÁÙʱÊý¾Ý¡£µ±Ç°µÄÖ´ÐгÌÐò£¬»òÕß˵½ø³Ì£¬°üº¬×ŵ±Ç°´¦ÀíÆ÷ÖеĻ״̬¡£LinuxÊÇÒ»¸ö¶à´¦Àí²Ù×÷ϵͳ¡£½ø³Ì¾ßÓжÀÁ¢µÄȨÏÞÓëÖ°Ôð¡£Èç¹ûϵͳÖÐij¸ö½ø³Ì±ÀÀ££¬Ëü²»»áÓ°Ïìµ½ÆäÓàµÄ½ø³Ì¡£Ã¿¸ö½ø³ÌÔËÐÐÔÚÆä¸÷×ÔµÄÐéÄâµØÖ·¿Õ¼äÖУ¬Í¨¹ýºËÐÄ¿ØÖÆÏ¿ɿ¿µÄͨѶ»úÖÆ£¬ËüÃÇÖ®¼ä²ÅÄÜ·¢ÉúÁªÏµ¡£¡¡

½ø³ÌÔÚÉúÃüÆÚÄÚ½«Ê¹ÓÃϵͳÖеÄ×ÊÔ´¡£ËüÀûÓÃϵͳÖеÄCPUÀ´Ö´ÐÐÖ¸ÁÔÚÎïÀíÄÚ´æÀ´·ÅÖÃÖ¸ÁîºÍÊý¾Ý¡£Ê¹ÓÃÎļþϵͳÌṩµÄ¹¦ÄÜ´ò¿ª²¢Ê¹ÓÃÎļþ£¬Í¬Ê±Ö±½Ó»òÕß¼ä½ÓµÄʹÓÃÎïÀíÉ豸¡£Linux±ØÐë¸ú×ÙϵͳÖÐÿ¸ö½ø³ÌÒÔ¼°×ÊÔ´£¬ÒÔ±ãÔÚ½ø³Ì¼äʵÏÖ×ÊÔ´µÄ¹«Æ½·ÖÅä¡£Èç¹ûϵͳÓÐÒ»¸ö½ø³Ì¶ÀÕ¼Á˴󲿷ÖÎïÀíÄÚ´æ»òÕßCPUµÄʹÓÃʱ¼ä£¬ÕâÖÖÇé¿ö¶ÔϵͳÖеÄÆäËü½ø³ÌÊDz»¹«Æ½µÄ¡£¡¡

ϵͳÖÐ×¹óµÄ×ÊÔ´ÊÇCPU£¬Í¨³£ÏµÍ³ÖÐÖ»ÓÐÒ»¸öCPU¡£LinuxÊÇÒ»¸ö¶à´¦Àí²Ù×÷ϵͳ£¬Ëü×îÖÕµÄÄ¿µÄÊÇ:ÈκÎʱ¿ÌϵͳÖеÄÿ¸öCPUÉ϶¼ÓÐÈÎÎñÖ´ÐУ¬´Ó¶øÌá¸ßCPUµÄÀûÓÃÂÊ¡£Èç¹û½ø³Ì¸öÊý¶àÓÚCPUµÄ¸öÊý£¬ÔòÓÐЩ½ø³Ì±ØÐëµÈ´ýµ½CPU¿ÕÏÐʱ²Å¿ÉÒÔÔËÐС£¶à´¦ÀíÊǵÄ˼·ºÜ¼òµ¥£»µ±½ø³ÌÐèҪij¸öϵͳ×ÊԴʱËü½«Í£Ö¹Ö´Ðв¢µÈ´ýµ½×ÊÔ´¿ÉÓÃʱ²Å¼ÌÐøÔËÐС£µ¥´¦ÀíϵͳÖУ¬ÈçDOS£¬´ËʱCPU½«´¦ÓÚ¿ÕµÈ״̬£¬Õâ¸öʱ¼ä½«±»À˷ѵô¡£ÔڶദÀíϵͳÖУ¬ÒòΪ¿ÉÒÔͬʱ´æÔÚ¶à¸ö½ø³Ì£¬ËùÒÔµ±Ä³¸ö½ø³Ì¿ªÊ¼µÈ´ýʱ£¬²Ù×÷ϵͳ½«°ÑCPU¿ØÖÆȨÄùýÀ´²¢½»¸øÆäËü¿ÉÒÔÔËÐеĽø³Ì¡£µ÷¶ÈÆ÷¸ºÔðÑ¡ÔñÊʵ±µÄ½ø³ÌÀ´ÔËÐУ¬LinuxʹÓÃһЩµ÷¶È²ßÂÔÒÔ±£Ö¤CPU·ÖÅäµÄ¹«Æ½ÐÔ¡£¡¡

LinuxÖ§³Ö¶àÖÖÀàÐ͵ĿÉÖ´ÐÐÎļþ¸ñʽ£¬ÈçELF£¬JAVAµÈ¡£ÓÉÓÚÕâЩ½ø³Ì±ØÐëʹÓÃϵͳ¹²Ïí¿â£¬ËùÒÔ¶ÔËüÃǵĹÜÀíÒª¾ßÓÐ͸Ã÷ÐÔ¡£¡¡


4.1¡¡¡¡Linux½ø³Ì
ΪÁËÈÃLinuxÀ´¹ÜÀíϵͳÖеĽø³Ì£¬Ã¿¸ö½ø³ÌÓÃÒ»¸ötask_structÊý¾Ý½á¹¹À´±íʾ£¨ÈÎÎñÓë½ø³ÌÔÚLinuxÖпÉÒÔ»ìÓã©¡£Êý×étask°üº¬Ö¸ÏòϵͳÖÐËùÓÐtask_struct½á¹¹µÄÖ¸Õë¡£¡¡

ÕâÒâζ×ÅϵͳÖеÄ×î´ó½ø³ÌÊýÄ¿ÊÜtaskÊý×é´óСµÄÏÞÖÆ£¬È±Ê¡ÖµÒ»°ãΪ512¡£´´½¨Ð½ø³Ìʱ£¬Linux½«´ÓϵͳÄÚ´æÖзÖÅäÒ»¸ötask_struct½á¹¹²¢½«Æä¼ÓÈëtaskÊý×é¡£µ±Ç°ÔËÐнø³ÌµÄ½á¹¹ÓÃcurrentÖ¸ÕëÀ´Ö¸Ê¾¡£¡¡

Linux»¹Ö§³Öʵʱ½ø³Ì¡£ÕâЩ½ø³Ì±ØÐë¶ÔÍⲿʱ¼ä×÷³ö¿ìËÙ·´Ó¦£¨Õâ¾ÍÊÇ¡°ÊµÊ±¡±µÄÒâ˼£©£¬ÏµÍ³½«Çø·Ö¶Ô´ýÕâЩ½ø³ÌºÍÆäËû½ø³Ì¡£ËäÈ»task_structÊý¾Ý½á¹¹ÅÓ´ó¶ø¸´ÔÓ£¬µ«Ëü¿ÉÒÔ·Ö³ÉһЩ¹¦ÄÜ×é³É²¿·Ö£º¡¡


State¡¡
½ø³ÌÔÚÖ´Ðйý³ÌÖлá¸ù¾Ý»·¾³À´¸Ä±ästate¡£Linux½ø³ÌÓÐÒÔÏÂ״̬£º¡¡
Running¡¡
½ø³Ì´¦ÓÚÔËÐУ¨ËüÊÇϵͳµÄµ±Ç°½ø³Ì£©»òÕß×¼±¸ÔËÐÐ״̬£¨ËüÔڵȴýϵͳ½«CPU·ÖÅä¸øËü£©¡£¡¡
Waiting¡¡
½ø³ÌÔڵȴýÒ»¸öʼþ»òÕß×ÊÔ´¡£Linux½«µÈ´ý½ø³Ì·Ö³ÉÁ½Àࣻ¿ÉÖжÏÓë²»¿ÉÖжϡ£¿ÉÖжϵȴý½ø³Ì¿ÉÒÔ±»ÐźÅÖжϣ»²»¿ÉÖжϵȴý½ø³ÌÖ±½ÓÔÚÓ²¼þÌõ¼þµÈ´ý£¬²¢ÇÒÈκÎÇé¿ö϶¼²»¿ÉÖжϡ£¡¡
Stopped¡¡
½ø³Ì±»Í£Ö¹£¬Í¨³£ÊÇͨ¹ý½ÓÊÕÒ»¸öÐźš£ÕýÔÚ±»µ÷ÊԵĽø³Ì¿ÉÄÜ´¦ÓÚֹͣ״̬¡£¡¡
Zombie¡¡
ÕâÊÇÓÉÓÚijЩԭÒò±»ÖÕÖ¹µÄ½ø³Ì£¬µ«ÊÇÔÚtaskÊý¾ÝÖÐÈÔÈ»±£Áôtask_struct½á¹¹¡£¡¡ËüÏóÒ»¸öÒѾ­ËÀÍöµÄ½ø³Ì¡£¡¡

Scheduling¡¡Information¡¡
µ÷¶ÈÆ÷ÐèÒªÕâЩÐÅÏ¢ÒÔ±ãÅж¨ÏµÍ³ÖÐÄĸö½ø³Ì×îÆÈÇÐÐèÒªÔËÐС£¡¡

Identifiers¡¡
ϵͳÖÐÿ¸ö½ø³Ì¶¼Óнø³Ì±êÖ¾¡£½ø³Ì±êÖ¾²¢²»ÊÇtaskÊý×éµÄË÷Òý£¬Ëü½ö½öÊǸöÊý×Ö¡£Ã¿¸ö½ø³Ì»¹ÓÐÒ»¸öÓû§Óë×é±êÖ¾£¬ËüÃÇÓÃÀ´¿ØÖƽø³Ì¶ÔϵͳÖÐÎļþºÍÉ豸µÄ´æȡȨÏÞ¡£¡¡

Inter-Process¡¡Communication¡¡
LinuxÖ§³Ö¾­µäµÄUnix¡¡IPC»úÖÆ£¬ÈçÐźš¢¹ÜµÀºÍÐźŵÆÒÔ¼°ÏµÍ³VÖÐIPC»úÖÆ£¬°üÀ¨¹²ÏíÄÚ´æ¡¢ÐźŵƺÍÏûÏ¢¶ÓÁС£ÎÒÃǽ«ÔÚIPCÒ»ÕÂÖÐÏêϸÌÖÂÛLinuxÖÐIPC»úÖÆ¡£¡¡

Links¡¡
LinuxϵͳÖÐËùÓнø³Ì¶¼ÊÇÏ໥ÁªÏµµÄ¡£³ýÁ˳õʼ»¯½ø³ÌÍ⣬ËùÓнø³Ì¶¼ÓÐÒ»¸ö¸¸½ø³Ì¡£Ð½ø³Ì²»ÊDZ»´´½¨£¬¶øÊDZ»¸´ÖÆ£¬»òÕß´ÓÒÔÇ°µÄ½ø³Ì¿Ë¡¶øÀ´¡£Ã¿¸ö½ø³Ì¶ÔÓ¦µÄtask_struct½á¹¹Öаüº¬ÓÐÖ¸ÏòÆ丸½ø³ÌºÍÐֵܽø³Ì£¨¾ßÓÐÏàͬ¸¸½ø³ÌµÄ½ø³Ì£©ÒÔ¼°×Ó½ø³ÌµÄÖ¸Õë¡£ÎÒÃÇ¿ÉÒÔʹÓÃpstree¡¡ÃüÁîÀ´¹Û²ìLinuxϵͳÖÐÔËÐнø³Ì¼äµÄ¹Øϵ£º¡¡

init(1)-+-crond(98)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-emacs(387)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-gpm(146)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-inetd(110)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-kerneld(18)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-kflushd(2)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-klogd(87)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-kswapd(3)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-login(160)---bash(192)---emacs(225)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-lpd(121)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-mingetty(161)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-mingetty(162)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-mingetty(163)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-mingetty(164)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-login(403)---bash(404)---pstree(594)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-sendmail(134)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡|-syslogd(78)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡`-update(166)


ÁíÍ⣬ϵͳÖÐËùÓнø³Ì¶¼ÓÃÒ»¸öË«ÏòÁ´±íÁ¬½ÓÆðÀ´£¬¶øËüÃǵĸùÊÇinit½ø³ÌµÄtask_structÊý¾Ý½á¹¹¡£Õâ¡¡¸öÁ´±í±»LinuxºËÐÄÓÃÀ´Ñ°ÕÒϵͳÖÐËùÓнø³Ì£¬Ëü¶Ôps»òÕßkillÃüÁîÌṩÁËÖ§³Ö¡£¡¡

Times¡¡and¡¡Timers¡¡
ºËÐÄÐèÒª¼Ç¼½ø³ÌµÄ´´½¨Ê±¼äÒÔ¼°ÔÚÆäÉúÃüÆÚÖÐÏûºÄµÄCPUʱ¼ä¡£Ê±ÖÓÿÌø¶¯Ò»´Î£¬ºËÐľÍÒª¸üб£´æÔÚjiffies±äÁ¿ÖУ¬¼Ç¼½ø³ÌÔÚϵͳºÍÓû§Ä£Ê½ÏÂÏûºÄµÄʱ¼äÁ¿¡£LinuxÖ§³ÖÓë½ø³ÌÏà¹ØµÄinterval¶¨Ê±Æ÷£¬½ø³Ì¿ÉÒÔͨ¹ýϵͳµ÷ÓÃÀ´É趨¶¨Ê±Æ÷ÒÔ±ãÔÚ¶¨Ê±Æ÷µ½Ê±ºóÏòËü·¢ËÍÐźš£ÕâЩ¶¨Ê±Æ÷¿ÉÒÔÊÇÒ»´ÎÐԵĻòÕßÖÜÆÚÐԵġ£¡¡

File¡¡system¡¡
½ø³Ì¿ÉÒÔ×ÔÓɵشò¿ª»ò¹Ø±ÕÎļþ£¬½ø³ÌµÄtask_struct½á¹¹Öаüº¬Ò»¸öÖ¸Ïòÿ¸ö´ò¿ªÎļþÃèÐð·ûµÄÖ¸ÕëÒÔ¼°Ö¸ÏòÁ½¸öVFS¡¡inodeµÄÖ¸Õ롣ÿ¸öVFS¡¡inodeΨһµØ±ê¼ÇÎļþÖеÄÒ»¸öĿ¼»òÕßÎļþ£¬Í¬Ê±»¹¶Ôµ×²ãÎļþϵͳÌṩͳһµÄ½Ó¿Ú¡£Linux¶ÔÎļþϵͳµÄÖ§³Ö½«ÔÚfilesystemÒ»ÕÂÖÐÏêϸÃèÐð¡£ÕâÁ½¸öÖ¸Õ룬һ¸öÖ¸Ïò½ø³ÌµÄ¸ùĿ¼£¬ÁíÒ»¸öÖ¸ÏòÆ䵱ǰ»òÕßpwdĿ¼¡£pwd´ÓUnixÃüÁîpwdÖÐÅÉÉú³öÀ´£¬¡¡ÓÃÀ´ÏÔʾµ±Ç°¹¤×÷Ŀ¼¡£ÕâÁ½¸öVFS¡¡inode°üº¬Ò»¸öcountÓò£¬µ±¶à¸ö½ø³ÌÒýÓÃËüÃÇʱ£¬ËüµÄÖµ½«Ôö¼Ó¡£Õâ¾ÍÊÇΪʲôÄã²»ÄÜɾ³ý½ø³Ìµ±Ç°Ä¿Â¼£¬»òÕßÆä×ÓĿ¼µÄÔ­Òò¡£¡¡

Virtual¡¡memory¡¡
¶àÊý½ø³Ì¶¼ÓÐһЩÐéÄâÄڴ棨ºËÐÄÏ̺߳ͺǫ́½ø³ÌûÓУ©£¬LinuxºËÐıØÐë¸ú×ÙÐéÄâÄÚ´æÓëϵͳÎïÀíÄÚ´æµÄÓ³Éä¹Øϵ¡£¡¡

Processor¡¡Specific¡¡Context¡¡
½ø³Ì¿ÉÒÔÈÏΪÊÇϵͳµ±Ç°×´Ì¬µÄ×ܺ͡£½ø³ÌÔËÐÐʱ£¬Ëü½«Ê¹Óô¦ÀíÆ÷µÄ¼Ä´æÆ÷ÒÔ¼°¶ÑÕ»µÈµÈ¡£½ø³Ì±»¹ÒÆðʱ£¬½ø³ÌµÄÉÏÏÂÎÄ-ËùÓеÄCPUÏà¹ØµÄ״̬±ØÐë±£´æÔÚËüµÄtask_struct½á¹¹ÖС£µ±µ÷¶ÈÆ÷ÖØе÷¶È¸Ã½ø³Ìʱ£¬ËùÓÐÉÏÏÂÎı»ÖØÐÂÉ趨¡£¡¡

4.2¡¡¡¡Identifiers
ºÍÆäËûUnixÒ»Ñù£¬LinuxʹÓÃÓû§ºÍ×é±êÖ¾·ûÀ´¼ì²é¶ÔϵͳÖÐÎļþºÍ¿ÉÖ´ÐÐÓ³ÏóµÄ·ÃÎÊȨÏÞ¡£LinuxϵͳÖÐËùÓеÄÎļþ¶¼ÓÐËùÓÐÕߺÍÔÊÐíµÄȨÏÞ£¬ÕâЩȨÏÞÃèÐðÁËϵͳʹÓÃÕ߶ÔÎļþ»òÕßĿ¼µÄʹÓÃȨ¡£»ù±¾µÄȨÏÞÊǶÁ¡¢Ð´ºÍ¿ÉÖ´ÐУ¬ÕâЩȨÏÞ±»·ÖÅä¸øÈýÀàÓû§£ºÎļþµÄËùÓÐÕߣ¬ÊôÓÚÏàͬ×éµÄ½ø³ÌÒÔ¼°ÏµÍ³ÖÐËùÓнø³Ì¡£Ã¿ÀàÓû§¾ßÓв»Í¬µÄȨÏÞ£¬ÀýÈçÒ»¸öÎļþÔÊÐíÆäÓµÓÐÕ߶Áд£¬µ«ÊÇͬ×éµÄÖ»ÄܶÁ¶øÆäËû½ø³Ì²»ÔÊÐí·ÃÎÊ¡£¡¡

LinuxʹÓÃ×齫ÎļþºÍĿ¼µÄ·ÃÎÊÌØȨÊÚÓèÒ»×éÓû§£¬¶ø²»Êǵ¥¸öÓû§»òÕßϵͳÖÐËùÓнø³Ì¡£Èç¿ÉÒÔΪij¸öÈí¼þÏîÄ¿ÖеÄËùÓÐÓû§´´½¨Ò»¸ö×飬²¢½«ÆäȨÏÞÉèÖóÉÖ»ÓÐËûÃDzÅÔÊÐí¶ÁдÏîÄ¿ÖеÄÔ´´úÂë¡£Ò»¸ö½ø³Ì¿ÉÒÔͬʱÊôÓÚ¶à¸ö×飨×î¶àΪ32¸ö£©£¬ÕâЩ×鶼±»·ÅÔÚ½ø³ÌµÄtask_structÖеÄgroupÊý×éÖС£Ö»ÒªÄ³×é½ø³Ì¿ÉÒÔ´æȡij¸öÎļþ£¬ÔòÓÉ´Ë×éÅÉÉú³öµÄ½ø³Ì¶ÔÕâ¸öÎļþÓÐÏàÓ¦µÄ×é·ÃÎÊȨÏÞ¡£¡¡

task_struct½á¹¹ÖÐÓÐËĶԽø³ÌºÍ×é±êÖ¾·û£º¡¡


uid,¡¡gid¡¡
±íʾÔËÐнø³ÌµÄÓû§±êÖ¾·ûºÍ×é±êÖ¾·û¡£¡¡
effective¡¡uid¡¡and¡¡gid¡¡
ÓÐЩ³ÌÐò¿ÉÒÔÔÚÖ´Ðйý³ÌÖн«Ö´Ðнø³ÌµÄuidºÍgid¸Ä³ÉÆä³ÌÐò×ÔÉíµÄuidºÍgid£¨±£´æÔÚÃèÐð¿ÉÖ´ÐÐÓ³ÏóµÄVFS¡¡inodeÊôÐÔÖУ©¡£ÕâЩ³ÌÐò±»³ÆΪsetuid³ÌÐò£¬³£ÔÚÑϸñ¿ØÖƶÔijЩ·þÎñµÄ·ÃÎÊʱʹÓã¬ÌرðÊÇÄÇЩΪ±ðµÄ½ø³Ì¶øÔËÐеĽø³Ì£¬ÀýÈçÍøÂçºǫ́½ø³Ì¡£ÓÐЧuidºÍgidÊÇÄÇЩsetuidÖ´Ðйý³ÌÔÚÖ´ÐÐʱ±ä»¯³öµÄuid¡¡ºÍgid¡£µ±½ø³ÌÊÔͼ·ÃÎÊÌØȨÊý¾Ý»ò´úÂëʱ£¬ºËÐĽ«¼ì²é½ø³ÌµÄÓÐЧgidºÍuid¡£¡¡
file¡¡system¡¡uid¡¡and¡¡gid¡¡
ËüÃǺÍÓÐЧuidºÍgidÏàËƵ«ÓÃÀ´¼ìÑé½ø³ÌµÄÎļþϵͳ·ÃÎÊȨÏÞ¡£ÈçÔËÐÐÔÚÓû§Ä£Ê½ÏµÄNFS·þÎñÆ÷´æÈ¡Îļþʱ£¬NFSÎļþϵͳ½«Ê¹ÓÃÕâЩ±êÖ¾·û¡£´ËÀýÖÐÖ»ÓÐÎļþϵͳuidºÍgid·¢ÉúÁ˸ı䣨¶ø·ÇÓÐЧuidºÍgid£©¡£ÕâÑù¿ÉÒÔ±ÜÃâ¶ñÒâÓû§ÏòNFS·þÎñÆ÷·¢ËÍKILLÐźš£¡¡
saved¡¡uid¡¡and¡¡gid¡¡
POSIX±ê×¼ÖÐÒªÇóʵÏÖÕâÁ½¸ö±êÖ¾·û£¬ËüÃDZ»ÄÇЩͨ¹ýϵͳµ÷Óøıä½ø³ÌuidºÍgidµÄ³ÌÐòʹÓᣵ±½ø³ÌµÄԭʼuidºÍgid±ä»¯Ê±£¬ËüÃDZ»ÓÃÀ´±£´æÕæÕýµÄuidºÍgid¡£¡¡

4.3¡¡¡¡µ÷¶È
ËùÓнø³Ì²¿·Öʱ¼äÔËÐÐÓÚÓû§Ä£Ê½£¬²¿·Öʱ¼äÔËÐÐÓÚϵͳģʽ¡£ÈçºÎÖ§³ÖÕâЩģʽ£¬µ×²ãÓ²¼þµÄʵÏÖ¸÷²»Ïàͬ£¬µ«ÊÇ´æÔÚÒ»ÖÖ°²È«»úÖÆ¿ÉÒÔʹËüÃÇÔÚÓû§Ä£Ê½ºÍϵͳģʽ֮¼äÀ´»ØÇл»¡£Óû§Ä£Ê½µÄȨÏÞ±ÈϵͳģʽϵÄСµÃ¶à¡£½ø³Ìͨ¹ýϵͳµ÷ÓÃÇл»µ½ÏµÍ³Ä£Ê½¼ÌÐøÖ´ÐС£´ËʱºËÐÄΪ½ø³Ì¶øÖ´ÐС£ÔÚLinuxÖУ¬½ø³Ì²»Äܱ»ÇÀÕ¼¡£Ö»ÒªÄܹ»ÔËÐÐËüÃǾͲ»Äܱ»Í£Ö¹¡£µ±½ø³Ì±ØÐëµÈ´ýij¸öϵͳʼþʱ£¬Ëü²Å¾ö¶¨ÊͷųöCPU¡£ÀýÈç½ø³Ì¿ÉÄÜÐèÒª´ÓÎļþÖжÁ³ö×Ö·û¡£Ò»°ãµÈ´ý·¢ÉúÔÚϵͳµ÷Óùý³ÌÖУ¬´Ëʱ½ø³Ì´¦ÓÚϵͳģʽ£»´¦Óڵȴý״̬µÄ½ø³Ì½«±»¹ÒÆð¶øÆäËûµÄ½ø³Ì±»µ÷¶È¹ÜÀíÆ÷Ñ¡³öÀ´Ö´ÐС£¡¡

½ø³Ì³£ÒòΪִÐÐϵͳµ÷ÓöøÐèÒªµÈ´ý¡£ÓÉÓÚ´¦Óڵȴý״̬µÄ½ø³Ì»¹¿ÉÄÜÕ¼ÓÃCPUʱ¼ä£¬ËùÒÔLinux²ÉÓÃÁËÔ¤¼ÓÔص÷¶È²ßÂÔ¡£Ôڴ˲ßÂÔÖУ¬Ã¿¸ö½ø³ÌÖ»ÔÊÐíÔËÐк̵ܶÄʱ¼ä£º200ºÁÃ룬µ±Õâ¸öʱ¼äÓÃÍêÖ®ºó£¬ÏµÍ³½«Ñ¡ÔñÁíÒ»¸ö½ø³ÌÀ´ÔËÐУ¬Ô­À´µÄ½ø³Ì±ØÐëµÈ´ýÒ»¶Îʱ¼äÒÔ¼ÌÐøÔËÐС£Õâ¶Îʱ¼ä³ÆΪʱ¼äƬ¡£¡¡

µ÷¶ÈÆ÷±ØÐëÑ¡Ôñ×îÆÈÇÐÐèÒªÔËÐжøÇÒ¿ÉÒÔÖ´ÐеĽø³ÌÀ´Ö´ÐС£¡¡

¿ÉÔËÐнø³ÌÊÇÒ»¸öÖ»µÈ´ýCPU×ÊÔ´µÄ½ø³Ì¡£LinuxʹÓûùÓÚÓÅÏȼ¶µÄ¼òµ¥µ÷¶ÈËã·¨À´Ñ¡ÔñÏÂÒ»¸öÔËÐнø³Ì¡£µ±Ñ¡¶¨Ð½ø³Ìºó£¬ÏµÍ³±ØÐ뽫µ±Ç°½ø³ÌµÄ״̬£¬´¦ÀíÆ÷ÖеļĴæÆ÷ÒÔ¼°ÉÏÏÂÎÄ״̬±£´æµ½task_struct½á¹¹ÖС£Í¬Ê±Ëü½«ÖØÐÂÉèÖÃнø³ÌµÄ״̬²¢½«ÏµÍ³¿ØÖÆȨ½»¸ø´Ë½ø³Ì¡£ÎªÁ˽«CPUʱ¼äºÏÀíµÄ·ÖÅä¸øϵͳÖÐÿ¸ö¿ÉÖ´Ðнø³Ì£¬µ÷¶È¹ÜÀíÆ÷±ØÐ뽫ÕâЩʱ¼äÐÅÏ¢Ò²±£´æÔÚtask_structÖС£¡¡

policy¡¡
Ó¦Óõ½½ø³ÌÉϵĵ÷¶È²ßÂÔ¡£ÏµÍ³ÖдæÔÚÁ½ÀàLinux½ø³Ì:ÆÕͨÓëʵʱ½ø³Ì¡£ÊµÊ±½ø³ÌµÄÓÅÏȼ¶Òª¸ßÓÚÆäËü½ø³Ì¡£Èç¹ûÒ»¸öʵʱ½ø³Ì´¦ÓÚ¿ÉÖ´ÐÐ״̬£¬Ëü½«Ïȵõ½Ö´ÐС£ÊµÊ±½ø³ÌÓÖÓÐÁ½ÖÖ²ßÂÔ£ºÊ±¼äƬÂÖתºÍÏȽøÏȳö¡£ÔÚʱ¼äƬÂÖת²ßÂÔÖУ¬Ã¿¸ö¿ÉÖ´ÐÐʵʱ½ø³ÌÂÖÁ÷Ö´ÐÐÒ»¸öʱ¼äƬ£¬¶øÏȽøÏȳö²ßÂÔÿ¸ö¿ÉÖ´Ðнø³Ì°´¸÷×ÔÔÚÔËÐжÓÁÐÖеÄ˳ÐòÖ´Ðв¢ÇÒ˳Ðò²»Äܱ仯¡£¡¡
priority¡¡
µ÷¶È¹ÜÀíÆ÷·ÖÅä¸ø½ø³ÌµÄÓÅÏȼ¶¡£Í¬Ê±Ò²Êǽø³ÌÔÊÐíÔËÐеÄʱ¼ä£¨jiffies£©¡£ÏµÍ³µ÷ÓÃrenice¿ÉÒԸıä½ø³ÌµÄÓÅÏȼ¶¡£¡¡
rt_priority¡¡
LinuxÖ§³Öʵʱ½ø³Ì£¬ÇÒËüÃǵÄÓÅÏȼ¶Òª¸ßÓÚ·Çʵʱ½ø³Ì¡£µ÷¶ÈÆ÷ʹÓÃÕâ¸öÓò¸øÿ¸öʵʱ½ø³ÌÒ»¸öÏà¶ÔÓÅÏȼ¶¡£Í¬Ñù¿ÉÒÔͨ¹ýϵͳµ÷ÓÃÀ´¸Ä±äʵʱ½ø³ÌµÄÓÅÏȼ¶¡£¡¡
counter¡¡
½ø³ÌÔÊÐíÔËÐеÄʱ¼ä(±£´æÔÚjiffiesÖÐ)¡£½ø³ÌÊ×´ÎÔËÐÐʱΪ½ø³ÌÓÅÏȼ¶µÄÊýÖµ£¬ËüËæʱ¼ä±ä»¯µÝ¼õ¡£¡¡
ºËÐÄÔÚ¼¸¸öλÖõ÷Óõ÷¶È¹ÜÀíÆ÷¡£È統ǰ½ø³Ì±»·ÅÈëµÈ´ý¶ÓÁкóÔËÐлòÕßϵͳµ÷ÓýáÊøʱ£¬ÒÔ¼°´Óϵͳģʽ·µ»ØÓû§Ä£Ê½Ê±¡£´ËʱϵͳʱÖÓ½«µ±Ç°½ø³ÌµÄcounterÖµÉèΪ0ÒÔÇý¶¯µ÷¶È¹ÜÀíÆ÷¡£Ã¿´Îµ÷¶È¹ÜÀíÆ÷ÔËÐÐʱ½«½øÐÐÏÂÁвÙ×÷£º¡¡


kernel¡¡work¡¡
µ÷¶È¹ÜÀíÆ÷ÔËÐеײ㴦Àí³ÌÐò²¢´¦Àíµ÷¶ÈÈÎÎñ¶ÓÁС£kernelÒ»Õ½«ÏêϸÃèÐðÕâ¸öÇáÁ¿¼¶ºËÐÄÏ̡߳£¡¡
Current¡¡process¡¡
µ±Ñ¡¶¨ÆäËû½ø³ÌÔËÐÐ֮ǰ±ØÐë¶Ôµ±Ç°½ø³Ì½øÐÐһЩ´¦Àí¡£¡¡
Èç¹ûµ±Ç°½ø³ÌµÄµ÷¶È²ßÂÔÊÇʱ¼äƬÂÖת£¬ÔòËü±»·Å»Øµ½ÔËÐжÓÁС£¡¡

¡¡¡¡
Èç¹ûÈÎÎñ¿ÉÖжÏÇÒ´ÓÉϴα»µ÷¶Èºó½ÓÊÕµ½ÁËÒ»¸öÐźţ¬ÔòËüµÄ״̬±äΪRunning¡£¡¡

¡¡¡¡
Èç¹ûµ±Ç°½ø³Ì³¬Ê±£¬ÔòËüµÄ״̬±äΪRunning¡£¡¡

¡¡¡¡
Èç¹ûµ±Ç°½ø³ÌµÄ״̬ÊÇRunning£¬Ôò״̬±£³Ö²»±ä¡£¡¡ÄÇЩ¼È²»´¦ÓÚRunning״̬ÓÖ²»ÊÇ¿ÉÖжϵĽø³Ì½«»á´ÓÔËÐжÓÁÐÖÐɾ³ý¡£ÕâÒâζ×ŵ÷¶È¹ÜÀíÆ÷Ñ¡ÔñÔËÐнø³Ìʱ²»»á½«ÕâЩ½ø³Ì¿¼ÂÇÔÚÄÚ¡£¡¡

¡¡

Process¡¡selection¡¡
µ÷¶ÈÆ÷ÔÚÔËÐжÓÁÐÖÐÑ¡ÔñÒ»¸ö×îÆÈÇÐÐèÒªÔËÐеĽø³Ì¡£Èç¹ûÔËÐжÓÁÐÖдæÔÚʵʱ½ø³Ì£¨ÄÇЩ¾ßÓÐʵʱµ÷¶È²ßÂԵĽø³Ì£©£¬ÔòËüÃDZÈÆÕͨ½ø³Ì¸ü¶àµÄÓÅÏȼ¶È¨Öµ¡£ÆÕͨ½ø³ÌµÄȨֵÊÇËüµÄcounterÖµ£¬¶øʵʱ¡¡½ø³ÌÔòÊÇcounter¼ÓÉÏ1000¡£Õâ±íÃ÷Èç¹ûϵͳÖдæÔÚ¿ÉÔËÐеÄʵʱ½ø³Ì£¬ËüÃǽ«×ÜÊÇÔÚÈκÎÆÕͨ½ø³Ì֮ǰÔËÐС£Èç¹ûϵͳÖдæÔں͵±Ç°½ø³ÌÏàͬÓÅÏȼ¶µÄÆäËü½ø³Ì£¬Õâʱµ±Ç°ÔËÐнø³ÌÒѾ­ÓõôÁËһЩʱ¼äƬ£¬ËùÒÔËü½«´¦ÔÚ²»ÀûÐÎÊÆ£¨ÆäcounterÒѾ­±äС£©£»¶øÔ­À´ÓÅÏȼ¶ÓëËüÏàͬµÄ½ø³ÌµÄcounterÖµÏÔÈ»±ÈËü´ó£¬ÕâÑùλÓÚÔËÐжÓÁÐÖÐ×îÇ°ÃæµÄ½ø³Ì½«¿ªÊ¼Ö´Ðжøµ±Ç°½ø³Ì±»·Å»Øµ½ÔËÐжÓÁÐÖС£ÔÚ´æÔÚ¶à¸öÏàͬÓÅÏȼ¶½ø³ÌµÄƽºâϵͳÖУ¬Ã¿¸ö½ø³Ì±»ÒÀ´ÎÖ´ÐУ¬Õâ¾ÍÊÇRound¡¡Robin²ßÂÔ¡£È»¶øÓÉÓÚ½ø³Ì¾­³£ÐèÒªµÈ´ýijЩ×ÊÔ´£¬ËùÒÔËüÃǵÄÔËÐÐ˳ÐòÒ²³£·¢±ä»¯¡£¡¡
Swap¡¡processes¡¡
Èç¹ûϵͳѡÔñÆäËû½ø³ÌÔËÐУ¬Ôò±ØÐë±»¹ÒÆðµ±Ç°½ø³ÌÇÒ¿ªÊ¼Ö´ÐÐнø³Ì¡£½ø³ÌÖ´ÐÐʱ½«Ê¹ÓüĴæÆ÷¡¢ÎïÀíÄÚ´æÒÔ¼°CPU¡£Ã¿´Îµ÷ÓÃ×Ó³ÌÐòʱ£¬Ëü½«²ÎÊý·ÅÔڼĴæÆ÷Öв¢°Ñ·µ»ØµØÖ··ÅÖÃÔÚ¶ÑÕ»ÖУ¬ËùÒÔµ÷¶È¹ÜÀíÆ÷×ÜÊÇÔËÐÐÔÚµ±Ç°½ø³ÌµÄÉÏÏÂÎÄ¡£ËäÈ»¿ÉÄÜÔÚÌØȨģʽ»òÕߺËÐÄģʽÖУ¬µ«ÊÇÈÔÈ»´¦ÓÚµ±Ç°ÔËÐнø³ÌÖС£µ±¹ÒÆð½ø³ÌµÄÖ´ÐÐʱ£¬ÏµÍ³µÄ»úÆ÷״̬£¬°üÀ¨³ÌÐò¼ÆÊýÆ÷(PC)ºÍÈ«²¿µÄ´¦ÀíÆ÷¼Ä´æÆ÷£¬±ØÐë´æ´¢ÔÚ½ø³ÌµÄtask_structÊý¾Ý½á¹¹ÖС£Í¬Ê±¼ÓÔØнø³ÌµÄ»úÆ÷״̬¡£Õâ¸ö¹ý³ÌÓëϵͳÀàÐÍÏà¹Ø£¬²»Í¬µÄCPUʹÓò»Í¬µÄ·½·¨Íê³ÉÕâ¸ö¹¤×÷£¬Í¨³£Õâ¸ö²Ù×÷ÐèÒªÓ²¼þ¸¨ÖúÍê³É¡£¡¡
¡¡

½ø³ÌµÄÇл»·¢ÉúÔÚµ÷¶È¹ÜÀíÆ÷ÔËÐÐÖ®ºó¡£ÒÔÇ°½ø³Ì±£´æµÄÉÏÏÂÎÄÓ뵱ǰ½ø³Ì¼ÓÔØʱµÄÉÏÏÂÎÄÏàͬ£¬°üÀ¨½ø³Ì³ÌÐò¼ÆÊýÆ÷ºÍ¼Ä´æÆ÷ÄÚÈÝ¡£¡¡
¡¡¡¡
Èç¹ûÒÔÇ°»òÕßµ±Ç°½ø³ÌʹÓÃÁËÐéÄâÄڴ棬Ôòϵͳ±ØÐë¸üÐÂÆäÒ³±íÈë¿Ú£¬ÕâÓë¾ßÌåÌåϵ½á¹¹Óйء£Èç¹û´¦ÀíÆ÷ʹÓÃÁËת»»ÅÔÊÓ»º³å»òÕß»º³åÁËÒ³±íÈë¿Ú(ÈçAlpha¡¡AXP)£¬ÄÇô±ØÐë³åË¢ÒÔÇ°ÔËÐнø³ÌµÄÒ³±íÈë¿Ú¡£¡¡

4.3.1¡¡¡¡¶à´¦ÀíÆ÷ϵͳÖеĵ÷¶È
ÔÚLinuxÊÀ½çÖУ¬¶àCPUϵͳ·Ç³£ÉÙ¼û¡£µ«ÊÇLinuxÉÏÒѾ­×öÁ˺ܶ๤×÷À´±£Ö¤ËüÄÜÔËÐÐÔÚSMP£¨¶Ô³Æ¶à´¦Àí£©»úÆ÷ÉÏ¡£LinuxÄܹ»ÔÚϵͳÖеÄCPU¼ä½øÐкÏÀíµÄ¸ºÔØƽºâµ÷¶È¡£ÕâÀïµÄ¸ºÔØƽºâ¹¤×÷±Èµ÷¶È¹ÜÀíÆ÷Ëù×öµÄ¸ü¼ÓÃ÷ÏÔ¡£¡¡

ÔڶദÀíÆ÷ϵͳÖУ¬ÈËÃÇÏ£Íûÿ¸ö´¦ÀíÆ÷×Ü´¦Ó빤×÷״̬¡£µ±´¦ÀíÆ÷Éϵĵ±Ç°½ø³ÌÓÃÍêËüµÄʱ¼äƬ»òÕߵȴýϵͳ×ÊԴʱ£¬¸÷¸ö´¦ÀíÆ÷½«¶ÀÁ¢ÔËÐе÷¶È¹ÜÀíÆ÷¡£SMPϵͳÖÐÒ»¸öÖµµÃ×¢ÒâµÄÎÊÌâÊÇϵͳÖв»Ö¹Ò»¸öidle½ø³Ì¡£ÔÚµ¥´¦ÀíÆ÷ϵͳÖУ¬idle½ø³ÌÊÇtaskÊý×éÖеĵÚÒ»¸öÈÎÎñ£¬ÔÚSMPϵͳÖÐÿ¸öCPUÓÐÒ»¸öidle½ø³Ì£¬Í¬Ê±Ã¿¸öCPU¶¼ÓÐÒ»¸öµ±Ç°½ø³Ì£¬SMPϵͳ±ØÐë¸ú×Ùÿ¸ö´¦ÀíÆ÷ÖеÄidle½ø³ÌºÍµ±Ç°½ø³Ì¡£¡¡

ÔÚSMPϵͳÖУ¬Ã¿¸ö½ø³ÌµÄtask_struct½á¹¹Öаüº¬×ŵ±Ç°ÔËÐÐËüµÄ´¦ÀíÆ÷µÄ±àºÅÒÔ¼°ÉÏ´ÎÔËÐÐʱ´¦ÀíÆ÷µÄ±àºÅ¡£¡¡°Ñ½ø³Ìÿ´Î¶¼µ÷¶Èµ½²»Í¬CPUÉÏÖ´ÐÐÏÔÈ»ºÁÎÞÒâÒ壬Linux¿ÉÒÔʹÓÃprocessor_maskÀ´Ê¹µÃij¸ö½ø³ÌÖ»ÔÚÒ»¸ö»òÕß¼¸¸ö´¦ÀíÆ÷ÉÏÔËÐÐ:Èç¹ûNλÖÃ룬Ôò½ø³Ì¿ÉÔÚ´¦ÀíÆ÷NÉÏÔËÐС£µ±µ÷¶È¹ÜÀíÆ÷Ñ¡Ôñнø³ÌÔËÐÐʱ£¬Ëü¡¡²»»á¿¼ÂÇÒ»¸öÔÚÆäprocessor_maskÖÐÔÚµ±Ç°´¦ÀíÆ÷λûÓÐÖÃλµÄ½ø³Ì¡£Í¬Ê±µ÷¶È¹ÜÀíÆ÷½«¸øÓèÉÏ´ÎÔÚ´Ë´¦ÀíÆ÷ÖÐÔËÐеĽø³ÌһЩÓÅÏÈȨ£¬ÒòΪ½«½ø³ÌǨÒƵ½ÁíÍâ´¦ÀíÆ÷ÉÏÔËÐн«´øÀ´ÐÔÄܵÄËðʧ¡£¡¡


4.4¡¡¡¡Îļþ



ͼ4.1¡¡½ø³ÌËùʹÓõÄÎļþ¡¡


ͼ4.1¸ø³öÁËÁ½¸öÃèÐðϵͳÖÐÿ¸ö½ø³ÌËùʹÓõÄÎļþϵͳÏà¹ØÐÅÏ¢¡£µÚÒ»¸öfs_struct°üº¬ÁËÖ¸Ïò½ø³ÌµÄVFS¡¡inodeºÍÆäÆÁ±ÎÂë¡£Õâ¸öÆÁ±ÎÂëÖµÊÇ´´½¨ÐÂÎļþʱËùʹÓõÄȱʡֵ£¬¿ÉÒÔͨ¹ýϵͳµ÷ÓÃÀ´¸Ä±ä¡£¡¡

µÚ¶þ¸öÊý¾Ý½á¹¹files_struct°üº¬Á˽ø³Ìµ±Ç°ËùʹÓõÄËùÓÐÎļþµÄÐÅÏ¢¡£³ÌÐò´Ó±ê×¼ÊäÈëÖжÁÈ¡²¢Ð´Èëµ½±ê×¼Êä³öÖÐÈ¥¡£ÈκδíÎóÐÅÏ¢½«Êä³öµ½±ê×¼´íÎóÊä³ö¡£ÕâЩÎļþÓÐЩ¿ÉÄÜÊÇÕæÕýµÄÎļþ£¬ÓеÄÔòÊÇÊä³ö/ÊäÈëÖն˻òÕßÎïÀíÉ豸£¬µ«³ÌÐò¶¼½«ËüÃÇÊÓΪÎļþ¡£Ã¿¸öÎļþÓÐÒ»¸öÃèÐð·û£¬files_struct×î¶à¿ÉÒÔ°üº¬256¸öÎļþÊý¾Ý½á¹¹£¬ËüÃÇ·Ö±ðÃèÐðÒ»¸ö±»µ±Ç°½ø³ÌʹÓõÄÎļþ¡£f_modeÓò±íʾÎļþ½«ÒÔºÎÖÖģʽ´´½¨£ºÖ»¶Á¡¡¡¢¶Áд»¹ÊÇֻд¡£f_posÖаüº¬ÏÂÒ»´ÎÎļþ¶Áд²Ù×÷¿ªÊ¼Î»Öá£f_inodeÖ¸ÏòÃèÐð´ËÎļþµÄVFS¡¡inode£¬¡¡f_opsÖ¸ÏòÒ»×é¿ÉÒÔ¶Ô´ËÎļþ½øÐвÙ×÷µÄº¯ÊýÈë¿ÚµØÖ·Ö¸ÕëÊý×é¡£ÕâЩ³éÏó½Ó¿ÚÊ®·ÖÇ¿´ó£¬ËüÃÇʹµÃLinux¡¡Äܹ»Ö§³Ö¶àÖÖÎļþÀàÐÍ¡£ÔÚLinuxÖУ¬¹ÜµÀÊÇÓÃÎÒÃÇÏÂÃæÒªÌÖÂ۵ĻúÖÆʵÏֵġ£¡¡

ÿµ±´ò¿ªÒ»¸öÎļþʱ£¬Î»ÓÚfiles_structÖеÄÒ»¸ö¿ÕÏÐÎļþÖ¸Õ뽫±»ÓÃÀ´Ö¸ÏòÕâ¸öеÄÎļþ½á¹¹¡£Linux½ø¡¡³ÌÏ£ÍûÔÚ½ø³ÌÆô¶¯Ê±ÖÁÉÙÓÐÈý¸öÎļþÃèÐð·û±»´ò¿ª£¬ËüÃÇÊDZê×¼ÊäÈ룬±ê×¼Êä³öºÍ±ê×¼´íÎóÊä³ö£¬Ò»°ã½ø³Ì¡¡»á´Ó¸¸½ø³ÌÖм̳ÐËüÃÇ¡£ÕâЩÃèÐð·ûÓÃÀ´Ë÷Òý½ø³ÌµÄfdÊý×飬ËùÒÔ±ê×¼ÊäÈ룬±ê×¼Êä³öºÍ±ê×¼´íÎóÊä³ö·Ö±ð¡¡¶ÔÓ¦ÎļþÃèÐð·û0£¬1ºÍ2¡£Ã¿´Î¶ÔÎļþµÄ´æÈ¡¶¼ÒªÍ¨¹ýÎļþÊý¾Ý½á¹¹ÖеÄÎļþ²Ù×÷×Ó³ÌÐòºÍVFS¡¡inodeÒ»ÆðÀ´Íê³É£¬¡¡


4.5¡¡¡¡ÐéÄâÄÚ´æ
½ø³ÌµÄÐéÄâÄÚ´æ°üÀ¨¿ÉÖ´ÐдúÂëºÍ¶à¸ö×ÊÔ´Êý¾Ý¡£Ê×ÏȼÓÔصÄÊdzÌÐòÓ³Ïó£¬ÀýÈçls¡£lsºÍËùÓпÉÖ´ÐÐÓ³ÏóÒ»Ñù£¬ÊÇÓÉ¿ÉÖ´ÐдúÂëºÍÊý¾Ý×é³ÉµÄ¡£´ËÓ³ÏóÎļþ°üº¬ËùÓмÓÔØ¿ÉÖ´ÐдúÂëËùÐèµÄÐÅÏ¢£¬Í¬Ê±»¹½«³ÌÐòÊý¾ÝÁ¬½Ó½øÈë½ø³ÌµÄÐéÄâÄÚ´æ¿Õ¼ä¡£È»ºóÔÚÖ´Ðйý³ÌÖУ¬½ø³Ì¶¨Î»¿ÉÒÔʹÓõÄÐéÄâÄڴ棬ÒÔ°üº¬ÕýÔÚ¶ÁÈ¡µÄÎļþÄÚÈÝ¡£Ð·ÖÅäµÄÐéÄâÄÚ´æ±ØÐëÁ¬½Óµ½½ø³ÌÒÑ´æÔÚµÄÐéÄâÄÚ´æÖвÅÄܹ»Ê¹Óᣡ¡×îºóLinux½ø³Ìµ÷ÓÃͨÓÿâ¹ý³Ì£¬±ÈÈçÎļþ´¦Àí×Ó³ÌÐò¡£Èç¹ûÿ¸ö½ø³Ì¶¼Óпâ¹ý³ÌµÄ¿½±´£¬ÄÇô¹²Ïí¾Í±äµÃûÓÐÒâÒå¡£¶øLinux¿ÉÒÔʹ¶à¸ö½ø³ÌͬʱʹÓù²Ïí¿â¡£À´×Ô¹²Ïí¿âµÄ´úÂëºÍÊý¾Ý±ØÐëÁ¬½Ó½øÈë½ø³ÌµÄÐéÄâµØÖ·¿Õ¼äÒÔ¼°¹²Ïí´Ë¿âµÄÆäËü½ø³ÌµÄÐéÄâµØÖ·¿Õ¼ä¡£¡¡

ÈκÎʱºò½ø³Ì¶¼²»Í¬Ê±Ê¹Óðüº¬ÔÚÆäÐéÄâÄÚ´æÖеÄËùÓдúÂëºÍÊý¾Ý¡£ËäÈ»Ëü¿ÉÒÔ¼ÓÔØÔÚÌض¨Çé¿öÏÂʹÓõÄÄÇЩ´úÂ룬Èç³õʼ»¯»òÕß´¦ÀíÌØÊâʼþʱ£¬ÁíÍâËüҲʹÓÃÁ˹²Ïí¿âµÄ²¿·Ö×Ó³ÌÐò¡£µ«Èç¹û½«ÕâЩûÓлòºÜÉÙʹÓõĴúÂëºÍÊý¾ÝÈ«²¿¼ÓÔص½ÎïÀíÄÚ´æÖÐÒýÆ𼫴óµÄÀË·Ñ¡£Èç¹ûϵͳÖжà¸ö½ø³Ì¶¼ÀË·ÑÕâô¶à×ÊÔ´£¬Ôò»á´ó´ó½µµÍµÄϵͳЧÂÊ¡£LinuxʹÓÃÇëÇóµ÷Ò³¼¼ÊõÀ´°ÑÄÇЩ½ø³ÌÐèÒª·ÃÎʵÄÐéÄâÄÚ´æ´øÈëÎïÀíÄÚ´æÖС£ºËÐĽ«½ø³ÌÒ³±íÖÐÕâЩÐéÄâµØÖ·±ê¼Ç³É´æÔÚµ«²»ÔÚÄÚ´æÖеÄ״̬£¬¶øÎÞÐ轫ËùÓдúÂëºÍÊý¾ÝÖ±½Óµ÷ÈëÎïÀíÄÚ´æ¡£µ±½ø³ÌÊÔͼ·ÃÎÊÕâЩ´úÂëºÍÊý¾Ýʱ£¬ÏµÍ³Ó²¼þ½«²úÉúÒ³Ãæ´íÎó²¢½«¿ØÖÆתÒƵ½LinuxºËÐÄÀ´´¦ÀíÖ®¡£ÕâÑù¶ÔÓÚ´¦ÀíÆ÷µØÖ·¿Õ¼äÖеÄÿ¸öÐéÄâÄÚ´æÇøÓò£¬Linux¶¼±ØÐëÖªµÀÕâЩÐéÄâÄÚ´æ´ÓºÎ´¦¶øÀ´ÒÔ¼°ÈçºÎ½«ÆäÔØÈëÄÚ´æÒÔ´¦ÀíÒ³Ãæ´íÎ󡣡¡






ͼ4.2¡¡½ø³ÌµÄÐéÄâÄÚ´æ¡¡

LinuxºËÐÄÐèÒª¹ÜÀíËùÓеÄÐéÄâÄÚ´æµØÖ·£¬Ã¿¸ö½ø³ÌÐéÄâÄÚ´æÖеÄÄÚÈÝÔÚÆätask_struct½á¹¹ÖÐÖ¸ÏòµÄ¡¡vm_area_struct½á¹¹ÖÐÃèÐð¡£½ø³ÌµÄmm_structÊý¾Ý½á¹¹Ò²°üº¬ÁËÒѼÓÔØ¿ÉÖ´ÐÐÓ³ÏóµÄÐÅÏ¢ºÍÖ¸Ïò½ø³ÌÒ³±í¡¡µÄÖ¸Õë¡£Ëü»¹°üº¬ÁËÒ»¸öÖ¸Ïòvm_area_structÁ´±íµÄÖ¸Õ룬ÿ¸öÖ¸Õë´ú±í½ø³ÌÄÚµÄÒ»¸öÐéÄâÄÚ´æÇøÓò¡£¡¡

´ËÁ´±í°´ÐéÄâÄÚ´æλÖÃÀ´ÅÅÁУ¬Í¼4.2¸ø³öÁËÒ»¸ö¼òµ¥½ø³ÌµÄÐéÄâÄÚ´æÒÔ¼°¹ÜÀíËüµÄºËÐÄÊý¾Ý½á¹¹·Ö²¼Í¼¡£¡¡ÓÉÓÚÄÇЩÐéÄâÄÚ´æÇøÓòÀ´Ô´¸÷²»Ïàͬ£¬LinuxʹÓÃvm_area_structÖÐÖ¸ÏòÒ»×éÐéÄâÄÚ´æ´¦Àí¹ý³ÌµÄÖ¸ÕëÀ´³é¡¡Ïó´Ë½Ó¿Ú¡£Í¨¹ýʹÓÃÕâ¸ö²ßÂÔ£¬ËùÓеĽø³ÌÐéÄâµØÖ·¿ÉÒÔÓÃÏàͬµÄ·½Ê½´¦Àí¶øÎÞÐèÁ˽âµ×²ã¶ÔÓÚÄÚ´æ¹ÜÀíµÄÇø±ð¡£Èçµ±½ø³ÌÊÔͼ·ÃÎʲ»´æÔÚÄÚ´æÇøÓòʱ£¬ÏµÍ³Ö»ÐèÒªµ÷ÓÃÒ³Ãæ´íÎó´¦Àí¹ý³Ì¼´¿É¡£¡¡

Ϊ½ø³Ì´´½¨ÐÂÐéÄâÄÚ´æÇøÓò»ò´¦ÀíÒ³Ãæ²»ÔÚÎïÀíÄÚ´æ´íÎóʱ£¬LinuxºËÐÄÖظ´Ê¹Óýø³ÌµÄvm_area_structÊý¾Ý½á¹¹¼¯ºÏ¡£ÕâÑùÏûºÄÔÚ²éÕÒvm_area_structÉϵÄʱ¼äÖ±½ÓÓ°ÏìÁËϵͳÐÔÄÜ¡£Linux°Ñvm_area_structÊý¾Ý½á¹¹ÒÔAVL(Adelson-Velskii¡¡and¡¡Landis)Ê÷½á¹¹Á¬½ÓÒÔ¼Ó¿ìËٶȡ£ÔÚÕâÖÖÁ¬½ÓÖУ¬Ã¿¸övm_area_struct½á¹¹ÓÐÒ»¸ö×óÖ¸ÕëºÍÓÒÖ¸ÕëÖ¸Ïòvm_area_struct½á¹¹¡£×ó±ßµÄÖ¸ÕëÖ¸ÏòÒ»¸ö¸üµÍµÄÐéÄâÄÚ´æÆðʼµØÖ·½Úµã¶øÓұߵÄÖ¸ÕëÖ¸ÏòÒ»¸ö¸ü¸ßÐéÄâÄÚ´æÆðʼµØÖ·½Úµã¡£ÎªÁËÕÒµ½Ä³¸öµÄ½Úµã£¬Linux´ÓÊ÷µÄ¸ù½Úµã¿ªÊ¼²éÕÒ£¬Ö±µ½ÕÒµ½ÕýÈ·µÄvm_area_struct½á¹¹¡£²åÈë»òÕßÊÍ·ÅÒ»¸övm_area_struct½á¹¹²»»áÏûºÄ¶îÍâµÄ´¦Àíʱ¼ä¡£¡¡

µ±½ø³ÌÇëÇó·ÖÅäÐéÄâÄÚ´æʱ£¬Linux²¢²»Ö±½Ó·ÖÅäÎïÀíÄÚ´æ¡£ËüÖ»ÊÇ´´½¨Ò»¸övm_area_struct¡¡½á¹¹À´ÃèÐð´ËÐéÄâÄڴ棬´Ë½á¹¹±»Á¬½Óµ½½ø³ÌµÄÐéÄâÄÚ´æÁ´±íÖС£µ±½ø³ÌÊÔͼ¶ÔзÖÅäµÄÐéÄâÄÚ´æ½øÐÐд²Ù×÷ʱ£¬ÏµÍ³½«²úÉúÒ³Ãæ´í¡£´¦ÀíÆ÷»á³¢ÊÔ½âÎö´ËÐéÄâµØÖ·£¬µ«ÊÇÈç¹ûÕÒ²»µ½¶ÔÓ¦´ËÐéÄâµØÖ·µÄÒ³±íÈë¿Úʱ£¬´¦ÀíÆ÷½«·ÅÆú½âÎö²¢²úÉúÒ³Ãæ´íÎóÒì³££¬ÓÉLinuxºËÐÄÀ´´¦Àí¡£LinuxÔò²é¿´´ËÐéÄâµØÖ·ÊÇ·ñÔÚµ±Ç°½ø³ÌµÄÐéÄâµØÖ·¿Õ¼äÖС£Èç¹ûÊÇLinux»á´´½¨ÕýÈ·µÄPTE²¢Îª´Ë½ø³Ì·ÖÅäÎïÀíÒ³Ãæ¡£°üº¬ÔÚ´ËÒ³ÃæÖеĴúÂë»òÊý¾Ý¿ÉÄÜÐèÒª´ÓÎļþϵͳ»òÕß½»»»´ÅÅÌÉ϶Á³ö¡£È»ºó½ø³Ì½«´ÓÒ³Ãæ´íÎ󴦿ªÊ¼¼ÌÐøÖ´ÐУ¬ÓÉÓÚÎïÀíÄÚ´æÒѾ­´æÔÚ£¬ËùÒÔ²»»áÔÙ²úÉúÒ³ÃæÒì³£¡£¡¡


4.6¡¡¡¡½ø³Ì´´½¨
ϵͳÆô¶¯Ê±×ÜÊÇ´¦ÓÚºËÐÄģʽ£¬´ËʱֻÓÐÒ»¸ö½ø³Ì£º³õʼ»¯½ø³Ì¡£ÏóËùÓнø³ÌÒ»Ñù£¬³õʼ»¯½ø³ÌÒ²ÓÐÒ»¸öÓɶÑÕ»¡¢¼Ä´æÆ÷µÈ±íʾµÄ»úÆ÷״̬¡£µ±ÏµÍ³ÖÐÓÐÆäËü½ø³Ì±»´´½¨²¢ÔËÐÐʱ£¬ÕâЩÐÅÏ¢½«±»´æ´¢ÔÚ³õʼ»¯½ø³ÌµÄtask_struct½á¹¹ÖС£ÔÚϵͳ³õʼ»¯µÄ×îºó£¬³õʼ»¯½ø³ÌÆô¶¯Ò»¸öºËÐÄỊ̈߳¨init£©È»ºó±£ÁôÔÚidle״̬¡£¡¡Èç¹ûûÓÐÈκÎÊÂÒª×ö£¬µ÷¶È¹ÜÀíÆ÷½«ÔËÐÐidle½ø³Ì¡£idle½ø³ÌÊÇΨһ²»ÊǶ¯Ì¬·ÖÅätask_structµÄ½ø³Ì£¬ËüµÄ¡¡task_structÔÚºËÐĹ¹Ôìʱ¾²Ì¬¶¨Òå²¢ÇÒÃû×ֺܹ֣¬½Ðinit_task¡£¡¡

ÓÉÓÚÊÇϵͳµÄµÚÒ»¸öÕæÕýµÄ½ø³Ì£¬ËùÒÔinitºËÐÄỊ̈߳¨»ò½ø³Ì£©µÄ±êÖ¾·ûΪ1¡£Ëü¸ºÔðÍê³ÉϵͳµÄһЩ³õʼ»¯ÉèÖÃÈÎÎñ£¨Èç´ò¿ªÏµÍ³¿ØÖÆ̨Óë°²×°¸ùÎļþϵͳ£©£¬ÒÔ¼°Ö´ÐÐϵͳ³õʼ»¯³ÌÐò£¬Èç/etc/init,¡¡/bin/init¡¡»òÕß¡¡/sbin/init¡¡£¬ÕâЩ³õʼ»¯³ÌÐòÒÀÀµÓÚ¾ßÌåµÄϵͳ¡£init³ÌÐòʹÓÃ/etc/inittab×÷Ϊ½Å±¾ÎļþÀ´´´½¨ÏµÍ³ÖеÄнø³Ì¡£ÕâЩнø³ÌÓÖ´´½¨¸÷×ÔµÄнø³Ì¡£ÀýÈçgetty½ø³Ì½«ÔÚÓû§ÊÔͼµÇ¼ʱ´´½¨Ò»¸ölogin½ø³Ì¡£Ïµ¡¡Í³ÖÐËùÓнø³Ì¶¼ÊÇ´ÓinitºËÐÄÏß³ÌÖÐÅÉÉú³öÀ´¡£¡¡

нø³Ìͨ¹ý¿Ë¡ÀϽø³Ì»òµ±Ç°½ø³ÌÀ´´´½¨¡£ÏµÍ³µ÷ÓÃfork»òclone¿ÉÒÔ´´½¨ÐÂÈÎÎñ£¬¸´ÖÆ·¢ÉúÔÚºËÐÄ״̬ϵĺËÐÄÖС£ÔÚϵͳµ÷ÓõĽáÊø´¦ÓÐÒ»¸öнø³ÌµÈ´ýµ÷¶È¹ÜÀíÆ÷Ñ¡ÔñËüÈ¥ÔËÐС£ÏµÍ³´ÓÎïÀíÄÚ´æÖзÖÅä³öÀ´Ò»¸öеÄtask_structÊý¾Ý½á¹¹£¬Í¬Ê±»¹ÓÐÒ»¸ö»ò¶à¸ö°üº¬±»¸´Öƽø³Ì¶ÑÕ»£¨Óû§ÓëºËÐÄ£©µÄÎïÀíÒ³Ã档Ȼºó´´½¨Î¨Ò»µØ±ê¼Ç´ËÐÂÈÎÎñµÄ½ø³Ì±êÖ¾·û¡£µ«¸´Öƽø³Ì±£ÁôÆ丸½ø³ÌµÄ±êÖ¾·ûÒ²ÊǺÏÀíµÄ¡£Ð´´½¨µÄtask_struct½«±»·ÅÈëtaskÊý×éÖУ¬ÁíÍ⽫±»¸´Öƽø³ÌµÄtask_structÖеÄÄÚÈÝÒ³±í¿½ÈëеÄtask_structÖС£¡¡

¸´ÖÆÍê³Éºó£¬LinuxÔÊÐíÁ½¸ö½ø³Ì¹²Ïí×ÊÔ´¶ø²»ÊǸ´ÖƸ÷×ԵĿ½±´¡£ÕâЩ×ÊÔ´°üÀ¨Îļþ¡¢ÐźŴ¦Àí¹ý³ÌºÍÐéÄâÄÚ´æ¡£½ø³Ì¶Ô¹²Ïí×ÊÔ´Óø÷×ÔµÄcountÀ´¼ÇÊý¡£ÔÚÁ½¸ö½ø³Ì¶Ô×ÊÔ´µÄʹÓÃÍê±Ï֮ǰ£¬Linux¾ø²»»áÊÍ·Å´Ë×ÊÔ´£¬ÀýÈ縴Öƽø³ÌÒª¹²ÏíÐéÄâÄڴ棬ÔòÆätask_struct½«°üº¬Ö¸ÏòÔ­À´½ø³ÌµÄmm_structµÄÖ¸Õë¡£mm_struct½«Ôö¼Ócount±äÁ¿ÒÔ±íʾµ±Ç°½ø³Ì¹²ÏíµÄ´ÎÊý¡£¡¡

¸´Öƽø³ÌÐéÄâ¿Õ¼äËùÓü¼ÊõµÄÊ®·ÖÇÉÃî¡£¸´Öƽ«²úÉúÒ»×éеÄvm_area_struct½á¹¹ºÍ¶ÔÓ¦µÄmm_struct½á¹¹£¬Í¬Ê±»¹Óб»¸´Öƽø³ÌµÄÒ³±í¡£¸Ã½ø³ÌµÄÈκÎÐéÄâÄڴ涼ûÓб»¿½±´¡£ÓÉÓÚ½ø³ÌµÄÐéÄâÄÚ´æÓеĿÉÄÜÔÚÎïÀíÄÚ´æÖУ¬ÓеĿÉÄÜÔÚµ±Ç°½ø³ÌµÄ¿ÉÖ´ÐÐÓ³ÏóÖУ¬ÓеĿÉÄÜÔÚ½»»»ÎļþÖУ¬ËùÒÔ¿½±´½«ÊÇÒ»¸öÀ§ÄÑÇÒ·±ËöµÄ¹¤×÷¡£LinuxʹÓÃÒ»ÖÖ"copy¡¡on¡¡write"¼¼Êõ£º½öµ±Á½¸ö½ø³ÌÖ®Ò»¶ÔÐéÄâÄÚ´æ½øÐÐд²Ù×÷ʱ²Å¿½±´´ËÐéÄâÄÚ´æ¿é¡£µ«ÊDz»¹ÜдÓ벻д£¬ÈκÎÐéÄâÄڴ涼¿ÉÒÔÔÚÁ½¸ö½ø³Ì¼ä¹²Ïí¡£Ö»¶ÁÊôÐÔµÄÄڴ棬Èç¿ÉÖ´ÐдúÂ룬×ÜÊÇ¿ÉÒÔ¹²ÏíµÄ¡£ÎªÁËʹ"copy¡¡on¡¡write"²ßÂÔ¹¤×÷£¬±ØÐ뽫ÄÇЩ¿ÉдÇøÓòµÄÒ³±íÈë¿Ú±ê¼ÇΪֻ¶ÁµÄ£¬Í¬Ê±ÃèÐðËüÃǵÄvm_area_structÊý¾Ý¶¼±»ÉèÖÃΪ"copy¡¡on¡¡write"¡£µ±½ø³ÌÖ®Ò»ÊÔͼ¶ÔÐéÄâÄÚ´æ½øÐÐд²Ù×÷ʱ½«²úÉúÒ³Ãæ´íÎó¡£ÕâʱLinux½«¿½±´ÕâÒ»¿éÄÚ´æ²¢ÐÞ¸ÄÁ½¸ö½ø³ÌµÄÒ³±íÒÔ¼°ÐéÄâÄÚ´æÊý¾Ý½á¹¹¡£¡¡


4.7¡¡¡¡Ê±ÖӺͶ¨Ê±Æ÷
ºËÐĸú×Ù׎ø³ÌµÄ´´½¨Ê±¼äÒÔ¼°ÔÚÆäÉúÃüÆÚÖÐÏûºÄµÄCPUʱ¼ä¡£Ã¿¸öʱÖӵδðʱ£¬ºËÐĽ«¸üе±Ç°½ø³ÌÔÚϵͳ¡¡Ä£Ê½ÓëÓû§Ä£Ê½ÏÂËùÏûºÄµÄʱ¼ä£¨¼Ç¼ÔÚjiffiesÖУ©¡£¡¡
³ýÁËÒÔÉϼÇʱÆ÷Í⣬Linux»¹Ö§³Ö¼¸ÖÖ½ø³ÌÏà¹ØµÄʱ¼ä¼ä¸ô¶¨Ê±Æ÷¡£¡¡

½ø³Ì¿ÉÒÔʹÓÃÕâЩ¶¨Ê±Æ÷ÔÚµ½Ê±Ê±ÏòËü·¢Ë͸÷ÖÖÐźţ¬ÕâЩ¶¨Ê±Æ÷ÈçÏ£º¡¡


Real¡¡
´Ë¶¨Ê±Æ÷°´ÕÕʵʱʱÖÓ¼ÇÊý£¬µ±Ê±ÖÓµ½ÆÚʱ£¬Ïò½ø³Ì·¢ËÍSIGALRMÐźš£¡¡
Virtual¡¡
´Ë¶¨Ê±Æ÷½öÔÚ½ø³ÌÔËÐÐʱ¼ÇÊý£¬Ê±ÖÓµ½ÆÚʱ½«·¢ËÍSIGVTALRMÐźš£¡¡
Profile¡¡
´Ë¶¨Ê±Æ÷ÔÚ½ø³ÌÔËÐкͺËÐÄΪÆäÔËÐÐʱ¶¼¼ÇÊý¡£µ±µ½Ê±Ê±Ïò½ø³Ì·¢ËÍSIGPROFÐźš£¡¡
ÒÔÉÏʱ¼ä¼ä¸ô¶¨Ê±Æ÷¿ÉÒÔͬʱҲ¿ÉÒÔµ¥¶ÀÔËÐУ¬Linux½«ËùÓÐÕâЩÐÅÏ¢´æ´¢ÔÚ½ø³ÌµÄtask_structÊý¾Ý½á¹¹ÖС£Í¨¹ýϵͳµ÷ÓÿÉÒÔÉèÖÃÕâЩʱ¼ä¼ä¸ô¶¨Ê±Æ÷²¢Æô¶¯¡¢ÖÕÖ¹ËüÃÇ»ò¶ÁÈ¡ËüÃǵĵ±Ç°Öµ¡£VirtualºÍProfile¶¨Ê±Æ÷ÒÔÏàͬ·½Ê½´¦Àí¡£¡¡

ÿ´ÎʱÖӵδðºóµ±Ç°½ø³ÌµÄʱ¼ä¼ä¸ô¶¨Ê±Æ÷½«µÝ¼õ£¬µ±µ½Ê±Ö®ºó½«·¢ËÍÊʵ±µÄÐźš£¡¡

RealʱÖÓ¼ä¸ô¶¨Ê±Æ÷µÄ»úÖÆÓÐЩ²»Í¬£¬ÕâЩ½«ÔÚkernelÒ»ÕÂÖÐÏêϸÌÖÂÛ¡£Ã¿¸ö½ø³ÌÓÐÆä×ÔÉíµÄtimer_listÊý¡¡¾Ý½á¹¹£¬µ±Ê±¼ä¼ä¸ô¶¨Ê±Æ÷ÔËÐÐʱ£¬ËüÃDZ»ÅÅÈëϵͳµÄ¶¨Ê±Æ÷Á´±íÖС£µ±¶¨Ê±Æ÷µ½Æں󣬵ײ㴦Àí¹ý³Ì½«°ÑËü´Ó¶ÓÁÐÖÐɾ³ý²¢µ÷ÓÃʱ¼ä¼ä¸ô´¦Àí¹ý³Ì¡£´Ë¹ý³Ì½«Ïò½ø³Ì·¢ËÍSIGALRMÐźŲ¢ÖØÐÂÆô¶¯¶¨Ê±Æ÷£¬½«ÆäÖØзÅÈëϵͳʱÖÓ¶ÓÁС£¡¡

¡¡¡¡

4.8¡¡¡¡³ÌÐòÖ´ÐÐ
ÏóUnixÒ»Ñù£¬Linux³ÌÐòͨ¹ýÃüÁî½âÊÍÆ÷À´Ö´ÐС£ÃüÁî½âÊÍÆ÷ÊÇÒ»¸öÓû§½ø³Ì£¬ÈËÃǽ«Æä³ÆΪshell³ÌÐò¡£¡¡

ÔÚLinuxÖÐÓжà¸öshell³ÌÐò£¬×îÁ÷Ðеļ¸¸öÊÇsh¡¢bashºÍtcsh¡£³ýÁ˼¸¸öÄÚÖÃÃüÁîÈçcdºÍpwdÍ⣬ÃüÁÊÇ¡¡Ò»¸ö¿ÉÖ´Ðжþ½øÖÆÎļþ¡£µ±¼üÈëÒ»¸öÃüÁîʱ£¬Shell³ÌÐò½«ËÑË÷°üº¬ÔÚ½ø³ÌPATH»·¾³±äÁ¿ÖвéÕÒ·¾¶ÖеÄÄ¿¡¡Â¼À´¶¨Î»Õâ¸ö¿ÉÖ´ÐÐÓ³ÏóÎļþ¡£Èç¹ûÕÒµ½£¬ÔòËü±»¼ÓÔØÇÒÖ´ÐС£shellʹÓÃÉÏÃæÃèÐðµÄfork»úÖÆÀ´¸´ÖÆ×ÔÉí¡¡È»ºóÓÃÕÒµ½µÄ¶þ½øÖÆ¿ÉÖ´ÐÐÓ³ÏóµÄÄÚÈÝÀ´´úÌæÆä×Ó½ø³Ì¡£Ò»°ãÇé¿öÏ£¬shell½«µÈ´ý´ËÃüÁîµÄÍê³É»òÕß×Ó½ø¡¡³ÌµÄÍ˳ö¡£Äã¿ÉÒÔͨ¹ý°´ÏÂcontrol-Z¼üʹ×Ó½ø³ÌÇл»µ½ºǫ́¶øshellÔٴοªÊ¼ÔËÐС£Í¬Ê±»¹¿ÉÒÔʹÓÃshell¡¡ÃüÁîbg½«ÃüÁî·ÅÈëºǫִ́ÐУ¬shell½«·¢ËÍSIGCONTÐźÅÒÔÖØÐÂÆô¶¯½ø³ÌÖ±µ½½ø³ÌÐèÒª½øÐÐÖÕ¶ËÊä³öºÍÊäÈë¡£¡¡

¿ÉÖ´ÐÐÎļþ¿ÉÒÔÓÐÐí¶à¸ñʽ£¬ÉõÖÁÊÇÒ»¸ö½Å±¾Îļþ¡£½Å±¾ÎļþÐèҪǡµ±µÄÃüÁî½âÊÍÆ÷À´´¦ÀíËüÃÇ£»ÀýÈç¡¡/bin/sh½âÊÍshell½Å±¾¡£¿ÉÖ´ÐÐÄ¿±êÎļþ°üº¬¿ÉÖ´ÐдúÂëºÍÊý¾Ý£¬ÕâÑù²Ù×÷ϵͳ¿ÉÒÔ»ñµÃ×ã¹»µÄÐÅÏ¢½«Æä¡¡¼ÓÔص½ÄÚ´æ²¢Ö´ÐÐÖ®¡£Linux×î³£ÓõÄÄ¿±êÎļþÊÇELF£¬µ«ÊÇÀíÂÛÉÏLinux¿ÉÒÔÁé»îµØ´¦Àí¼¸ºõËùÓÐÄ¿±êÎļþ¡¡¸ñʽ¡£¡¡




ͼ4.3¡¡ÒÑ×¢²áµÄ¶þ½øÖƸñʽ¡¡


ͨ¹ýʹÓÃÎļþϵͳ£¬LinuxËùÖ§³ÖµÄ¶þ½øÖƸñʽ¼È¿ÉÒÔ¹¹Ôìµ½ºËÐÄÓÖ¿ÉÒÔ×÷Ϊģ¿é¼ÓÔØ¡£ºËÐı£´æ×ÅÒ»¸ö¿ÉÒÔÖ§³ÖµÄ¶þ½øÖƸñʽµÄÁ´±í£¨¼ûͼ4.3£©£¬Í¬Ê±µ±Ö´ÐÐÒ»¸öÎļþʱ£¬¸÷ÖÖ¶þ½øÖƸñʽ±»ÒÀ´Î³¢ÊÔ¡£¡¡

LinuxÉÏÖ§³Ö×î¹ãµÄ¸ñʽÊÇa.outºÍELF¡£Ö´ÐÐÎļþ²¢²»ÐèҪȫ²¿¶ÁÈëÄڴ棬¶øʹÓÃÒ»ÖÖÇëÇó¼ÓÔؼ¼Êõ¡£½ø³Ì¡¡Ê¹ÓõĿÉÖ´ÐÐÓ³ÏóµÄÿһ²¿·Ö±»µ÷ÈëÄÚ´æ¶øûÓõIJ¿·Ö½«´ÓÄÚ´æÖжªÆú¡£¡¡


4.8.1¡¡¡¡ELF
ELF£¨¿ÉÖ´ÐÐÓë¿ÉÁ¬½Ó¸ñʽ£©ÊÇUnixϵͳʵÑéÊÒÉè¼ÆµÄÒ»ÖÖÄ¿±êÎļþ¸ñʽ£¬ÏÖÔÚÒѳÉΪLinuxÖÐʹÓÃ×î¶àµÄ¸ñʽ¡£µ«ÓëÆäËüÄ¿±êÎļþ¸ñʽÏà±È£¬ÈçECOFFºÍa.out£¬ELFµÄ¿ªÏúÉÔ´ó£¬ËüµÄÓŵãÊǸü¼ÓÁé»î¡£ELF¿ÉÖ´ÐÐÎļþ¡¡Öаüº¬¿ÉÖ´ÐдúÂ룬¼´ÕýÎĶΣºtextºÍÊý¾Ý¶Î£ºdata¡£Î»ÓÚ¿ÉÖ´ÐÐÓ³ÏóÖеıíÃèÐðÁ˳ÌÐòÓ¦ÈçºÎ·ÅÈë½ø³ÌµÄ¡¡ÐéÄâµØÖ·¿Õ¼äÖС£¾²Ì¬Á¬½ÓÓ³ÏóÊÇͨ¹ýÁ¬½ÓÆ÷ldµÃµ½£¬ÔÚµ¥¸öÓ³ÏóÖаüº¬ËùÓÐÔËÐдËÓ³ÏóËùÐè´úÂëºÍÊý¾Ý¡£¡¡´ËÓ³ÏóͬʱҲ¶¨ÒåÁËÓ³ÏóµÄÄÚ´æ·Ö²¼ºÍÊ×Ïȱ»Ö´ÐеĴúÂëµÄµØÖ·¡£¡¡






ͼ4.4¡¡ELF¿ÉÖ´ÐÐÎļþ¸ñʽ¡¡

ͼ4.4¸ø³öÁËÒ»¸ö¾²Ì¬Á¬½ÓµÄELF¿ÉÖ´ÐÐÓ³ÏóµÄ¹¹³É¡£¡¡

ÕâÊÇÒ»¸ö´òÓ¡"Hello¡¡World"²¢Í˳öµÄ¼òµ¥C³ÌÐò¡£ÎļþÍ·½«Æä×÷Ϊһ¸ö´øÁ½¸öÎïÀíÎļþÍ·(e_phnum¡¡=¡¡2)µÄELFÓ³ÏóÀ´ÃèÐð£¬ÎïÀíÎļþͷλÓÚÓ³ÏóÎļþÆðʼλÖÃ52×Ö½Ú´¦¡£µÚÒ»¸öÎïÀíÎļþÍ·ÃèÐðµÄÊÇÓ³ÏóÖеĿÉÖ´ÐдúÂë¡£Ëü´ÓÐéÄâµØÖ·0x8048000¿ªÊ¼£¬³¤¶ÈΪ65532×Ö½Ú¡£ÕâÊÇÒòΪËü°üº¬ÁËprintf()º¯Êý¿â´úÂëÒÔÊä³ö"Hello¡¡World"µÄ¾²Ì¬Á¬½ÓÓ³Ïó¡£Ó³ÏóµÄÈë¿Úµã£¬¼´³ÌÐòµÄµÚÒ»ÌõÖ¸Á²»ÊÇλÓÚÓ³ÏóµÄÆðʼλÖᡶøÔÚÐéÄâµØÖ·0x8048090£¨e_entry£©´¦¡£´úÂëÕýºÃ½Ó×ŵڶþ¸öÎïÀíÎļþÍ·¡£Õâ¸öÎïÀíÎļþÍ·ÃèÐðÁ˴˳ÌÐòʹÓõÄÊý¾Ý£¬?¡¡?»¼ÓÔص½ÐéÄâÄÚ´æÖ?x8¡¡µÄ´óСÔÚÎļþÖÐÊÇ2200×Ö½Ú(p_filesz)µ«ÊÇÔÚÄÚ´æÖеĴóСΪ4248×Ö½Ú¡£ÕâÊÇÒòΪ¿ªÊ¼µÄ2200×Ö½Ú°üº¬µÄÊÇÔ¤Ïȳõʼ»¯Êý¾Ý¶ø½ÓÏÂÀ´µÄ2048×Ö½Ú°üº¬µÄÊDZ»Ö´ÐдúÂë³õʼ»¯µÄÊý¾Ý¡£¡¡

µ±Linux½«Ò»¸öELF¿ÉÖ´ÐÐÓ³Ïó¼ÓÔص½½ø³ÌµÄÐéÄâµØÖ·¿Õ¼äʱ£¬Ëü²¢²»ÕæµÄ¼ÓÔØÓ³Ïó¡£Ê×ÏÈËü½¨Á¢ÆäÐéÄâÄÚ´æÊý¾Ý½á¹¹£º½ø³ÌµÄvm_area_structÊ÷ºÍÒ³±í¡£µ±³ÌÐòÖ´ÐÐʱ½«²úÉúÒ³?¡¡bf9¡¡æ´í£??ð³ÌÐò´?ëºÍÊ?Ý´ÓÎïÀíÄÚ´æÖÐÈ¡³ö¡£³ÌÐòÖÐûÓÐʹÓõ½µÄ²¿·Ö´ÓÀ´¶¼²»»á¼ÓÔص½ÄÚ´æÖÐÈ¥¡£Ò»µ?LF¶þ½øÖƸñʽ¼ÓÔØÆ÷·¢ÏÖÕâ¸öÓ³ÏóÊÇÓÐЧµÄELF¿ÉÖ´ÐÐÓ³Ïó£¬Ëü½«°Ñ½ø³ÌµÄµ±Ç°¿ÉÖ´ÐÐÓ³Ïó´ÓÐéÄâÄÚ´æ³åË¢³öÈ¥¡£µ±½ø³ÌÊÇÒ»¸ö¸´ÖÆÓ³Ïóʱ£¨ËùÓеĽø³Ì¶¼ÊÇ£©£¬¸¸½ø³ÌÖ´ÐеÄÊÇÀϵÄÓ³Ïó³ÌÐò£¬ÀýÈçÏóbashÕâÑùµÄÃüÁî½âÊÍÆ÷¡£Í¬Ê±»¹½«Çå³ýÈκÎÐźŴ¦Àí¹ý³Ì²¢Çҹرմò¿ªµÄÎļþ£¬ÔÚ³åË¢µÄ×îºó£¬½ø³ÌÒѾ­ÎªÐµĿÉÖ´ÐÐÓ³Ïó×÷ºÃÁË×¼±¸¡£²»¹Ü¿ÉÖ´ÐÐÓ³ÏóÊÇÄÄÖÖ¸ñʽ£¬½ø³ÌµÄmm_struct½á¹¹Öн«´æÈëÏàͬÐÅÏ¢£¬ËüÃÇÊÇÖ¸ÏòÓ³Ïó´úÂëºÍÊý¾ÝµÄÖ¸Õë¡£µ±ELF¿ÉÖ´ÐÐÓ³Ïó´ÓÎļþÖжÁ³öÇÒÏà¹Ø³ÌÐò´úÂë±»Ó³Éäµ½½ø³ÌÐéÄâµØÖ·¿Õ¼äºó£¬ÕâЩָÕëµÄÖµ¶¼±»È·¶¨ÏÂÀ´¡£Í¬Ê±vm_area_structÒ²±»½¨Á¢ÆðÀ´£¬½ø³ÌµÄÒ³±íÒ²±»Ð޸ġ£mm_struct½á¹¹Öл¹°üº¬´«µÝ¸ø³ÌÐòºÍ½ø³Ì»·¾³±äÁ¿µÄ²ÎÊýµÄÖ¸Õë¡£¡¡


ELF¡¡¹²Ïí¿â
ÁíÒ»·½Ã棬¶¯Ì¬Á¬½ÓÓ³Ïó²¢²»°üº¬È«²¿ÔËÐÐËùÐèÒªµÄ´úÂëºÍÊý¾Ý¡£ÆäÖеÄÒ»²¿·Ö½öÔÚÔËÐÐʱ²ÅÁ¬½Óµ½¹²Ïí¿âÖС£ELF¹²Ïí¿âÁÐ±í»¹ÔÚÔËÐÐʱÁ¬½Óµ½¹²Ïí¿âʱ±»¶¯Ì¬Á¬½ÓÆ÷ʹÓá£LinuxʹÓü¸¸ö¶¯Ì¬Á¬½ÓÆ÷£¬Èçld.so.1£¬libc.so.1ºÍld-linux.so.1£¬ÕâЩ¶¼·ÅÖÃÔÚ/libĿ¼ÖС£ÕâЩ¿âÖаüº¬³£ÓôúÂ룬ÈçCÓïÑÔ×Ó³ÌÐòµÈ¡£Èç¹ûûÓж¯Ì¬Á¬½Ó£¬ËùÓгÌÐò½«²»µÃ²»½«ËùÓпâ¹ý³Ì¿½±´Ò»·Ý²¢Á¬½Ó½øÀ´£¬ÕâÑù½«ÐèÒª¸ü¶àµÄ´ÅÅÌÓëÐéÄâÄÚ´æ¿Õ¼ä¡£Í¨¹ý¶¯Ì¬Á¬½Ó£¬Ã¿¸ö±»ÒýÓÿâ¹ý³ÌµÄÐÅÏ¢¶¼¿ÉÒÔ°üº¬ÔÚELFÓ³ÏóÁбíÖС£ÕâЩÐÅÏ¢ÓÃÀ´°ïÖú¶¯Ì¬Á¬½ÓÆ÷¶¨Î»¿â¹ý³Ì²¢½«ËüÁ¬Èë³ÌÐòµÄµØÖ·¿Õ¼ä¡£¡¡

¡¡¡¡


4.8.2¡¡¡¡½Å±¾Îļþ
½Å±¾ÎļþµÄÔËÐÐÐèÒª½âÊÍÆ÷µÄ°ïÖú¡£LinuxÖÐÓÐÐíÐí¶à¶àµÄ½âÊÍÆ÷£»ÀýÈçwish¡¢perlÒÔ¼°ÃüÁîÍâ¿Ç³ÌÐòtcsh¡£¡¡LinuxʹÓñê×¼µÄUnix¹æÔò£¬Ôڽű¾ÎļþµÄµÚÒ»Ðаüº¬Á˽ű¾½âÊÍÆ÷µÄÃû×Ö¡£µäÐ͵Ľű¾ÎļþµÄ¿ªÍ·ÈçÏ£º¡¡

#!/usr/bin/wish¡¡

´ËʱÃüÁî½âÊÍÆ÷»áÊÔ×ÅÑ°Õҽű¾½âÊÍÆ÷¡£¡¡È»ºóËü´ò¿ª´Ë½Å±¾½âÊÍÆ÷µÄÖ´ÐÐÎļþµÃµ½Ò»¸öÖ¸Ïò´ËÎļþµÄVFS¡¡inode²¢Ê¹´Ë½Å±¾½âÊÍÆ÷¿ªÊ¼½âÊʹ˽ű¾¡£Õâʱ½Å±¾ÎļþÃû±ä³ÉÁ˽ű¾½âÊÍÆ÷µÄ0ºÅ²ÎÊý(µÚÒ»¸ö²ÎÊý)²¢ÇÒÆäÓà²ÎÊýÏòÉÏŲһ¸öλÖÃ(Ô­À´µÄµÚÒ»¸ö²ÎÊý±ä³ÉµÚ¶þ¸ö)¡£½Å±¾½âÊÍÆ÷µÄ¼ÓÔعý³ÌÓëÆäËû¿ÉÖ´ÐÐÎļþÏàͬ¡£Linux»áÖð¸ö³¢ÊÔ¸÷ÖÖ¶þ½øÖÆ¿ÉÖ´Ðиñʽֱµ½Ëü¿ÉÒÔÖ´ÐС£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 3 ÌõÆÀÂÛ

  1. haoyu314 ÓÚ 2011-01-29 10:23:50·¢±í:

    ѧϰÁË

  2. weou ÓÚ 2005-11-21 00:46:49·¢±í:

    ²»´í£¬Ö§³Ö

  3. ming ÓÚ 2005-09-29 00:15:45·¢±í:

    Ö§³Ö