지금까지는 단순히 ‘실행중인 프로그램’이라고 표현했지만, 이 프로그램을 프로세스(process)라고 한다. 프로그램은 실행되기 전까지는 그저 보조기억장치에 있는 데이터 덩어리일 뿐이지만, 보조기억장치에 저장된 프로그램을 메모리에 적재하고 실행하는 순간 그 프로그램은 프로세스가 된다. 그리고 이 과정을 ‘프로세스를 생성한다’라고 표현한다. 이번 강의에서는 프로세스를 직접 눈으로 확인해 보고, 프로세스의 개념을 알아보자.

1. 프로세스 직접 확인하기

컴퓨터가 부팅되는 순간부터 수많은 프로세스들이 실행된다. 윈도우에서는 작업 관리자의 [프로세스] 탭에서 확인할 수 있고, 유닉스 체계의 운영체제에서는 ps 명령어로 확인할 수 있다.

윈도우 작업 관리자

윈도우 작업 관리자

ps 명령어

ps 명령어

실제로 컴퓨터를 켜고 확인해 보면 우리가 실행한 프로세스 외에도 알수 없는 프로세스가 실행되고 있는 것을 볼 수 있다. 그중에는 사용자가 볼 수 있는 공간에서 실행되는 프로세스도 있지만, 보이지 않는 공간에서 실행되는 프로세스도 있다. 전자는 사용자가 보는 앞에서 실행되는 프로세스라는 점에서 포그라운드 프로세스(foreground process)라고 하고, 후자는 사용자가 보지 못하는 뒤편에서 실행되는 프로세스라는 점에서 백그라운드 프로세스(background process)라고 한다.

백그라운드 프로세스 중에서 사용자와 직접 상호작용할 수 있는 백그라운드 프로세스도 있지만, 사용자와 상호작용하지 않고 그저 묵묵히 정해진 일만 수행하는 백그라운드 프로세스도 있다. 이러한 백그라운드 프로세스를 유닉스 체계의 운영체제에서는 데몬(daemon)이라고 부르고, 윈도우 운영체제에서는 서비스(service)라고 부른다.

윈도우 서비스

윈도우 서비스

리눅스 데몬

리눅스 데몬

2. 프로세스 제어 블록

모든 프로세스는 실행을 위해 CPU를 필요로 하지만, CPU 자원은 한정되어 있다. 즉 모든 프로세스가 CPU를 동시에 사용할 수는 없다. 그렇기에 프로세스들을 차례대로 돌아가며 한정된 시간만큼만 CPUㄹ리 이용한다. 자신의 차례가 되면 정해진 시간만큼 CPU를 이용하고, 시간이 끝났음을 알리는 인터럽트(타이머 인터럽트)가 발생하면 자신의 차례를 양보하고 다음 차례가 올 때까지 기다린다.

<aside> 🗒️ 타이머 인터럽트는 클럭 신호를 발생시키는 장치에 의해 주기적으로 발생하는 하드웨어 인터럽트이다. 타임아웃 인터럽트라고도 부른다.

</aside>

운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 배분한다. 이를 위해 운영체제는 프로세스 제어 블록(PCB, Process Control Block)을 이용한다.

프로세스 제어 블록은 프로세스와 관련된 정보를 저장하는 자료 구조이다. 이는 마치 상품에 달린 태그와도 같다. 옷이나 가전제품에 달려 있는 태그에 해당 제품을 식별하기 위한 정보가 있는 것처럼 프로세스 제어 블록에는 해당 프로세스를 식별하기 위해 꼭 필요한 정보들이 저장된다.

메모리는 커널 영역과 사용자 영역으로 나누어진 것을 이전에 학습했다. PCB는 커널 영역에 생성된다. 옷가게 점원이 수많은 옷들 사이에서 태그로 특정 옷을 식별하고 해당 옷과 관련된 정보를 판단하는 것처럼 운영체제도 수많은 프로세스들 사이에서 PCB로 특정 프로세스를 식별하고 해당 프로세스를 처리하는 데 필요한 정보를 판단한다.

PCB는 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기된다. 다시 말해 ‘새로운 프로세스가 생성되었다’는 말은 ‘운영체제가 PCB를 생성했다’는 말과 같고, ‘프로세스가 종료되었다’는 말은 ‘운영체제가 해당 PCB를 폐기했다’는 말과 같다.

이런 PCB에는 어떤 정보들이 담길까? PCB에 담기는 정보는 운영체제마다 차이가 있지만, 대표적인 정보는 아래와 같다.

1) 프로세스 ID

프로세스 ID(PID, Process ID)는 특정 프로세스를 식별하기 위해 부여하는 고유한 번호이다. 마치 학교의 학번, 회사의 사번과도 같은 존재이다. 같은 일을 수행하는 프로그램이라 할지라도 두 번 실행하면 PID가 다른 두 개의 프로세스가 생성된다. 윈도우 작업 관리자에서 아래와 같이 PID를 확인할 수 있다.

Untitled

Untitled