²é¿´: 630  |  »Ø¸´: 5
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£
µ±Ç°Ö»ÏÔʾÂú×ãÖ¸¶¨Ìõ¼þµÄ»ØÌû£¬µã»÷ÕâÀï²é¿´±¾»°ÌâµÄËùÓлØÌû

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

[½»Á÷] Windows½ø³Ì/Ïß³Ìdz̸[תÌù]

дÔÚÇ°Ãæ:
  ÕâÊǰ³¸öÈËѧϰµÄһЩÐĵÃÌå»á, Ò»Ö±»á³ÖÐø¸üÐÂ, ¶ÀÀÖÊëÈçÓëÖÚÀÖ? Ìá³öÀ´ºÍ´ó¼Ò·ÖÏí, ÓдíÎóÇëÅÅש, °³»¹¿ÉÒÔ¸üºÃµÄÌá¸ß, ºÎÀÖ²»Îª? ÆäʵдµÄʱºò×îÍ´¿àµÄ¾ÍÊÇ·¢ÏÖºÜÄѹÂÁ¢¼òµ¥µÄ̸һ¸öÎÊÌâ. ¾Ù¸öÀý×Ó, ÎÄÕµÚÒ»²¿·ÖÖÐÊ¡ÂÔÁ˽ø³ÌµØÖ·¿Õ¼äµÄ½éÉÜ, Ö÷Òª¾ÍÊÇ¿¼ÂǵØÖ·¿Õ¼ä¸ÅÄîµÄ¸´ÔÓÐÔ(°üº¬ÐéÄâÄÚ´æ, Óû§¿Õ¼äºÍϵͳ¿Õ¼ä¸ÅÄîetc.). ×ŵľÍÊÇÓÐÔ­ÔòÐԵĴíÎóÎóµ¼Á˳õѧÕß. ×ܽáÒ»¾ä: ˮƽÓÐÏÞ, ´ó¼ÒÖ¸½Ì.

1. ½ø³ÌµÄÆðÔ´ÓëÑÝ»¯
1.1 ½ø³ÌµÄÆðÔ´
  ½ø³Ì, ¶àµÀ³ÌÐòÉè¼Æ¼¼Êõ, ·Öʱ¼¼ÊõÊÇÃܲ»¿É·ÖµÄÕûÌå. ¶àµÀ³ÌÐòÉè¼ÆË¼ÏëÊÇÀíÂÛ»ù´¡, ·ÖʱϵͳºÍ½ø³ÌΪ¶àµÀ³ÌÐòÉè¼Æ¼¼ÊõµÄʵÏÖÌṩÁËÒ»¸öÎę̀.
  µÚÒ»¸öÎÊÌâ: ΪʲôҪÓнø³Ì?
  ÔÚ¼ÆËã»ú·¢Õ¹Ê·µÄÔçÆÚʱ´ú, Ó²¼þÊǷdz£°º¹ó, ·Ç³£Ï¡È±µÄ×ÊÔ´. ÆäÖÐ, ´¦ÀíÆ÷µÄÀûÓÃÂÊÊÇÒ»¸öÆì±ê. Ó²¼þÖжϻúÖÆµÄ³öÏÖ, ÓÖʹ´¦ÀíÆ÷´Ó·±ÖصÄÍâÉè²Ù×÷Öеõ½½â·Å, ¿ÉÒÔ¸ü¶àµØ×÷ÓÃÓÚϵͳÖÐÔËÐеijÌÐò. µ«µ¥Ò»³ÌÐòÔÚÔËÐйý³ÌÖÐÈ´ºÜ¿ÉÄÜÍ£ÏÂÀ´µÈ´ýij¸öʼþµÄ·¢Éú, ÀýÈçµÈ´ýÍâÉèÍê³Éij¸ö²Ù×÷, µÈ´ýÓû§µÄÊäÈëÊý¾ÝµÈµÈ. ÕâÖֵȴýÖеĶԴ¦Àí»úµÄ¾Þ´óÀË·ÑÄÑÒÔÁîÈËÈÌÊÜ. ¶àµÀ³ÌÐòÉè¼Æ¼¼ÊõÓÐЧµÄ½â¾öÁËÕâ¸öÎÊÌâ. ¶àµÀ³ÌÐòÉè¼Æ¼¼ÊõµÄ»ù±¾Ë¼ÏëÊÇ: ¶à¸öÏ໥¶ÀÁ¢µÄ³ÌÐòÔÚÄÚ´æÖÐͬʱ´æ·Å, Ï໥´©²åÔËÐÐ, ºê¹Û²¢ÐÐ, ΢¹Û´®ÐÐ. ÄÇôÈçºÎ±£Ö¤¶à¸ö³ÌÐòÏ໥´©²åÔËÐÐʱÄÜÌåÏÖºê¹ÛÉϲ¢ÐеļÙÏàÄØ? Õâ¾ÍÐèÒª·Öʱ¼¼ÊõµÄÖ§³Ö. ·Öʱ¼¼Êõ: °Ñ´¦Àí»úʱ¼ä»®·Ö³ÉºÜ¶ÌµÄʱ¼äƬ, ʱ¼äƬÂÖÁ÷µØ·ÖÅ䏸¸÷¸ö³ÌÐò. ¶øÏµÍ³ÔÚʵÏÖ¶àµÀÔËÐеÄʱºòÓÖÔõôÀ´¶¨Òå¸÷¸öºê¹ÛÉϲ¢ÐеijÌÐòʵÌåÄØ? Óɴ˽ø³Ì±»ÒýÈëÁË.
  ½ø³Ì¶¨Òå¶àÖÖ¶àÑù, "½ø³ÌÊdzÌÐò»ùÓÚijһÊý¾Ý¼¯ºÏµÄÒ»´ÎÔËÐл" ÊÇÆäÖо­µäÇÒ±»¹ã·º½ÓÊܵÄÒ»ÖÖ.

