| ²é¿´: 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 ] |
» ²ÂÄãϲ»¶
340Çóµ÷¼Á
ÒѾÓÐ3È˻ظ´
²ÄÁÏר˶ÕÒµ÷¼Á
ÒѾÓÐ4È˻ظ´
0854µç×ÓÐÅÏ¢Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
0805 316Çóµ÷¼Á
ÒѾÓÐ4È˻ظ´
0854 ¿¼Ñе÷¼Á ÕÐÉúÁË£¡AI ·½Ïò
ÒѾÓÐ17È˻ظ´
¡¾¿¼Ñе÷¼Á¡¿»¯Ñ§×¨Òµ 281·Ö£¬Ò»Ö¾Ô¸ËÄ´¨´óѧ£¬³ÏÐÄÇóµ÷¼Á
ÒѾÓÐ15È˻ظ´
×ÊÔ´Óë»·¾³ µ÷¼ÁÉêÇë(333·Ö)
ÒѾÓÐ7È˻ظ´
306Çó0703µ÷¼ÁÒ»Ö¾Ô¸»ªÖÐʦ·¶
ÒѾÓÐ11È˻ظ´
0703»¯Ñ§µ÷¼Á£¬Çóµ¼Ê¦ÊÕ
ÒѾÓÐ6È˻ظ´
Çóµ÷¼Á
ÒѾÓÐ5È˻ظ´
yalefield
½ð³æ (ÎÄ̳¾«Ó¢)
ÀϺºÒ»Ã¶
- Ó¦Öú: 129 (¸ßÖÐÉú)
- ¹ó±ö: 0.17
- ½ð±Ò: 21238.9
- É¢½ð: 3440
- ºì»¨: 66
- Ìû×Ó: 12101
- ÔÚÏß: 759.1Сʱ
- ³æºÅ: 96063
- ×¢²á: 2005-10-07
- רҵ: ¸ßµÈ½ÌÓýѧ
- ¹ÜϽ: ¼ÆËãÄ£Äâ
4Â¥2006-12-29 12:18:51
sdlj8051
½ð³æ (ÖøÃûдÊÖ)
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ¹ó±ö: 0.1
- ½ð±Ò: 1149.8
- ºì»¨: 3
- Ìû×Ó: 2254
- ÔÚÏß: 18.1Сʱ
- ³æºÅ: 71297
- ×¢²á: 2005-05-30
- רҵ: µç·Óëϵͳ
5Â¥2006-12-29 22:39:19













;
»Ø¸´´ËÂ¥
5