0.🚶들어가며 

 프로세스라는 말은 개발 공부를 시작하며 정말 많이 들어봤으나 누군가에게 설명할 수 있을 정도로 알고 있는 것 같지 않아 이에 대해 정리해보고자 글을 써봅니다.


1.📕프로세스란?

1) 프로세스의 개념

(1) 프로그램과 프로세스의 차이

  • 프로그램은 어떤 데이터를 사용하여 어떤 작업을 할지 그 절차를 적어 놓은 것이며 하드디스크와 같은 저장장치에 보관됩니다.
  • 프로세스는 프로그램을 실행한 것인데 "실행했다"라는 말은 프로그램이 메모리에 올라가 작업이 진행된다는 것입니다.
  • 프로세스를 한마디로 말하면 "실행 중인 프로그램" 이라고 할 수 있습니다.
앞으로 설명할 내용은 현대 운영체제 방식을 가정하고 진행합니다.
즉, 메모리에 여러 프로세스가 올라가고 실행시키는 방식(시분할 방식)에서의 내용입니다.

(2) 프로그램의 프로세스로의 전환

  • 프로그램을 실행시키면 운영체제는 이를 메모리의 적당한 위치에 가져옵니다.
  • 그와 동시에 프로세스 제어 블록(PCB, Process Control Block)을 만드는데 이는 프로세스를 처리하는 데 필요한 다양한 정보를 담고 있습니다. PCB에 대한 자세한 내용은 다음 글에서 다뤄보겠습니다.
  • 정리하자면 프로그램이 프로세스가 되려면 메모리에 올라가는 동시에 PCB가 생성되어야 합니다.

2) 프로세스의 상태

  메모리에 프로세스가 하나만 올라온다면 (일괄 작업 시스템) 프로세스의 상태는 생성, 실행, 완료 정도면 충분할 것 입니다. 하지만 시분할 시스템에서는 프로세스의 상태가 이보다 복잡합니다. 프로세스가 CPU를 얻어 실행되던 중 다른 프로세스에게 CPU를 넘겨주는 일이 빈번하기 때문입니다. 시분할 시스템에서 프로세스 상태는 어떻게 관리되고 있는지에 대해 알아보겠습니다.

 위 그림은 프로세스 상태에 대한 그림입니다. 처음 보면 복잡해보일 수 있지만 각 상태에 대해 차근차근 알아보겠습니다.

(1) 생성 상태 (New)

  • 프로세스가 생성중인 상태입니다.
  • 프로세스가 되기 위해 필요한 여러 작업(PCB 생성)과 장기 스케줄러의 승인 등의 과정을 밟고 있는 상태입니다.

(2) 준비 상태 (Ready)

  • 준비상태는 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태입니다.
  • CPU가 하나인 경우 컴퓨터에서는 한 번에 하나의 프로세스만 실행할 수 있기 때문에 자기 순서가 올 때까지 준비 상태로 기다리게 됩니다.
  • 많은 준비상태 프로세스들 중 어떤 프로세스를 실행상태로 바꿀지(dispatch), 즉 CPU 자원을 어떤 프로세스에게 줄 지에 대한 내용은 다양한 알고리즘이 있는데 이는 추후 자세히 다뤄보겠습니다.

(3) 실행 상태 (Running)

  • 실행 상태는 준비상태의 프로세스가 CPU를 얻어 실제 작업을 수행하는 상태입니다.
  • 주어진 시간(Time slice) 내에 작업을 끝내지 못하면(Timeout) 프로세스는 다시 준비 상태로 돌아가게 됩니다.
  • 실행 상태의 프로세스가 CPU를 반납하는 경우는 Timeout, System call과 같은 Interrupt가 발생하는 경우, I/O 등의 이유로 대기 상태가 되는 경우,  작업을 끝내 완료 상태가 되는 경우가 있습니다.

(4) 완료 상태 (Terminated)

  • 실행 상태의 프로세스가 작업을 마치면 완료상태가 됩니다.
  • 이때 해당 프로세스의 코드와 사용했던 데이터를 메모리에서 삭제하고 PCB를 폐기합니다.

(5) 대기 상태 (Wait, Blocked)

  • 위에서 살펴본 4가지 상태만으로도 프로세스들을 관리하는데 문제는 없습니다.
  • 하지만 작업 효율성을 위해 운영체제는 대기상태를 추가했습니다.
  • CPU를 주어도 당장 작업을 수행할 수 없는 상태입니다.
  • 실행 상태의 프로세스가 입출력을 요구한 경우가 대기상태로 들어가는 대표적인 예입니다.
  • 입출력의 경우 CPU의 속도보다 매우 느리기 때문에 이를 기다리기에는 너무 비효율적입니다. 따라서 프로세스를 대기상태로 바꾸고 다시 준비 상태의 프로세스를 하나 집어 실행 상태로 바꿉니다. 기존 프로세스는 쫓아내는 것이죠.
  • 입출력을 요구한 프로세스의 입출력이 끝나는 경우 인터럽트를 통해 운영체제에게 알리고 이 프로세스를 다시 준비 상태로 바꾸게 됩니다.
  • 추후 다뤄볼 공유 데이터를 사용하는 경우도 Blocked 상태로 전환될 수 있는 경우입니다. 이 경우는 하드웨어의 느린 속도때문에 발생하는 대기 상태는 아닙니다. 우선은 이정도로 알고 넘어갑시다!

2.💨나가며

 이번 시간에는 프로세스의 개념과 상태에 대해 알아보았습니다. 프로세스 관련 내용은 다룰 것이 많은데 다음 글에서는 PCB와 문맥 교환에 대해 알아보겠습니다.

 

 

 

반응형
복사했습니다!