Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
LinuxϵÄLWP£¨ÇáÁ¿¼¶½ø³Ì£©¡¢½ø³Ì ¡¢ Ï̡߳¢Óû§¼¶Ï̡߳¢ÄÚºËÏß³Ì
 
 
  4371  次浏览      28
 2020-11-24 
 
±à¼­ÍƼö:

±¾ÎÄÖ÷Òª½²½âÁËLinuxϵÄLWP£¨ÇáÁ¿¼¶½ø³Ì£©¡¢½ø³Ì ¡¢ Ï̡߳¢Óû§¼¶Ï̡߳¢ÄÚºËÏ̵߳ĸÅÄî¡¢Çø±ðÓëÁªÏµ¡¢ÓÅȱµã¡¢·¢Õ¹µÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚCSDN£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼­¡¢ÍƼö¡£

Ò»¡¢¶¨Òå

ÔÙ¿´ÕýÎÄ֮ǰÎÒÒªÏÈÇ¿µ÷һϼ¸µã£º

1. LinuxÖÐûÓÐÕæÕýµÄỊ̈߳¬µ«windowsÖÐȷʵÓÐÏß³Ì

2. LinuxÖÐûÓеÄÏß³ÌÊÇÓɽø³ÌÀ´Ä£ÄâʵÏֵģ¨ÓÖ³Æ×÷£ºÇáÁ¿¼¶½ø³Ì£©

3. ËùÒÔÔÚLinuxÖУ¨ÔÚCPU½Ç¶È¿´£©½ø³Ì±»³Æ×÷ÇáÁ¿¼¶½ø³Ì£¨LWP£©

ÓÉÓÚLinuxÏÂûÓÐÕæÕýµÄỊ̈߳¬Ö»ÓÐËùνµÄÓû§¼¶Ị̈߳¬Ïß³ÌÔÚCPUµØÖ·¿Õ¼äÄÚÔËÐÐ

¹ØÓÚ½ø³Ì£¨PCB£©¡¢ÇáÁ¿¼¶½ø³Ì£¨LWP£©¡¢Ị̈߳¨TCB£©¡¢Óû§Ï̡߳¢ÄÚºËÏ̵͍߳Ò壬ÔÚÏÖ´ú²Ù×÷ϵͳÖУ¬½ø³ÌÖ§³Ö¶àÏß³Ì ¡£ ½ø³ÌÊÇ·ÖÅä×ÊÔ´£¨×ÊÔ´¹ÜÀí£©µÄ×îСµ¥Ôª£»¶øÏß³ÌÊǵ÷¶È×ÊÔ´£¨³ÌÐòÖ´ÐУ©µÄ×îСµ¥Ôª¡£ Ò»¸ö½ø³ÌµÄ×é³ÉʵÌå¿ÉÒÔ·ÖΪÁ½´ó²¿·Ö£ºÏ̼߳¯ºÏºÍ×ÊÔ´¼¯ºÏ¡£½ø³ÌÖеÄÏß³ÌÊǶ¯Ì¬µÄ¶ÔÏó£»´ú±íÁ˽ø³ÌÖ¸ÁîµÄÖ´ÐС£

a¡¢Ï̵߳ĸÅÄî

ÎÒÃÇÖªµÀ£¬½ø³ÌÔÚ¸÷×Ô¶ÀÁ¢µÄ¿Õ¼äÖÐÔËÐУ¬½ø³ÌÖ®¼ä¹²ÏíÊý¾ÝÐèÒªÓÃmmap»òÕß½ø³Ì¼äͨÐÅ»úÖÆ£¨IPC£©ÈçºÎÔÚÒ»¸ö½ø³Ì¿Õ¼äÖÐÖ´Ðжà¸öỊ̈߳¬ÓÐЩÇé¿öÐèÒªÔÚÒ»¸ö½ø³ÌÖÐͬʱִÐжà¸ö¿ØÖÆÁ÷³Ì£¬ÕâʱºòÏ߳̾ÍÅÉÉÏÁËÓ󡣬

Ï̵߳Ĵ´½¨£º

1 int pthread_create(pthread_t *thread,NULL,void *(*start_routine)(void *),void* arg);

Ï̹߳²ÏíÒÔϽø³ÌµÄ×ÊÔ´ºÍ»·¾³£º

1. **ÎļþÃèÊö·û±í**£¨Öص㣩
2. ÿÖÖÐźŵĴ¦Àí·½Ê½£¨SIG_IGN¡¢SIG_DFL»òÕß×Ô¶¨ÒåµÄÐźŴ¦Àíº¯Êý£©
3. µ±Ç°¹¤×÷Ŀ¼
4. Óû§idºÍ×éid

Ïß³ÌÓÐ×Ô¼ºµÄ˽ÓÐÊý¾Ý£º

1. Ïß³Ìid
2. **ÉÏÏÂÎÄÐÅÏ¢£¬°üÀ¨¸÷ÖּĴæÆ÷µÄÖµ¡¢³ÌÐò¼ÆÊýÆ÷ºÍÕ»Ö¸Õë**£¨Öص㣩
3. **Õ»¿Õ¼ä£¨ÁÙʱ±äÁ¿´æ´¢ÔÚÕ»¿Õ¼äÖУ©**£¨Öص㣩
4. errno±äÁ¿
5. ÐÅºÅÆÁ±Î×Ö
6. µ÷¶ÈÓÅÏȼ¶

LinuxÉÏÏß³ÌλÓÚlibpthread¹²Ïí¿âÖУ¬Òò´ËÔÚ±àÒëʱҪ¼ÓÉÏ-lpthreadÑ¡Ï-l :Ö¸Ã÷ËùÁ´½ÓµÄ¿â£©

b¡¢½ø³ÌÓëÏ̵߳ÄÁªÏµÓëÇø±ð

1. Ïß³ÌÊÇÔÚ½ø³ÌÄÚ²¿ÔËÐеÄÖ´ÐзÖÖ§
2. Ïß³ÌÊÇΪÁË×ÊÔ´¹²Ïí£¨¹²ÏíµØÖ·¿Õ¼ä£©£¬½ø³ÌÊÇΪÁË×ÊÔ´¶ÀÕ¼£¨Ë½ÓеØÖ·¿Õ¼ä£©
3. LinuxÏÂûÓÐÕæÕýµÄỊ̈߳¬ËüÊÇÀûÓýø³ÌÀ´´úÌæÊµÏÖµÄ
4. ½ø³ÌÊÇ·ÖÅä×ÊÔ´£¨×ÊÔ´¹ÜÀí£©µÄ×îСµ¥Ôª£»¶øÏß³ÌÊǵ÷¶È×ÊÔ´£¨³ÌÐòÖ´ÐУ©µÄ×îСµ¥Ôª
5. Ïß³ÌÓëÏß³ÌÖ®¼äÊǶÀÁ¢µÄ

