Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

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Ä£¿é½«Êý¾Ý´ÓÄں˿ռä
»º³åÇø´«µÝÖÁЭÒéÒýÇæµÄÊ


Ïà¹ØÎĵµ£º

linux mysql ¿ª·¢»·¾³

°²×°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Ä¿ ......

Linux °²×° Mysql

¡¡Ò»¡¢ÒýÑÔ
¡¡¡¡ÏëʹÓÃLinuxÒѾ­ºÜ³¤Ê±¼äÁË£¬ÓÉÓÚûÓÐÓ²ÐÔÈÎÎñһֱҲûÓÐϵͳѧϰ£¬½üÈÕÓÉÓÚ¹¤×÷ÐèÒª±ØÐëʹÓÃLinuxϵÄMySQL¡£±¾ÒÔΪÓÐ
WindowsÏÂʹÓÃSQL
ServerµÄ¾­Ñ飬¾õµÃÔÚLinuxϰ²×°MySqlÓ¦¸ÃÊÇÒ×Èç·´ÕÆµÄÊ£¬¿ÉÔÚÕæÕý°²×°ºÍʹÓÃMySQLʱ×ßÁ˺ܶàÍä·£¬Óö¼ûºÜ¶àÎÊÌ⣬±Ï¾¹Linux
ºÍWindows±¾Éí¾ÍÓкܴóÇø±ð¡£ÎªÁËÈà ......

WindowsµÄ×¢²á±í»úÖÆ£¬linuxµÄÎÞ×¢²á±í»úÖÆ

¸ÐлԭÎÄ×÷Õߣºhttp://forum.ubuntu.org.cn/viewtopic.php?f=101&t=227869&sid=31fbca09f094a5e12ad6e3f6d9b90886
windows¸Õ¿ªÊ¼µÄʱºòÊǺÍunixÒ»ÑùûÓÐ×¢²á±íµÄ£¬ËüµÄ³ÌÐòÐÅÏ¢ÔÚºó׺ΪiniµÄÎı¾ÎļþÖС£ºóÀ´WindowsÒýÈË×¢²á±í£¬ÄÇôΪʲôWindowsÒª»¨Èç´Ë´óµÄÁ¦ÆøÒýÈË×¢²á±í»úÖÆ£¬ËüÒª½â¾öʲôÎÊÌ⣬Ëü±ÈÆðlinuxµ ......

linuxÄÚ´æ¹ÜÀíÖØÒªµÄÊý¾Ý½á¹¹

ÕâÀïÖ»Áоټ¸¸ö±È½ÏÂé·³µÄÊý¾Ý½á¹¹
struct list_head {
    struct list_head *next, *prev;
} //linuxͨÓõÄË«ÏòÁ´¶ÓÁУ¬ÏÂÃæ¶à´¦Óõ½£¬ÕâÀïÁгöÔ´´úÂë
linux¶ÔÄÚ´æÔÙÓÃҳʽ¹ÜÀí£¬¶ÔÓÚÒ³£¬¾ÍÓиöÊý¾Ý½á¹¹page¼ÓÒÔÃèÊö¡£ÔÚÄÚºËÖÐÓиöÈ«¾ÖÁ¿mem-mapÖ¸ÏòµÄÊÇÒ»¸öpageµÄÊý×飬Õû¸öÊý×éÃèÊöÁËÕû¸öÎïÀíÄڴ棬 ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