반응형
반응형
💋 운영체제에서 프로세스의 상태
프로세스의 상태는 주로 다음과 같은 다섯 가지로 분류됩니다: new, ready, running, waiting, terminated.
New
(생성)- 프로세스가 생성되었지만 아직 실행되지 않은 상태
- 프로세스가 초기화되고 자원이 할당되기를 대기
- Long term scheduler가 허락해주어야 하는 상황은 흔치 않으므로, 보통 곧바로
Ready
상태로 넘어간다. Ready
(준비)- CPU에서 프로세스가 실행되기를 기다리는 상태
- 스케줄러에 의해 실행되면
Running
로 전환 Running
(실행)- CPU가 할당된 상태로 현재 실행 중인 상태
- 멀티 태스킹 하다가 quantum이 지나거나, I/O 작업이 시작되면
Ready
로 전환 Waiting
(대기)- I/O 작업 또는 critical section에 들어가기 위해서 기다리는 상태
- I/O 작업이 종료되거나, critical section에 들어갈 수 있게 되면
Ready
상태로 변경(곧바로Running
X)되어 CPU에 할당될 준비를 한다. Terminated
(종료)- 프로세스의 실행이 완료되었거나 강제로 종료된 상태
- 프로세스는 시스템에서 삭제되며 사용한 자원들을 반환
디테일은 운영체제별로 조금 다를 수 있습니다.
예를 들어, 리눅스는 아래와 같은 상태를 가집니다.
리눅스에서 현재 실행중인 프로세스들의 상태를 곧바로 확인해볼 수 있습니다.
STAT
열의 첫번째 글자랑 위 사진에서의 글자들을 매칭하면 됩니다!
ps a
PID TTY STAT TIME COMMAND
2234 tty2 Ssl+ 0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --systemd --session=ubuntu
2237 tty2 Rl+ 0:07 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/user/1000/gdm/Xauthority -background none -noreset -keeptty -verbose 3
2287 tty2 Sl+ 0:00 /usr/libexec/gnome-session-binary --systemd --systemd --session=ubuntu
2982 pts/0 Ss 0:00 bash
3467 pts/0 R+ 0:00 ps a
💋 자바에서 프로세스의 상태
NEW
- 스레드가 생성되었지만 아직 시작되지 않은 상태
RUNNABLE
- CPU상에서 실행중인 상태 포함
- I/O 작업의 결과를 기다리는 등 다른 리소스를 기다리는 상태 포함 (포괄적임)
- 실행중인 상태
start()
메서드를 호출하여 스레드를 시작하면, 스레드는RUNNABLE
상태로 전환됩니다.BLOCKED
- 모니터 락을 얻기 위해(= critical section에 들어가려고) 기다리는 상태
- 다른 스레드가 해당 블록을 사용 중이기 때문에 현재 스레드는 기다려야 합니다.
WAITING
- 다른 스레드를 기다리는 상태
Object.wait()
(모니터의 wait)또는Thread.join()
과 같은 메서드를 호출하면 스레드가WAITING
상태로 전환될 수 있습니다.
TIMED_WAITING
WAITING
상태와 유사하지만 제한 시간을 두고 다른 스레드를 기다리는 상태Thread.sleep()
이나Object.wait(timeout)
과 같은 메서드를 호출할 때 발생합니다.
TERMINATED
- 실행을 마치고 종료된 상태
run()
메서드가 정상적으로 종료되거나, 예외가 발생하여 스레드가 종료되면 TERMINATED 상태가 됩니다.
💋 Java Thread Dump
✔️ 개념
실행 중인 자바 프로세스의 현재 상태를 담은 스냅샷
✔️ 필요성
- 데드락(Deadlock) 분석
- 스레드 덤프를 통해 데드락 상태에 있는 스레드들을 확인하고 분석할 수 있습니다.
- 성능 문제 해결
- 스레드 덤프를 이용하여 어떤 스레드가 어떤 작업을 수행 중인지, 얼마나 많은 스레드가 동시에 실행 중인지 등을 파악하여 성능 문제를 해결할 수 있습니다.
- 예외 분석
- 어떤 스레드에서 예외가 발생했는지, 스레드의 상태와 호출 스택을 통해 예외를 추적할 수 있습니다.
스레드 덤프를 생성하면, 그 결과는 스레드의 상태, 호출 스택 정보 등이 포함된 텍스트 파일로 출력됩니다. 이를 분석하여 문제를 진단하고 해결할 수 있습니다.
💋 참고자료
- https://www.baeldung.com/linux/process-states
- https://www.youtube.com/watch?v=_dzRW48NB9M&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&index=8
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
반응형