¶þ¡¢´«Í³½ø³ÌµÄȱµã

ÏÖʵÖÐÓкܶàÐèÒª²¢·¢´¦ÀíµÄÈÎÎñ£¬ÈçÊý¾Ý¿âµÄ·þÎñÆ÷¶Ë¡¢ÍøÂç·þÎñÆ÷¡¢´óÈÝÁ¿¼ÆËãµÈ¡£Ò»¸öÈÎÎñÊÇÒ»¸ö½ø³Ì£¬´«Í³µÄUNIX½ø³ÌÊǵ¥Ị̈߳¨Ö´ÐÐÁ÷£©µÄ£¬µ¥Ïß³ÌÒâζ×ųÌÐò±ØÐëÊÇ˳ÐòÖ´ÐУ¬µ¥¸öÈÎÎñ²»Äܲ¢·¢£»¼ÈÔÚÒ»¸öʱ¿ÌÖ»ÄÜÔËÐÐÔÚÒ»¸ö´¦ÀíÆ÷ÉÏ£¬Òò´Ë²»Äܳä·ÖÀûÓöദÀíÆ÷¿ò¼ÜµÄ¼ÆËã»ú¡£Èç¹û²ÉÓÃ¶à½ø³ÌµÄ·½·¨£¬¼´°ÑÒ»¸öÈÎÎñÓöà¸ö½ø³Ì½â¾ö£¬ÔòÓÐÈçÏÂÎÊÌ⣺

a. forkÒ»¸ö×Ó½ø³ÌµÄÏûºÄÊǺܴóµÄ£¬forkÊÇÒ»¸ö°º¹óµÄϵͳµ÷Ó㬼´Ê¹Ê¹ÓÃÏÖ´úµÄдʱ¸´ÖÆ(copy-on-write)¼¼Êõ¡£
b. ¸÷¸ö½ø³ÌÓµÓÐ×Ô¼º¶ÀÁ¢µÄµØÖ·¿Õ¼ä£¬½ø³Ì¼äµÄЭ×÷ÐèÒª¸´ÔÓµÄIPC£¨½ø³Ì¼äͨÐÅ£©¼¼Êõ£¬Èç***ÏûÏ¢¶ÓÁС¢¹²ÏíÄÚ´æ¡¢ÐźÅÁ¿***µÈ¡£

a¡¢¶àÏ̵߳ÄÓÅȱµã

Ị̈߳ºÆäʵ¿ÉÒÔÏȼòµ¥Àí½â³ÉcpuµÄÒ»¸öÖ´ÐÐÁ÷£¬Ö¸ÁîÐòÁС£¶àÖ§³Ö¶àÏ̵߳ijÌÐò(½ø³Ì)¿ÉÒÔÈ¡µÃÕæÕýµÄ²¢ÐÐ(parallelism)£¬ÇÒÓÉÓÚ¹²Ïí½ø³ÌµÄ´úÂëºÍÈ«¾ÖÊý¾Ý£¬¹ÊÏ̼߳äµÄͨÐÅÊÇ·½±ãµÄ¡£ËüµÄȱµãÒ²ÊÇÓÉÓÚÏ̹߳²Ïí½ø³ÌµÄµØÖ·¿Õ¼ä£¬Òò´Ë¿ÉÄܻᵼÖ¾ºÕù£¬Òò´Ë¶Ôijһ¿éÓжà¸öÏß³ÌÒª·ÃÎʵÄÊý¾ÝÐèҪһЩͬ²½¼¼Êõ¡£

b¡¢ÇáÁ¿¼¶½ø³ÌLWP

¼ÈÈ»³Æ×÷ÇáÁ¿¼¶½ø³Ì£¬¿É¼ûÆä±¾ÖÊÈÔÈ»Êǽø³Ì£¬ÓëÆÕͨ½ø³ÌÏà±È£¬LWPÓëÆäËü½ø³Ì¹²ÏíËùÓУ¨»ò´ó²¿·Ö£©Âß¼­µØÖ·¿Õ¼äºÍϵͳ×ÊÔ´£¬Ò»¸ö½ø³Ì¿ÉÒÔ´´½¨¶à¸öLWP£¬ÕâÑùËüÃǹ²Ïí´ó²¿·Ö×ÊÔ´£»LWPÓÐËü×Ô¼ºµÄ½ø³Ì±êʶ·û£¬²¢ºÍÆäËû½ø³ÌÓÐן¸×Ó¹ØÏµ£»ÕâÊǺÍÀàUnix²Ù×÷ϵͳµÄϵͳµ÷ÓÃvfork()Éú³ÉµÄ½ø³ÌÒ»ÑùµÄ¡£LWPÓÉÄں˹ÜÀí²¢ÏñÆÕͨ½ø³ÌÒ»Ñù±»µ÷¶È¡£LinuxÄÚºËÊÇÖ§³ÖLWPµÄµäÐÍÀý×Ó¡£LinuxÄÚºËÔÚ 2.0.x°æ±¾¾ÍÒѾ­ÊµÏÖÁËÇáÁ¿½ø³Ì£¬Ó¦ÓóÌÐò¿ÉÒÔͨ¹ýÒ»¸öͳһµÄclone()ϵͳµ÷Óýӿڣ¬Óò»Í¬µÄ²ÎÊýÖ¸¶¨´´½¨ÇáÁ¿½ø³Ì»¹ÊÇÆÕͨ½ø³Ì£¬Í¨¹ý²ÎÊý¾ö¶¨×Ó½ø³ÌºÍ¸¸½ø³Ì¹²ÏíµÄ×ÊÔ´ÖÖÀàºÍÊýÁ¿£¬ÕâÑù¾ÍÓÐÁËÇáÖØÖ®·Ö¡£ÔÚÄÚºËÖУ¬ clone()µ÷Óþ­¹ý²ÎÊý´«µÝºÍ½âÊͺó»áµ÷ÓÃdo_fork()£¬Õâ¸öºËÄÚº¯ÊýͬʱҲÊÇfork()¡¢vfork()ϵͳµ÷ÓõÄ×îÖÕʵÏÖ¡£

