Linux»·¾³½ø³Ì¼äͨÐÅ
Linux»·¾³½ø³Ì¼äͨÐÅ£¨Ò»£©
¹ÜµÀ¼°ÓÐÃû¹ÜµÀ
Ö£ÑåÐË (mlinux@163.com)¹ú·À¿Æ´ó¼ÆËã»úѧԺ
2002 Äê 12 ÔÂ 11 ÈÕ
ÔÚ±¾ÏµÁÐÐòÖÐ×÷Õ߸ÅÊöÁË linux ½ø³Ì¼äͨÐŵļ¸ÖÖÖ÷ÒªÊֶΡ£ÆäÖйܵÀºÍÓÐÃû¹ÜµÀÊÇ×îÔçµÄ½ø³Ì¼äͨÐÅ»úÖÆÖ®Ò»£¬¹ÜµÀ¿ÉÓÃÓÚ¾ßÓÐÇ×Ôµ¹ØÏµ½ø³Ì¼äµÄͨÐÅ£¬ÓÐÃû¹ÜµÀ¿Ë·þÁ˹ܵÀûÓÐÃû×ÖµÄÏÞÖÆ£¬Òò´Ë£¬³ý¾ßÓйܵÀËù¾ßÓеŦÄÜÍ⣬Ëü»¹ÔÊÐíÎÞÇ×Ôµ¹ØÏµ½ø³Ì¼äµÄͨÐÅ¡£ ÈÏÇå¹ÜµÀºÍÓÐÃû¹ÜµÀµÄ¶Áд¹æÔòÊÇÔÚ³ÌÐòÖÐÓ¦ÓÃËüÃǵĹؼü£¬±¾ÎÄÔÚÏêϸÌÖÂÛÁ˹ܵÀºÍÓÐÃû¹ÜµÀµÄͨÐÅ»úÖÆµÄ»ù´¡ÉÏ£¬ÓÃʵÀý¶ÔÆä¶Áд¹æÔò½øÐÐÁ˳ÌÐòÑéÖ¤£¬ÕâÑù×öÓÐÀûÓÚÔöÇ¿¶ÁÕß¶Ô¶Áд¹æÔòµÄ¸ÐÐÔÈÏʶ£¬Í¬Ê±Ò²ÌṩÁËÓ¦Ó÷¶Àý¡£
1¡¢ ¹ÜµÀ¸ÅÊö¼°Ïà¹ØAPIÓ¦ÓÃ
1.1 ¹ÜµÀÏà¹ØµÄ¹Ø¼ü¸ÅÄî
¹ÜµÀÊÇLinuxÖ§³ÖµÄ×î³õUnix IPCÐÎʽ֮һ£¬¾ßÓÐÒÔÏÂÌØµã£º
¹ÜµÀÊǰëË«¹¤µÄ£¬Êý¾ÝÖ»ÄÜÏòÒ»¸ö·½ÏòÁ÷¶¯£»ÐèҪ˫·½Í¨ÐÅʱ£¬ÐèÒª½¨Á¢ÆðÁ½¸ö¹ÜµÀ£»
Ö»ÄÜÓÃÓÚ¸¸×Ó½ø³Ì»òÕßÐֵܽø³ÌÖ®¼ä£¨¾ßÓÐÇ×Ôµ¹ØÏµµÄ½ø³Ì£©£»
µ¥¶À¹¹³ÉÒ»ÖÖ¶ÀÁ¢µÄÎļþϵͳ£º¹ÜµÀ¶ÔÓڹܵÀÁ½¶ËµÄ½ø³Ì¶øÑÔ£¬¾ÍÊÇÒ»¸öÎļþ£¬µ«Ëü²»ÊÇÆÕͨµÄÎļþ£¬Ëü²»ÊôÓÚijÖÖÎļþϵͳ£¬¶øÊÇ×ÔÁ¢ÃÅ»§£¬µ¥¶À¹¹³ÉÒ»ÖÖÎļþϵͳ£¬²¢ÇÒÖ»´æÔÚÓëÄÚ´æÖС£
Êý¾ÝµÄ¶Á³öºÍдÈ룺һ¸ö½ø³ÌÏò¹ÜµÀÖÐдµÄÄÚÈݱ»¹ÜµÀÁíÒ»¶ËµÄ½ø³Ì¶Á³ö¡£Ð´ÈëµÄÄÚÈÝÿ´Î¶¼Ìí¼ÓÔڹܵÀ»º³åÇøµÄĩ⣬²¢ÇÒÿ´Î¶¼ÊÇ´Ó»º³åÇøµÄÍ·²¿¶Á³öÊý¾Ý¡£
1.2¹ÜµÀµÄ´´½¨£º
#include <unistd.h>
int pipe(int fd[2])
¸Ãº¯Êý´´½¨µÄ¹ÜµÀµÄÁ½¶Ë´¦ÓÚÒ»¸ö½ø³ÌÖм䣬ÔÚʵ¼ÊÓ¦ÓÃÖÐûÓÐÌ«´óÒâÒ壬Òò´Ë£¬Ò»¸ö½ø³ÌÔÚÓÉpipe()´´½¨¹ÜµÀºó£¬Ò»°ãÔÙforkÒ»¸ö×Ó½ø³Ì£¬È»ºóͨ¹ý¹ÜµÀʵÏÖ¸¸×Ó½ø³Ì¼äµÄͨÐÅ£¨Òò´ËÒ²²»ÄÑÍÆ³ö£¬Ö»ÒªÁ½¸ö½ø³ÌÖдæÔÚÇ×Ôµ¹ØÏµ£¬ÕâÀïµÄÇ×Ôµ¹ØÏµÖ¸µÄÊǾßÓй²Í¬µÄ׿ÏÈ£¬¶¼¿ÉÒÔ²ÉÓùܵÀ·½Ê½À´½øÐÐͨÐÅ£©¡£
1.3¹ÜµÀµÄ¶Áд¹æÔò£º
¹ÜµÀÁ½¶Ë¿É·Ö±ðÓÃÃèÊö×Öfd[0]ÒÔ¼°fd[1]À´ÃèÊö£¬ÐèҪעÒâµÄÊÇ£¬¹ÜµÀµÄÁ½¶ËÊǹ̶¨ÁËÈÎÎñµÄ¡£¼´Ò»¶ËÖ»ÄÜÓÃÓÚ¶Á£¬ÓÉÃèÊö×Öfd[0]±íʾ£¬³ÆÆäΪ¹ÜµÀ¶Á¶Ë£»ÁíÒ»¶ËÔòÖ»ÄÜÓÃÓÚд£¬ÓÉÃèÊö×Öfd[1]À´±íʾ£¬³ÆÆäΪ¹ÜµÀд¶Ë¡£Èç¹ûÊÔͼ´Ó¹ÜµÀд¶Ë¶ÁÈ¡Êý¾Ý£¬»òÕßÏò¹ÜµÀ¶Á¶ËдÈëÊý¾Ý¶¼½«µ¼Ö´íÎó·¢Éú¡£Ò»°ãÎļþµÄI/Oº¯Êý¶¼¿ÉÒÔÓÃÓڹܵÀ£¬Èçclose¡¢read¡¢writeµÈµÈ¡£
´Ó¹ÜµÀÖжÁÈ¡Êý¾Ý£º
Èç¹û¹ÜµÀµÄд¶Ë²»´æÔÚ£¬ÔòÈÏΪÒѾ¶Áµ½ÁËÊý¾ÝµÄĩ⣬¶Áº¯Êý·µ»ØµÄ¶Á³ö×Ö½ÚÊýΪ0£»
µ±¹ÜµÀµÄд¶Ë´æÔÚʱ£¬Èç¹ûÇëÇóµÄ×Ö½ÚÊýÄ¿´óÓÚPIPE_BUF£¬Ôò·µ»Ø¹ÜµÀÖÐÏÖÓеÄÊý¾Ý×Ö½ÚÊý£¬Èç¹ûÇëÇóµÄ×Ö½ÚÊýÄ¿²»´óÓÚPIPE
Ïà¹ØÎĵµ£º
¡¡ÔÚLinuxϵͳÖУ¬Èç¹ûҪʹÓÃÓ²ÅÌ¡¢¹âÅÌ¡¢ÈíÅÌ»òMOÅ̵ȴ洢É豸£¬±ØÐëÏȽøÐйÒ×°£¨Mount£©¡£µ±´æ´¢É豸¹Ò×°Íê³ÉÖ®ºó£¬¾Í¿ÉÒÔ½«Æä×÷Ϊһ¸öĿ¼À´½øÐзÃÎÊÁË¡£¹Ò×°É豸ÐèҪʹÓÃmountÃüÁî¡£Ö´ÐÐÕâÒ»ÃüÁÖÁÉÙÒªÏÈÈ·¶¨ÏÂÁÐÈýÖÖÐÅÏ¢£º
¡¡¡¡1. Òª¹Ò×°£¨Mount£©¶ÔÏóµÄÎļþϵͳÀàÐÍ£»
¡¡¡¡2. Òª¹Ò×°£¨Mount£©¶ÔÏóµÄÉ豸à ......
I learned some experience while Nanjing found 0x03 error. At begining, we don't know why our GSRM(a linux process) hang in a short time 5 seconds sometimes. It didn't handle any message at that time and the interruption is not regularly. So we assume we have Linux OS problem. We did following checks ......
×î½üÔÚÑо¿ Linux Äں˵Äʱ¼ä×Óϵͳ£¬ÎªÏÂһƪ³¤ÎÄ¡¶·þÎñÆ÷³ÌÐòÖеÄÈÕÆÚÓëʱ¼ä¡·×ö×¼±¸£¬ÎÞÒâÖÐ×¢Òâµ½ÁË Linux ÐÂÔöµÄ¼¸¸öϵͳµ÷ÓõĶԱàд·þÎñÆ÷´úÂëµÄÓ°Ï죬ÏÈ´óּǼÔÚÕâÀï¡£ÕâÆª²©¿ÍÒ²¿ÉËã×÷ǰһƪ¡¶¶àÏ̷߳þÎñÆ÷µÄ³£Óñà³ÌÄ£ÐÍ¡·µÄÒ»¸ö×¢½Å¡£ 1. ·þÎñÆ÷³ÌÐòµÄ·ç¸ñ¿ÉÄÜÔÚ±ä еĴ´½¨ÎļþÃèÊö·ûµÄ syscall Ò»°ã¶¼Ö§³Ö ......
2005Äê9ÔÂ22ÈÕ£¬Ç廪ÔÚ¶Á²©Ê¿ÉúÍõÛóÔÚˮľÉçÇøBLOGÉÏ·¢±íÁË¡¶Ç廪ÃεķÛËé--д¸øÇ廪´óѧµÄÍËѧÉêÇë¡·Ã÷È·ÒªÇóÍËѧ, ÒýÆðÉç»á¸÷½ç¹ã·ºÕùÂÛ. Ëû´´×÷µÄ³¤ÆªÎÄÕ¡¶ÍêÈ«ÓÃLinux¹¤×÷¡·, ÑóÑóÁ½Íò¶à×Ö, ´Ó²»Í¬½Ç¶È¾Ó¸ßÁÙϵIJûÊöÁËËûÑÛÖÐLinuxÍêÈ«ÓÅÔ½ÓÚWindowsµÄ¸÷ÖÖÀíÓÉ, ÕâÆªÎÄÕ²¢²»¼òµ¥µÄÊÇһƪÂÛÊö"WindowsÄÜ×öµÄÊÂLinux¶¼Ä ......
#protect share data
spin_lock/spin_unlock: protect the data during process context(and only at process context), and make sure your code bewteen lock/unlock is fast enough.There may deadlock if the same spin_lock is called at interrupt context.
spin_lock_irq/spin_unlock_irq: call it during interru ......