프로세스의 상태

Æsir·2023년 5월 2일
0

프로세스는 여러가지 상태 값을 가진다.

프로세스상태 다이어그램(중단, 일시중단, 대기중단)

생성상태(create)

  • fork() 또는 exec() 함수를 통해 프로세스가 생성된 상태
  • PCB가 할당된 상태.

시스템콜 fork() ,exec()

fork()

  • 현재 실행중인 부모 프로세스와 동일한 새로운 자식프로세스를 생성한다.(복제본 생성)
  • 이때 자식프로세스는 fork() 함수 호출이전 부모프로세스와 동일한 프로그램코드, 데이터, 힙, 스택등을 복사한다.
  • 자식프로세스는 fork()함수의 반환값으로 0을 받고 부모프로세스는 자식 프로세스의 PID를 반환받는다.

exec()

  • 현재 실행중인 프로세스의 메모리 공간을 새로운 프로그램의 코드, 데이터, 힙, 스택등으로 대체한다.
  • fork()함수와는 달리 새로운 프로세스가 생성되는것이 아닌 현재 프로세스의 정보(데이터,코드등) 새로운 프로세스정보로 덮어씌우는것이다.
  • execl(), execv(), execlp, execvp()등 다양한 버전이 존재한다.

대기상태(ready)

  • 메모리공간이 충분하면 메모리를 할당, 아니면 대기하는 상태
  • cpu 스케줄러로부터 cpu 소유권이 넘어오기를 기다리는 상태
  • cpu를 제외한 다른자원이 준비완료되고, 프로세스가 cpu에 할당되기를 기다리는 상태.

대기 중단 상태(ready suspended)는 메모리 부족에의한 일시 중단된 상태.

  • 대기상태처럼 다른자원을 할당받은상태이나 프로세서 및 메모리를 할당받지 못한 상태

실행상태(running)

  • 필요한 자원 및 프로세서를 모두 할당 받은 상태.
  • CPU 소유권과 메모리를 할당받고 실제로 프로세스가 수행되고 있는 상태.

중단상태(blocked)

  • 어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태.
  • wait() 시스템콜, I/O 디바이스에 의한 인터럽트에 의해 발생
    wait()
    부모프로세스가 자식프로세스가 종료될때까지 기다리도록 하는 함수.
    일반적으로 자식프로세스가 종료될때까지는 부모 프로세스는 중단상태에 머물러있는다.
    자식 프로세스가 정상적으로 종료되었다면 wait()시스템콜은 종료상태코드, 종료시그널등 자식프로세스의 종료 상태정보를 반환한다.
    자식 프로세스가 종료된다해도 자식 프로세스의 자원(메모리, 파일 디스크립터 등) 자동으로 해제되지않기에 부모 프로세스가 자식 프로세스가 종료된 이후 해당자원을 해제하도록 wait() 시스템 콜을 사용한다.

일시 중단 상태(blocked suspended)

  • 대기 중단 상태와 유사, 중단된 상태에서 프로세스 실행시 메모리 부족으로 중단된 상태
  • 프로세스, 메모리, 기타자원 모두 할당받지 못한 상태.

종료상태(terminated)

  • 메모리와 CPU소유권을 모두 놓고 가는 상태.(반납)
  • 자발적종료와 비자발적종료
  • 자발적 종료
    • 프로세스 명령을 모두 수행후 exit() 시스템콜을 진행.
    • exit() 시스템콜을 통해 자신이 종료될 수 있음을 알리면 운영체제는 자원을 회수, 시스템내 프로세스를 정리한다.
      exit()
    • 프로세스가 정상적으로 종료될 때 호출
    • 종료 상태 코드를 인수로 받고, 부모 프로세스가 자식 프로세스의 종료상태를 파악할 수 있도록 한다.
  • 비자발적 종료
    • 부모 프로세스가 자식 프로세스의 수행을 강제로 종료시킬 때 발생. abort()시스템콜을 통해 진행.
    • 자식프로세스가 한계치를 넘는 자원을 요구할때, 자식 프로세스에게 할당된 작업이 더 이상 필요하지 않을때, 부모프로세스가 종료될 때
      사용자의 process.kill등의 여러 명령어로 프로세스를 종료시킬 때 발생.
      abort()
    • 프로세스가 비정상적으로 종료될 때 호출
    • 프로세스가 실행 중에 예외나 오류 등의 이유로 더 이상 실행이 불가능할 때 호출
    • 해당 프로세스를 즉시 종료하고, 부모 프로세스에게 종료상태를 알리지않는다.

면접예상질문

  • 시스템 콜(system call)이 무엇인가요?
  • 프로세스의 상태변화에 대해 말씀해주세요.
  • 프로세스 주소공간에 대해 설명해주세요.
  • 스레드의 상태와 프로세스의 상태에 어떤 차이가 있을까요?

참고한자료

https://neph3779.github.io/운영체제/5-프로세스-관리-2/#프로세스의-종료-절차
https://itwiki.kr/w/프로세스_상태
https://nostressdev.tistory.com/16

profile
백엔드지망생

0개의 댓글

관련 채용 정보