ÔÚ´ó¶àÊýϵͳÖУ¬LWPÓëÆÕͨ½ø³ÌµÄÇø±ðÒ²ÔÚÓÚËüÖ»ÓÐÒ»¸ö×îСµÄÖ´ÐÐÉÏÏÂÎĺ͵÷¶È³ÌÐòËùÐèµÄͳ¼ÆÐÅÏ¢£¬¶øÕâÒ²ÊÇËüÖ®ËùÒÔ±»³ÆÎªÇáÁ¿¼¶µÄÔ­Òò¡£

ÒòΪLWPÖ®¼ä¹²ÏíËüÃǵĴ󲿷Ö×ÊÔ´£¬ËùÒÔËüÔÚijЩӦÓóÌÐò¾Í²»ÊÊÓÃÁË£»Õâ¸öʱºò¾ÍҪʹÓöà¸öÆÕͨµÄ½ø³ÌÁË¡£ÀýÈ磬ΪÁ˱ÜÃâÄÚ´æÐ¹Â©£¨a process can be replaced by another one£©ºÍʵÏÖÌØÈ¨·Ö¸ô£¨processes can run under other credentials and have other permissions£©¡£

c¡¢Óû§Ïß³Ì

ÕâÀïµÄÓû§Ïß³ÌÖ¸µÄÊÇÍêÈ«½¨Á¢ÔÚÓû§¿Õ¼äµÄÏ߳̿⣬Óû§Ï̵߳Ľ¨Á¢£¬Í¬²½£¬Ïú»Ù£¬µ÷¶ÈÍêÈ«ÔÚÓû§¿Õ¼äÍê³É£¬²»ÐèÒªÄں˵İïÖú¡£Òò´ËÕâÖÖÏ̵߳IJÙ×÷ÊǼ«Æä¿ìËÙµÄÇÒµÍÏûºÄµÄ¡£

ÉÏͼÊÇ×î³õµÄÒ»¸öÓû§Ïß³ÌÄ£ÐÍ£¬´ÓÖпÉÒÔ¿´³ö£¬½ø³ÌÖаüº¬Ị̈߳¬Óû§Ïß³ÌÔÚÓû§¿Õ¼äÖÐʵÏÖ£¬Äں˲¢Ã»ÓÐÖ±½Ó¶ÔÓû§Ï߳̽ø³Ìµ÷¶È£¬Äں˵ĵ÷¶È¶ÔÏóºÍ´«Í³½ø³ÌÒ»Ñù£¬»¹Êǽø³Ì±¾Éí£¬Äں˲¢²»ÖªµÀÓû§Ï̵߳ĴæÔÚ¡£Óû§Ïß³ÌÖ®¼äµÄµ÷¶ÈÓÉÔÚÓû§¿Õ¼äʵÏÖµÄÏ߳̿âʵÏÖ¡£

ÕâÖÖÄ£ÐͶÔÓ¦×Å¿ÖÁúÊéÖÐÌáµ½µÄ¶à¶ÔÒ»Ïß³ÌÄ£ÐÍ£¬ÆäȱµãÊÇÒ»¸öÓû§Ïß³ÌÈç¹û×èÈûÔÚϵͳµ÷ÓÃÖУ¬ÔòÕû¸ö½ø³Ì¶¼½«»á×èÈû¡£

d¡¢ÄÚºËÏß³Ì

Óû§Ì¬Ï̺߳ÍÄÚºË̬Ị̈߳»Ö÷ÒªµÄÇø·Ö¾ÍÊÇ¡°Ë­À´¹ÜÀí¡±Ị̈߳¬Óû§Ì¬ÊÇÓû§¹ÜÀí£¬ÄÚºË̬ÊÇÄں˹ÜÀí£¨µ«¿Ï¶¨ÒªÌṩһЩAPI£¬ÀýÈç´´½¨£©¡£

Óû§Ïß³ÌÓëÄÚºËÏß³ÌÓÅÁÓÊÆ£º

1£©¿ÉÒÆÖ²ÐÔ£ºÒòΪULTÍêÈ«ÔÚÓû§Ì¬ÊµÏÖỊ̈߳¬Òò´ËÒ²¾ÍºÍ¾ßÌåµÄÄÚºËûÓÐʲô¹ØÏµ£¬¿ÉÒÆÖ²ÐÔ·½ÃæULTÂÔʤһ³ï£»

2£©¿ÉÀ©Õ¹ÐÔ£ºULTÊÇÓÉÓû§¿ØÖƵģ¬Òò´ËÀ©Õ¹Ò²¾ÍÈÝÒ×£»Ïà·´£¬KLTÀ©Õ¹¾ÍºÜ²»ÈÝÒ×£¬»ù±¾ÉÏÖ»ÄÜÊÜÖÆÓÚ¾ßÌåµÄ²Ù×÷ϵͳÄںˣ»

3£©ÐÔÄÜ£ºÓÉÓÚULTµÄÏß³ÌÊÇÔÚÓû§Ì¬£¬¶ÔÓ¦µÄÄں˲¿·Ö»¹ÊÇÒ»¸ö½ø³Ì£¬Òò´ËULT¾ÍûÓа취ÀûÓöദÀíÆ÷µÄÓÅÊÆ£¬¶øKLT¾Í¿ÉÒÔͨ¹ýµ÷¶È½«Ï̷ֲ߳¼ÔÚ¶à¸ö´¦ÀíÉÏÔËÐУ¬ÕâÑùKLTµÄÐÔÄܸߵöࣻÁíÍ⣬һ¸öULTµÄÏß³Ì×èÈû£¬ËùÓеÄÏ̶߳¼×èÈû£¬¶øKLTÒ»¸öÏß³Ì×èÈû²»»áÓ°ÏìÆäËüÏ̡߳£

4£©±à³Ì¸´ÔÓ¶È£ºULTµÄËùÓйÜÀí¹¤×÷¶¼ÒªÓÉÓû§À´Íê³É£¬¶øKLT½ö½öÐèÒªµ÷ÓÃAPI½Ó¿Ú£¬Òò´ËULTÒª±ÈKLT¸´ÔӵĶࡣ

С½á

