POSIX nanosleep은 x86 Linux에서 어떻게 구현됩니까?

POSIX nanosleep은 x86 Linux에서 어떻게 구현됩니까?

어떻게nanosleepx86 Linux에서 구현되었나요?

설명에는 다음과 같이 나와 있습니다.

nanosleep()최소한 *req지정된 시간이 경과할 때까지 호출 스레드의 실행을 일시 중단하거나, 호출 스레드에서 핸들러 호출을 트리거하거나 프로세스를 종료하는 신호를 전달합니다.

n내가 나노초 동안 자고 싶다고 가정 해 봅시다 .

나의 초기 가정은 실행이 중단되었다는 것이었습니다 HLT. 다음 "외부 인터럽트"가 발생할 때까지 일시 중지됩니다. 따라서 인터럽트를 예약해야 합니다.

  • 지금부터 n나노초 인터럽트를 예약하는 방법은 무엇입니까?
  • 내 프로세서는 이 시점에서 인터럽트를 어떻게 알 수 있습니까? 예를 들어 모든 주기를 확인합니까? 모든 주기를 확인한다면 루프에서 단순히 바쁜 대기를 하는 것보다 리소스를 덜 사용하는 방법은 무엇입니까?

답변1

리눅스에서는nanosleep 고해상도 타이머에 따라 다름. 이것메인 수면 루프주기

  • 현재 작업을 절전 모드로 전환
  • 타이머 시작
  • 일정 변경

보류 중인 신호가 없고 타이머가 만료되지 않은 한( 타이머가 만료된 경우 t->task가 됨 NULL) 필요한 경우 다시 시작합니다(타이머가 만료되기 전에 신호가 처리되는 경우).

고해상도 타이머는 인터럽트를 제공합니다. 다음 HLT과 같은 nanosleepCPU 명령어를 사용하여

관련 정보