[CS] 프로세스 생명주기와 프로세스 메모리(1)

Nick·2023년 8월 25일
0

CS

목록 보기
4/7
post-thumbnail
post-custom-banner

프로세스 생명주기와 프로세스 메모리

프로그램과 프로세스

1. 프로그램이 저장되어 있는곳 = 보조 기억장치

  • ex. 카카오톡💬이 저장💽되있는 곳
  • C://Applications/KakaoTalk.app

2. 프로그램이 로딩되는 곳 = 주 기억장치

  • 운영체제(Window, MacOS, Android, iOS 등…)에서 켜져있는(로딩되어있는) 프로그램

  • ex. 카카오톡💬이 로딩📂되어 실행되는 곳
  • 맥북 > 활성 상태 보기 📈 > 메모리

3. 프로그램을 실행해주는 주체 = 프로세스

  • ex. 카카오톡 💬을 실행하는 프로세스
  • 맥북 > 활성 상태 보기 📈 > CPU

4. 작업을 처리해주는 주체 = 쓰레드

  • ex. 메세지 발송 📤을 처리하는 쓰레드, 메세지 수신📥을 확인하는 쓰레드 등…
  • 맥북 > 활성 상태 보기 📈 > CPU > 프로세스 상세 > 통계
    스레드는 필요할때마다 생성 되며, 프로세스 상세의 스레드 수는 최근 평균 스레드 개수 통계값 입니다.

5. 프로세스 상태변화 복습

프로세스의 상태변화와 스케쥴링

스케쥴링 알고리즘에 따라 프로세스들은 상태변화가 일어나며 준비/수행 상태일때 CPU를 사용하게 됩니다.
아래 그림에서

  • 🟠은 프로세스들의 상태를 의미하고
  • 🔜 은 스케쥴링에 따라 상태가 변화되는 동작을 의미합니다.


1. 수행 -> 대기 (Running->Waiting) : I/O요청이 발생하거나, 자식 프로세스가 종료 대기를 할 때
2. 수행 -> 종료 (Running -> Terminate) : 프로세스를 종료시켯을때
3. 수행 -> 준비 (Running-> Ready) : 인터럽트가 발생했을때
4. 대기 -> 준비 (Waiting -> Ready) : I/O가 완료되었을때

  • 여기서 1,2은 프로세스가 스스로 CPU를 반환하기에 비선점 스케쥴링이 발생되고

  • 3,4은 프로세스에서 CPU를 강제로 할당(회수)해야 하므로 선점 스케쥴링 이 발생됩니다.

📌 예를들어 이해해봅시다.
카카오톡 메세지를 보내기 위해 메세지 창을 켜면 카카오톡 프로세스는 신규 > 준비 상태가 됩니다.

    1. 준비 (Ready) 상태:
        1. 카카오톡을 띄워서 메시지를 입력하고 있을 때, 해당 프로세스는 준비 상태가 됩니다.
        1. CPU 스케줄링 알고리즘은 준비 상태의 프로세스 중에서 CPU를 할당할 프로세스를 선택합니다.
        1. 이때, 선택하는 선점 알고리즘에 따라 우선순위, 라운드 로빈 등 다양한 방식이 있을 수 있습니다.

    1. 대기 (Waiting) 상태:
        1. 카카오톡이 비활성화 되어있거나, 가만히 상대방의 답장을 기다릴때 대기 상태가 됩니다.
        1. 해당 프로세스는 대기 상태로 변경되면서 수행중 이었다면 CPU를 반납합니다.
        1. CPU 스케줄링 알고리즘은 다른 준비 상태의 프로그램(프로세스)를 선택하여 CPU를 할당할 수 있습니다.

    1. 수행 (Running) 상태
        1. 사용자가 메시지를 발송하거나 상대방의 메시지를 수신할때 수행 상태가 됩니다.
        1. CPU 가 준비 상태의 프로세스에 명령을 보내면, 해당 프로세스는 수행 상태로 변경됩니다.
        1. CPU 스케줄링 알고리즘은 실행 시간을 제어하며, 일정 시간이 지나면 해당 프로세스를 중단하고 실행 대기 상태의 다른 프로세스를 선택할 수 있습니다.

    1. 종료 (Terminated) 상태:
        1. 카카오톡 프로그램을 종료하면 해당 프로세스는 중지 상태로 변경됩니다.
        1. 이때, CPU 스케줄링 알고리즘은 다른 실행 대기 상태의 프로세스를 선택하여 CPU를 할당할 수 있습니다.

1. 프로세스 생명주기

📌 프로세스 상태변화 = 프로세스 생명주기
프로세스 생명주기와 프로세스 상태변화는 같은 의미 입니다.

  • 🟠은 프로세스들의 상태를 의미하고
  • 🔜 은 스케쥴링에 따라 상태가 변화되는 동작을 의미합니다.
    - 상태변화 = 생명주기
    Untitled

1-1. 프로세스 상태 (Status)

신규(New) :

  • 프로세스가 이제 막 메인메모리에 올라온 상태입니다.
  • 아직, 실행하는 것은 불가능합니다.
  • 수용 동작을 거쳐야 준비단계로 넘어갑니다.

준비(Ready) :

  • 변수 초기화 등 기초 준비작업을 모두 끝나고 실행을 할 수 있는 상태입니다.
  • 스케쥴러를 통해 발송(dispatch)되어야 수행상태가 됩니다.
  • 아래 케이스를 통해 준비상태가 됩니다.
    - 신규 프로세스가 수용됨
    - 대기 프로세스의 입출력/이벤트가 완료됨
    - 수행 프로세스가 중단됨

수행(Running) :

  • CPU가 실제로 프로세스를 수행하고 있는 상태입니다.
  • 선점 스케쥴링에 의해 중단되면 준비상태로
  • 입출력/이벤트가 필요하면 대기상태로
  • 수행이 완료되면 종료상태가 됩니다.
  • 아래 케이스를 통해 수행상태가 됩니다.
    - 준비 프로세스가 스케쥴러를 통해 발송됨

📌 수행상태에서 해제되는 경우 예시

  • 수행 -> 준비(중단)
    • CPU의 과부하가 판단되는 경우
  • 수행 -> 대기
    • I/O 나 event wait가 있을 경우
    • 이 후 I/O나 evet가 끝나면 ready 상태로 복구

대기(Watinig) :

  • 프로세스 도중에 I/O 작업이 필요하여 I/O 작업을 수행하는 상태입니다.
  • 이 때 CPU는 I/O를 기다리며, 다른 프로세스를 수행합니다.
  • 대기 상태가 끝나면 프로세스는 다시 준비 상태가 되고, 잠시 후 다시 수행 상태가 됩니다.

종료(Terminated) :

  • 최종적으로 프로세스가 종료된 상태입니다.
  • 사용하던 메모리 영역이 해제됩니다.

📌 시공유 시스템에서는 수행 상태에서 할당된 시간이 종료(Expired)되면, 대기 상태를 거치지 않고 바로 준비 상태로도 변할 수 있다. 중단(inturrept)과 같이 동작


profile
배우고 도전하는것을 멈추지 않는 개발자 입니다.
post-custom-banner

0개의 댓글