Linux2010.05.29 10:36
ATMEL AVR에서도 cli() sti()는 들은거 같았는데, Linux에서도 있었군 -ㅁ-!
아무튼 결론은, Linux Kernel 2.6 이상의 커널에서는 사용하지 않으면 하위호환성으로 인해 존재할 뿐
실질적으로는 local_irq_enable / local_irq_disable 을 사용하라고 한다.

CLear Interrupt
SeT Interrupt 입니다.
인터럽트를 Disable/Enable하는 것이고요. ;;

[링크 : http://kldp.org/node/43805]

커널 2.6 의 <include/linux/interrupt.h> 에 define 되어 있습니다.
이전 버전과의 호환성을 위해 존재하며
앞으로는 local_irq_enable/disable() 을 직접 사용하는 편이 좋습니다.

50 /*
51 * Temporary defines for UP kernels, until all code gets fixed.
52 */
53 #ifndef CONFIG_SMP
54 # define cli() local_irq_disable()
55 # define sti() local_irq_enable()
56 # define save_flags(x) local_save_flags(x)
57 # define restore_flags(x) local_irq_restore(x)
58 # define save_and_cli(x) local_irq_save(x)
59 #endif

[링크 : http://kldp.org/node/43805]

Posted by 구차니

댓글을 달아 주세요

  1. 커널 프로그래밍의 처음이자 마지막이 synchronization인듯 합니다. 이 synchronization을 가장 쉽게 만드는 툴이 바로 저 두 명령어였고요.. 덕분에 성능은 개판으로 나오긴 합니다만. ㅎㅎㅎ

    처음 커널 프로그래밍할 때, 언제나 interrupt가 생겨서 무슨 일이 생길지 모른다는 걸 알고서, 골치 아팠던 생각이 나네요.

    2010.05.30 16:52 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 커널프로그래밍은 시간내서 해봐야하는데 맨날 어플만 해서 모르겠어요 ㅠ.ㅠ
      아무튼 MFC에서도 동기화는 어려워서 맨날 순차적으로만 해결하고 그랬거든요 ㅠ.ㅠ

      아악 너무나 먼 당신 '동기화' 입니다 ㅠ.ㅠ

      2010.05.30 18:24 신고 [ ADDR : EDIT/ DEL ]