1.2 ½ø³ÌʵÌå
  µÚ¶þ¸öÎÊÌâ: OK, ÏÖÔÚÓÐÁ˽ø³Ì, Äǽø³ÌÓÖÊÇÒ»¸öʲôÑùµÄʵÌå?
  Í¨¹ý¶Ô¶àµÀ³ÌÐòÉè¼Æ¼¼Êõ, ·Öʱ¼¼Êõ, ½ø³Ì¿®ÄîµÄÒ»´Î×ÜÌåºâÁ¿, µÃµ½ÕâÑùµÄ½áÂÛ:
  . ½ø³ÌÓÐÒ»¸öÖ÷Ìå--ÄÚ´æÖеijÌÐòºÍÊý¾Ý¼¯. ÄÚ´æÖеijÌÐòºÍÊý¾Ý¼¯±»³ÆÎª³ÌÐòµÄÄÚ´æÓ³Ïñ.
  . ½ø³ÌÊǻµÄ/¶¯Ì¬µÄʵÌå, ¾ßÓÐÉú´æÖÜÆÚ.
  . ½ø³Ì¾ßÓйØÁªµÄ´¦Àí»ú״̬Êý¾Ý. Ò»°ã±»³ÆÎª½ø³ÌµÄÉÏÏÂÎÄ.
  ÏÖÔÚ, ¼ÙÉèÄãÊÇϵͳÉè¼ÆÕß, ÄãÒѾ­ÔÚÄãÒªÉè¼ÆµÄϵͳÖÐÒýÈëÁ˽ø³Ì, ÄÇôÄã¿Ï¶¨ÐèÒªÉè¼ÆÏàÓ¦µÄÊý¾Ý½á¹¹À´¹ÜÀíϵͳÖеÄËùÓнø³Ì. ¶ÔÓ¦ÓÚÒ»¸ö½ø³ÌµÄÊý¾Ý½á¹¹¾ÍÊǽø³Ì¿ØÖÆ¿é, ËüÊÇϵͳÄÚºËÖнø³ÌµÄ±íʾ.
  ÓÐÁ˽ø³Ì¿ØÖÆ¿é, ¾Í¿ÉÒ԰ѽø³ÌµÄ״̬Êý¾Ý, ÉÏÏÂÎĵȵȶ¼·ÅÈë½ø³Ì¿ØÖÆ¿éÖÐ(ÒýÉêÒ»¾ä: ½ø³ÌµÄ״̬, ÉÏÏÂÎĵÈÊý¾Ý¼È¿ÉÒÔ¿´×÷½ø³ÌµÄÌØÕ÷Êý¾Ý, Ò²¿ÉÒÔ±»ÈÏΪÊǽø³Ì¹ÜÀíµÄÊý¾Ý, ÕâÊÇÒ»¸ö¿´ÎÊÌâ½Ç¶È²»Í¬¶ø²úÉúµÄ²îÒì), ÄÇôÏÖÔÚ½ø³Ì¾ÍÊÇÓÉÁ½²¿·Ö×é³É: ÄÚ´æÓ³ÏñºÍ½ø³Ì¿ØÖÆ¿é. ½ø³Ì¿ØÖÆ¿éÊÇϵͳÖÐ×îºËÐÄ, Ò²ÊÇ×ÔÓµÄÊý¾Ý½á¹¹, ²¢ÇÒËüÔÚ²»Í¬µÄϵͳÖвî±ðºÜ´ó, ºóÃæ»á±È½ÏÏêϸµÄ·ÖÎö½éÉÜWindowsϵͳµÄ½ø³Ì¿ØÖÆ¿é.

1.3 ¹Åµä½ø³Ì
  ¹Åµä½ø³ÌÊǰ³×Ô¼º·¢Ã÷µÄ³Æºô, Ö÷ÒªÕë¶ÔÇáÁ¿½ø³Ì/Ï̳߳öÏÖ֮ǰµÄ½ø³Ì. ¹Åµä½ø³Ì×î´óµÄÌØµãÊÇ: ËüÊÇ´¦Àí»ú×ÊÔ´·ÖÅäµÄ×îСµ¥Î».

1.4 ÇáÁ¿½ø³Ì (Lightweight Processes)
  ¹Åµä½ø³ÌÓм¸¸öºÜÖØ´óµÄȱÏÝ, ÆäÖÐÖ®Ò»ÊÇ´´½¨¿ªÏú. ½ø³ÌµÄ´´½¨¿ªÏú·Ö³ÉÁ½²¿·Ö:
  a. ½ø³Ì¿ØÖÆ¿éµÄ·ÖÅä, ³õʼ»¯.
  b. ÄÚ´æÓ³ÏñµÄ´´½¨Óë³õʼ»¯.(ÕâÀïΪÁ˼ò»¯, ¼ÙÉèûÓÐÐéÄâÄÚ´æÏµÍ³, Ò²ÔÝʱ²»¿¼Âǽø³ÌµÄµØÖ·¿Õ¼äÎÊÌâ)
  Ñ§Ï°¹ýUNIX²Ù×÷ϵͳԭÀíµÄÅóÓÑ¿ÉÄܼǵÃ, ÔÚUNIXϵͳÖÐ, µ÷ÓÃfork´´½¨Ò»¸öнø³Ìʱ, ϵͳ»áÓø¸½ø³ÌµÄÓ³Ïñ³õʼ»¯×Ó½ø³ÌµÄÓ³Ïñ, È»ºó×Ó½ø³Ì¿ÉÒÔµ÷ÓÃexec APIÀ´ÖØÐÂÌî³äËüµÄÓ³Ïñ. ´Ë¹ý³ÌºÄ·Ñ´óÁ¿µÄϵͳ×ÊÔ´, ÕâÖֺķѱíÏÖÔÚÁ½·½Ãæ: Ò»ÊÇͨ¹ý¿½±´¸¸½ø³ÌµÄÓ³Ïñ´´½¨×Ó½ø³ÌµÄÓ³Ïñ, ¶þÊÇ×Ó½ø³Ì¸ü¸Ä×Ô¼ºµÄÓ³Ïñ.
  ÓÉ´Ë, ÈËÃÇÌá³öÁËÇáÁ¿½ø³ÌÓÐʱÓÖ³ÆÏ˳̵Ŀ®Äî. ÔçÆÚµÄÇáÁ¿½ø³ÌºÍ½ø³Ì×î´óµÄ²»Í¬ÔÚÓÚ´´½¨ÇáÁ¿½ø³Ìʱ, ϵͳ²¢²»Óø¸½ø³ÌµÄÓ³Ïñ³õʼ»¯×Ó½ø³ÌµÄÓ³Ïñ, ¶øÊÇÒªÇ󸸽ø³ÌÔÚ´´½¨Ê±¾ÍÖ¸¶¨ËùÐèµÄÓ³Ïñ, È»ºóϵͳֱ½ÓʹÓÃÕâ¸öÓ³ÏñÀ´´´½¨×Ó½ø³Ì.
  ¹Åµä½ø³ÌµÄÁíÒ»¸öÖØ´óȱÏÝÊÇÊý¾Ý¹²Ïí. ¹Åµä½ø³ÌÖ®¼äµÄÊý¾Ý¹²ÏíÖ»ÄÜͨ¹ý½ø³Ì¼äͨѶÀ´Íê³É, ÔÚ´óÊý¾ÝÁ¿, ¶à½ø³Ì¹²ÏíʱЧÂÊÆ«µÍ. ¶øÇÒ, ½ø³ÌͨѶÐèÒª½ø³ÌÇл», Ò²ÊÇÒ»±Ê²»Ð¡µÄ¿ªÏú. Õâʱ¿ÉÒÔ¿´µ½, ÇáÁ¿½ø³ÌµÄ·¢Õ¹Ä¿±ê¾ÍÊÇÄÜ´òÆÆ½ø³ÌµÄ±ß½ç, ¹²ÏíËüÃǵÄÊý¾Ý, Õâ²»¾ÍÊÇÏß³Ì?

