Linux/Unix ½ø³Ì¼äͨÐŵĸ÷ÖÖ·½Ê½¼°Æä±È½Ï
½ø³Ì¼äͨОÍÊÇÔÚ²»Í¬½ø³ÌÖ®¼ä´«²¥»ò½»»»ÐÅÏ¢£¬ÄÇô²»Í¬½ø³ÌÖ®¼ä´æÔÚ×Åʲô˫·½¶¼¿ÉÒÔ·ÃÎʵĽéÖÊÄØ£¿½ø³ÌµÄÓû§¿Õ¼äÊÇ»¥Ïà¶ÀÁ¢µÄ£¬Ò»°ã¶øÑÔÊDz»ÄÜ»¥Ïà·ÃÎʵģ¬Î¨Ò»µÄÀýÍâÊǹ²ÏíÄÚ´æÇø¡£µ«ÊÇ£¬ÏµÍ³¿Õ¼äÈ´ÊÇ“¹«¹²³¡Ëù”£¬ËùÒÔÄÚºËÏÔÈ»¿ÉÒÔÌṩÕâÑùµÄÌõ¼þ¡£³ý´ËÒÔÍ⣬ÄǾÍÊÇË«·½¶¼¿ÉÒÔ·ÃÎʵÄÍâÉèÁË¡£ÔÚÕâ¸öÒâÒåÉÏ£¬Á½¸ö½ø³Ìµ±È»Ò²¿ÉÒÔͨ¹ý´ÅÅÌÉÏµÄÆÕͨÎļþ½»»»ÐÅÏ¢£¬»òÕßͨ¹ý“×¢²á±í”»òÆäËüÊý¾Ý¿âÖеÄijЩ±íÏîºÍ¼Ç¼½»»»ÐÅÏ¢¡£¹ãÒåÉÏÕâÒ²Êǽø³Ì¼äͨÐŵÄÊֶΣ¬µ«ÊÇÒ»°ã¶¼²»°ÑÕâËã×÷“½ø³Ì¼äͨÐÅ”¡£ÒòΪÄÇЩͨÐÅÊֶεÄЧÂÊÌ«µÍÁË£¬¶øÈËÃǶԽø³Ì¼äͨÐŵÄÒªÇóÊÇÒªÓÐÒ»¶¨µÄʵʱÐÔ¡£
¡¡¡¡½ø³Ì¼äͨОÍÊÇÔÚ²»Í¬½ø³ÌÖ®¼ä´«²¥»ò½»»»ÐÅÏ¢£¬ÄÇô²»Í¬½ø³ÌÖ®¼ä´æÔÚ×Åʲô˫·½¶¼¿ÉÒÔ·ÃÎʵĽéÖÊÄØ£¿½ø³ÌµÄÓû§¿Õ¼äÊÇ»¥Ïà¶ÀÁ¢µÄ£¬Ò»°ã¶øÑÔÊDz»ÄÜ»¥Ïà·ÃÎʵģ¬Î¨Ò»µÄÀýÍâÊǹ²ÏíÄÚ´æÇø¡£µ«ÊÇ£¬ÏµÍ³¿Õ¼äÈ´ÊÇ“¹«¹²³¡Ëù”£¬ËùÒÔÄÚºËÏÔÈ»¿ÉÒÔÌṩÕâÑùµÄÌõ¼þ¡£³ý´ËÒÔÍ⣬ÄǾÍÊÇË«·½¶¼¿ÉÒÔ·ÃÎʵÄÍâÉèÁË¡£ÔÚÕâ¸öÒâÒåÉÏ£¬Á½¸ö½ø³Ìµ±È»Ò²¿ÉÒÔͨ¹ý´ÅÅÌÉÏµÄÆÕͨÎļþ½»»»ÐÅÏ¢£¬»òÕßͨ¹ý“×¢²á±í”»òÆäËüÊý¾Ý¿âÖеÄijЩ±íÏîºÍ¼Ç¼½»»»ÐÅÏ¢¡£¹ãÒåÉÏÕâÒ²Êǽø³Ì¼äͨÐŵÄÊֶΣ¬µ«ÊÇÒ»°ã¶¼²»°ÑÕâËã×÷“½ø³Ì¼äͨÐÅ”¡£ÒòΪÄÇЩͨÐÅÊֶεÄЧÂÊÌ«µÍÁË£¬¶øÈËÃǶԽø³Ì¼äͨÐŵÄÒªÇóÊÇÒªÓÐÒ»¶¨µÄʵʱÐÔ¡£
¡¡
¡¡¡¡½ø³Ì¼äͨÐÅÖ÷Òª°üÀ¨¹ÜµÀ, ϵͳIPC(°üÀ¨ÏûÏ¢¶ÓÁÐ,ÐźÅÁ¿,¹²Ïí´æ´¢), SOCKET.
¡¡¡¡¹ÜµÀ°üÀ¨ÈýÖÖ:1)ÆÕͨ¹ÜµÀPIPE, ͨ³£ÓÐÖÖÏÞÖÆ,Ò»ÊǰëË«¹¤,Ö»Äܵ¥Ïò´«Êä;¶þÊÇÖ»ÄÜÔÚ¸¸×Ó½ø³Ì¼äʹÓÃ. 2)Á÷¹ÜµÀs_pipe: È¥³ýÁ˵ÚÒ»ÖÖÏÞÖÆ,¿ÉÒÔË«Ïò´«Êä. 3)ÃüÃû¹ÜµÀ:name_pipe, È¥³ýÁ˵ڶþÖÖÏÞÖÆ,¿ÉÒÔÔÚÐí¶à²¢²»Ïà¹ØµÄ½ø³ÌÖ®¼ä½øÐÐͨѶ.
¡¡¡¡ÏµÍ³IPCµÄÈýÖÖ·½Ê½Ààͬ,¶¼ÊÇʹÓÃÁËÄÚºËÀïµÄ±êʶ·ûÀ´Ê¶±ð.
FAQ1: ¹ÜµÀÓëÎļþÃèÊö·û,ÎļþÖ¸ÕëµÄ¹ØÏµ?
¡¡¡¡´ð: Æäʵ¹ÜµÀµÄʹÓ÷½·¨ÓëÎļþÀàËÆ,¶¼ÄÜʹÓÃread,write,openµÈÆÕͨIOº¯Êý. ¹ÜµÀÃèÊö·ûÀ´ÀàËÆÓÚÎļþÃèÊö·û. ÊÂʵÉÏ, ¹ÜµÀʹÓõÄÃèÊö·û, ÎļþÖ¸ÕëºÍÎļþÃèÊö·û×îÖÕ¶¼»áת»¯³ÉϵͳÖÐSOCKETÃèÊö·û. ¶¼Êܵ½ÏµÍ³ÄÚºËÖÐSOCKETÃèÊö·ûµÄÏÞÖÆ. ±¾ÖÊÉÏLINUXÄÚºËÔ´ÂëÖйܵÀÊÇͨ¹ý¿ÕÎļþÀ´ÊµÏÖ.
FAQ2: ¹ÜµÀµÄʹÓ÷½·¨?
¡¡¡¡´ð: Ö÷ÒªÓÐÏÂÃæ¼¸ÖÖ·½·¨:&nbs
Ïà¹ØÎĵµ£º
LinuxϵͳϵĶàÏß³Ì×ñÑPOSIXÏ߳̽ӿڣ¬³ÆÎª pthread¡£±àдLinuxϵĶàÏ̳߳ÌÐò£¬ÐèҪʹÓÃÍ·Îļþpthread.h£¬Á¬½ÓʱÐèҪʹÓÿâlibpthread.a¡£Ë³±ã˵һÏ£¬Linux ÏÂpthreadµÄʵÏÖÊÇͨ¹ýϵͳµ÷ÓÃclone£¨£©À´ÊµÏֵġ£clone£¨£©ÊÇ LinuxËùÌØÓеÄϵͳµ÷Óã¬ËüµÄʹÓ÷½Ê½ÀàËÆfork£¬¹ØÓÚclone£¨£©µÄÏêϸÇé¿ö£¬ÓÐÐËȤµÄ¶ÁÕß¿ÉÒÔÈ¥²é ......
ºÜÏë½Ó´¥Ò»ÏÂLinuxµÄÄںˣ¬×î½ü¼ÓÈëÁËLKML£¨Linux Kernel Mailing List£©£¬ÓÌÈ糱ˮ°ãµÄmailÓ¿ÈëÁËÎÒµÄGmail>_<
Ò»¿ªÊ¼ºÜÃÔ㣬Èç´ËÅÓ´óÁËLinuxÄں˴úÂ룬´ÓºÎ¿ªÊ¼£¿ÍøÉÏ¿´µ½ÁËÒ»Ìõ½¨Ò飺´ÓLinuxÉ豸Çý¶¯µÄ±àд¿ªÊ¼¡£
ÓÚÊÇÕÒµ½ÁËÒ»±¾Õâ·½Ãæ±È½ÏºÃµÄ½Ì²Ä£ºLinux Device Drivers, 3rd Edition£¨LDD3£©
²»¹ýÕâ±¾ÊéÀïà ......
ÎÄÕÂÀ´Ô´£ºhttp://blog.chinaunix.net/u3/94284/showart_1982227.html
Ò»:ǰÑÔ
½Ó×ÅÇ°ÃæµÄÖÕ¶Ë¿ØÖÆÌ¨·ÖÎö,½ÓÏÂÀ´·ÖÎöserialµÄÇý¶¯.ÔÚlinuxÖÐ,serialÒ²¶ÔÓ¦×ÅÖÕ¶Ë,ͨ³£±»³ÆÎª´®¿ÚÖÕ¶Ë.ÔÚshellÉÏ,ÎÒÃÇ¿´µ½µÄ/dev/ttyS*¾ÍÊÇ´®¿ÚÖÕ¶ËËù¶ÔÓ¦µÄÉ豸½Úµã.
ÔÚ·ÖÎö¾ßÌåµÄserialÇý¶¯Ö®Ç°.ÓбØÒªÏÈ·ÖÎöuartÇý¶¯¼Ü¹¹.uartÊÇUniversal ......
Linux Device Drivers, 3rd Edition
2.3.1. User Space and Kernel Space
Äں˿ռäºÍÓû§¿Õ¼ä
Unix transfers execution from user space to kernel space whenever an application issues a system call or is suspended by a hardware interrupt. Kernel code executing a system call is working in the context of a ......