Æäʵ×î³õ¸ù±¾Ã»ÓÐÏ̵߳ĸÅÄֻÓнø³Ì£¬Ò»¸öÈÎÎñÒ»¸ö½ø³ÌÒ»¸öÖ´ÐÐÁ÷£¬¶àÈÎÎñ´¦Àí»ú¾ÍÊÇ¶à½ø³Ì¡£ºóÀ´Ìá³öÏ̵߳ĸÅÄµ«ÊÇÒªÈçºÎȥʵÏÖ£¬ÕâÀï¾ÍÓкܶàÖÖʵÏÖ·½·¨ÁË£¬¿ÉÒÔÏëµ½Á½ÖÖʵÏÖ·½·¨£¬Ò»ÖÖ¾ÍÊÇÉÏÃæËù˵µÄÓû§Ï̵߳ķ½·¨£¬ÆäÓÅȱµãÉÏÎÄÒÔ¼òÊö£»ÔÙÓоÍÊÇÓÃÇáÁ¿¼¶½ø³ÌȥģÄ⣬¼´ÎÒÃÇ¿ÉÒÔ°ÑLWP¿´³ÉÊÇÒ»¸öÏ̡߳£¾ÍÒòΪÕâ¸öʹµÃÏ̺߳ͽø³ÌµÄ¸ÅÄî»ìÏýÁË£¬ÓÐÈË˵ϵͳµ÷¶Èµ¥Î»Êǽø³Ì£¬ÓÖÓÐÈË˵ÊÇỊ̈߳¬Æäʵϵͳµ÷¶ÈµÄµ¥Î»Ò»Ö±¾ÍûÓиı䣬ֻÊǺóÀ´²¿·ÖÏ̺߳ͽø³ÌµÄ½çÏÞÄ£ºýÁË£¬ÖÁÉÙÉÏÎÄÖеÄÓû§Ï߳̾ø¶Ô²»Êǵ÷¶È¶ÔÏó£¬LWPÄ£ÄâµÄÏß³ÌÈ´Êǵ÷¶È¶ÔÏó¡£

Áí¸½£º

LinuxÏ̷߳¢Õ¹

Õâ¸ö¶ÔÓÚÀí½âLinux¶àÏ̺߳ÜÓаïÖú£¬¿Éϧ¡¶ÉîÈëÀí½âLinuxÄںˡ·Õâ±¾ÊéÖ»×ÖδÌᣬ¸ù±¾Ã»½²Linux¶àÏ̵߳ĻúÀí£¬ÖÁÉÙÎÒû¿´¶®¡£

Ò»Ö±ÒÔÀ´, linuxÄں˲¢Ã»ÓÐÏ̵߳ĸÅÄî. ÿһ¸öÖ´ÐÐʵÌå¶¼ÊÇÒ»¸ötask_struct½á¹¹, ͨ³£³ÆÖ®Îª½ø³Ì. LinuxÄÚºËÔÚ 2.0.x°æ±¾¾ÍÒѾ­ÊµÏÖÁËÇáÁ¿½ø³Ì£¬Ó¦ÓóÌÐò¿ÉÒÔͨ¹ýÒ»¸öͳһµÄclone()ϵͳµ÷Óýӿڣ¬Óò»Í¬µÄ²ÎÊýÖ¸¶¨´´½¨ÇáÁ¿½ø³Ì»¹ÊÇÆÕͨ½ø³Ì¡£ÔÚÄÚºËÖУ¬ clone()µ÷Óþ­¹ý²ÎÊý´«µÝºÍ½âÊͺó»áµ÷ÓÃdo_fork()£¬Õâ¸öºËÄÚº¯ÊýͬʱҲÊÇfork()¡¢vfork()ϵͳµ÷ÓõÄ×îÖÕʵÏÖ¡£ºóÀ´ÎªÁËÒýÈë¶àỊ̈߳¬Linux2.0~2.4ʵÏÖµÄÊÇË׳ÆLinuxThreadsµÄ¶àÏ̷߳½Ê½£¬µ½ÁË2.6£¬»ù±¾É϶¼ÊÇNPTLµÄ·½Ê½ÁË¡£ÏÂÃæÎÒÃÇ·Ö±ð½éÉÜ¡£

a¡¢Ä£ÐÍÒ» £ºLinuxThreads

×¢£ºÒÔÏÂÄÚÈÝÖ÷Òª²Î¿¼¡°ÑîɳÖÞ (mailto:pubb@163.net?subject=Linux Ïß³ÌʵÏÖ»úÖÆ·ÖÎö&cc=pubb@163.net)¹ú·À¿Æ¼¼´óѧ¼ÆËã»úѧԺ¡±µÄ¡°Linux Ïß³ÌʵÏÖ»úÖÆ·ÖÎö¡±¡£

linux 2.6ÒÔǰ, pthreadÏ߳̿â¶ÔÓ¦µÄʵÏÖÊÇÒ»¸öÃû½ÐlinuxthreadsµÄlib.ÕâÖÖʵÏÖ±¾ÖÊÉÏÊÇÒ»ÖÖLWPµÄʵÏÖ·½Ê½£¬¼´Í¨¹ýÇáÁ¿¼¶½ø³ÌÀ´Ä£ÄâỊ̈߳¬Äں˲¢²»ÖªµÀÓÐÏß³ÌÕâ¸ö¸ÅÄÔÚÄں˿´À´£¬¶¼Êǽø³Ì¡£

Linux²ÉÓõġ°Ò»¶ÔÒ»¡±µÄÏß³ÌÄ£ÐÍ£¬¼´Ò»¸öLWP¶ÔÓ¦Ò»¸öÏ̡߳£Õâ¸öÄ£ÐÍ×î´óµÄºÃ´¦ÊÇÏ̵߳÷¶ÈÓÉÄÚºËÍê³ÉÁË£¬¶øÆäËûÏ̲߳Ù×÷£¨Í¬²½¡¢È¡Ïû£©µÈ¶¼ÊǺËÍâµÄÏ߳̿⺯ÊýÍê³ÉµÄ¡£

linuxÉϵÄÏ߳̾ÍÊÇ»ùÓÚÇáÁ¿¼¶½ø³Ì, ÓÉÓû§Ì¬µÄpthread¿âʵÏÖµÄ.ʹÓÃpthreadÒÔºó, ÔÚÓû§¿´À´, ÿһ¸ötask_struct¾Í¶ÔÓ¦Ò»¸öÏß³Ì, ¶øÒ»×éÏß³ÌÒÔ¼°ËüÃÇËù¹²Í¬ÒýÓõÄÒ»×é×ÊÔ´¾ÍÊÇÒ»¸ö½ø³Ì.µ«ÊÇ, Ò»×éÏ̲߳¢²»½ö½öÊÇÒýÓÃͬһ×é×ÊÔ´¾Í¹»ÁË, ËüÃÇ»¹±ØÐë±»ÊÓΪһ¸öÕûÌå.

¶Ô´Ë, POSIX±ê×¼Ìá³öÁËÈçÏÂÒªÇó:

