운영체제 이론에서의 프로세스 현황과 Linux에서의 프로세스 현황

운영체제 이론에서의 프로세스 현황과 Linux에서의 프로세스 현황

psLinux 프로세스 상태 코드(예:)를 운영 체제 상태 다이어그램의 상태에 매핑 하려고 하는데 매핑할 수 없는 것 같습니다. Linux 프로세스 상태가 이론적 운영 체제 상태 다이어그램과 반드시 ​​일치하지 않기 때문입니까? 특히 다이어그램에서 D///가 어디에 S있는지 잘 모르겠습니다 .TI

  • ps프로세스 상태 코드매뉴얼 페이지에서:

    PROCESS STATE CODES
           Here are the different values that the s, stat and state output
           specifiers (header "STAT" or "S") will display to describe the
           state of a process:
    
                   D    uninterruptible sleep (usually IO)
                   I    Idle kernel thread
                   R    running or runnable (on run queue)
                   S    interruptible sleep (waiting for an event to
                        complete)
                   T    stopped by job control signal
                   t    stopped by debugger during the tracing
                   W    paging (not valid since the 2.6.xx kernel)
                   X    dead (should never be seen)
                   Z    defunct ("zombie") process, terminated but not
                        reaped by its parent
    
  • OS 프로세스 상태 다이어그램위키피디아에서:

    OS 프로세스 상태 다이어그램

~처럼"중지됨"은 "차단됨" 상태에 속합니까?그러나 대답은 다소 불완전합니다.

답변1

짧은 답변:

각 주의 지도는 대략 다음과 같습니다.

상태 중요성
D 금지된
I 금지된
R 기다리거나 달리거나
S 금지된
T 차단됨(다소)
t 차단됨(다소)
W 금지된(Linux 1.1.30부터 사용되지 않음)
X 종료됨
Z 종료됨

긴 답변:

Linux에서 외부에 표시되는 프로세스 상태 코드는 시스템 관리자가 관심을 가질 수 있는 단일 문자 정보로 압축하려고 시도하므로 정보도 포함됩니다.프로세스가 차단되었습니다(따라서 차단 해제 가능 여부와 항목).

"대기"와 "실행 중"의 차이는 모호합니다. 프로세스가 실행되는 시간 조각이 너무 작아서 컴퓨터 앞에 앉아 있는 사람에게는 실행할 준비가 된 프로세스 사이에 큰 차이가 없기 때문입니다. 그리고 실행중인 프로세스.

또한 Linux는 전체 프로세스가 아니라 개별 메모리 페이지를 교체하지 않으므로 "스왑 아웃 및 대기" 또는 "스왑 아웃 및 차단"에 매핑된 상태를 찾을 수 없습니다.

상태 중요성
D 프로세스는 다음과 같습니다.금지된그리고 그 상태할 수 없다중단됩니다(예: kill). 일반적으로 이 상태에서는 커널이 프로세스를 대신하여 I/O를 수행하고 관련 커널 코드는 인터럽트를 처리할 수 없습니다.
I 프로세스는 현재 할 일이 없고 현재 수행 중인 커널 스레드입니다.금지된새로운 작품을 기다리고 있습니다. 이 상태는 기술적으로 D(일반적으로 커널 스레드가 중단되지 않기 때문에)와 동일합니다. 그것은회계/미학적 이유로 도입됨, 해당 상태의 프로세스는 D시스템 부하에 기여하는 것으로 간주되기 때문입니다.
R 프로세스는 다음과 같습니다.기다리다달리거나달리기. 이는 스케줄러가 사용 가능한 CPU에서 예약할 수 있고 예약할 모든 프로세스입니다. 내부적으로 커널은 실행 중인 프로세스와 대기 중인 프로세스를 구별할 수 있지만 이는 프로세스 상태 코드를 통해 노출되지 않습니다.
S 프로세스는 다음과 같습니다.금지된그리고 그 상태할 수 있는중단된 kill. 이벤트( sleep, select, 등)를 기다리는 대부분의 시스템 호출은 이 상태 poll로 들어갑니다.wait
T 프로세스는 다음과 같습니다.금지된와 같은 신호에 의해 파견되지 않도록 하세요 SIGSTOP. 이 상태는 프로세스 자체가 이벤트를 기다리지 않고 일반적으로 다른 프로세스나 사용자( Ctrl+ Z) 의 개입으로 인해 추가 실행이 차단되므로 이론적 상태인 "차단됨"과 정확히 일치하지 않습니다.
t 위와 유사합니다. 프로세스는 다음과 같습니다.금지된이벤트 자체를 기다리지 않고 디버거 또는 추적 프로세스에 의해 전달됩니다.
W 더 이상 사용되지 않습니다. 프로세스는 다음과 같습니다.금지된스왑에서 RAM으로 메모리 페이지를 읽어오기를 기다리는 중입니다. 이 코드가 사용되었습니다Linux v1.1.30 이전. v2.3.43부터 프로세스는 더 이상 이 상태에 들어갈 수 없으며 v2.5.50부터 이 상태에 대한 모든 참조가 제거되었습니다.
X 프로세스는 다음과 같습니다.종료현재 프로세스 목록에서 제거되고 있습니다. 이 상태는 ps커널이 다른 CPU 코어의 프로세스 항목을 정리하는 동안 잠시 동안 실행될 때만 발생하므로 자주 표시되지 않습니다 .
Z 프로세스는 다음과 같습니다.종료프로세스 목록의 항목은 상위 프로세스가 종료 상태 정보를 수집할 수 있도록 하기 위해서만 존재합니다.

관련 정보