LinuxÖеÄ"Á㿽±´"ÆÊÎö
http://blog.chinaunix.net/u/9861/showart_1890675.html
LinuxÖеÄ"Á㿽±´"ÆÊÎö
Zero Copy I: User-Mode Perspective
Author By Dragan Stancevic
Translated By Love. Katherine
(½âÊÍLinuxÖеÄ"Á㿽±´"ÌØÐÔ£¬ÎªÊ²Ã´ÓÐÓÃÒÔ¼°ºÎ´¦ÐèÒª¸Ä½øÖ®´¦)
Èç½ñ¼¸ºõÿ¸öÈ˶¼Ìý˵¹ýLinuxÖÐËùνµÄ"Á㿽±´"ÌØÐÔ£¬È»¶øÎÒ¾³£Åöµ½Ã»Óгä·ÖÀí½âÕâ¸ö
ÎÊÌâµÄÈËÃÇ¡£Òò´Ë£¬ÎÒ¾ö¶¨Ð´Ò»Ð©ÎÄÕÂÂÔ΢ÉîÈëµÄ½²ÊöÕâ¸öÎÊÌ⣬ϣÍûÄܽ«Õâ¸öÓÐÓõÄÌØ
ÐÔ½âÊÍÇå³þ¡£ÔÚ±¾ÎÄÖУ¬½«´ÓÓû§¿Õ¼äÓ¦ÓóÌÐòµÄ½Ç¶ÈÀ´²ûÊöÕâ¸öÎÊÌ⣬Òò´ËÓÐÒâºöÂÔÁË
¸´ÔÓµÄÄÚºËʵÏÖ¡£
ʲôÊÇ”Á㿽±´”
ΪÁ˸üºÃµÄÀí½âÎÊÌâµÄ½â¾ö·¨£¬ÎÒÃÇÊ×ÏÈÐèÒªÀí½âÎÊÌâ±¾Éí¡£Ê×ÏÈÎÒÃÇÒÔÒ»¸öÍøÂç·þÎñÊØ
»¤½ø³ÌΪÀý£¬¿¼ÂÇËüÔÚ½«´æ´¢ÔÚÎļþÖеÄÐÅϢͨ¹ýÍøÂç´«Ë͸ø¿Í»§ÕâÑùµÄ¼òµ¥¹ý³ÌÖУ¬Ëù
Éæ¼°µÄ²Ù×÷¡£ÏÂÃæÊÇÆäÖеIJ¿·Ö¼òµ¥´ú°¢£º
read(file, tmp_buf, len);
write(socket, tmp_buf, len);
¿´ÆðÀ´²»Äܸü¼òµ¥ÁË¡£ÄãÒ²ÐíÈÏΪִÐÐÕâÁ½¸öϵͳµ÷Óò¢Î´²úÉú¶àÉÙ¿ªÏú¡£Êµ¼ÊÉÏ£¬Õâ¼ò
Ö±´íµÄÒ»ËúºýÍ¿¡£ÔÚÖ´ÐÐÕâÁ½¸öϵͳµ÷ÓõĹý³ÌÖУ¬Ä¿±êÊý¾ÝÖÁÉÙ±»¸´ÖÆÁË4´Î£¬Í¬Ê±·¢Éú
ÁËͬÑù¶à´ÎÊýµÄÓû§/Äں˿ռäµÄÇл»(ʵ¼ÊÉϸùý³ÌÔ¶±È´Ë´¦ÃèÊöµÄÒª¸´ÔÓ£¬µ«ÊÇÎÒÏ£Íû
ÒÔ¼òµ¥µÄ·½Ê½ÃèÊöÖ®£¬ÒÔ¸üºÃµÄÀí½â±¾ÎĵÄÖ÷Ìâ)¡£
ΪÁ˸üºÃµÄÀí½âÕâÁ½¾ä´úÂëËùÉæ¼°µÄ²Ù×÷£¬Ç뿴ͼ1¡£Í¼µÄÉϰ벿չʾÁËÉÏÏÂÎÄÇл»£¬¶øÏÂ
°ë²¿Õ¹Ê¾Á˸´ÖƲÙ×÷¡£
Figure 1. Copying in Two Sample System Calls
²½ÖèÒ»£ºÏµÍ³µ÷ÓÃreadµ¼ÖÂÁË´ÓÓû§¿Õ¼äµ½Äں˿ռäµÄÉÏÏÂÎÄÇл»¡£DMAÄ£¿é´Ó´ÅÅÌÖжÁÈ¡
ÎļþÄÚÈÝ£¬²¢½«Æä´æ´¢ÔÚÄں˿ռäµÄ»º³åÇøÄÚ£¬Íê³ÉÁ˵Ú1´Î¸´ÖÆ¡£
²½Öè¶þ£ºÊý¾Ý´ÓÄں˿ռ仺³åÇø¸´ÖƵ½Óû§¿Õ¼ä»º³åÇø£¬Ö®ºóϵͳµ÷ÓÃread·µ»Ø£¬Õâµ¼ÖÂ
ÁË´ÓÄں˿ռäÏòÓû§¿Õ¼äµÄÉÏÏÂÎÄÇл»¡£´Ëʱ£¬ÐèÒªµÄÊý¾ÝÒÑ´æ·ÅÔÚÖ¸¶¨µÄÓû§¿Õ¼ä»º³å
ÇøÄÚ(²ÎÊýtmp_buf)£¬³ÌÐò¿ÉÒÔ¼ÌÐøÏÂÃæµÄ²Ù×÷¡£
²½ÖèÈý£ºÏµÍ³µ÷ÓÃwriteµ¼Ö´ÓÓû§¿Õ¼äµ½Äں˿ռäµÄÉÏÏÂÎÄÇл»¡£Êý¾Ý´ÓÓû§¿Õ¼ä»º³åÇø
±»Ôٴθ´ÖƵ½Äں˿ռ仺³åÇø£¬Íê³ÉÁ˵Ú3´Î¸´ÖÆ¡£²»¹ý£¬Õâ´ÎÊý¾Ý´æ·ÅÔÚÄں˿ռäÖÐÓëʹ
ÓõÄsocketÏà¹ØµÄÌØ¶¨»º³åÇøÖУ¬¶ø²»ÊDz½ÖèÒ»ÖеĻº³åÇø¡£
²½ÖèËÄ£ºÏµÍ³µ÷Ó÷µ»Ø£¬µ¼ÖÂÁ˵Ú4´ÎÉÏÏÂÎÄÇл»¡£µÚ4´Î¸´ÖÆÔÚDMAÄ£¿é½«Êý¾Ý´ÓÄں˿ռä
»º³åÇø´«µÝÖÁÐÒéÒýÇæµÄÊ
Ïà¹ØÎĵµ£º
°²×°mysql
sudo apt-get install mysql-servel-5.0 mysql-client-5.0
ÏÂÔØ°²×°¹ý³ÌÖУ¬»áÌáʾÊäÈërootÃÜÂë
°²×°CÓïÑÔ±à³Ì½Ó¿Ú£º
sudo apt-get install libmysqlclient15-dev
¸ü¶àapi ²é¿´£ºhttp://dev.mysql.com/doc/refman/5.0/en/c.html
Ïà¹ØmysqlÍ·ÎļþºÍ¿âÎļþ°²×°ÔÚ/usr/include/mysql/ºÍ/usr/lib/mysqlÄ¿ ......
×¼±¸¹¤×÷:
¡¡¡¡Óõ½µÄperl À©Õ¹×é¼þ(modules)ÔÚÉÏÆªÌù³ö.( win32::odbc Ä£¿é
)ÏÂÔØ×é¼þºó°´ÕÕReadmeÎļþ°²×°µ¹ÏìӦĿ¼.ÅäÖúÃÏàÓ¦µÄodbcÊý¾ÝÔ´.
¡¡¡¡
¡¡¡¡³ÌÐòʵÏÖ:
¡¡¡¡Ê¹ÓÃ
¡¡¡¡use
Win32::ODBC;
¡¡¡¡
¡¡¡¡Óï¾ä°üº¬Ó¦Ê¹ÓõÄÄ£¿éÊÇwin32::odbc,д³öÊý¾Ý¿â
Á¬½Ó×Ö·û´®
¡¡¡¡
¡¡¡¡$DSN = "DSN =
My DSN ......
¶ÔÓÚÊó±êÇý¶¯ºÍÇ°Ãæ·ÖÎö¹ýµÄ¼üÅÌÇý¶¯¶¼Êǹ²ÓÃinputÄ£ÐÍ,ËùÒÔ,¶ÔÓÚʼþÉϱ¨ºÍ´¦ÀíµÄ·½Ê½¶¼Ã»ÓÐÇø±ð,Ö»ÊÇmouseÊó±êÇý¶¯µ±Éϱ¨Íêdx,dy,left,middle,rightÖ®ºó,ÐèÒªµ÷ÓÃinput_sync(),½«Ç°ÃæÉϱ¨µÄ½ö½öÌî³äÔÚ»º³åÇøÖеÄÊý¾Ý,ͨ¹ýmousedev_notify_readers()·¢Ë͸øopenÁ˵ĹҽÓÔÚmousedev->client_listÁ´±íÉϵȴý»ñÈ¡Êó±êÐÅÏ¢µÄ ......
ÕâÆªÎÄÕÂдÓÚÈýÄêǰ£¬µ±Ê±ÊÖÖÐÄÃ×ÅStevensµÄÈý±¾¾ÞÖø TCP v1/v2/v3 µÄÃþ²»×ÅÍ·ÄÔ£ÒòΪËüÃÇÌ«ºñÁË¡£ÎÒÖªµÀÎÒ²»ÐèÒªÄÇô¶à£¬ÄÇôÏêϸ¡£ÓÚÊÇÓÐÁË×Ô¼º·ÖÎöÔ´´úÂëµÄÏë·¨......
ÎÒ²»¶ÔÎÄÖеÄÄÚÈÝÌṩÈκα£Ö¤£¬µ«»¶ÓÓëÎÒÁªÏµÒԱ㲻¶ÏµÄÐÞ¸ÄËü£¬×îÖÕ¸øÐèÒªÖªµÀ¹ØÓÚLinux TCP/ ......
±¾È˳õѧlinux£¬ÔÚÁìµ¼¶½´ÙºÍ¹¤×÷ѹÁ¦Ï£¬°´ÕÕǰÈ˲¿ÊðÊÖ²áºÍÇ¿´óËÑË÷ÒýÇæ°ïÖúÏ£¬ÓÃlvsºÍmonʵÏÖµÄnat¸ºÔؾùºâ£¬vsÊÇsuse 10.2£¬realserverÊÇwindows2003µÄIIS²¿Êð¡£
1 °²×°
1.1 ÍøÂçÍØÆËͼ
1.1 ¼ì²éÄÚºËÊÇ·ñÖ§³ÖlvsÑ¡Ïî
&nbs ......