1£º ²é¿´½ø³ÌÁбíµÄʱºò, Ïà¹ØµÄÒ»×étask_structÓ¦µ±±»Õ¹ÏÖΪÁбíÖеÄÒ»¸ö½Úµã;

2£º ·¢Ë͸øÕâ¸ö"½ø³Ì"µÄÐźÅ(¶ÔÓ¦killϵͳµ÷ÓÃ), ½«±»¶ÔÓ¦µÄÕâÒ»×étask_structËù¹²Ïí, ²¢ÇÒ±»ÆäÖеÄÈÎÒâÒ»¸ö"Ïß³Ì"´¦Àí;

3£º ·¢Ë͸øÄ³¸ö"Ïß³Ì"µÄÐźÅ(¶ÔÓ¦pthread_kill), ½«Ö»±»¶ÔÓ¦µÄÒ»¸ötask_struct½ÓÊÕ, ²¢ÇÒÓÉËü×Ô¼ºÀ´´¦Àí;

4£º µ±"½ø³Ì"±»Í£Ö¹»ò¼ÌÐøÊ±(¶ÔÓ¦SIGSTOP/SIGCONTÐźÅ), ¶ÔÓ¦µÄÕâÒ»×étask_struct״̬½«¸Ä±ä;

5£º µ±"½ø³Ì"ÊÕµ½Ò»¸öÖÂÃüÐźÅ(±ÈÈçÓÉÓڶδíÎóÊÕµ½SIGSEGVÐźÅ), ¶ÔÓ¦µÄÕâÒ»×étask_struct½«È«²¿Í˳ö;

6£º µÈµÈ(ÒÔÉÏ¿ÉÄܲ»¹»È«);

ÔÚLinuxThreadsÖУ¬×¨ÃÅΪÿһ¸ö½ø³Ì¹¹ÔìÁËÒ»¸ö¹ÜÀíỊ̈߳¬¸ºÔð´¦ÀíÏß³ÌÏà¹ØµÄ¹ÜÀí¹¤×÷¡£µ±½ø³ÌµÚÒ»´Îµ÷ÓÃpthread_create()´´½¨Ò»¸öÏ̵߳Äʱºò¾Í»á´´½¨²¢Æô¶¯¹ÜÀíÏ̡߳£È»ºó¹ÜÀíÏß³ÌÔÙÀ´´´½¨Óû§ÇëÇóµÄÏ̡߳£Ò²¾ÍÊÇ˵£¬Óû§ÔÚµ÷ÓÃpthread_createºó£¬ÏÈÊÇ´´½¨Á˹ÜÀíỊ̈߳¬ÔÙÓɹÜÀíÏ̴߳´½¨ÁËÓû§µÄÏ̡߳£

linuxthreadsÀûÓÃÇ°ÃæÌáµ½µÄÇáÁ¿¼¶½ø³ÌÀ´ÊµÏÖÏß³Ì, µ«ÊǶÔÓÚPOSIXÌá³öµÄÄÇЩҪÇó, linuxthreads³ýÁ˵Ú5µãÒÔÍâ, ¶¼Ã»ÓÐʵÏÖ(ʵ¼ÊÉÏÊÇÎÞÄÜΪÁ¦):

1, Èç¹ûÔËÐÐÁËA³ÌÐò, A³ÌÐò´´½¨ÁË10¸öÏß³Ì, ÄÇôÔÚshellÏÂÖ´ÐÐpsÃüÁîʱ½«¿´µ½11¸öA½ø³Ì, ¶ø²»ÊÇ1¸ö(×¢Òâ, Ò²²»ÊÇ10¸ö, ÏÂÃæ»á½âÊÍ);

2, ²»¹ÜÊÇkill»¹ÊÇpthread_kill, ÐźÅÖ»Äܱ»Ò»¸ö¶ÔÓ¦µÄÏß³ÌËù½ÓÊÕ;

3, SIGSTOP/SIGCONTÐźÅÖ»¶ÔÒ»¸öÏß³ÌÆð×÷ÓÃ;

»¹ºÃlinuxthreadsʵÏÖÁ˵Ú5µã, ÎÒÈÏΪÕâÒ»µãÊÇ×îÖØÒªµÄ. Èç¹ûij¸öÏ̡߳±¹Ò¡±ÁË, Õû¸ö½ø³Ì»¹ÔÚÈôÎÞÆäʵØÔËÐÐ×Å, ¿ÉÄÜ»á³öÏֺܶàµÄ²»Ò»ÖÂ״̬. ½ø³Ì½«²»ÊÇÒ»¸öÕûÌå, ¶øÏß³ÌÒ²²»ÄܳÆÎªÏß³Ì. »òÐíÕâÒ²ÊÇΪʲôlinuxthreadsËäÈ»ÓëPOSIXµÄÒªÇó²î¾àÉõÔ¶, È´Äܹ»´æÔÚ, ²¢ÇÒ»¹±»Ê¹ÓÃÁ˺ü¸ÄêµÄÔ­Òò°É~

µ«ÊÇ, linuxthreadsΪÁËʵÏÖÕâ¸ö¡±µÚ5µã¡±, »¹ÊǸ¶³öÁ˺ܶà´ú¼Û, ²¢ÇÒ´´ÔìÁËlinuxthreads±¾ÉíµÄÒ»´óÐÔÄÜÆ¿¾±.

½ÓÏÂÀ´ÒªËµËµ, ΪʲôA³ÌÐò´´½¨ÁË10¸öÏß³Ì, µ«ÊÇpsʱȴ»á³öÏÖ11¸öA½ø³ÌÁË. ÒòΪlinuxthreads×Ô¶¯´´½¨ÁËÒ»¸ö¹ÜÀíÏß³Ì. ÉÏÃæÌáµ½µÄ¡±µÚ5µã¡±¾ÍÊÇ¿¿¹ÜÀíÏß³ÌÀ´ÊµÏÖµÄ.

µ±³ÌÐò¿ªÊ¼ÔËÐÐʱ, ²¢Ã»ÓйÜÀíÏ̴߳æÔÚ(ÒòΪ¾¡¹Ü³ÌÐòÒѾ­Á´½ÓÁËpthread¿â, µ«ÊÇδ±Ø»áʹÓöàÏß³Ì).

³ÌÐòµÚÒ»´Îµ÷ÓÃpthread_createʱ, linuxthreads·¢ÏÖ¹ÜÀíÏ̲߳»´æÔÚ, ÓÚÊÇ´´½¨Õâ¸ö¹ÜÀíÏß³Ì. Õâ¸ö¹ÜÀíÏß³ÌÊǽø³ÌÖеĵÚÒ»¸öÏß³Ì(Ö÷Ïß³Ì)µÄ¶ù×Ó.

