절전(시스템 호출)
Sleep (system call)컴퓨터 프로그램(프로세스, 작업 또는 스레드)은 일정 시간 동안 비활성 상태로 전환되는 절전 모드일 수 있다.결국 인터벌 타이머의 만료 또는 신호나 인터럽트의 수신은 프로그램의 실행을 재개하게 한다.
사용법
일반적인 수면 시스템 호출은 시간 값을 매개 변수로 사용하여 실행을 재개하기 전에 프로세스가 절전 모드로 전환되는 최소 시간을 지정한다.일부 운영 체제는 밀리초 또는 마이크로초와 같이 보다 미세한 분해능을 제공하지만 파라미터는 일반적으로 초를 지정한다.
창문들
Windows에서는Sleep()
함수는 절전 시간(밀리초)의 단일 매개 변수가 필요하다.그Sleep()
함수는 커널32.1987에 포함되어 있다.[1]
그Sleep()
함수는 현재 타이머 해상도보다 높지 않은 해상도를 가지고 있으며, 일반적으로 16ms이지만 최소 1ms에서 를 통해 조정 가능하다.timeBeginPeriod()
"미디어 타이머" API 제품군.더 높은 정밀도를 위해, 바쁜 루프를 사용할 필요가 있다.QueryPerformanceCounter()
Gnulib에 사용된 것과 같은 것.[2]
유닉스
Unix 유사 및 기타 POSIX 운영 체제에서는sleep()
함수는 수면 시간(초)의 부호 없는 정수 유형의 단일 파라미터를 제공하는 것으로 불린다.[3]고정밀 버전은nanosleep()
기능 및 현재 사용되지 않는 기능usleep
.[4] POSIX는 또한 확장 버전을 통해 클럭 소스를 선택할 수 있도록 허용한다.clock_nanosleep()
.[5]
의 버전clock_nanosleep()
C 프로그래밍 언어의 일부로 제안되었지만 거부되었다.같은 제안의 UTC 시간 부분은 C11에 추가되었다.[6]
C의 예
Windows API의 경우:
잠(2 * 1000); // 2초간 수면
Unix 또는 POSIX 시스템 호출의 경우:
잠을 자다(2); // 2초간 수면
낮은 수준의 기능
절전 모드에서는 나사산 또는 프로세스가 나머지 시간 조각을 포기하고 지정된 기간 동안 실행 불가능한 상태를 유지하도록 한다.일반적으로 최소 기간에는 보증이 있지만, 정해진 시간이 지나면 바로 또는 곧, 또는 아예 실이 가동된다는 엄격한 보장은 없다.그것은 스케줄러의 재량에 달렸으며, 수면 쓰레드가 다시 실행될 때 타이머 해결과 같은 스레드 우선 순위와 구현 세부사항에 의존한다.
POSIX 시스템에서는 나노 수면 및 관련 syscall이 신호에 의해 중단되어 남은 수면 시간을 되돌린다.반면, 슬립 라이브러리 기능은 많은 구형 시스템에서 경보 syscall을 통해 구현되므로 신호를 전달해야만 작동한다.Windows Sleep 기능은 관련 SleepEx 기능을 사용하여 스레드를 경고 가능한 상태로 만들 수 있지만 신호가 없어 중단되지 않으며(스레드 또는 그 프로세스가 종료되는 것은 제외), 스레드가 절전 중일 때 APC 호출을 허용한다.또한 다른 스레드의 예외로 인해 프로세스가 종료되는 경우, 스레드는 기술적으로 "중단"될 수 있다.
사용하다
종료되지 않는 일부 시스템 프로그램은 이벤트 루프를 실행하며, 각 사이클이 시작될 때 절전 모드로 전환하고 어떤 이벤트가 이를 깨우기를 기다린다.이벤트가 수신되면 프로그램은 이벤트를 처리한 후 다음 대기 주기의 시작으로 돌아간다.
다른 프로그램은 특정 시간 간격 후에 절전 모드로 전환하고 실행을 재개하여 이벤트를 정기적으로 폴링한다.실행이 재개되면, 프로그램은 이벤트나 상태에 대한 폴링을 변경한 후, 잠자는 동안 발생한 모든 것을 서비스한다.이벤트를 처리한 후 프로그램은 다음 시간 간격 동안 다시 절전 모드로 전환된다.특정 종류의 심장 박동 이벤트 또는 keep-alive 신호는 이러한 종류의 프로그램에 의해 생성될 수 있다.
그sleep()
함수 호출은 실행 중인 프로그램 또는 코드의 실행을 느리게 하기 위해 짧은 시간 동안 반복적으로 호출될 수 있다.이러한 방식으로 코드를 조절하면 하드웨어[7] 과열의 영향을 완화하거나 레거시 프로그램의 타이밍 문제를 완화하기 위한 거친 메커니즘이 제공된다.소프트웨어 실행 속도를 제어하기 위해 (에뮬레이터를 통해) 사이클 에뮬레이션을 활용하기보다는 수면과 실행 상태를 사이클링하는 단점이 있다면, 너무 적은 시간을 깨어있거나 너무 많은 시간을 수면을 취하거나 둘 모두를 조합하면 인터랙티브 소프트웨어가 눈에 띄는 말더듬이를 얻게 된다는 것이다.[8]
무정전수면
무정전 절전 상태는 신호를 바로 처리하지 못하는 절전 상태를 말한다.대기 중인 리소스가 사용 가능해진 결과 또는 대기 중 시간 초과가 발생한 후에만(수면을 취할 때 지정한 경우) 깨진다.디스크나 네트워크 IO(입/출력)를 기다리는 장치 드라이버가 주로 사용한다.프로세스가 무정전 절전 모드일 때, 절전 중 누적된 신호는 프로세스가 시스템 호출이나 트랩에서 돌아올 때 알 수 있다.
Unix와 유사한 시스템에서는 명령 'ps -l
는 코드 "를 사용한다.D
" 프로세스의 무정전 절전 상태.[9]그런 과정은 아무리 해도 죽일 수 없고, 그것을 없애는 유일한 방법은 시스템을 재부팅하는 것이다.[10][11]
참고 항목
참조
- ^ MSDN 라이브러리 참조 - 절전()
- ^ "winapi - Is there a Windows equivalent of nanosleep?". Stack Overflow.
- ^ Linux 설명서 –
- ^ Linux 설명서 –
- ^ Linux 설명서 –
- ^ Kuhn, Markus. "Modernized API for ISO C". www.cl.cam.ac.uk.
- ^ mion (2016-12-06). "BES – Battle Encoder Shirase 1.6.3 (stable) & 1.7.4 for Windows 7/XP/2000". mion.faireal.net. Retrieved 2017-02-09.
- ^ Marletta, Angelo (2015-03-12). "CPULIMIT". GitHub. Retrieved 2017-02-09.
- ^ "top(1) - Linux manual page". man7.org. 2016-12-12. Retrieved 2017-02-09.
- ^ "Processes in an Uninterruptible Sleep (D) State". Novell. 2009-02-21. Retrieved 2017-02-09.
- ^ Fusco, John (2007-03-06). The Linux Programmer's Toolbox. Pearson Education. ISBN 9780132703048.