프로세스에 대해 공부하다보면 항상 헷갈리는 것들이 있습니다. 또, 자주 등장하는 용어들도 있죠. 이번 글에서 한 번 다뤄보겠습니다.

참고 자료는 다음과 같습니다.

프로세스의 탄생

초창기 컴퓨터는 동시에 오직 하나의 프로그램만 실행할 수 있었습니다. 그러나 현대 컴퓨터는 여러 개의 프로그램을 메모리에 로드하고 동시에 실행할 수 있는데요. 이를 가능하게 하는 것이 바로 프로세스입니다.

프로세스란 실행중인 프로그램을 나타내며 현대 컴퓨터 시스템의 작업 단위입니다. 컴퓨터 시스템은 사용자 코드를 실행하는 프로세스와 운영 체제 코드를 실행하는 프로세스 등 여러 프로세스의 집합으로 구성됩니다.

프로그램과 프로세스의 차이

프로그램은 명령어들의 집합으로 디스크에 저장된 파일과 같이 정적인 요소이며 프로세스는 PC(program counter)가 다음에 실행할 명령어를 가리키고 있는 동적인 요소입니다.

프로그램은 실행 가능한 파일이 메모리에 로드될 때 비로소 프로세스가 됩니다. 만약 같은 프로그램으로 두 개의 프로세스를 실행하더라도 둘은 분리된 실행 순서를 갖게 됩니다.

프로세스는 다른 코드의 실행 환경이 될 수 있는데요. 예를 들어 Java 명령어는 JVM를 일반 프로세스로 실행하며 JVM은 Java program을 실행합니다.

프로세스의 메모리 구조

각 프로세스는 독립적인 메모리 공간을 사용하는데요. 프로세스의 메모리는 여러 영억으로 나뉘어져 있으며 다음과 같은 구조를 갖습니다.

Untitled.png

  • Text section: 실행 가능한 코드
  • Data section: 전역 변수
  • Heap section: 런타임에 동적으로 할당되는 메모리
  • Stack section: 함수 실행 시 임시 저장 공간 (e.g. 매개 변수, 리턴 주소, 지역 변수)

예를 들어, C로 작성된 프로세스 메모리 구조는 다음과 같습니다.

Untitled.png

영역별 크기 변화 여부

Text section과 data section의 크기는 고정되어 있으며 프로그램 실행 중에 변하지 않습니다. 그러나 stack과 heap section의 경우 런타임에 줄어들거나 늘어날 수 있습니다.

Stack의 경우 함수가 호출 될 때 함수 매개 변수, 지역 변수, 반환 주소를 포함하는 activation record가 push 되어 늘어납니다. 반대로 함수의 제어가 반환될 땐 activation record가 pop 되어 줄어듭니다.

이와 유사하게 heap section은 메모리가 동적 할당 될 때 늘어나며 할당된 메모리가 반환될 때 줄어듭니다.

Stack과 heap는 서로를 향해 늘어나므로 운영 체제는 두 영역이 겹치지 않게 해야합니다.

프로세스 상태

프로세스는 실행 중에 여러 상태를 갖습니다. 상태는 프로세스의 현재 활동에 의해 정의되며 다음 중 하나의 상태를 갖습니다.

Untitled.png

  • New: 프로세스가 만들어지고 있는 상태
  • Running: 명령어를 실행하고 있는 상태
  • Waiting: 특정 이벤트(e.g. I/O event) 혹은 신호를 기다리고 있는 상태
  • Ready: 프로세서에 할당되길 기다리고 있는 상태
  • Terminated: 프로세스가 실행을 완료한 상태

하나의 프로세서 코어는 동시에 하나의 프로세스만 실행할 수 있습니다. 따라서, 많은 프로세스들은 ready 혹은 waiting 상태로 존재할 수 있습니다.

Process control block

운영체제에서 프로세스는 PCB(process control block)으로 표현됩니다. 각 프로세스는 고유의 PCB를 가지며 프로세스가 생성될 때 함께 생성되며 프로세스가 종료될 때 함께 삭제됩니다.

PCB의 구조는 다음과 같습니다.

Untitled.png

  • Process state: 프로세스 상태
  • Program counter: 다음에 실행할 명령어의 주소를 나타내는 카운터
  • CPU registers: CPU 레지스터 정보
  • CPU-scheduling information: CPU 스케쥴링 정보
  • Memory-management information: 메모리 관리 정보
  • Accounting information: 실시간 CPU 사용량, 시간 제한, 프로세스 번호 등
  • I/O status information: 프로세스에 할당된 I/O 장치와 열린 파일들의 목록

간단히 말해, PCB는 통계(accounting) 데이터와 함께 프로세스를 시작하거나 다시 시작하는 데 필요한 모든 데이터의 저장소 역할을 합니다.

마무리하며

이번 글에서는 프로세스의 개념에 대해 간단히 알아보았습니다. 이후 프로세스를 깊게 이해하기 위한 필수적이므로 반드시 알고 넘어가야 합니다! 글 읽어 주셔서 감사합니다.

댓글남기기