È»ºóÔÚpthread_createÖÐ, »áͨ¹ýpipeÏò¹ÜÀíÏ̷߳¢ËÍÒ»¸öÃüÁî, ¸æËßËü´´½¨Ïß³Ì. ¼´ÊÇ˵, ³ýÖ÷Ïß³ÌÍâ, ËùÓеÄÏ̶߳¼ÊÇÓɹÜÀíÏß³ÌÀ´´´½¨µÄ, ¹ÜÀíÏß³ÌÊÇËüÃǵĸ¸Ç×.

ÓÚÊÇ, µ±ÈκÎÒ»¸ö×ÓÏß³ÌÍ˳öʱ, ¹ÜÀíÏ߳̽«ÊÕµ½SIGUSER1ÐźÅ(ÕâÊÇÔÚͨ¹ýclone´´½¨×ÓÏß³Ìʱָ¶¨µÄ). ¹ÜÀíÏß³ÌÔÚ¶ÔÓ¦µÄsig_handlerÖлáÅжÏ×ÓÏß³ÌÊÇ·ñÕý³£Í˳ö, Èç¹û²»ÊÇ, ÔòɱËÀËùÓÐÏß³Ì, È»ºó×Ôɱ.

ÄÇô, Ö÷Ïß³ÌÔõô°ìÄØ? Ö÷Ïß³ÌÊǹÜÀíÏ̵߳ĸ¸Ç×, ÆäÍ˳öʱ²¢²»»á¸ø¹ÜÀíÏ̷߳¢ÐźÅ. ÓÚÊÇ, ÔÚ¹ÜÀíÏ̵߳ÄÖ÷Ñ­»·ÖÐͨ¹ýgetppid¼ì²é¸¸½ø³ÌµÄIDºÅ, Èç¹ûIDºÅÊÇ1, ˵Ã÷¸¸Ç×ÒѾ­Í˳ö, ²¢°Ñ×Ô¼ºÍйܸøÁËinit½ø³Ì(1ºÅ½ø³Ì). Õâʱºò, ¹ÜÀíÏß³ÌÒ²»áɱµôËùÓÐ×ÓÏß³Ì, È»ºó×Ôɱ.

¿É¼û, Ï̵߳Ĵ´½¨ÓëÏú»Ù¶¼ÊÇͨ¹ý¹ÜÀíÏß³ÌÀ´Íê³ÉµÄ, ÓÚÊǹÜÀíÏ߳̾ͳÉÁËlinuxthreadsµÄÒ»¸öÐÔÄÜÆ¿¾±.

´´½¨ÓëÏú»ÙÐèÒªÒ»´Î½ø³Ì¼äͨÐÅ, Ò»´ÎÉÏÏÂÎÄÇл»Ö®ºó²ÅÄܱ»¹ÜÀíÏß³ÌÖ´ÐÐ, ²¢ÇÒ¶à¸öÇëÇó»á±»¹ÜÀíÏ̴߳®ÐеØÖ´ÐÐ.

ÕâÖÖͨ¹ýLWPµÄ·½Ê½À´Ä£ÄâÏ̵߳ÄʵÏÖ¿´ÆðÀ´»¹ÊDZȽÏÇÉÃîµÄ£¬µ«Ò²´æÔÚһЩ±È½ÏÑÏÖØµÄÎÊÌ⣺

1£©Ïß³ÌIDºÍ½ø³ÌIDµÄÎÊÌâ

°´ÕÕPOSIXµÄ¶¨Ò壬ͬһ½ø³ÌµÄËùÓеÄÏß³ÌÓ¦¸Ã¹²Ïíͬһ¸ö½ø³ÌºÍ¸¸½ø³ÌID£¬¶øLinuxµÄÕâÖÖLWP·½Ê½ÏÔÈ»²»ÄÜÂú×ãÕâÒ»µã¡£

2£©ÐźŴ¦ÀíÎÊÌâ

Òì²½ÐźÅÊÇÒÔ½ø³ÌΪµ¥Î»·Ö·¢µÄ£¬¶øLinuxµÄÏ̱߳¾ÖÊÉÏÿ¸ö¶¼ÊÇÒ»¸ö½ø³Ì£¬ÇÒûÓнø³Ì×éµÄ¸ÅÄËùÒÔijЩȱʡÐźÅÄÑÒÔ×öµ½¶ÔËùÓÐÏß³ÌÓÐЧ£¬ÀýÈçSIGSTOPºÍSIGCONT£¬¾ÍÎÞ·¨½«Õû¸ö½ø³Ì¹ÒÆð£¬¶øÖ»Äܽ«Ä³¸öÏß³Ì¹ÒÆð¡£

3£©Ïß³Ì×ÜÊýÎÊÌâ

LinuxThreads½«Ã¿¸ö½ø³ÌµÄÏß³Ì×î´óÊýÄ¿¶¨ÒåΪ1024£¬µ«Êµ¼ÊÉÏÕâ¸öÊýÖµ»¹Êܵ½Õû¸öϵͳµÄ×ܽø³ÌÊýÏÞÖÆ£¬ÕâÓÖÊÇÓÉÓÚÏß³ÌÆäʵÊǺËÐĽø³Ì¡£

4)¹ÜÀíÏß³ÌÎÊÌâ

¹ÜÀíÏß³ÌÈÝÒ׳ÉΪƿ¾±£¬ÕâÊÇÕâÖֽṹµÄͨ²¡£»Í¬Ê±£¬¹ÜÀíÏß³ÌÓÖ¸ºÔðÓû§Ï̵߳ÄÇåÀí¹¤×÷£¬Òò´Ë£¬¾¡¹Ü¹ÜÀíÏß³ÌÒѾ­ÆÁ±ÎÁ˴󲿷ֵÄÐźţ¬µ«Ò»µ©¹ÜÀíÏß³ÌËÀÍö£¬Óû§Ï߳̾Ͳ»µÃ²»ÊÖ¹¤ÇåÀíÁË£¬¶øÇÒÓû§Ï̲߳¢²»ÖªµÀ¹ÜÀíÏ̵߳Ä״̬£¬Ö®ºóµÄÏ̴߳´½¨µÈÇëÇó½«ÎÞÈË´¦Àí¡£

5)ͬ²½ÎÊÌâ

LinuxThreadsÖеÄÏß³Ìͬ²½ºÜ´ó³Ì¶ÈÉÏÊǽ¨Á¢ÔÚÐźŻù´¡Éϵģ¬ÕâÖÖͨ¹ýÄں˸´ÔÓµÄÐźŴ¦Àí»úÖÆµÄͬ²½·½Ê½£¬Ð§ÂÊÒ»Ö±ÊǸöÎÊÌâ¡£

