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±£»¤µÄ¹²ÏíÊý¾Ý½á¹¹£¬¶ÁÖ´Ðе¥Ôª²»ÐèÒª»ñµÃÈκÎËø¾Í¿ÉÒÔ·ÃÎÊËü£
Ïà¹ØÎĵµ£º
Author-------Dansen-----xzd2734@163.com
wait_queue_head_t wait_q;
Ê×ÏÈ¿´¿´
wait_queue_head_tÕâ¸öµÈ´ý¶ÓÁеĽṹ
ÔÚwait.hÖж¨ÒåÁËÕâ¸ö½á¹¹
typedef struct
__wait_queue_head wait_queue_head_t;
struct __wait_queue_head {
wq_lock_t
lock;
struct list_head task_list;
};
# define wq_ ......
´¦ÀíÆ÷µÄ·ÖÀ࣬ÈçÏÂͼËùʾ£º
´æ´¢Æ÷¿É·ÖΪֻ¶Á´æ´¢Æ÷£¨ROM£©¡¢ÉÁ´æ£¨Flash£©¡¢Ëæ»ú´æÈ¡´æ´¢Æ÷£¨RAM£©¡¢¹â½éÖÊ´æ´¢Æ÷ºÍ´Å½éÖÊ´æ´¢Æ÷
Nor FlashºÍcpuµÄ½Ó¿ÚÊôÓÚµäÐ͵ÄÀàSRAM½Ó¿Ú£¬²»ÐèÒªÔö¼Ó¶îÍâµÄ¿ØÖƵç·¡£Nor FlashµÄÌØµãÊÇ¿ÉоƬÄÚÖ´ÐУ¬³ÌÐò¿ÉÒÔÖ±½ÓÔÚNorÄÚÔËÐС£¶øNand FashºÍcpuµÄ½Ó¿Ú±ØÐëÓÉÏàÓ¦µÄ¿ØÖƵç·½øÐÐת»»£ ......
ÔÚÉ豸Çý¶¯·½Ã棬Linux2.6Ïà¶ÔÓÚLinux2.4ÓнϴóµÄ¸Ä¶¯£¬ÕâÖ÷Òª±íÏÖÔÚÄÚºËAPIÖÐÔö¼ÓÁ˲»ÉÙй¦ÄÜ£¨ÈçÄÚ´æ³Ø£©¡¢sysfsÎļþϵͳ¡¢ÄÚºËÄ£¿é´Ó.o±äΪ.ko¡¢Çý¶¯Ä£¿é±àÒ뷽ʽ¡¢Ä£¿éʹÓüÆÊý¡¢Ä£¿é¼ÓÔØºÍÐ¶ÔØº¯ÊýµÄ¶¨ÒåµÈ·½Ãæ
LinuxÄÚºËÖ÷ÒªÓнø³Ìµ÷¶È¡¢ÄÚ´æ¹ÜÀí¡¢ÐéÄâÎļþϵͳ¡¢ÍøÂç½Ó¿ÚºÍ½ø³Ì¼äͨÐŵÈ5¸ö×Óϵͳ×é³É£¬ÈçÏÂͼ£º
......
ÎҵĵÚÒ»¸öshell³ÌÐò£ºtt1.sh
while true
do
date;
sleep 1;
done
Ö´Ðз½Ê½1£ºsh tt1.sh
Ö´Ðз½Ê½2£º./tt1.sh£¨ÒªÇó¸ÃÎļþÓпÉÖ´ÐÐȨÏÞ£©
Shell±äÁ¿£º
»·¾³±äÁ¿£º
¹¤¾ß£ºecho »ØÏÔ
&n ......