안녕하세요.
제목 그대로 입니다.
최근 흥미로운 질문을 받았는데 정답을 모르겠어서 질문합니다.
atomic_read, atomic_add 시
interrupt 를 disable, restore 하는 루틴이 필요한지.. 혹은 필요하지 않은지..
각각 알려주세요.
감사합니다.
댓글 4
-
최형호
2014.10.04 23:07
-
YYS
2014.10.06 15:42
안녕하세요. 조금 자세히 알려주실 수 있으신가요?
감사합니다.
-
최형호
2014.10.06 18:05
안녕하세요.
atomic이라는 말은 multi core 및 multi thread 환경에서 특정 동작이 중간에 끊기지 않는 다는 것을 보장합니다.
예를 들면 read 후 write 하는 함수가 있따면 read 후 write 동작 중간에 다른 코어에서 혹은 다른 thread에서 값을 변경시키면
오동작을 할 수 있습니다. 이 때문에 atomic operation이 필요한 것입니다.
atomic_read는 어차피 read 명령어 하나로 구현이 되므로 문제가 되지 않지만
atomic_add는 read 후 write를 할 듯 합니다.
ARM의 경우 ldrex와 strex라는 명령어를 이용해서
atomic operation을 보장합니다.
그러므로 굳이 interrupt 를 disable하는 것 없이 구현이 됩니다.
(HW적으로 ldrex ~ strex 사이의 instructions들을 atomic하게 보장해줌)
추천:1 댓글
-
YYS
2014.10.08 11:26
안녕하세요.
자세한 설명 감사드립니다.
고맙습니다.
.
제가 아는선에서 답변 드리면,
HW적으로 atomic operation을 지원하는 instructions들이 존재하면 interrupt disable루틴이 필요 없고 SW적으로 구현하려면 필요한것 같습니다.