2011-04-22 2 views
6

모두 리눅스에서 작업에 대한 몇 가지 질문이 있습니다. 현재 상태가 TASK_RUNNING 인 모든 작업이 runqueue이라는 데이터 구조에 있지만 어떤 이벤트 (TASK_RUNNING이 아닌 상태 키보드에서 입력을 기다리는 예). 이러한 작업을위한 다른 데이터 구조가 있습니까? 아니면 list of tasks일까요? TASK_INTERRUPTIBLETASK_UNINTERRUPTIBLE 상태 또는 어떤 설명커널은 어디에서 실행되지 않는 프로세스를 저장합니까?

답변

2

프로세스에 미리 감사는 상기 특정 이벤트에 대응하는 각각의 다른 클래스로 세분화된다. 이 상태에서 프로세스 상태는 프로세스 설명자를 빠르게 검색 할 수있는 충분한 정보를 제공하지 않으므로 wait_queue이라는 프로세스 목록이 사용됩니다. Wait_queue는 이벤트에 대한 조건부 대기를 구현합니다. 특정 이벤트를 기다리는 프로세스가 적절한 대기 대기열에 배치됩니다.

대기 대기열은 요소에 처리기 설명자를 포함하는 순환 목록으로 구현됩니다. 대기 큐리스트의 각 요소가 입력 wait_queue이다 :

struct wait_queue { 
    struct task_struct * task; 
    struct wait_queue * next; 
}; 
0

대기 큐는 특정 이벤트가 발생할 때까지 대기하는 프로세스를 활성화하기 위해 사용된다 - 키보드로부터 입력을 대기한다.

관련 문제