안녕하십니까 까마굽니다 (__)오늘 번쩍 떠오른게 있어서 그걸 처리하기위해 노트북을 폈는데,어떤 부분이냐 하면 Serial을 통해 파일을 수신하는 부분이었습니다.잘되는 부분이긴한데, 간혹 보면 파일이 다 수신되지 않는 상황이 있어서 코드를 보게 됬는데요, 머 일단 속도를 좀 높이기 위해 약간의 삽질(??)을 하고실행을 딱 시키는 순간.. 앗찔하더군요.. ㅡ_ㅡ;;;아.. 글쎄.. 한 Task가 Serial Read를 줄기차게 요청하는데, 문제는 이놈이CPU를 독점하고 있던 것이었습니다.쿠.. 쿨럭;;;;사실 독점할만할 이유가 없었기때문에 상당히 당황스러웠는데 코드를 보는순간그럴수도 있겠다는 생각이 들더군요.코드는 대략 이렇습니다.while( 1 ){ dwRead = read( dwSerialFd , vbBuffer , sizeof( vbBuffer );}int read( ... ){  InNotSwitchingSection();  readFromSerial(...);  OutNotSwitchingSection();}코드를 보시면 InNotSwitchingSection() 이 스위칭을 불가하는 부분이구요,OutNotSwitchingSection()이 다시 가능하게 하는 부분입니다.요게 계속 루프를 돌니까, Timer Interrupt가 발생해서 스위칭을 하려고 보니InNotSwithchingSection()이 되어 스위칭 불가한 상황이 많아서 거의 스위칭을 하지 못하고 있더군요.사실 소비하는 시간으로 보면 스위칭 가능보다 불가로 있는 시간이 더긴....그래서 운이 좋으면 스위칭 될때고 있고.. ㅡ_ㅡ;;;;; 그런 상황이었습니다..그래서 이를 해결하고자.. kOutNotSwitchingSection()에서 만약 태스크가 자기에게 할당받은 Time Slice를 다 사용했을 경우, 강제로 다른 태스크로 스위칭 해주어 골고루 CPU를 사용할 수 있게 수정했습니다. 지금까지는 별 이상이 없어보이는데, 역시 두고봐야하겠죠..흠... 하다보니.. 이런 경우도 생기는 군요..그럼 좋은하루 되세요 (__)

+ Recent posts