1.5 Ïß³Ì
  a. Ï̵߳ijöÏÖ
  »Ø´ðÉÏÃæµÄÎÊÌâ: ÇáÁ¿½ø³Ì»¹²»ÊÇÏß³Ì. Ï̵߳ijöÏÖ±êÖ¾×ÅϵͳÖÐÒ»¸öеÄʵÌåµÄ³öÏÖ(ÕâÊÇÇáÁ¿½ø³ÌËù²»¾ß±¸µÄ, ÇáÁ¿½ø³ÌÈÔÈ»Êǽø³Ì), ͬʱÏß³ÌʵÌåµÄ³öÏÖʹ½ø³ÌʵÌåµÄº¬Òå·¢ÉúÁËÖØ´ó¸Ä±ä, ÊdzÌÐòÉè¼ÆÁìÓòµÄÒ»´Î¸ïÃüÐԱ仯.
  °³µÄ¹Ûµã: ½ø³ÌÊÇÏà¶Ô¶ÀÁ¢³ÌÐò¼äµÄ¶àµÀ²¢·¢è¼Æ¼¼Ê? Ïß³ÌÊǶÀÁ¢³ÌÐòÄÚ²¿µÄ¶àµÀ²¢·¢Éè¼Æ¼¼Êõ. Ï̼߳¼ÊõµÄ³öÏÖÊÇʵÏÖ¶ÀÁ¢³ÌÐòÄÚ²¿¶àµÀ²¢·¢ÐèÇóµÄ½á¹û.
  b. Ïß³ÌʵÌå
  Ì¨ÍåÒë"Thread"ΪִÐÐÐ÷, Ö´ÐÐÐ÷µÄÒâ˼¾ÍÊÇÒ»ÌõÖ´ÐÐÏß·, ºÍ·­ÒëΪÏß³ÌÊâ;ͬ¹é. ´Ó½á¹¹»¯³ÌÐòÉè¼ÆµÄ¹ÛµãÀ´¿´(¾¡¹ÜÏÖ´úµÄ²Ù×÷ϵͳÖгöÏÖÁËÔ½À´Ô½¶à»ùÓÚ¶ÔÏóµÄÌØÕ÷, µ«ÏµÍ³±¾ÖÊÉÏÈÔÊǽṹ»¯µÄ, ËùÓлùÓÚ¶ÔÏóµÄÌØÕ÷¶¼ÊÇϵͳ¸ß²ãµÄÒ»ÖÖ·â×°±íÏÖ), ³ÌÐòÊÇÒ»¸ö´úÂëÊ÷, Ï̵߳ÄÖ÷Ìå¾ÍÊÇ´úÂëÊ÷ÉϵÄÒ»Ìõ·¾¶, Êǽø³ÌÖ÷Ìå(½ø³ÌµÄÄÚ´æÓ³Ïñ)µÄÒ»¸ö×Ó¼¯. Ïß³ÌÈ¡´úÁ˽ø³Ì³ÉΪ´¦Àí»ú·ÖÅäµÄ×îСµ¥Î», ËùÒÔËüÓÐÉÏÏÂÎĺÍ״̬.

2. WindowsµÄ½ø³ÌºÍÏß³Ì
2.1 WIndows½ø³ÌºÍÏ̶߳¨Òå
  °´ÕÕMSµÄ¶¨Òå, WindowsÖеĽø³Ì¼òµ¥µØËµ¾ÍÊÇÒ»¸öÄÚ´æÖеĿÉÖ´ÐгÌÐò, Ìṩ³ÌÐòÔËÐеĸ÷ÖÖ×ÊÔ´. ½ø³ÌÓµÓÐÐéÄâµÄµØÖ·¿Õ¼ä, ¿ÉÖ´ÐдúÂë, Êý¾Ý, ¶ÔÏó¾ä±ú¼¯, »·¾³±äÁ¿, »ù´¡ÓÅÏȼ¶, ÒÔ¼°×î´ó×îС¹¤×÷¼¯.
  WindowsÖеÄÏß³ÌÊÇϵͳ´¦Àí»úµ÷¶ÈµÄ»ù±¾µ¥Î». Ï߳̿ÉÒÔÖ´Ðнø³ÌÖеÄÈÎÒâ´úÂë, °üÀ¨ÕýÔÚ±»ÆäËûÏß³ÌÖ´ÐеĴúÂë. ½ø³ÌÖеÄËùÓÐÏ̹߳²Ïí½ø³ÌµÄÐéÄâµØÖ·¿Õ¼äºÍϵͳ×ÊÔ´. ÿ¸öÏß³ÌÓµÓÐ×Ô¼ºµÄÀýÍâ´¦Àí¹ý³Ì, Ò»¸öµ÷¶ÈÓÅÏȼ¶ÒÔ¼°Ïß³ÌÉÏÏÂÎÄÊý¾Ý½á¹¹. Ïß³ÌÉÏÏÂÎÄÊý¾Ý½á¹¹°üº¬¼Ä´æÆ÷Öµ, ºËÐĶÑÕ», Óû§¶ÑÕ»ºÍÏ̻߳·¾³¿é.