6£©ÆäËûPOSIX¼æÈÝÐÔÎÊÌâ

LinuxÖкܶàϵͳµ÷Ó㬰´ÕÕÓïÒå¶¼ÊÇÓë½ø³ÌÏà¹ØµÄ£¬±ÈÈçnice¡¢setuid¡¢setrlimitµÈ£¬ÔÚĿǰµÄLinuxThreadsÖУ¬ÕâЩµ÷Óö¼½ö½öÓ°Ïìµ÷ÓÃÕßÏ̡߳£

7£©ÊµÊ±ÐÔÎÊÌâ

Ï̵߳ÄÒýÈëÓÐÒ»¶¨µÄʵʱÐÔ¿¼ÂÇ£¬µ«LinuxThreadsÔÝʱ²»Ö§³Ö£¬±ÈÈçµ÷¶ÈÑ¡ÏĿǰ»¹Ã»ÓÐʵÏÖ¡£²»½öLinuxThreadsÈç´Ë£¬±ê×¼µÄLinuxÔÚʵʱÐÔÉÏ¿¼ÂǶ¼ºÜÉÙ

b¡¢Ä£ÐͶþ£ºNPTL

µ½ÁËlinux 2.6, glibcÖÐÓÐÁËÒ»ÖÖеÄpthreadÏ߳̿â¨CNPTL(Native POSIX Threading Library).

±¾ÖÊÉÏÀ´Ëµ£¬NPTL»¹ÊÇÒ»¸öLWPµÄʵÏÖ»úÖÆ£¬µ«Ïà¶ÔÔ­ÓÐLinuxThreadsÀ´Ëµ£¬×öÁ˺ܶàµÄ¸Ä½ø¡£ÏÂÃæÎÒÃÇ¿´Ò»ÏÂNPTLÈçºÎ½â¾öÔ­ÓÐLinuxThreadsʵÏÖ»úÖÆµÄȱÏÝ

NPTLʵÏÖÁËÇ°ÃæÌáµ½µÄPOSIXµÄÈ«²¿5µãÒªÇó. µ«ÊÇ, ʵ¼ÊÉÏ, ÓëÆä˵ÊÇNPTLʵÏÖÁË, ²»Èç˵ÊÇlinuxÄÚºËʵÏÖÁË.

ÔÚlinux 2.6ÖÐ, ÄÚºËÓÐÁËÏß³Ì×éµÄ¸ÅÄî, task_struct½á¹¹ÖÐÔö¼ÓÁËÒ»¸ötgid(thread group id)×Ö¶Î.

Èç¹ûÕâ¸ötaskÊÇÒ»¸ö¡±Ö÷Ï̡߳±, ÔòËüµÄtgidµÈÓÚpid, ·ñÔòtgidµÈÓÚ½ø³ÌµÄpid(¼´Ö÷Ï̵߳Äpid).

ÔÚcloneϵͳµ÷ÓÃÖÐ, ´«µÝCLONE_THREAD²ÎÊý¾Í¿ÉÒÔ°Ñнø³ÌµÄtgidÉèÖÃΪ¸¸½ø³ÌµÄtgid(·ñÔòнø³ÌµÄtgid»áÉèΪÆä×ÔÉíµÄpid).

ÀàËÆµÄXXidÔÚtask_structÖл¹ÓÐÁ½ ¸ö£ºtask->signal->pgid±£´æ½ø³Ì×éµÄ´òÍ·½ø³ÌµÄpid¡¢task->signal->session±£´æ»á»° ´òÍ·½ø³ÌµÄpid¡£Í¨¹ýÕâÁ½¸öidÀ´¹ØÁª½ø³Ì×éºÍ»á»°¡£

ÓÐÁËtgid, Äں˻òÏà¹ØµÄshell³ÌÐò¾ÍÖªµÀij¸ötast_structÊÇ´ú±íÒ»¸ö½ø³Ì»¹ÊÇ´ú±íÒ»¸öÏß³Ì, Ò²¾ÍÖªµÀÔÚʲôʱºò¸ÃÕ¹ÏÖËüÃÇ, ʲôʱºò²»¸ÃÕ¹ÏÖ(±ÈÈçÔÚpsµÄʱºò, Ï߳̾Ͳ»ÒªÕ¹ÏÖÁË).

¶øgetpid(»ñÈ¡½ø³ÌID)ϵͳµ÷Ó÷µ»ØµÄÒ²ÊÇtast_structÖеÄtgid, ¶øtast_structÖеÄpidÔòÓÉgettidϵͳµ÷ÓÃÀ´·µ»Ø.

ÔÚÖ´ÐÐpsÃüÁîµÄʱºò²»Õ¹ÏÖ×ÓỊ̈߳¬Ò²ÊÇÓÐһЩÎÊÌâµÄ¡£±ÈÈç³ÌÐòa.outÔËÐÐʱ£¬´´½¨ ÁËÒ»¸öÏ̡߳£¼ÙÉèÖ÷Ï̵߳ÄpidÊÇ10001¡¢×ÓÏß³ÌÊÇ10002£¨ËüÃǵÄtgid¶¼ÊÇ10001£©¡£ÕâʱÈç¹ûÄãkill 10002£¬ÊÇ¿ÉÒÔ°Ñ10001ºÍ10002ÕâÁ½¸öÏß³ÌÒ»ÆðɱËÀµÄ£¬¾¡¹ÜÖ´ÐÐpsÃüÁîµÄʱºò¸ù±¾¿´²»µ½10002Õâ¸ö½ø³Ì¡£Èç¹ûÄã²»ÖªµÀlinuxÏ̱߳³ ºóµÄ¹ÊÊ£¬¿Ï¶¨»á¾õµÃÓöµ½ÁéÒìʼþÁË¡£

ΪÁËÓ¦¸¶¡±·¢Ë͸ø½ø³ÌµÄÐźš±ºÍ¡±·¢Ë͸øÏ̵߳ÄÐźš±, task_structÀïÃæÎ¬»¤ÁËÁ½Ì×signal_pending, Ò»Ì×ÊÇÏß³Ì×é¹²ÏíµÄ, Ò»Ì×ÊÇÏ̶߳ÀÓеÄ.

