[컴퓨터 구조] 프로그램이 실행된다는 것의 의미

2026. 1. 3. 16:35·CS

 

우리는 늘 프로그램을 실행하고 있다. 아이콘을 더블 클릭하거나 터미널에서 명령어를 입력하는 행위는 일상이 되었다.

하지만 프로그램이 실행된다는 말이 컴퓨터 내부에서 구체적으로 어떤 과정을 의미하는지 깊게 생각해 본 적은 많지 않다.

 

이번 글에서는 프로그램이 실행될 때 발생하는 컴퓨터 내부의 변화와 핵심 원리를 정리해 봤다.

 

1. 실행 전의 프로그램은 just 데이터일 뿐이다

먼저 알아야 할 사실은 실행되기 전의 프로그램은 아무 일도 하지 않는 정적인 상태라는 점이다.

- SSD/HDD와 같은 보조기억장치에 저장된 .exe, .app, .jar 파일들

- 작성한 소스코드를 컴파일해 만든 이진 파일

이 상태의 프로그램은 그저 저장된 데이터 덩어리에 불과한다.

 

LIKE | 프로그램 파일 = 요리책

요리책이 있다고 해서 요리가 자동으로 만들어지지 않듯, 파일이 디스크에 저장되어 있다고 해서 컴퓨터가 작동하는 것은 아니다.

 

2. 실행의 첫 단계 : 메모리(RAM)로 올라간다(Load)

프로그램을 실행하면 가장 먼저 일어나는 일은 보조기억장치에 있던 프로그램 데이터를 메모리(RAM)로 올리는 것이다.

 

왜 굳이 메모리로 옮길까? 그 이유는 속도 차이 때문이다.

CPU는 초당 수십억 번 연산할 만큼 빠르지만, SSD나 HDD는 CPU의 속도를 따라가기엔 너무 느리다.

따라서 CPU가 제 속도를 낼 수 있도록 작업대 역할을 하는 빠른 메모리에 데이터를 미리 올려두는 것이다.

 

이때 소프트웨어의 이름이 바뀐다고 볼 수 있다!

실행 전 : 프로그램 (Program, 정적)

실행 후 : 프로세스 (Process, 동적)

 

프로세스(Process)란, '실행 중인 프로그램 + 필요한 모든 실행 정보'를 포함한 개념이다.

 

3. 프로세스의 탄생 : 운영체제가 할당하는 메모리 공간

운영체제(OS)는 프로그램을 메모리에 올릴 때 프로세스가 안정적으로 실행될 수 있도록 전용 공간을 나눠 할당한다.

이것이 바로 프로세스 주소 공간이다. 이 공간은 역할에 따라 나뉜다.

 

3-1. 코드 영역 (Code/Text)

- 우리가 작성한 코드가 기계어로 변환되어 저장되는 곳

- CPU가 읽어서 실행할 명령어들이 들어 있으며 프로그램 도중 수정되지 않도록 읽기 전용 상태로 유지

즉, 무엇을 할지가 적혀있는 영역이다.

 

3-2. 데이터 영역 (Data/BSS)

- 전역 변수, 정적 변수 저장

- 프로그램 시작과 동시에 할당되어 종료될 때까지 유지되는 값들

즉, 처음부터 끝까지 필요한 값들을 의미한다.

 

3-3. 힙 영역 (Heap)

- 사용자(개발자)가 직접 관리하는 메모리 공간

- 실행 중에 크기가 결정되는 데이터들이 저장되며 메모리를 효율적으로 쓰기 위해 동적 할당할 때 사용 (Java의 객체, C의 malloc 등)

즉, 실행하면서 늘었다가 줄었다가 하는 저장 공간이다.

 

3-4. 스택 영역(Stack)

- 함수가 호출될 때 필요한 정보(지역 변수, 매개변수, 돌아갈 주소)가 저장

- 함수 호출이 끝나면 자동으로 사라지며 LIFO 구조로 관리되어 재귀 함수 호출 등이 가능해짐

즉, 순서대로 쌓였다가 빠지는 실행 기록을 의미한다.

 

이러한 구조 덕분에 여러 함수 호출, 재귀, 지역 변수 관리 등이 가능해진다.

 

* 같은 프로세스 안에서도 스택은 각 작업의 흐름(Thread)마다 따로 할당되지만, 힙은 프로세스 전체가 공유한다.