2.2 ½ø³ÌµÄÐéÄâµØÖ·¿Õ¼ä
  Ê×ÏÈ¿ÉÒÔ°Ñ"ÐéÄâ"Õâ¸ö´ÊÄõô, ¶ÔÓÚ¼ò»¯½ø³ÌÄ£ÐÍÓкܴó°ïÖú(µ±¶Ô½ø³Ì/Ï̺߳ÍÐéÄâÄڴ沿·Ö¶¼³ä·ÖÀí½âºó, ÄÇʱ½áºÏÆðÀ´ÔÙ¿¼Á¿»áÓиüÉî³Ì¶ÈµÄÕÆÎÕ).
  µØÖ·¿Õ¼ä¾ÍÊÇϵͳ¸øÓè½ø³ÌµÄ, ½ø³ÌÄÚÈκοÉÖ´ÐдúÂë¶¼¿ÉÒÔ¸ÐÖªµÄÄÚ´æÇøÓò.(×¢Òâ, ÕâÀïÓÃÁË"¸ÐÖª"Ò»´Ê¶ø²»ÊÇ·ÃÎÊ, ÆäÖеÄÔ­Òò¿ÉÒÔÔÚºóÃæ½²½âÖÐÕÒµ½)  
  ÎÊÌâ: µØÖ·¿Õ¼äÓжà´ó? »ùµØÖ·ºÍ×î´óµØÖ·ÊÇʲô?
  ÏµÍ³Ñ°Ö·ÄÜÁ¦¾ö¶¨Á˵ØÖ·¿Õ¼äµÄ´óС. Ö÷Á÷µÄWindowsϵͳÊÇ32λϵͳ, ѰַÄÜÁ¦ÊÇ32λ(ÐÎÏóµÄ˵¾ÍÊÇÖ¸ÕëÊÇ32λµÄ), ËùÒÔµØÖ·¿Õ¼äµÄ´óСÊÇ4GB. µØÖ·¿Õ¼äµÄ»ùµØÖ·Îª0x00000000, ×î´óµØÖ·ÊÇ0xFFFFFFFF. 4GBµÄµØÖ·¿Õ¼ä±»»®·ÖΪ2¸ö´óµÄÄÚ´æÇøÓò, Óû§ÇøºÍÏµÍ³Çø.
  ÎÊÌâ: ΪʲôҪÓÐÏµÍ³Çø?
  Òª»Ø´ðÕâ¸öÎÊÌâ¾Í±ØÐèÀí½âÒ»¸öÈÝÒ×±»ºöÊÓ¶øÓÖ¼«¶ËÖØÒªµÄ¸ÅÄî: ²Ù×÷ϵͳÊǽø³ÌµÄÒ»²¿·Ö! °³×îÔçÅöµ½Õâ¸ö¹ÛµãÊÇÔÚѧϰBELL UNIX VϵͳÅàѵ×ÊÁÏʱ(ÊéµÄ×÷ÕßÊÇBELLʵÑéÊÒµÄÖ÷ÈÎ, Ãû×ÖÍü¼ÇÁË, ºóÀ´Ò»Ö±Ò²Ã»ÓÐÔÙÕÒµ½Õâ±¾Êé, ¿Éϧ). µ±Ê±¸Ðµ½ÌرðµÄÒÉ»ó, Ò»·½ÃæµÄÔ­ÒòÊǵ±Ê±¶Ô²Ù×÷ϵͳµÄÁ˽âÊÇÒ»¸öÆ¬ÃæµÄ, ÏÁÒåµÄÀí½â, ÁíÒ»·½Ãæ¾ÍÊDZ»²Ù×÷ϵͳµÄ¸´ÔÓÐÔŪ»èÁËÍ·ÄÔ, ·´¶øºöÊÓÁËһЩ»ù±¾µÄÀíÄîºÍÔ­Ôò. ÓÚÊÇ, °³¸ø×Ô¼ºÌáÁ˼¸¸öÎÊÌâ: ²Ù×÷ϵͳÔÚÔËÐÐʱ´æ·ÅÔÚÄÚ´æµÄÄÇÀï? ΪʲôҪÕâô´æ·Å? ͨ¹ýÔĶÁ²Ù×÷ϵͳµÄ×ÊÁÏ, °³·¢ÏÖϵͳʵ¼ÊÉϱ»´æ·ÅÔÚ½ø³ÌµÄµØÖ·¿Õ¼äµÄÒ»¿éÇøÓòÖÐ! ΪʲôҪÕâÑù´æ·Å, ÒÔÏÂÊǰ³¸öÈ˵Ĺ۵ã:
  1) ²Ù×÷ϵͳµÄÒ»¸ö»ù±¾Ä¿µÄ¾ÍÊǰѳÌÐò´ÓÀàËÆÓÚ´ò¿ªÎļþ, ¶ÁÈ¡Óû§ÊäÈëµÈµÈÕâÑùµÄ·³ËöµÄ, ͨÓÃÐԵIJÙ×÷ÖнâÍѳöÀ´, ²Ù×÷ϵͳÌṩÁ˺ܶà·þÎñÀý³ÌÀ´Íê³ÉÕâЩ²Ù×÷. ²»¿¼ÂÇϵͳµÄ¹ÜÀí¹¦ÄܵÄÇé¿öÏÂ, ²Ù×÷ϵͳ¾ÍÊÇ·þÎñÀý³ÌµÄÒ»¸ö¼¯ºÏ. ¶ø·þÎñÀý³Ì´ÓÂß¼­ÉÏ, ´Ó±¾ÖÊÉÏ¿´, ¾ÍÊdzÌÐò\½ø³ÌµÄÒ»²¿·Ö.
  2) ¹ÜÀíÀý³Ì´ÓÂß¼­ÉÏÀ´ËµÒ²ÊdzÌÐò\½ø³ÌµÄÒ»²¿·Ö, Ëüʵ¼ÊÉÏÊÇϵͳ´úÌæ³ÌÐò\½ø³ÌÀ´Íê³ÉÕâÑùµÄÒ»¸ö¹¤×÷: ÔÚ¶à¸ö³ÌÐò\½ø³Ì¼ä, ÒÀÕÕÒ»¶¨µÄ²ßÂÔ, Эµ÷¸÷ÖÖ×ÊÔ´µÄ·ÖÅä, ʹÓÃ.(´ó¼ÒÐèÒªÃ÷°×´¦Àí»úÒ²ÊÇÒ»ÖÖϵͳ×ÊÔ´, Ö»²»¹ýËüÊÇÌØ±ðÖØÒªµÄÒ»ÖÖ×ÊÔ´, ¶øÇÒÓÐÒ»¶¨µÄÌØÊâÐÔ)
  3) Èç¹û²Ù×÷ϵͳµÄ¹ÜÀíÀý³ÌÔÚÒ»¸ö¶ÀÁ¢µÄ½ø³ÌÖÐ, ÄÇôÿ´Îµ÷ÓùÜÀíÀý³Ì¾ÍÐèÒªÒ»´Î½ø³ÌÇл», ÕâÖÖ¿ªÏúÊÇÎÞ·¨³ÐÊܵÄ. ¶øÇÒÕâʱ¹ÜÀíÀý³ÌºÍµ÷ÓÃÕßµÄͨѶÊÇ¿çÔ½½ø³Ì±ß½çµÄ, ¿ªÏúÒ²ºÜ´ó.
  OK, ÏÖÔÚ´ó¼ÒÃ÷°×ÁËÔÚ½ø³ÌµÄµØÖ·¿Õ¼äÖÐÐèÒª±£ÁôÒ»²¿·ÖÇøÓò¸ø×¤ÁôµÄ²Ù×÷ϵͳ, ÄÇô°ÑµØÖ·¿Õ¼ä»®·ÖΪÓû§ÇøºÍÏµÍ³ÇøÒ²¾ÍÊÇ×ÔÈ»¶øÈ»µÄ×ö·¨À². ÏÖ´ú²Ù×÷ϵͳÉϵÄϵͳ·ÖÇøÒ»°ã¶¼ÊDZ»±£»¤µÄ, Õâ¾ÍÊǰ³ÔÚ¶¨Ò嵨ַ¿Õ¼äʱʹÓøÐÖª¶ø²»ÊÇ·ÃÎʵÄÔ­Òò.
  Êµ¼ÊÉÏ, WIndowsµÄ¸÷¸ö°æ±¾µÄ·ÖÇøÇé¿öÒ²ÊǸ÷²»ÏàͬµÄ, 9xºÍNTÓкܴóµÄ²îÒì, ¶øÇÒ²»ÊǼòµ¥µÄ·ÖΪÓû§ÇøºÍÏµÍ³Çø, »¹ÓÐÀàËÆÓÚNULLÖ¸ÕëÇø, ϵͳԽ½ç±£»¤ÇøµÈµÈ. Õⲿ·Ö´ó¼Ò¿ÉÒԲο¼RichterµÄ<>, ÊéÀï½²µÄÏ൱ÏêϸºÍÑϽ÷.
  µØÖ·¿Õ¼äÊÇϵͳÖÐÏàµ±ÖØÒªµÄ¿®Äî, µ±Äã¶Ô½ø³Ì/Ï̹߳ÜÀí, ÐéÄâÄÚ´æ»úÖÆÓÐÉîÈëÁ˽âʱ, Äã»á·¢ÏÖµØÖ·¿Õ¼äÃèÊöÁ˽ø³ÌÔËÐÐʱÄÚ´æµÄ·Ö²¼ºÍ¹¹Ôì, ½ÒʾÁËϵͳÔË×÷ÖÐÓû§Ä£¿éºÍϵͳģ¿éµÄ¾²Ì¬ÊÓͼ.