ͨ¹ýkill·¢Ë͵ÄÐźű»·ÅÔÚÏß³Ì×é¹²ÏíµÄsignal_pendingÖÐ, ¿ÉÒÔÓÉÈÎÒâÒ»¸öÏß³ÌÀ´´¦Àí; ͨ¹ýpthread_kill·¢Ë͵ÄÐźÅ(pthread_killÊÇpthread¿âµÄ½Ó¿Ú, ¶ÔÓ¦µÄϵͳµ÷ÓÃÖÐtkill)±»·ÅÔÚÏ̶߳ÀÓеÄsignal_pendingÖÐ, Ö»ÄÜÓɱ¾Ïß³ÌÀ´´¦Àí.

µ±Ïß³ÌÍ£Ö¹/¼ÌÐø, »òÕßÊÇÊÕµ½Ò»¸öÖÂÃüÐźÅʱ, Äں˻Ὣ´¦Àí¶¯×÷Ê©¼Óµ½Õû¸öÏß³Ì×éÖÐ.

NGPT

ÉÏÃæÌáµ½µÄÁ½ÖÖÏ߳̿âʹÓõͼÊÇÄں˼¶Ïß³Ì(ÿ¸öÏ̶߳¼¶ÔÓ¦ÄÚºËÖеÄÒ»¸öµ÷¶ÈʵÌå), ÕâÖÖÄ£ÐͳÆÎª1:1Ä£ÐÍ(1¸öÏ̶߳ÔÓ¦1¸öÄں˼¶Ïß³Ì);

¶øNGPTÔò´òËãʵÏÖM:NÄ£ÐÍ(M¸öÏ̶߳ÔÓ¦N¸öÄں˼¶Ïß³Ì), Ò²¾ÍÊÇ˵Èô¸É¸öÏ߳̿ÉÄÜÊÇÔÚͬһ¸öÖ´ÐÐʵÌåÉÏʵÏÖµÄ.

Ï߳̿âÐèÒªÔÚÒ»¸öÄÚºËÌṩµÄÖ´ÐÐʵÌåÉϳéÏó³öÈô¸É¸öÖ´ÐÐʵÌå, ²¢ÊµÏÖËüÃÇÖ®¼äµÄµ÷¶È. ÕâÑù±»³éÏó³öÀ´µÄÖ´ÐÐʵÌå³ÆÎªÓû§¼¶Ïß³Ì.

´óÌåÉÏ, Õâ¿ÉÒÔͨ¹ýΪÿ¸öÓû§¼¶Ï̷߳ÖÅäÒ»¸öÕ», È»ºóͨ¹ýlongjmpµÄ·½Ê½½øÐÐÉÏÏÂÎÄÇл». (°Ù¶Èһϡ±setjmp/longjmp¡±, Äã¾ÍÖªµÀ.)

µ«ÊÇʵ¼ÊÉÏÒª´¦ÀíµÄϸ½ÚÎÊÌâ·Ç³£Ö®¶à. ĿǰµÄNGPTºÃÏñ²¢Ã»ÓÐʵÏÖËùÓÐÔ¤ÆÚµÄ¹¦ÄÜ, ²¢ÇÒÔÝʱҲ²»×¼±¸È¥ÊµÏÖ.

Óû§¼¶Ï̵߳ÄÇл»ÏÔȻҪ±ÈÄں˼¶Ï̵߳ÄÇл»¿ìһЩ, ǰÕß¿ÉÄÜÖ»ÊÇÒ»¸ö¼òµ¥µÄ³¤Ìø×ª, ¶øºóÕßÔòÐèÒª±£´æ/×°ÔØ¼Ä´æÆ÷, ½øÈëÈ»ºóÍ˳öÄÚºË̬. (½ø³ÌÇл»Ôò»¹ÐèÒªÇл»µØÖ·¿Õ¼äµÈ.)

¶øÓû§¼¶Ïß³ÌÔò²»ÄÜÏíÊܶദÀíÆ÷, ÒòΪ¶à¸öÓû§¼¶Ï̶߳ÔÓ¦µ½Ò»¸öÄں˼¶Ïß³ÌÉÏ, Ò»¸öÄں˼¶Ïß³ÌÔÚͬһʱ¿ÌÖ»ÄÜÔËÐÐÔÚÒ»¸ö´¦ÀíÆ÷ÉÏ.

²»¹ý, M:NµÄÏß³ÌÄ£ÐͱϾ¹ÌṩÁËÕâÑùÒ»ÖÖÊÖ¶Î, ¿ÉÒÔÈò»ÐèÒª²¢ÐÐÖ´ÐеÄÏß³ÌÔËÐÐÔÚÒ»¸öÄں˼¶Ï̶߳ÔÓ¦µÄÈô¸É¸öÓû§¼¶Ïß³ÌÉÏ, ¿ÉÒÔ½ÚÊ¡ËüÃǵÄÇл»¿ªÏú.¾Ý˵һЩÀàUNIXϵͳ(ÈçSolaris)ÒѾ­ÊµÏÖÁ˱ȽϳÉÊìµÄM:NÏß³ÌÄ£ÐÍ, ÆäÐÔÄÜ±ÈÆðlinuxµÄÏ̻߳¹ÊÇÓÐ×ÅÒ»¶¨µÄÓÅÊÆ.

 

 
   
4371 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
»ùÓÚFPGAµÄÒì¹¹¼ÆËãÔÚ¶àýÌåÖеÄÓ¦ÓÃ
ÉîÈëLinuxÄں˼ܹ¹¡ª¡ª¼ò½éÓë¸ÅÊö
LinuxÄÚºËϵͳ¼Ü¹¹½éÉÜ
dzÎöǶÈëʽCÓÅ»¯¼¼ÇÉ
½ø³Ì¼äͨÐÅ£¨IPC£©½éÉÜ
×îпγÌ
ǶÈëʽLinuxÇý¶¯¿ª·¢
´úÂëÕû½àÖ®µÀ-̬¶È¡¢¼¼ÒÕÓëϰ¹ß
ǶÈëʽÈí¼þ²âÊÔ
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
ǶÈëʽÈí¼þ¿É¿¿ÐÔÉè¼Æ
³É¹¦°¸Àý
ij¾ü¹¤Ëù ǶÈëʽÈí¼þ¼Ü¹¹
Öк½¹¤ÒµÄ³Ñо¿Ëù ǶÈëʽÈí¼þ¿ª·¢Ö¸ÄÏ
ij¹ìµÀ½»Í¨ ǶÈëʽÈí¼þ¸ß¼¶Éè¼ÆÊµ¼ù
ÉîÛÚ Ç¶ÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
ijÆóÒµ »ùÓÚIPDµÄǶÈëʽÈí¼þ¿ª·¢