프로세스란?

GwanMtCat·2023년 9월 14일
0

개념

프로그램은 데이터를 사용하여 어떤 작업을 할지 그 절차를 적어 놓은 것으로, 저장장치에 저장되어 있는 정적인 상태인데 프로그램으로 작성된 작업 절차를 실제로 실행에 옮길 때 프로세스를 실행한다고 한다.

운영체제에서 프로세스는 하나의 작업 단위로 실행을 위해 메모리에 올라온 동적인 상태를 말한다.


프로그램을 실행하여 프로세스 전환 시 일어나는 일

프로세스는 컴퓨터 시스템의 작업 단위로 태스크(task)라고도 부른다.

  1. 프로그램을 메모리의 적당한 위치로 가져온다.

  2. 그와 동시에 작업 지시서를 만드는데 이를 프로세스 제어 블록(PCB, Process Control Block)이다. PCB 에는 프로세스를 처리하는데 필요한 다양한 정보가 들어있다. PCB 가 없으면 프로그램이 프로세스로 전환되지 못한다.

프로세스 제어 블록에는 다양한 값이 있다.

  • 프로세스 구분자(PID, Process Identification Id)
    • 메모리에는 여러 개의 프로세스가 존재하므로, 각 프로세스를 구분하는 구분자가 필요하다.

  • 메모리 관련 정보
    • 실행하려는 프로세스가 어디에 저장되어 있는지, 메모리 보호를 위한 경계,한계 레지스터등이 적혀있다.

  • 각종 중간값

    • 프로세스 제어 블록 에는 프로세스가 사용했던 중간값이 저장되어, 시분할 시스템에서 여러 프로세스가 번갈아가며 실행될 때 저장된 값으로 작업을 계속 진행할 수 있게 된다.

프로세스 제어 블록은 운영체제가 해당 프로세스를 위해 관리하는 데이터 구조이므로 운영체제 영역에 만들어진다. 프로세스가 종료되면 프로세스가 메모리에서 삭제되고, 프로세스 제어 블록도 폐기된다.


프로세스의 4가지 상태

  • 생성 상태 (create status)

    • 프로세스가 메모리에 올라와 실행 준비를 완료한 상태이다. 프로세스 제어 블록이 생성된다.
  • 준비 상태 (ready status)

    • 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태이다.
    • CPU가 하나인 컴퓨터에서는 한 번에 하나의 프로세스만 실행할 수 있기 때문에 기다려야 한다.
  • 실행 상태 (running status)

    • 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태이다.
    • 실행 상태에 들어간 프로세스는 일정 시간(타임 슬라이스, 타임 퀀텀) 동안 CPU를 사용할 권리를 갖는다.
    • 만약 주어진 시간을 다 사용하고도 작업이 안끝나면 준비 상태로 돌아와 기다린다.(타임아웃)
    • 작업이 끝날 때 까지 준비 상태와 실행 상태를 왔다 갔다 한다.
  • 완료 상태 (terminate status)

    • 작업을 마치면 완료 상태로 진입하고, 프로세스 제어 블록이 사라진다.

프로세스의 5가지 상태 (대기 추가)

4가지 상태만으로는 작업을 진행하는데 문제는 없지만 운영체제의 효율성을 고려하여 1가지 상태를 더 만들었다.

입출력을 요구한 프로세스가 인터럽트 시스템에서 입출력 관리자에게 명령을 내릴 때, CPU가 아무 작업도 하지 않으면 효율성이 굉장히 저하된다.

입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태를 대기 상태(blocking status)라고 한다. 작업의 효율성을 높이기 위해 입출력을 요청한 프로세스를 실행 상태에 두지 않고, 대기 상태로 옮기는 것이다.

입출력을 요청한 프로세스가 대기 상태로 옮겨지면, CPU 스케쥴러는 준비 상태에 있는 프로세스 중 하나를 가져다 실행 상태로 만든다.

대기 상태의 프로세스는 원래 실행 상태에서 옮겨와서 입출력이 끝나면, 실행 상태로 돌아가는 것이 맞지만, 그러려면 현재 실행 상태에서 작업 중인 프로세스를 준비 상태로 돌려보내야 한다. 두 프로세스의 상태를 변환시켜야 하는 복잡한 상황이므로, 대기 상태에서 입출력이 끝난 프로세스는 실행 상태로 가지 않고, 준비 상태로 돌아가 자기 차례를 기다린다.


휴식 상태와 보류 상태

앞의 5가지 (생성, 준비, 실행, 대기, 완료) 상태로 프로세스는 운영되며, 이를 활성 상태 라고 한다.

프로세스는 이외에도 또 다른 상태가 있는데 이는 조금 특별하다.

휴식 상태(pause status)

  • 프로세스가 작업을 일시적으로 쉬고 있는 상태이다. 프로그램이 종료된 것처럼 보이지만 사실은 실행을 잠시 멈춘 것이다. 사용하던 데이터가 메모리에 그대로 있고, 프로세스 제어 블록도 유지되므로 프로세는 멈춘 지점에서 재시작할(resume) 수 있다.

보류 상태(suspend status)

  • 프로세스가 메모리에서 잠시 쫓겨난 상태로 휴식 상태와 차이가 있다.

  • 다음의 경우 보류 상태가 된다.

    • 메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼 때
    • 프로그램에 오류가 있어서 실행을 미루어야 할 때
    • 바이러스와 같이 악의적인 공격을 하는 프로세스라고 판단될 때
    • 매우 긴 주기로 반복되는 프로세스라 메모리 밖으로 쫓아내도 큰 문제가 없을 때
    • 입출력을 기다리는 프로세스의 입출력이 계속 지연될 떄
  • 대부분이 컴퓨터의 성능을 떨어트리거나 실행을 미루어도 큰 지장이 없는 프로세스인 경우이다.

  • 보류 상태에 들어간 프로세스는 메모리 밖으로 쫓겨나 스왑 영역 (swap area)에 보관된다.


보류 상태는 스왑 영역에 있는 상태이고, 휴식 상태는 프로세스가 메모리에 있으나 멈춘 상태이다.


기타

입출력 작업 요청을 프로세스에서 하면, 입출력 작업에는 CPU가 필요가 없는 것일까?

답은 그렇다고 한다.


참조한 책 및 사이트

쉽게 배우는 운영체제
https://velog.io/@thalals/OS-3.-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C

0개의 댓글