2.3 ½ø³ÌºÍÏ̵߳ĹØÏµ -- ½ø³ÌÊÇÈÝÆ÷?
  Ã¿¸öwindows½ø³Ì¿ªÊ¼ÓÚËüµÄ±»Ä¬ÈÏ´´½¨µÄµÚÒ»¸öÏß³Ì, ͨ³£³ÆÆäΪÖ÷Ïß³Ì. ÕâÖÖ»úÖÆ°µÊ¾ÁËÒ»¸öÊÂʵ: ½ø³Ìº¬ÓÐÖÁÉÙÒ»¸öÏß³Ì. Ö÷Ïß³ÌºÍÆäËüµÄÏß³ÌûÓÐÈκÎÇø±ð, ÿ¸öÏ̶߳¼¿ÉÒÔ´´½¨ÐµÄÏß³Ì. ½ø³ÌÖÐËùÓÐÏ̶߳¼½áÊøÊ±½ø³Ì»á×Ô¶¯±»½áÊø, ¶øÖ÷¶¯½áÊø½ø³Ìʱ, Èç¹û»¹ÓÐÏß³ÌûÍê³É, Ôòϵͳ×Ô¶¯½áÊøÕâЩÏß³Ì.
  ÔÚwindowsÖÐ, ½ø³Ì²»ÔÙÊÇ´¦Àí»ú×ÊÔ´·ÖÅäµÄ×îСµ¥Î», ÄÇôËü»¹ÊÇÒ»¸ö¶¯Ì¬µÄʵÌåÂð? ÊǵÄ, ´Ó¶à½ø³Ì²¢·¢µÄ½Ç¶ÈÀ´¿´, ½ø³ÌÈÔÈ»ÊÇÒ»¸ö¶¯Ì¬µÄʵÌå, µ«ËüµÄ¶¯Ì¬ÊÇËüµÄÏ̵߳Ķ¯Ì¬ÌØÕ÷µÄ³éÏó. ¾Ù¸öÀý×Ó, Ò»¸ö½ø³Ìº¬ÓÐ3¸öÏß³Ì, ÄÇôµ±3¸öÏ̶߳¼×èÈûʱ, ½ø³Ì±íÏÖΪ×èÈû. µ«Ö»ÒªÓÐÒ»¸öÏß³ÌÊǾÍÐ÷̬, ÄÄÅÂÆäËü2¸öÏß³ÌÊÇ×èÈû̬, ½ø³ÌÈÔÈ»±íÏÖΪ¾ÍÐ÷.
  ´ÓÏ̵߳ĽǶȿ´, ½ø³Ì±íÏֵĸüÏñÒ»¸öÈÝÆ÷, Ëü´ú±íÏ߳̽ÓÊÜ·ÖÅäµ½µÄ×ÊÔ´(³ý´¦Àí»ú×ÊÔ´), ΪÏß³ÌÌṩÖ÷Ìå(Ö´ÐдúÂë+Êý¾Ý), ×Ô¼ºÈ´Ã»ÓÐÔËÐеĸÅÄî. ´Ëʱ, ½ø³ÌÊǾ²Ì¬µÄʵÌå.

