LinuxÉ豸Çý¶¯¿ª·¢Ïê½â ±Ê¼Ç7 ²¢·¢¿ØÖÆ
ÖÐ¶ÏÆÁ±ÎµÄʹÓ÷½·¨£º
local_irq_disable() //¹ØÖжÏ
local_irq_enable() //¿ªÖжÏ
ÕâÁ½¸öº¯Êý¶¼Ö»ÄܽûÖ¹ºÍʹÄܱ¾cpuÄÚµÄÖжϣ¬Òò´Ë£¬²¢²»Äܽâ¾öSMP¶àcpuÒý·¢µÄ¾ºÌ¬¡£Òò´Ë£¬µ¥¶ÀʹÓÃÖÐ¶ÏÆÁ±Îͨ³£²»ÊÇÒ»ÖÖÖµµÃÍÆ¼öµÄ±ÜÃ⾺̬µÄ·½·¨£¬ËüÊÊÒËÓë×ÔÐýËøÁªºÏʹÓÃ
ÁíÍ⣬local_irq_save(flags)³ýÁ˽øÐнûÖ¹ÖжϲÙ×÷ÒÔÍ⣬»¹±£´æÄ¿Ç°cpuµÄÖжÏλÐÅÏ¢£¬local_irq_restore(flags)Ïà·´
Èç¹ûÖ»Ïë½ûÖ¹Öжϵĵװ벿£¬Ó¦¸ÃʹÓÃlocal_bh_disable()£¬Ïà·´local_bh_enable()
ÕûÐÍÔ×Ó²Ù×÷
1¡¢ÉèÖÃÔ×Ó±äÁ¿µÄÖµ
void atomic_set(atomic_t *v, int i); //ÉèÖÃÔ×Ó±äÁ¿µÄֵΪi
atomic_t v = ATOMIC_INIT(0); //¶¨ÒåÔ×Ó±äÁ¿v²¢³õʼ»¯Îª0
……
×ÔÐýËø£ºÎªÁË»ñµÃÒ»¸ö×ÔÐýËø£¬ÔÚijcpuÉÏÔËÐеĴúÂëÊ×ÏÈÐèÒªÖ´ÐÐÒ»¸öÔ×Ó²Ù×÷£¬¸Ã²Ù×÷²âÊÔ²¢ÉèÖã¨test-and-set£©Ä³¸öÄÚ´æ±äÁ¿£¬ÓÉÓÚËüÊÇÔ×Ó²Ù×÷£¬ËùÒÔÔڸòÙ×÷Íê³É֮ǰÆäËûÖ´Ðе¥Ôª²»¿ÉÄÜ·ÃÎÊÕâ¸öÄÚ´æ±äÁ¿¡£Èç¹û²âÊÔ½á¹û±íÃ÷ÒѾ¿ÕÏУ¬Ôò³ÌÐò»ñµÃÕâ¸ö×ÔÐýËø²¢¼ÌÐøÖ´ÐУ»Èç¹û±»Õ¼Ó㬳ÌÐò½«ÔÚÒ»¸öСµÄÑ»·ÄÚÖØ¸´Õâ¸ö“test-and-set”²Ù×÷£¬¼´½øÐÐËùνµÄ“×ÔÐý”¡£Ò»°ãÕâÑùʹÓÃ×ÔÐýËø£º
spinlock_t lock; //¶¨Òå×ÔÐýËø
spin_lock_init(&lock); //³õʼ»¯×ÔÐýËø
spin_lock(&lock); //»ñµÃ×ÔÐýËø£¬±£»¤ÁÙ½çÇø
spin_unlock(&lock); //½âËø
×ÔÐýËøÑÜÉúÌåÖÆ£º
×¢Ò⣺
1¡¢Ö»ÓÐÔÚÕ¼ÓÃËøµÄʱ¼ä¼«¶ÌµÄÇé¿öÏ£¬Ê¹ÓÃ×ÔÐýËø²ÅÊǺÏÀíµÄ
2¡¢×ÔÐýËø¿ÉÄܵ¼ÖÂϵͳËÀËø£¬ÈçµÝ¹éʹÓÃ×ÔÐýËø£¬¼´ÒѾӵÓÐcpuµÄ½ø³ÌÏëµÚ¶þ´Î»ñµÃ¡£copy_from_userºÍcopy_to_user()ºÍkmalloc()µÈº¯Êý¶¼¿ÉÄÜÒýÆð×èÈû£¬Òò´ËÔÚ×ÔÐýËøµÄÕ¼ÓÃÆÚ¼ä²»Äܵ÷ÓÃÕâЩº¯Êý
¶Áд×ÔÐýËø£¨rwlock£©£ºÊÇÒ»ÖÖ±È×ÔÐýËøÁ£¶È¸üСµÄËø»úÖÆ£¬±£ÁôÁË“×ÔÐý”µÄ¸ÅÄͬʱֻÄÜÒ»¸öд½ø³Ì£¬Í¬Ê±¿ÉÒÔÓжà¸ö¶ÁÖ´Ðе¥Ôª£¬µ±È»£¬¶Áд²»ÄÜͬʱ½øÐÐ
˳ÐòËø£¨seqlock£©£º¶ÈÖ´Ðе¥Ôª¿ÉÒÔÔÙдִÐе¥Ôª¶Ô±»Ë³ÐòËø±£»¤µÄ¹²Ïí×ÊÔ´½øÐÐд²Ù×÷ʱÈÔÈ»¿ÉÒÔ¼ÌÐø¶Á£¬¶ø²»±ØµÈ´ýдִÐе¥ÔªÍê³Éд²Ù×÷£¬Ð´Ö´Ðе¥ÔªÒ²²»ÐèÒªµÈ´ýËùÓжÁÖ´Ðе¥ÔªÍê³É¶Á²Ù×÷²ÅÈ¥½øÐÐд²Ù×÷¡£µ«ÊÇдÓëд֮¼ä»¹ÊÇ»¥³âµÄ
ÏÞÖÆ£ºÒªÇó±»±£»¤µÄ¹²Ïí×ÊÔ´²»º¬ÓÐÖ¸Õ룬ÒòΪдִÐе¥Ôª¿ÉÄÜʹµÃÖ¸ÕëʧЧ£¬µ«¶ÁÖ´Ðе¥ÔªÈç¹ûÕýÒª·ÃÎʸÃÖ¸Õ룬½«µ¼ÖÂOops
RCU£¨Read-Copy Update£¬¶Á-¿½±´-¸üУ©£º¶ÔÓÚ±»RCU±£»¤µÄ¹²ÏíÊý¾Ý½á¹¹£¬¶ÁÖ´Ðе¥Ôª²»ÐèÒª»ñµÃÈκÎËø¾Í¿ÉÒÔ·ÃÎÊËü£
Ïà¹ØÎĵµ£º
LinuxС¼¼ÇÉÊÕ¼¯
ǰÑÔ£ºÒòΪÓÃLinuxµÄʱ¼äÔ½À´Ô½³¤£¬ËùÐèÒª×öµÄÊÂÒ²Ô½À´Ô½¶à£¬Ð§ÂʳÉÁËÎÒ±ØÐèÍ»ÆÆµÄÆ¿¾±¡£ÔÚ´Ë×ܽáÒ»ÏÂÕâ¶Îʱ¼äÓùýµÄһЩºÃµÄLinux¼¼ÇÉ¡£ÒÔºóʱ³£²¹³äÕâÑù×Ô¼ºÒªÓõÄʱºò¾ÍºÜ·½±ãÁË¡£
Author:Ajian
[Îı¾´¦Àí]
1¡¢²é¿´Ä³ÎļþµÄÒ»²¿·Ö
Èç¹ûÄãÖ»Ïë¿´ÎļþµÄǰ 5 ÐУ¬¿ÉÒÔʹÓà head ÃüÁ
È磺head -5 ......
¶ÔLinuxÄÚºËÖнø³ÌÉÏÏÂÎĺÍÖжÏÉÏÏÂÎĵÄÀí½â
2010Äê3ÔÂ3ÈÕ 10:51 ά¿â¿ª·¢Íø ×÷ ÕߣºÑî˶,»ªÇåÔ¶¼ûǶÈëʽѧԺ½²Ê¦
Äں˿ռäºÍÓû§¿Õ¼äÊDzÙ×÷ϵͳÀíÂ۵Ļù´¡Ö®Ò»£¬¼´Äں˹¦ÄÜÄ£¿éÔËÐÐÔÚÄں˿ռ䣬¶øÓ¦ÓóÌÐòÔËÐÐÔÚÓû§¿Õ¼ä¡£ÏÖ´úµÄCPU¶¼¾ßÓв»Í¬ ......
1¡¢Ìí¼Ó´®¿Ú: ÔÚLinuxÆô¶¯Ö®Ç°£¬ÐéÄâ»ú--¡·ÉèÖÃ--¡·Ìí¼Ó--¡·´®¿Ú--¡·±£´æ--¡·Æô¶¯Linux¡£
2¡¢#minicom £¬³öÏÖÆô¶¯½çÃæ£¬CTRL-A Z ½øÈë°ïÖú½çÃæ
3¡¢¼üÈëO £¬ÅäÖô®¿Ú£¬Ñ¡ÔñµÚÈýÏî“Serial port setup”µã»÷»Ø³µ
4¡¢Í¨¹ý·Ö±ð¼üÈëA¡¢E¡¢F£¬ÅäÖ㬵ã»÷»Ø³µ£¨FÑ ......
ÔÚÓû§¿Õ¼ä£¬Ê¹ÓÃioctlϵͳµ÷ÓÃÀ´¿ØÖÆÉ豸£¬ÔÐÍÈçÏ£º
int ioctl(int fd, unsigned long cmd, ...);
µÚÈý¸ö²ÎÊý²»±íʾһ¸ö±äÊýÄ¿µÄ²ÎÊý£¬¶øÊÇÒ»¸öÀàÐÍ¿ÉÑ¡µÄ²ÎÊý¡£µÚÈý¸ö²ÎÊýÒÀÀµÓÚ¿ØÖÆÃüÁһЩÃüÁî²»ÓòÎÊý£¬Ò»Ð©ÓÃÒ»¸öÕûÊýÖµ£¬Ò»Ð©Ê¹ÓÃÖ¸Õë
1¡¢ioctlº¯Êý¶¨ÒåÃüÁî
ÔÚ±àдioctl´úÂë֮ǰ£¬Ê×ÏÈÐèÒª¶¨ÒåÃüÁΪÁË·ÀÖ¹ ......