Linux FIFO에서 스레드를 생성할 때 param.sched_priority를 ​​사용하는 것이 권장됩니까?

Linux FIFO에서 스레드를 생성할 때 param.sched_priority를 ​​사용하는 것이 권장됩니까?

내 임베디드 장치에서 우리가 사용하는 프로토콜의 이상한 동작을 흡수했으며 때로는 FIFO를 사용하여 직렬 장치를 통해 데이터를 보내는 데 시간이 걸립니다.

나는 Linux가 실시간 운영 체제가 아니라고 생각합니다. 왜 Linux에는 실시간 시뮬레이션 기능이 있습니까?pthread_setschedparam? 그리고 대기열에 이러한 우선 순위가 있으면 다른 프로세스가 슬레이브 장치를 감지하지 못하게 됩니다.

Linux에서 param.sched_priority = 40을 사용하는 것이 권장되는지 궁금합니다. 이 매개변수를 조정해 보았지만 현장에서 문제를 재현하기 어렵습니다.

이것은 코드입니다

if (1)
{
    int policy;
    int r;
    struct sched_param param;

    policy = SCHED_FIFO;
    param.sched_priority = 40;
    r = pthread_setschedparam(cc_state->ser_thread, policy, &param);
    printf("%s: pthread_setschedparam %d", __func__, r);
}

답변1

Linux 실시간은 시뮬레이션이 아니며 일정에 영향을 미치는 시스템 호출이 있습니다. 바라보다 man sched(7). 귀하의 질문에서 무엇을하고 싶은지, 정확한 문제가 무엇인지 명확하지 않습니다. 값은 sched_priority다른 스레드의 우선순위에만 관련됩니다. 예를 들어, 우선순위가 0보다 큰 스레드가 하나만 있는 경우 우선순위가 1인지 40인지는 중요하지 않습니다. 값이 더 높아도 스레드에 추가 "부스트"가 제공되지 않습니다. 스레드에 필요한 상대적 우선순위를 결정하고 그에 따라 우선순위 값을 할당해야 합니다.

SCHED_FIFO스레드와 관련된 시간은 없습니다 . 스레드는 SCHED_FIFO다음 조건 중 하나가 발생할 때까지 계속 실행됩니다. 스레드가 I/O를 기다리면서 차단되거나, 우선 순위가 더 높은 스레드가 실행될 준비가 되었거나, 스레드가 자발적으로 프로세서를 포기합니다. 동일한 우선순위의 스레드가 여러 개 있는 경우 이를 고려해야 합니다. 그렇지 않으면 하나의 스레드가 다른 스레드의 CPU를 차지할 수 있습니다. 다중 프로세서 컴퓨터에서는 여러 스레드가 자체 CPU에서 동시에 실행될 수 있습니다.

관련 정보