2.4 ETHREAD(KTHREAD), EPROCESS(KPROCESS)
  OK, ×ìÆ¤×ÓÁ·ÁËÕâô¶à(˵µÄ¶¼¸ÉÁË), ×ÜÒª¸ãµãʵ¼ÊµÄ´úÂëÍæÍæ, ÀÏ»¢²»·¢Íþ, ²»Äܵ±°³ÊDz¡Ã¨Âï.
  WindowsÖеĽø³Ì¿ØÖÆ¿éÊÇEPROCESS½á¹¹, Ï߳̿ØÖÆ¿éÊÇETHREAD½á¹¹. EPROCESS/ETHREADµÄ¶¨ÒåÔÚinside windows2000ÖÐÓбȽÏÏêϸµÄÃèÊö, ´ó¼Ò¿ÉÒԲο¼. ÕâÀï°³Äܸø³öµÄһЩѧϰÐĵÃÊÇ:
  1) ÔÚDave Probert(ÕâλÀÏ´óÊÇMS WindowsºËÐÄÄ£¿é×éµÄÅ£ÈË)µÄÑݽ²¸åÖÐÌá¼°µÄÒ»¾ä: "Kernel implementation organized around the object manager". ·­Òë¹ýÀ´¾ÍÊÇ"ºËÐÄÊÇÎ§ÈÆ¶ÔÏó¹ÜÀíÀ´ÊµÏÖµÄ". °³¾õµÃÕâÊÇÒ»¸öºÜÖØÒªµÄ·ÖÎöWIndowsºËÐĵÄÊÓ½Ç, ¶øÇÒËÆºõMSÔÚ»ý¼«µÄ̽Ë÷Äں˼¶µÄÃæÏò¶ÔÏóʵÏÖ(µ±È»MSÒª×öµ½ÕâÒ»µãºÜ²»ÈÝÒ×, ¼æÈÝÐÔÊǺܴóµÄÎÊÌâ).

  2) °³Ò»Ö±Ã»ÓÐŪµÄÌØ±ðÃ÷°×µÄÊÇ, ΪʲôҪÓÐKTHREAD, KPROCESS½á¹¹, ˵ʵ»°, KTHREAD¾ÍÊÇETHREADµÄÍ·, KPROCESS¾ÍÊÇEPROCESSµÄÍ·. °³¸Ð¾õ×î¿ÉÄܵĽâÊÍÊÇ: ´æÔÚºËÐÄÏß³ÌÕâÑùµÄ¶ÔÏó, ¶øºËÐÄÏ̵߳ÄÈÝÆ÷¾ÍÊǺËÐĽø³Ì, ºËÐÄÏß³ÌÓëÓû§Ïß³ÌÊÇÒ»Ò»¶ÔÓ¦¹ØÏµ. µ«´Óϵͳ½á¹¹ºÍºËÐĵ÷ÊÔ½á¹ûÀ´¿´, ËÆºõ²»´æÔÚ¶ÀÁ¢µÄºËÐÄÏ̵߳ĸÅÄî, Ö»ÓÐÏ߳̾­ÓÉϵͳÏÝÈ뷽ʽ½øÈëºËÐÄ̬. ÏÂÃæµÄÒ»¶Î´úÂëÑéÖ¤Á˰³µÄ¹Ûµã, ÓÐÒâ˼µÄµØ·½°³ÔÚ´úÂëÖÐ×öÁË×¢ÊÍ.

