답변:
대기 채널은 작업이 현재 대기중인 커널의 위치입니다. 작업은 데이터 또는 처리 시간이 될 수있는 리소스를 기다려야합니다. 이 두 가지는 네트워크 소켓, 하드웨어, 파일 등을 포함합니다. 유닉스 계열 시스템에서는 대부분 파일 일뿐입니다.
0
: 프로세스가 기다리고 있지 않습니다
poll_schedule_timeout
poll()
I / O를 처리하는 데 사용되는 시스템 호출 1 입니다. 와 비슷합니다 select()
. 2
비 차단 I / O를 사용하는 응용 프로그램은 이러한 호출을 사용하여 파일을 차단하지 않고도 파일을 읽거나 쓸 수 있는지 확인합니다. 그것들은 종종 입 / 출력 스트림에 사용되며 차단되지 않을 수도 있습니다 (그렇지 않으면 마우스가 움직이지 않을 수도 있습니다).
대기 채널 poll_schedule_timeout
은 작업이 키보드 및 마우스와 같은 하드웨어, 사운드 장치 또는 네트워크 소켓과 같은 I / O를 기다리고 있음을 나타냅니다.
<linux/poll.h>
있습니다. poll
System V에서 처음 본 구현 select
은 BSD UNIX와 동일합니다.
futex_wait_queue_me
:
이를 설명하기 위해 잠금을 살펴 봐야합니다. 잠금은 시스템에서 작업이 리소스와 함께 작동 함을 나타내는 저장된 상태입니다. 예를 들어 파일을 읽는 작업이 하나만있을 수 있습니다. 이 작업은 파일을 잠그고 파일 을 읽으려고 하는 다른 작업 1 은 파일이 잠겨 있다는 것을 알고 잠금이 사라질 때까지 기다렸다가 파일에 액세스 할 수 있습니다. 프로세서 시간에서도 마찬가지입니다.
최신 버전의 Linux (대부분의 아키텍처에서)는 커널에서 Futex (고속 사용자 공간 뮤텍스) 잠금을 사용합니다. 상호 배제 인 Mutex는 언제든지 한 작업만으로 공통 리소스에 액세스 할 수 있다는 아이디어를 말합니다. 이를 위해 시스템의 플래그가 설정됩니다.
프로세스가 잠긴 자원을 대기하는 경우이를 대기 중 또는 "회전"이라고하며, 가능할 때까지 계속해서 액세스하려고한다는 사실을 나타냅니다. 작업이 회전하면 차단 되었다고합니다 .
Futex 잠금은 사용자 공간에서 숫자로 생각할 수 있으며, 이는 작업에 의해 증가 또는 감소 될 수 있습니다 (여러 작업이 리소스에 액세스 할 수 있는 경우이 수가 1보다 클 수 있음). 이것은 도표 4에 표시된 숫자 입니다.
이러한 작업은 대기 시간, 즉 작업 시간이 필요하면 작업을 수행하고 대기열에서 제거되는 간단한 작업 대기열 인 대기열에 대기합니다.
futex_wait_queue_me
작업을 대기열에 넣습니다. 그런 다음 신호, 시간 초과 또는 웨이크 업을 기다립니다. 이 대기 채널에 있는 작업 은 대기 대기열이 아닌 대기 중이며 대기열에 대기 중입니다.
__skb_recv_datagram
잠긴 네트워크 소켓에서 일부 데이터를 기다립니다.
sk_wait_data
네트워크 소켓에서 일부 데이터를 기다립니다.
do_exit
이것은 프로세스 종료의 마지막 부분입니다. 다른 프로세스를 예약하기 do_exit()
위해 schedule()
다음을 호출합니다 . 때 do_exit()
호출, 프로세스는 것입니다 ZOMBIE
.
do_wait
프로세스가 스케줄러 대기 큐에 추가됩니다.
pipe_wait
, unix_stream_data_wait
프로세스가 서브 프로세스의 데이터를 기다리고 있습니다. 예를 들어 이런 종류의 코드를 실행할 때 이런 일이 발생합니다.
echo | sleep 10 && echo hallo # pipe
또는
cat < hello.c # unix data stream
hrtimer_nanosleep
hrtimer_nanosleep()
방법을 사용하여 프로세스가 대기 중 입니다. 이 방법은 프로그램이 나노초 정확도로 특정 시간 간격 동안 휴면 상태를 유지하는 데 사용할 수 있습니다.
이것들은 전부는 아니지만 다른 사람은 관찰하지 못했습니다. 내가 놓친 부분이 있으면 의견을 게시하십시오.
signal
? 나는 그것에 부딪쳤다. 프로세스가 종료 되었습니까? 좀비? 또는 무엇을? 프로세스는 어떻게 되나요?
대기 채널 값은 프로세스가 현재 차단 된 커널 기능의 이름입니다.
이름은 일반적으로 시스템 호출과 관련이 있으며 매뉴얼 페이지가 있습니다.
더 자세한 정보를 원한다면 커널 소스를 확인하십시오 .
cat /proc/some_pid/stack
터미널에 입력하면 다음 과 같은 출력이 나타납니다.
[<c0227f4e>] poll_schedule_timeout+0x3e/0x60
[<c022879f>] do_select+0x55f/0x670
[<c0228f40>] core_sys_select+0x140/0x240
[<c0229241>] sys_select+0x31/0xc0
[<c05c9cc4>] syscall_call+0x7/0xb
[<ffffffff>] 0xffffffff
그리고 첫 번째 줄에는 시스템 모니터에 표시되는 내용이 표시됩니다. 내가 아는 한 poll_schedule_timeout 은 프로세스가 무언가를 기다리고 있음을 나타냅니다.
소스 : 1. 프로세스 대기 채널 (WCHAN) 및 알람? -2. AskUbuntu 답변