[OS]프로세스의 개요

YongHo·2024년 4월 15일

운영체제에서 프로세스는 하나의 작업 단위이다. 유저가 마우스를 더블 클릭하여 프로그램을 실행하면 그 프로그램은 프로세스가 되는 것이다. 이렇게 실행된 프로세스의 처리과정을 알아보도록 하겠다.

1. 프로세스의 개념

프로그램은 하드디스크와 같은 저장자이에 저장되어 있다가 사용자가 실행하게 되면 메모리에 올라와 작업이 진행되는데 이를 '프로세스'라고 한다.
쉽게 설명해서 프로그램은 정적(static)한 상태이고, 프로세스는 동적(dynamic)한 상태라고 보면 된다.
요리에 비유하자면 요리 비법이 담긴 레시피가 프로그램인것이고, 그 레시피로 요리를 하는 과정이 프로세스인 것이다.

2. 프로그램에서 프로세스로의 전환

앞서 설명한 일괄 작업 시스템과 시분할 시스템을 예로 들어보겠다.

일괄 작업 시스템은 한 번에 하나의 프로세스만 처리하는 것으로, 들어온 순서대로 처리만 해주면 된다. 이 과정만 거쳐주면 되기 때문에 복잡하지않고 단순하나 작업 효율은 많이 떨어지게 된다.
그에 반면 시분할 방식은 1번 프로세스가 실행되고 어떠한 작업 처리를 하고 나면, 2번의 작업 처리가 되는 CPU는 한 개이지만 여러개가 동시에 처리하는 것처럼 느낄 수 있으며 정말 효율적이다.
시분할 방식은 여러 프로세스를 옮겨가면서 진행되는데 운영체제의 프로세스의 처리 방식이 이와 아주 유사하다.

프로그램을 메모리에 적당한 위치로 가져오는 이때 작업 지시서 같은 것을 만드는데 이를 프로세스 제어 블록(PCB, process control block)이라고 한다. 이 PCB에는 다양한 정보가 들어있으며, PCB가 존재하지 않는다면 프로그램은 프로세스로의 전환이 불가능하다.

PCB정보 중 대표적인 세 가지

  • 프로세스 구분자(PID; process IDentification) : 식당에도 주문 번호가 있듯이 프로세스를 구분해주는 ID가 있다.
  • 메모리 관련 정보 : CPU는 실행하려는 프로세스가 메모리 어느 주소에 저장되어 있는지 알아야 한다. 이를 위해 PCB에는 메모리 위치 정보가 담겨 있다.
  • 각종 중간값 : 여기에는 다음에 작업해야 할 코드위 위치가 담긴 프로그램 카운터(PC), 스택 포인터(SP), 할당된 자원 정보 등 여러 값이 들어간다.

위 그림은 프로그램 프로세스가 되는 과정을 보여준다.

3. 프로세스의 상태

운영체제에서도 여러가지 이유로 프로세스 상태가 변환한다.

  • 생성 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태이다. 이때 PCB가 생성된다.
  • 준비 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태이다. CPU가 하나인 컴퓨터에서는 한 번의 하나의 프로세스만 실행할 수 있기 때문에 순서가 될 때까지 기다려야한다.
  • 실행 : execute status라고도 불리며, 실제 작업을 수행하는 단계이다. 프로세스는 자신이 작업이 끝날 때까지 준비 상태와 실행 상태를 왔다 갔다 한다.
  • 완료 : 실행 상태의 프로세스가 작업을 마치면 완료 상태로 진입한다. 완료 상태는 PCB가 사라진 상태를 의미한다.

위 프로세스의 실행 순서는 CPU 스케줄러에 의해서 관리되는데 이 역할과 작업은 나중에 다시 작성하겠다!

위 그림처럼 네 가지 상태만으로도 작업을 진행하는데 큰 문제가 없지만, 효율성을 고려하여 한 가지 상태를 더 만들게 되었다.

  • 생성 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태이다. 이때 PCB가 생성된다.
  • 준비 : 준비 큐(ready Queue)에서 기다리며 CPU 스케줄러에 의해 순서가 정해진다. 실제로는 다수의 준비 큐가 운영된다.
  • 실행 : CPU를 할당받아 실행되며, CPU의 개수만큼 프로세스는 실행 상태에 접근할 수 있다. 실행 상태에 있는 프로세스는 자신에게 할당된 시간, 타임 슬라이스 동안만 작업할 수 있으며, 이 시간이 끝나면 다시 준비 상태에 진입하게 된다. 만약 실행 상태에 있는 프로세스가 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고 해당 프로세스를 대기 상태로 옮긴다.
  • 대기 : blocking status라고도 불리며 입출력이 완료될 때까지 기다리는 상태이다. 이 상태는 작업 효율을 높이기 위해 만들어졌으며, 입출력장치별로 마련된 큐에서 기다리고, 입출력이 완료되면 인터럽트가 발생해 다시 준비상태로 돌이가게 된다.
  • 완료 : 완료 상태는 프로세스가 종료되는 상태로 PCB와 데이터를 메모리에서 삭제한다.

위 다섯 가지 상태를 활성 상태(active status)라고 부르며, 그 외에 휴식 상태와 보류 상태가 존재한다.

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

쉽게 설명하자면 보류 상태는 프로세스가 메모리에서 제거되어 있는 상태로, 프로세스 상태와 메모리 내용이 하드 디스크 스왑 영역에 저장된다. 프로세스는 일시 중지되어 있으며, 다시 실행하기 위해 메모리로 다시 로드 되어야 한다. 메모리가 부족한 경우를 위한 조치이다.

휴식 상태는 여전히 메모리 상에 존재하지만, 실행 중이 아닌 상태로, 프로세스가 CPU 시간을 기다리고 있는 상태이다.

0개의 댓글