Linux: 시스템 호출을 실행할 때 사용자 영역 스레드의 우선순위가 더 높습니까?

Linux: 시스템 호출을 실행할 때 사용자 영역 스레드의 우선순위가 더 높습니까?

내가 이해한 바에 따르면 Linux에는 커널 선점 기능이 있습니다. 즉, 시스템 호출을 실행하는 스레드를 선점하고 다음 에포크에서 실행되도록 일정을 조정할 수 있습니다.

이로 인해 일정을 다시 잡을 때 시스템 호출의 스레드에 우선 순위가 높아지는지 궁금합니다.

예를 들어, SCHED_OTHER가 있고 우선 순위가 20인 사용자 모드 프로세스가 있다고 가정해 보겠습니다(0은 가장 낮음, 139는 가장 높음). 이 프로세스는 표준 읽기 시스템 호출을 사용하여 sysfs에서 i2c eeprom 파일을 읽습니다. 이제 eeprom을 읽을 때 i2c 컨트롤러는 각 바이트를 한 번에 하나씩 수신해야 하므로 타이밍이 중요합니다. 바이트 수신 사이에 너무 오래 기다릴 수 없습니다. 그렇지 않으면 i2c 트랜잭션이 시간 초과됩니다.

이제 eeprom에서 바이트가 수신되면 스레드가 다시 예약됩니다(휴면 상태이거나 우선순위가 더 높은 스레드에 의해 선점되는 등). 스레드 일정이 변경되면 여전히 초기 우선순위가 20으로 낮습니까? 이는 문제인 것으로 보이며 장치에 연결되어 있고 타이밍이 중요하므로 더 높게 처리해야 합니다(rt 우선순위로 처리되기를 원하는 것 같습니다). 이러한 컨텍스트에서 스레드의 우선순위가 "상승"되었음을 나타내는 내용을 찾지 못했습니다.

관련 정보