[Week1 - CSAPP] 1.4 - 프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다.

2025. 9. 8. 01:51CSAPP

컴퓨터는 우리가 위의 1.1~1.3장을 통해 배운 컴파일 과정을 통해 만들어낸 실행파일을 어떤 과정으로 실행할까?

 

오늘은 이 과정에 대해 알아보자.

 

유닉스 기준으로, 응용프로그램을 실행하기 위해서는, 쉘이라는 곳에 실행파일의 이름을 입력한다. 

linux> ./hello
hello, world
linux>

 

"hello, world"를 출력하는 hello라는 프로그램을 실행하려면 쉘에 위와 같이 입력한다.

 

이런 쉘같이 프롬프트(여기서는 "linux> " → 입력 대기 신호)를 출력하고, 

 

명령어 라인을 입력받아 내장 쉘 명령어인지 판단하고 아니라면 입력한 파일의 이름으로 그 파일을 로딩하여

 

실행하고, 프로그램이 종료되면 프롬프트를 출력하며 다음 명령어 라인을 대기한다.

 

이러한 프로그램을 CLI, 커맨드라인 인터프리터 라고 한다.

 

윈도우의 cmd, linux와 unix의 터미널, 심지어 마인크래프트의 명령어 입력 창 조차도 CLI이다.

 

소프트웨어적으로는 여기까지가 전부지만, 하드웨어에서는 이러한 프로그램 실행을 위해 더 많은 과정이 발생한다.

 

1. 버스

버스는 정보가 흐르는 회로들(= 전기적 배선군)로, 하드웨어에서 데이터를 전달하는 통로 역할을 한다.

 

이 버스가 전달하는 데이터는 고정 크기의 바이트 단위로 정보를 전달하는데,

 

보통 4바이트(32비트)또는 8바이트(64비트)로 나뉘며,

 

요즘 대부분의 개인용 컴퓨터는 64비트 버스를 사용한다.

 

우리가 흔히 말하는 64비트 컴퓨터에서 64비트는 한 번에 버스가 전달할 수 있는 데이터 단위,

 

워드의 크기를 의미한다.

 

이 고정 크기의 데이터를 워드라고 부른다.

 

즉, 우리가 64비트 컴퓨터를 쓴다는 것은 워드의 길이가 64비트로 설계된 버스를 가진 시스템을 사용하는 컴퓨터를 쓴다는 의미이

다.


2. 입출력 장치

입출력 장치는 외부 세계와 컴퓨터 시스템을 연결하는 장치로, 우리가 흔히 생각하는 USB 포트나 C타입 포트와는 조금 다르다.

 

입출력 장치는 입출력을 담당하는 입출력 버스컨트롤러또는 어댑터를 통해 시스템과 연결된다.

 

컨트롤러와 어댑터의 차이는 패키징(=하드웨어 위치와 통합 방식)과 역할에서 나타난다.

  • 컨트롤러: 입력 장치를 제어하고, 외부 장치가 보내는 신호를 CPU가 이해할 수 있는 형태로 해석하는 하드웨어
    • 예: 키보드 입력 신호를 문자 코드로 변환
    • 예: 디스플레이에 출력할 데이터를 CPU 또는 GPU에서 전달 받아 모니터로 출력
  • 어댑터: 외부 장치와 시스템 버스를 연결하는 하드웨어로,
    컨트롤러가 장치를 제어하고 관리하는 것과 달리 실제 신호를 전달하는 직접적인 연결을 담당
    • 예: GPU를 PCIe 슬롯에 장착하여 CPU와 GPU 사이를 연결

요약하면 아래와 같다.

  • 컨트롤러 = 외부 장치의 신호를 해석하고 제어
  • 어댑터 = 장치를 컴퓨터 시스템 버스와 연결하는 다리 역할

3. 메모리

컴퓨터에서 메모리(RAM)는 CPU와 GPU가 프로그램과 데이터를 빠르게 처리할 수 있도록 임시로 저장하고 전달하는 하드웨어이다.

 

램은 아래와 같은 종류가 있다.

 

  • SRAM: CPU 내부에 존재하며, **자주 사용하는 명령어(인스트럭션)**를 캐시로 저장한다.
    • 매우 빠른 속도로 CPU에 전달되며, DRAM보다 훨씬 빠르다.
  • DRAM: CPU 외부에 존재하며, 실행 중인 프로그램의 전체 명령어와 데이터를 저장한다.
    • CPU가 필요할 때 해당 명령어를 전달하며, SRAM보다 느리지만 용량이 크고 비용이 저렴하다.
    • 메인 메모리 역할을 하며, 연속적인 바이트 배열로 구성되고, 각 바이트는 0부터 시작하는 고유 주소(인덱스)를 가진다.
  • VRAM: GPU 전용 메모리로, 그래픽 계산과 관련된 정보를 저장하고 GPU에 전달한다.

메인 메모리의 역할을 하는 DRAM에 저장되는 데이터는 아래와 같은 특징을 지닌다.

  • 각 명령어(인스트럭션)는 다양한 바이트 크기를 가진다.
  • 예시(C언어 기준):
    • int형 변수를 선언하는 명령어 → 4바이트
    • double형 변수를 선언하는 명령어 → 8바이트

요약하면 아래와 같다.

  • SRAM = CPU 캐시, 초고속
  • DRAM = 메인 메모리, 전체 프로그램 저장, 큰 용량
  • VRAM = GPU 전용 메모리

4. 프로세서

CPU, 즉 프로세서(CPU + 일부 보조 하드웨어 포함)는 메인 메모리에 저장된 인스트럭션을 읽고 해석하여 실행하는 엔진이다.

 

이 프로세서의 핵심에는 PC(프로그램 카운터)라는 레지스터가 있는데,


이 레지스터는 현재 실행 중인 인스트럭션의 다음 인스트럭션의 주소를 저장한다.


즉, 프로그램의 흐름을 안내하는 네비게이션 같은 역할을 한다.

 

컴퓨터는 전원이 켜진 순간부터 꺼질 때까지,


PC가 가리키는 메모리 주소로부터 인스트럭션을 읽고 실행하는 과정을 무한히 반복한다.

 

프로그램은 이러한 단순한 동작들을 매우 많이 반복하여 실행된다.

 

이 과정에서 명령어와 데이터는

 

메인 메모리 → 레지스터 파일(데이터와 주소를 일시적으로 저장하는 레지스터 집합) → ALU(산술·논리 연산 장치)

 

를 중심으로 순환한다.

  • 레지스터 파일 : 워드 크기의 레지스터들이 모인 집합으로, 각 레지스터는 고유 이름을 가진다.
  • ALU : 레지스터나 메모리에서 가져온 데이터를 바탕으로 산술 연산, 논리 연산, 비교 등을 수행한다.

 요약하면, 프로그램 실행은


저장장치(SSD/HDD 등) 또는 입출력 장치 → DRAM(메인 메모리) → 레지스터 → (PC가 가리키는 주소 기반으로) CPU → ALU 연산


의 흐름을 따른다.

 

컴퓨터 내부의 하드웨어는 이런 방식으로 협력하여 동작한다.