Computer Science

프로세스 / 프로세스 실행 · 제어 · 상태

Oscar:) 2024. 4. 14. 20:25

 

 

지난 포스팅에서 운영체제에 대해 정리해 보았다.

 

운영체제의 핵심 서비스 중 하나로 프로세스 관리를 꼽을 수 있는데,

이번 포스팅에서는 프로세스에 대해 알아보겠다.

 

 


 

 

프로세스란?

 

 

프로그램은 실행되기 전까지는 그저 데이터 덩어리다.

하지만 메모리에 적재되어 실행되는 순간, 그 프로그램은 프로세스가 되었다고 할 수 있다.

 

즉, 컴퓨터에서 실행 중인 프로그램을 프로세스라고 한다.

당장 작업 관리자를 열어보아도 쉽게 확인할 수 있다.

 

 

 

 


 

프로세스 실행 · 프로세스 제어 블록

 

 

일반적으로 하나의 CPU는 하나의 프로세스만을 실행할 수 있다.

하지만 사용자는 여러 프로세스가 동시에 실행될 수 있다고 느낀다.

 

이는 CPU가 여러 프로세스를 번갈아 가며 실행하는데, 그 속도가 워낙 빠를 뿐이다.

즉, CPU는 여러 프로세스를 매우 빠른 속도로 전환해가며 반복 실행한다.

 

 

이 작업을 위해 운영체제는 프로세스 제어 블록을 이용하며 이를 PCB라고 부르기도 한다.

PCB는 프로세스 관련 정보를 저장하는 자료 구조이며, 프로세스 식별자 역할을 한다.

 

 

PCB는 메모리의 커널 영역에 생성되며 다음과 같은 정보들이 담긴다.

 

 

✅ 프로세스 ID

프로세스를 식별하기 위한 고유 번호이며 PID라고도 한다.

동일한 프로그램을 2번 실행하면 각각 다른 PID가 생성되기에,

동일한 프로세스가 아니라고 할 수 있다.

 

프로세스 상태

프로세스가 어떤 상태인지 기록한 정보다.

생성·준비·실행 등 다양한 상태가 있으며 이는 다음 탭에서 자세히 알아보겠다.

 

메모리 관리 정보

당연히 프로세스마다 메모리에 저장되는 위치가 다르기에,

프로세스가 메모리 내 어느 주소에 저장되어 있는지에 대한 정보가 담긴다.

 

CPU 스케줄링 정보

프로세스가 언제, 어떤 순서로, 얼마나 CPU를 할당받을지에 대한 정보가 담긴다.

 

사용한 파일과 자원 목록

프로세스 실행 과정에서 사용한 파일과 하드웨어 등의 자원이 기록된다.

 

 

 

이외에도 더 많은 정보가 PCB에 담기며, 운영체제마다 PCB에 담기는 정보는 다를 수 있다.

 

 


 

사용자 영역에서의 프로세스

 

 

프로세스가 생성되면 PCB가 커널 영역에 배치된다.

하지만 PCB는 프로세스의 식별자일 뿐이다.

 

실제 프로세스는 사용자 영역에 배치되며 크게 4가지 영역으로 나뉘어 저장된다.

 

 

코드 영역

텍스트 영역이라고도 불리며, 실행할 수 있는 코드(명령어)가 저장되는 공간이다.

CPU가 실행할 명령어가 담겨 있기에 '쓰기'가 금지되며, '읽기' 전용 공간이라 볼 수 있다.

 

 

데이터 영역

프로그램이 실행되는 동안 유지되어야할 데이터가 저장되는 공간이다.

대표적인 데이터로는 전역 변수가 해당한다.

 

코드 영역과 데이터 영역은 프로그램이 실행되는 동안 크기가 변하지 않는다.

그렇기에 정적 할당 영역이라 불린다.

 

 

 

스택 영역

데이터를 일시적으로 저장하는 공간이다.

대표적으로는 매개 변수 · 지역 변수가 해당한다.

 

 

힙 영역

개발자가 직접 할당할 수 있는 저장 공간이다.

할당된 메모리 공간은 반환되어야 하며, 그렇지 못하면 메모리 누수가 발생한다.

 

스택 영역과 힙 영역은 프로그램 실행 과정에서 크기가 변할 수 있기에

동적 할당 영역이라 불린다.

 

 

 


 

 

PCB와 프로세스가 메모리에 적재된 모습을 그림으로 표현하면 다음과 같다.

 

 

 


 

프로세스 상태

 

 

프로세스는 모두 각자의 상태가 있다.

 

위 PCB 설명에서도 잠깐 언급했지만,

운영체제는 이러한 프로세스의 상태를 PCB에 기록하여 관리한다.

 

프로세스의 상태를 표현하는 방식 또한 운영체제마다 조금씩 다르지만,

대표적인 상태를 다음 5가지로 표현할 수 있다.

 

 

✅ 생성 상태

프로세스를 생성 중인 상태다.

프로세스가 이제 막 메모리에 적재되어서 PCB를 할당 받은 상태라 볼 수 있다.

생성 상태를 거쳐 실행할 준비가 완료되면 곧바로 실행되지 않고 준비 상태가 된다.

 

 

✅ 준비 상태

CPU를 할당받으면 곧바로 실행할 수 있지만,

아직 자신의 차례가 아니기에 기다리고 있는 상태라 볼 수 있다.

준비 상태에서 자신의 차례가 되었을 때 비로소 CPU 할당을 받고 실행 상태가 된다.

 

 

✅ 실행 상태

CPU를 할당받아 실행 중인 상태다.

실행 상태인 프로세스는 할당 받은 일정 시간 동안에만 CPU를 사용할 수 있다.

할당된 시간을 모두 사용한다면 다시 준비 상태가 된다.

 

 

✅ 대기 상태

프로세스는 실행 도중 입출력장치를 사용하는 경우가 있다.

입출력 작업을 요청한 프로세스는 입출력장치가 입출력을 끝낼 때까지 기다려야 하는데,

이 상태를 대기 상태라고 한다.

입출력 작업이 완료되면 프로세스는 다시 준비 상태가 된다.

 

 

✅ 종료 상태

프로세스가 종료된 상태다.

운영체제는 프로세스가 사용한 메모리와 PCB를 정리한다.

 

 

 

위 프로세스의 상태를 다이어그램으로 표현하면 다음과 같다.

 

 

 


 

프로세스 계층 구조

 

 

프로세스는 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 수 있다.

 

새로운 프로세스를 생성한 프로세스를 부모 프로세스라고 하며,

부모 프로세스에 의해 생성된 프로세스를 자식 프로세스라고 할 수 있다.

 

일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID가 기록되기도 하며,

이를 PPID(Parent PID)라 한다.

 

 

 

많은 운영체제에서 이처럼 계층적인 구조로써 프로세스를 관리한다.

 

컴퓨터가 부팅될 때 실행되는 최초의 프로세스가 1개 생성되며,

이 최초의 프로세스가 자식 프로세스를 낳는 형식으로 여러 프로세스가 구동된다.

(참고로, 최초의 프로세스는 PID가 1번으로 지정된다)

 

 

프로세스의 계층 구조를 다이어그램으로 표현하면 다음과 같은 느낌이다.

 

 

 

 


 

 

 

 

이번 포스팅에서는 프로세스에 대해 알아보았다.

 

 

 

*자료 출처 : [혼자 공부하는 컴퓨터 구조 + 운영체제] 서적 - 강민철 지음