프로그램을 다 만들었고 컴파일까지 끝냈다. 그럼 구체적인 실행과정은? 이 짧은 글은 만들어져 있는 프로그램의 실행 과정을 논해본다. CSAPP의 1장 내용 중 일부이다.
2025.08.15 - [컴퓨터 이론/CS:APP] - 컴퓨터가 프로그램을 뚝딱 만드는 과정
컴퓨터가 프로그램을 뚝딱 만드는 과정
CS:APP의 정리를 다시 한번 내 언어로 하고 있다. 생각도 안하고 언어 전환도 안하고 판서만 해댄다면, 나는 그냥 오타를 내고 성능이 느린 LLM과 다를바가 없다. 이 내용은 챕터 1의 내용 초반부이
hyeonistic.tistory.com
당신의 프로그램은 아마 이런 방식으로 만들었을 것이다. 이제 실행시킴으로써 프로그램의 존재의의를 실현시켜보기로 한다.
프로그램을 실행 시키기 위한 요청, 그리고 실제로 프로그램이 실행되는 주체에는 입출력(I/O), 메인 메모리(RAM), 프로세서(CPU)가 있다. 괄호 안에 있는걸로 앞으로 부르겠다.
사람은 I/O를 통해 실행 할 프로그램을 선택 또는 입력한다. 하드 디스크에 저장되어있는 프로그램은 호출되는 즉시 RAM에 적재 되어 실행된다. 그리고 사람의 입력을 받고, 하드 디스크에서 조회하고, 호출하고 이러한 모든 액션은 CPU가 총괄한다.
이 일련의 과정에서 사실 CPU는 너무 빠르기 때문에 하드 디스크에서 RAM에 적재하는 동안 논다. 그래서 CPU의 활용처를 높이기 위해 시점을 파일 적재를 기다리는게 아니라 이 전체의 적재 과정에서 CPU의 담당을 할 에이전트를 쓰기로 약속했는데, DMA가 그 역할이다.
Direct Memory Aceess
CPU는 적재와 같은 단순 반복 작업을 DMA에게 지시만 한다. DMA는 CPU의 개입이 없이 직접 하드에서 RAM으로 데이터를 복사한다.
지시한 일이 끝난 경우 DMA는 인터럽트 신호로 작업 완료를 보고하게 된다.
여기서 DMA는 이정도의 역할만 한다고 생각하자. 이후에 더 많은 이야기를 다루게 될 것이다.
Program Counter
RAM에 적재되었으니, CPU는 이제 프로그램의 명령어를 한 줄씩 읽어서 실행해야 한다. CPU 내부에 있는 작은 저장 공간들인 레지스터들이 핵심적인 역할을 수행하게 된다. 이중에 Program Counter 라는 레지스터는 중요한 이름 값을 하게 된다.
PC는 지금 읽어야 할 코드의 순서를 가리킨다. CPU는 PC가 가리키는 메모리 주소로 가서 적혀있는 명령어를 실행한다. 그리고 다음 메모리 주소를 가리키도록 이동된다. 이 과정을 계속 반복하면서 프로그램이 실행되는 것이다. 좀 더 단계스러운 느낌으로 정리하면 :
- 가져오기(Fetch) : PC가 가리키는 메모리의 명렁어 한 개를 읽어온다.
- 해석하기(Decode) : 해당 명령어의 내용을 해석한다.
- 실행하기(Execute) : 해석한 내용을 바탕으로 실제로 명령어를 실행한다.
이 세 단계가 끝나면 PC는 다음 내용을 가리키고 또 다음 문장에 대해 사이클을 반복한다. 이걸 초당 미치게 많은 횟수를 수행하고, 이제 실행되고 있는 프로그램을 볼 수 있다.
'컴퓨터 이론 > CS:APP' 카테고리의 다른 글
운영체제의 추상화를 정돈해보니 (4) | 2025.08.15 |
---|---|
bit에 몸을 맡기다 (하드웨어에서의 버스) (2) | 2025.08.15 |
컴퓨터가 프로그램을 뚝딱 만드는 과정 (4) | 2025.08.15 |
[CS:APP] Chap 9.1 - 9.8 : Virtual Memory (0) | 2025.04.23 |
[CS:APP] Chap 8 : Exceptional Control Flow (0) | 2025.04.23 |