- ex. 카카오톡💬이 저장💽되있는 곳
C://Applications/KakaoTalk.app
- 운영체제(Window, MacOS, Android, iOS 등…)에서 켜져있는(로딩되어있는) 프로그램
- ex. 카카오톡 💬을 실행하는 프로세스
- 맥북 > 활성 상태 보기 📈 > CPU
- ex. 메세지 발송 📤을 처리하는 쓰레드, 메세지 수신📥을 확인하는 쓰레드 등…
- 맥북 > 활성 상태 보기 📈 > CPU > 프로세스 상세 > 통계
스레드는 필요할때마다 생성 되며, 프로세스 상세의 스레드 수는 최근 평균 스레드 개수 통계값 입니다.
스케쥴링 알고리즘에 따라 프로세스들은 상태변화가 일어나며 준비/수행 상태일때 CPU를 사용하게 됩니다.
아래 그림에서
- 🟠은 프로세스들의 상태를 의미하고
- 🔜 은 스케쥴링에 따라 상태가 변화되는 동작을 의미합니다.
1. 수행 -> 대기 (Running->Waiting) : I/O요청이 발생하거나, 자식 프로세스가 종료 대기를 할 때
2. 수행 -> 종료 (Running -> Terminate) : 프로세스를 종료시켯을때
3. 수행 -> 준비 (Running-> Ready) : 인터럽트가 발생했을때
4. 대기 -> 준비 (Waiting -> Ready) : I/O가 완료되었을때
여기서 1,2은 프로세스가 스스로 CPU를 반환하기에 비선점 스케쥴링이 발생되고
3,4은 프로세스에서 CPU를 강제로 할당(회수)해야 하므로 선점 스케쥴링 이 발생됩니다.
📌 예를들어 이해해봅시다.
카카오톡 메세지를 보내기 위해 메세지 창을 켜면 카카오톡 프로세스는 신규 > 준비 상태가 됩니다.
- 준비 (Ready) 상태:
- 카카오톡을 띄워서 메시지를 입력하고 있을 때, 해당 프로세스는 준비 상태가 됩니다.
- CPU 스케줄링 알고리즘은 준비 상태의 프로세스 중에서 CPU를 할당할 프로세스를 선택합니다.
- 이때, 선택하는 선점 알고리즘에 따라 우선순위, 라운드 로빈 등 다양한 방식이 있을 수 있습니다.
- 대기 (Waiting) 상태:
- 카카오톡이 비활성화 되어있거나, 가만히 상대방의 답장을 기다릴때 대기 상태가 됩니다.
- 해당 프로세스는 대기 상태로 변경되면서 수행중 이었다면 CPU를 반납합니다.
- CPU 스케줄링 알고리즘은 다른 준비 상태의 프로그램(프로세스)를 선택하여 CPU를 할당할 수 있습니다.
- 수행 (Running) 상태
- 사용자가 메시지를 발송하거나 상대방의 메시지를 수신할때 수행 상태가 됩니다.
- CPU 가 준비 상태의 프로세스에 명령을 보내면, 해당 프로세스는 수행 상태로 변경됩니다.
- CPU 스케줄링 알고리즘은 실행 시간을 제어하며, 일정 시간이 지나면 해당 프로세스를 중단하고 실행 대기 상태의 다른 프로세스를 선택할 수 있습니다.
- 종료 (Terminated) 상태:
- 카카오톡 프로그램을 종료하면 해당 프로세스는 중지 상태로 변경됩니다.
- 이때, CPU 스케줄링 알고리즘은 다른 실행 대기 상태의 프로세스를 선택하여 CPU를 할당할 수 있습니다.
📌 프로세스 상태변화 = 프로세스 생명주기
프로세스 생명주기와 프로세스 상태변화는 같은 의미 입니다.
📌 수행상태에서 해제되는 경우 예시
📌 시공유 시스템에서는 수행 상태에서 할당된 시간이 종료(Expired)되면, 대기 상태를 거치지 않고 바로 준비 상태로도 변할 수 있다. 중단(inturrept)과 같이 동작