그래서 여러 작업이 동시에 힙의 데이터를 건드릴 때 발생하는 문제가 바로 '동기화 문제'의 원인이 되기도 한다.

 

4. 실행의 핵심 : CPU의 명령어 사이클

메모리에 준비가 끝났다면 이제 주인공인 CPU가 나타난다.

CPU는 메모리에 올라온 명령어들을 가져와 명령어 사이클을 무한 반복하며 실행한다. (Fetch - Decode - Execute)

이때 CPU는 시스템 버스라는 통로를 통해 메모리의 코드를 한 줄씩 가져와 처리한다.

 

1. Fetch : 인출

- 메모리(코드 영역)에서 다음에 실행할 명령어를 CPU로 가져온다

 

2. Decode : 해독

- 가져온 명령어가 더하기인지, 저장인지 등 무엇을 하라는 것인지 CPU 내의 제어장치가 해석한다

 

3. Execute : 실행

- 해석된 명령어대로 연산을 수행하거나 데이터를 이동시킨다

 

이 사이클이 초당 수억 번이 반복되면서 우리 눈에는 프로그램이 매끄럽게 돌아가는 것처럼 보이게 되는 것이다.

 

* CPU가 메모리에서 명령어를 가져올 때는 시스템 버스라는 고속 통로를 이용한다. Fetch 단계에서 CPU 내의 PC라는 레지스터가 다음에 읽을 명령어의 주소를 가리키고 있으며 그 주소에 있는 데이터가 버스를 타고 CPU로 전달되는 것이다.

 

5. 정리 : 프로그램 → 프로세스로 바뀌는 순간

구분 프로그램 (Program) 프로세스 (Process)
상태 정적 (Static) 동적 (Dynamic)
위치 보조기억장치 (SSD/HDD) 주기억장치(RAM)
실행 불가능 CPU에 의해 실행
구성 코드 데이터 파일 메모리 구조(Stack, Heap, .. ) + CPU 리소스
비유 요리책 실제 요리 중인 상태

 

프로그램이 실행된다는 것은

저장 장치에 있던 정적인 파일이 메모리에 올라가 CPU에 의해 처리되는 프로세스(= 살아 있는 상태)가 되는 것이다.

 

다음 글에서는 더 깊이 들어가서 CPU는 내부에서 어떻게 일을 나눠 처리하는지

ALU, CU, 레지스터는 각각 무슨 역할을 하는지 알아볼 예정이다.

'CS' 카테고리의 다른 글

[컴퓨터 구조] 컴퓨터를 구성하는 요소  (0) 2025.12.23
캐시와 참조 지역성으로 웹 성능을 높이는 방법  (1) 2025.01.22
개발자가 컴퓨터 구조를 알아야 하는 이유  (0) 2025.01.13
웹 개발 시 꼭 챙겨야 할 보안 체크 리스트  (0) 2025.01.07
혼자 공부하는 네트워크 CH5. 응용 계층  (2) 2024.12.19
'CS' 카테고리의 다른 글
  • [컴퓨터 구조] 컴퓨터를 구성하는 요소
  • 캐시와 참조 지역성으로 웹 성능을 높이는 방법
  • 개발자가 컴퓨터 구조를 알아야 하는 이유
  • 웹 개발 시 꼭 챙겨야 할 보안 체크 리스트
uoaheu
uoaheu
uoaheu 님의 블로그 입니다.
  • uoaheu
    uoaheu 님의 블로그
    uoaheu
  • 전체
    오늘
    어제
    • 분류 전체보기 (50)
      • 알고리즘 (7)
      • CS (9)
      • FRONTEND (9)
        • React (12)
        • Kotlin (1)
        • JS (5)
        • HTML (2)
      • SQL (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    토스 uiux
    toss uiux
    유레카3기
    BFS
    알고리즘
    mysql로 피벗테이블만들기
    혼자서 공부하는 네트워크
    백준1926번
    리액트usestate
    토스 앱 분석
    멀티캠퍼스it부트캠프
    boj25418
    mysql 피벗테이블
    부트캠프후기
    이더넷프레임
    mysql
    토스분석
    toss 분석
    엘지유플러스유레카프론트엔드
    useactionstate
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
uoaheu
[컴퓨터 구조] 프로그램이 실행된다는 것의 의미
상단으로

티스토리툴바