응용프로그램 레벨에서 컨텍스트 스위칭(Context Switching)을 막는 법이 있을까요?
글쓴이: leboum / 작성시간: 화, 2017/08/01 - 5:28오후
void T(){
while(1){
.....
//선점방지 시작
int time = GetTime();
//선점방지 끝
.....
}
}
쓰레드에서 GetTime()가 호출 될때 컨텍스트 스위칭이 일어나는것을 막고 싶습니다.
시간에 민간한 데이터를 얻어오게 되는데 보장 받고 싶기 때문입니다.
간략하게 드라이버를 작성, ioctl을 이용해서
preempt_disable() 를 이용해보려고 했지만 예상대로 동작을 하지 않더군요.
preempt_disable(), 호출 이후 동일 함수안에서 preempt_enable() 이 호출 되어야 하더군요.
뭔가 좋은 방법이 없을까요?
Forums:
안녕하세요
안녕하세요
저도 초보자인데요 그런 방식으로 구현하면 시스템 전체에 락을 걸어버리는 식이 되어 안 좋지 않나요?
혹시 멀티코어 CPU라면 해당 쓰레드를 특정 코어에 고정해서(affinity) 돌리는 형식으로 분리하는 건 어떤가요? 그 코어엔 그 쓰레드만 도는 식으로요
저도 이런 경우 어떻게 해결하는게 정답인지 궁금하네요
해답을 바로 가지고 계신거 같은데요? ㅎㅎ
ioctl(MY_GET_TIME.....)
->
void my_get_time(.....)
{
.......
preempt_disable();
getnstimeofday(&time);
preempt_enable();
....
}
댓글 달기