2004년 8월 28일 토요일

컴퓨터가 버벅이고, 짧은 간격으로 음악이 반복될때.

가끔씩 process가 멈추거나 timeout이 나서 이상한 상태에 빠지면
그 process에서 나오던 음악이 일정 부분 반복되는 경우가 있다.
"동해물과 백두~백두~백두~백두~백두~~~~~~~~~~~~"


내 생각에는 이 반복되는 주기의 크기가 sound card의 device driver나
kernel의 특정 module의 buffer size와 관련이 있는 것 같다.
buffer가 refresh되지 않고 내용이 그대로 저장되어 있으면서
lock이나 status flag가 깨지면서 그 분이 refresh되고 있는 것으로
착각을 일으켜서 계속 반복 play하는 것 같다.
Windows kernel에서 buffer를 static한 size로 잡아놓고 queue처럼 계속 같은 부분에 쓰는 게 아닐까?
사실 buffer를 stack에만 잡아놔도 function의 size가 같다면 어떤 function이 호출될 때
garbage값으로 계속 같은 공간이 다시 할당될 수도 있다.
그래서 우연히 같은 부분이 계속 play되는 걸지도...


흠. 내가 kernel 해커도 아니고 이런 현상이 재현도 쉽지 않을 테고
우리관처럼 쉽게 해부해 볼 수 있는 게 아닌데 어떻게 증명할 수 있을 까?
(Debugging 코드를 삽입하면 동작이 바뀌어서 유리관처럼 관찰할 수 없다.)


음.. 아무튼 10분 전에도 그 현상을 관측했는 데,
대략 buffer의 size를 추정해 보면
주기가 2초쯤 된다고 치면
256Kbps의 음악이라면 512Kbits =  64KBytes
Buffer size로 쓰기 적절한 크기인 것 같다.

댓글 없음:

댓글 쓰기