...
  pProc = IoGetCurrentProcess();

  // ºÜÓÐÒâ˼, PEPROCESS->hreadListHeadÊǸö¿ÕÁ´±í
  pNext = pProc->ThreadListHead.Flink;
  DbgPrint("pProc->ThreadListHead.Flink = %p \n", pProc->ThreadListHead.Flink);
  DbgPrint("pProc->ThreadListHead.Blink = %p \n", pProc->ThreadListHead.Blink);

  pKProc = (PKPROCESS) pProc;
  pNext = pKProc->ThreadListHead.Flink;
  DbgPrint("kernel thread list begin \n";
  do
  {
    DbgPrint("pNext = %p \n", pNext);
    DbgPrint("thread: \n", pNext);
    pKThread = (PKTHREAD) (CONTAINING_RECORD(pNext, KTHREAD, ThreadListEntry));
    DbgPrint("pKThread = %p \n", pKThread);
    DbgPrint("pKThread->Teb = %p , %s \n", pKThread->Teb, pKThread->Teb == NULL || pKThread->Teb > 0x80000000 ? "System Thread" : "Non System Thread";
    //PTHREAD Ö¸ÕëÐèÒª´ÓÕâÀï»ñµÃ
    pThread = (PETHREAD) pKThread;
    DbgPrint("pThread->Cid = %d \n", pThread->Cid);
    nCount ++;
    pNext = pNext->Flink;  
  }while(pNext != &(pKProc->ThreadListHead));
  DbgPrint("kernel thread total count %d \n", nCount);
...

pProc->ThreadListHead.Flink = 00000000
pProc->ThreadListHead.Blink = 00000000
kernel thread list begin
pNext = FFB6B2E8
thread:
pKThread = FFB6B138
pKThread->Teb = 7FFDF000 , Non System Thread
pThread->Cid = 2000
pNext = 80CCB500
thread:
pKThread = 80CCB350
pKThread->Teb = 00000000 , System Thread
pThread->Cid = 960
kernel thread total count 2

  3) ²¹³äÒ»µã, »¹ÓÐÒ»ÖÖÏ̱߳»³ÆÎªÏµÍ³Ïß³Ì(system thread). Ò»¸öϵͳÏß³ÌÖ»ÔËÐÐÔÚϵͳµØÖ·¿Õ¼äÖÐ, ËùÒÔËüµÄTEBÖ»ÄÜÊÇNULL»ò´óÓÚ0x80000000(Æäʵд0x80000000ÊDz»ÑϽ÷µÄ, ÒòΪÕâ¼ÙÉèÁËϵͳÊÇλÓÚ0x80000000Ö®ÉÏ, ʵ¼ÊÉÏϵͳ¿ÉÄÜÖ»Õ¼ÓÃ×î¸ßµÄ1GB). ËùÓеĺËÐÄÇý¶¯³ÌÐòÔËÐÐÔÚϵͳÏß³ÌÖÐ.

2.4 ½ø³ÌÁ´±í
  1) WindowsµÄ½ø³ÌÁ´±íÊÇÒ»¸öË«Ïò»·Á´±í
    Õâ¸ö»·Á´±íLIST_ENTRY½á¹¹°Ñÿ¸öEPROCESSÁ´½ÓÆðÀ´. ÄÇôֻҪÕÒµ½Ò»¸öEPROCESS½á¹¹, ÎÒÃǾͿÉÒÔ±éÀúÕû¸öÁ´±í, Õâ¾ÍÊÇö¾Ù½ø³ÌµÄÔ­Àí. ÏÂÃæÊÇʾÀý´úÂë¶ÎºÍÔËÐнá¹û:

...
  pProc = IoGetCurrentProcess();
  pNext = pFirst = pProc->ActiveProcessLinks.Flink;
  DbgPrint("Process enumerate begin: \n", pNext);
  do
  {
    nCount ++;
    pProc = (PEPROCESS) (CONTAINING_RECORD(pNext, EPROCESS, ActiveProcessLinks));
    DbgPrint("--- process %d --- \n", nCount);
    DbgPrint("process id: %d \n", pProc->UniqueProcessId);
    DbgPrint("process image file: %s \n", pProc->ImageFileName);
    pNext = pNext->Flink;
    DbgPrint("\n";
   
  } while(pNext != pFirst);
  DbgPrint("proces total count %d \n", nCount);
  DbgPrint("Process enumerate end \n";
...

Process enumerate begin:
--- process 1 ---
process id: 2044
process image file: Dbgview.exe

--- process 2 ---
process id: 1092
process image file: drvContainer.ex

--- process 3 ---
process id: -2141872512
process image file:  

--- process 4 ---
process id: 4
process image file: System

--- process 5 ---
process id: 368
process image file: smss.exe

--- process 6 ---
process id: 568
process image file: csrss.exe

--- process 7 ---
process id: 596
process image file: winlogon.exe

--- process 8 ---
process id: 656
process image file: services.exe

--- process 9 ---
process id: 668
process image file: lsass.exe

--- process 10 ---
process id: 860
process image file: svchost.exe

--- process 11 ---
process id: 932
process image file: svchost.exe

--- process 12 ---
process id: 1020
process image file: svchost.exe

--- process 13 ---
process id: 1136
process image file: svchost.exe

--- process 14 ---
process id: 1192
process image file: svchost.exe

--- process 15 ---
process id: 1364
process image file: spoolsv.exe

--- process 16 ---
process id: 1668
process image file: VMwareService.e

--- process 17 ---
process id: 1908
process image file: alg.exe

--- process 18 ---
process id: 236
process image file: explorer.exe

--- process 19 ---
process id: 544
process image file: VMwareTray.exe

--- process 20 ---
process id: 572
process image file: VMwareUser.exe

--- process 21 ---
process id: 616
process image file: ctfmon.exe

--- process 22 ---
process id: 1180
process image file: wuauclt.exe

proces total count 22
Process enumerate end

  2) ´Ó½ø³ÌÁ´±íÖÐÒÆ³ý½ø³Ì¿é
  Õâ¸ö²Ù×÷±È½Ï¼òµ¥, Ŀǰ¿´ÆðÀ´Ò²²»»á¸øÏµÍ³Ôì³É´óµÄÓ°Ïì, µ«ÒÔºó»á²»»á³öÎÊÌâ˭Ҳ˵²»¶¨. ´Ó½ø³ÌÁ´±íÖÐÒÆ³ýÌØ¶¨½ø³Ì¿éºó, ¸Ã½ø³ÌÈÔÄܼÌÐøÔËÐеÄÔ­ÒòÊÇ: ϵͳ²¢²»Ê¹Óýø³ÌÁ´±í×÷Ϊµ÷¶ÈµÄ²éÕÒÆðʼµã, ¸Ã½ø³ÌµÄÏ߳̿ØÖÆÈÔÈ»´æÔÚÓÚµ÷¶ÈÁ´±íÖÐ. ÏÂÃæÊÇʾÀý´úÂë(´úÂëÖÐûÓмÓÈëͬ²½±£»¤µÈÄÚÈÝ, ÊǼò»¯°æµÄ, ʵ¼ÊÓ¦ÓÃʱ²»ÄÜÈç´Ë¼òµ¥, ·ñÔò¿ÉÄÜ·¢Éú²»¿ÉÔ¤²âµÄ´íÎóµ¼ÖÂϵͳ±ÀÀ£):
...
  pProc = IoGetCurrentProcess();
  pNext = pFirst = pProc->ActiveProcessLinks.Flink;
  do
  {
    pProc = (PEPROCESS) (CONTAINING_RECORD(pNext, EPROCESS, ActiveProcessLinks));
    if (pProc->UniqueProcessId == (HANDLE) TargetProcId)
    {
      pProc->ActiveProcessLinks.Flink->Blink = pProc->ActiveProcessLinks.Blink;
      pProc->ActiveProcessLinks.Blink->Flink = pProc->ActiveProcessLinks.Flink;
      break;
    }
    pNext = pNext->Flink;
   
  } while(pNext != pFirst);
...
  ÓÐÒâ˼µÄÊÇ, ´Ó½ø³ÌÁ´±íÖÐÒÆ³ý½ø³Ì¿éµÄÒ»¸ö¸±×÷ÓÃÊÇϵͳû·¨ÔÙö¾Ùµ½Õâ¸ö½ø³Ì.
Ô­Îijö´¦£ºhttp://bbs.pediy.com/showthread. ... &threadid=28100

[ Last edited by »ÃÓ°ÎÞºÛ on 2006-10-18 at 07:57 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

yalefield

½ð³æ (ÎÄ̳¾«Ó¢)

ÀϺºÒ»Ã¶

0.5

ÓÐÔ­ÔòÐÔ´íÎóÂð£¿
4Â¥2006-12-29 12:18:51
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
²é¿´È«²¿ 6 ¸ö»Ø´ð

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

ÒýÓûØÌû:
Originally posted by yalefield at 2006-12-29 12:18:
ÓÐÔ­ÔòÐÔ´íÎóÂð£¿

ÇëÖ¸½Ì
5Â¥2006-12-29 22:39:19
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á£¬Çóµ¼Ê¦ÊÕ +6 ÌìÌìºÃÔËÀ´Éϰ¶° 2026-03-24 6/300 2026-03-24 17:19 by dick_runner
[¿¼ÑÐ] 070300»¯Ñ§Çóµ÷¼Á +9 Ô·¶¹¶¹ 2026-03-20 9/450 2026-03-24 17:15 by licg0208
[¿¼ÑÐ] 307Çóµ÷¼Á +5 ³¬¼¶ÒÁ°º´óÍõ 2026-03-24 5/250 2026-03-24 15:46 by ÐÇ¿ÕÐÇÔÂ
[¿¼ÑÐ] 321Çóµ÷¼Á +4 Ymlll 2026-03-24 4/200 2026-03-24 14:44 by sprinining
[¿¼ÑÐ] ÉúÎïѧѧ˶Çóµ÷¼Á +6 СÑò˯×ÅÁË? 2026-03-23 6/300 2026-03-24 13:22 by Àî³£°²
[¿¼ÑÐ] 344Çóµ÷¼Á +3 desto 2026-03-24 3/150 2026-03-24 10:09 by ²«»÷518
[¿¼ÑÐ] 284Çóµ÷¼Á +3 yanzhixue111 2026-03-23 6/300 2026-03-23 22:58 by pswait
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖØÇì´óѧ085700×ÊÔ´Óë»·¾³£¬×Ü·Ö308Çóµ÷¼Á +7 īīĮ 2026-03-23 8/400 2026-03-23 20:36 by Creta
[¿¼ÑÐ] Ò»Ö¾Ô¸ÎäÀí²ÄÁϹ¤³Ì348Çóµ÷¼Á +6 £þ^£þ©bº¹ 2026-03-19 9/450 2026-03-23 19:53 by pswait
[¿¼ÑÐ] Ò»Ö¾Ô¸ÉϺ£½»´óÉúÎïÓëҽҩר˶324·Ö£¬Çóµ÷¼Á +5 jiajunX 2026-03-22 5/250 2026-03-23 18:07 by YMUÊ©ÀÏʦ
[¿¼ÑÐ] Çóµ÷¼Á²ÄÁÏѧ˶080500£¬×Ü·Ö289·Ö 5+3 @taotao 2026-03-19 21/1050 2026-03-23 10:17 by ¹Úc¸ç
[¿¼ÑÐ] 287Çóµ÷¼Á +8 ³¿»èÏßÓëÐǺ£ 2026-03-19 9/450 2026-03-22 17:01 by i_cooler
[¿¼ÑÐ] Ò»Ö¾Ô¸ Î÷±±´óѧ £¬070300»¯Ñ§Ñ§Ë¶£¬×Ü·Ö287£¬Ë«·ÇÒ»±¾£¬Çóµ÷¼Á¡£ +3 ³¿»èÏßÓëÐǺ£ 2026-03-20 3/150 2026-03-22 16:00 by ColorlessPI
[¿¼ÑÐ] »¯Ñ§µ÷¼Á +5 yzysaa 2026-03-21 5/250 2026-03-21 22:12 by peike
[¿¼ÑÐ] Ò»Ö¾Ô¸¶«»ª´óѧ¿ØÖÆÑ§Ë¶320Çóµ÷¼Á +3 Grand777 2026-03-21 3/150 2026-03-21 19:23 by ¼òÖ®-
[¿¼ÑÐ] 296Çóµ÷¼Á +4 www_q 2026-03-20 4/200 2026-03-21 17:26 by ѧԱ8dgXkO
[»ù½ðÉêÇë] ѧУÒѾ­Ìá½»µ½NSFC£¬»¹ÄÜÐÞ¸ÄÂ𣿠40+4 babangida 2026-03-19 9/450 2026-03-21 16:12 by babangida
[¿¼ÑÐ] 329Çóµ÷¼Á +9 ÏëÉÏѧ߹߹ 2026-03-19 9/450 2026-03-20 22:01 by luoyongfeng
[¿¼ÑÐ] 261ÇóBÇøµ÷¼Á£¬¿ÆÑо­Àú·á¸» +3 Å£Ä̺Üæ 2026-03-20 4/200 2026-03-20 19:34 by JourneyLucky
[¿¼ÑÐ] ÕÐÊÕµ÷¼Á˶ʿ +4 lidianxing 2026-03-19 12/600 2026-03-20 12:25 by lidianxing
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û