컴퓨터 시스템을 처음 배울 때 하드웨어 구조는 단순히 부품의 이름을 외우는 문제가 아니라, 프로그램이 실행되는 전체 흐름을 이해하는 출발점입니다. 이 글에서는 CPU, 메모리, 버스, 캐시 메모리 같은 핵심 하드웨어 요소가 실제로 어떻게 연결되어 동작하는지, 그리고 운영체제가 그 사이에서 어떤 역할을 하는지 정리해 보았습니다. 특히 CPU와 메모리의 속도 차이를 극복하기 위한 캐시 메모리의 발전 과정과, 시스템 버스와 입출력 버스의 차이, 컨텍스트 스위칭이 일어나는 원리를 중심으로 살펴봅니다.
CPU와 메모리 사이의 속도 격차, 캐시 메모리가 해결한다
컴퓨터 시스템은 응용프로그램 층, 운영체제 층, 하드웨어 층으로 나뉘는 계층 구조를 가집니다. 사용자는 응용프로그램이나 운영체제에 포함된 GUI와 도구 프로그램을 통해 컴퓨터를 활용하며, 어떤 경우에도 직접 하드웨어에 접근하는 것은 불가능하고 반드시 운영체제를 거쳐야 합니다. 운영체제의 본질적인 특징은 사용자가 하드웨어에 대한 구체적인 내용을 몰라도 컴퓨터를 사용할 수 있게 해 준다는 점에 있습니다.
하드웨어 층의 핵심인 CPU는 프로그램 코드, 즉 기계 명령(machine instruction)을 실행하는 중앙처리장치입니다. 그런데 CPU 기술의 발전 속도가 메모리 기술의 발전 속도보다 빨라지면서 둘 사이의 처리 속도 격차가 점점 벌어지게 되었고, CPU는 메모리에 요청을 보낸 뒤 결과를 기다리는 시간이 길어지는 문제가 발생했습니다. 이 문제를 해결하기 위해 CPU와 메모리 사이에 빠른 캐시 메모리를 소량 배치하는 방식이 도입되었습니다.
캐시 메모리는 초기에 시스템 버스에 연결되는 방식으로 존재했는데, 이를 오프칩 캐시(off-chip cache)라고 부릅니다. 이후 CPU의 실행 속도를 더 높이기 위해 캐시 메모리를 CPU 내부에 두는 온칩 캐시(on-chip cache) 방식으로 발전했습니다.

| 구분 | 위치 | 특징 |
|---|---|---|
| 오프칩 캐시 | CPU 외부, 시스템 버스 연결 | 초기 방식, 속도 제한적 |
| 온칩 캐시 | CPU 내부에 내장 | 발전된 방식, 접근 속도 향상 |
시스템 버스와 입출력 버스는 무엇이 다를까
CPU, 캐시 메모리, 메모리, 입출력 제어장치 및 시스템 제어 회로 같은 컴퓨터 하드웨어들은 서로 데이터를 주고받기 위해 0과 1의 디지털 신호가 지나가는 여러 가닥의 선을 묶은 버스를 사용합니다. 주소(address)란 메모리나 입출력 장치 내부의 저장소(레지스터)에 부여된 번지를 의미합니다.
버스는 연결 대상에 따라 구분됩니다. 시스템 버스는 CPU, 캐시 메모리, 메모리처럼 빠르게 작동하는 하드웨어들 사이에 신호를 전송하기 위한 버스이고, 입출력 버스는 상대적으로 느린 입출력 장치들로부터 데이터를 전송하기 위한 버스입니다. 이 두 버스는 속도 요구사항이 다르기 때문에 분리되어 설계됩니다.
입출력 제어장치에는 대표적으로 DMAC(Direct Memory Access Controller)와 인터럽트 제어장치(Interrupt Controller, INTC)가 포함됩니다. 또한 노스브리지(NorthBridge)는 메모리 액세스량이 많고 메모리와 빠르게 정보를 주고받아야 하는 하드웨어들을 연결하는 허브 역할을 합니다. 32비트 CPU의 경우 메모리에 액세스할 수 있는 범위는 0부터 2^32 - 1번지까지이며, 최대 액세스 가능한 메모리 크기는 4GB입니다.
CPU 내부 레지스터와 스택의 역할
CPU 명령은 CPU가 해석하고 실행할 수 있는 기계 명령입니다. 따라서 특정 CPU를 대상으로 컴파일한 프로그램은 다른 제품의 CPU를 사용하는 컴퓨터에서는 실행되지 않는데, 이를 CPU 간 호환성이 없다고 표현합니다. CPU 내부에는 다양한 레지스터가 존재하며 각각 역할이 다릅니다.
- PC(Program Counter) 레지스터: 현재 실행 중인 코드의 메모리 주소를 저장
- IR(Instruction Register): 메모리에서 읽어 온 명령을 저장하고 해석
- 데이터 레지스터: 이전에 실행된 결과 값이나 현재 실행에 사용될 데이터 값을 저장
- 상태 레지스터: CPU의 상태 정보나 인터럽트 금지 등의 제어 정보를 저장
- SP(Stack Pointer) 레지스터: 현재 실행 중인 프로그램의 스택 영역 꼭대기 주소를 가리킴
메모리에는 프로그램의 코드와 전역 변수 데이터, 힙(동적 할당받은 데이터), 그리고 호출된 함수들의 매개변수와 지역변수가 저장된 스택이 있습니다. 함수가 호출될 때는 매개변수, 지역변수, 함수 실행이 끝난 뒤 돌아갈 주소 등을 스택 공간에 저장하게 됩니다.
운영체제가 현재 실행 중인 프로그램을 중단하고 다른 프로그램을 실행하려면, 현재 실행 중인 프로그램의 컨텍스트를 다른 곳에 저장해 두고 다시 실행될 때 이용할 수 있게 가져와야 합니다. 이렇게 운영체제가 현재 실행 중인 프로그램의 컨텍스트를 저장해 두고, 메모리에 저장된 다른 프로그램의 컨텍스트를 가져오는 과정을 컨텍스트 스위칭(Context Switching)이라고 합니다.
멀티 코어 CPU는 어떻게 구성될까
코어(core)란 레지스터들과 제어장치(Control Unit), 산술논리연산장치(ALU), 그리고 외부 버스와 연결되는 인터페이스 장치를 독립적으로 갖추고 하나의 프로그램을 실행할 수 있는 완벽한 프로세서를 말합니다. 즉 코어 하나만으로도 하나의 프로그램을 온전히 실행할 수 있는 능력을 갖추고 있다는 뜻입니다.
여러 개의 코어를 가지고 동시에 여러 개의 프로그램을 실행할 수 있는 CPU를 멀티 코어 CPU라고 합니다. 멀티 코어 CPU는 프로그램을 병렬로 처리할 수 있어 단일 코어 CPU보다 전반적인 처리 성능이 높습니다.

| 구성 요소 | 역할 |
|---|---|
| 레지스터 | 명령어와 데이터 임시 저장 |
| 제어장치 | 명령어 해석 및 실행 제어 |
| ALU | 산술 및 논리 연산 수행 |
| 인터페이스 장치 | 외부 버스와의 연결 담당 |
컴퓨터 구조 설계에서는 비용, 속도, 가용성, 에너지 효율성 같은 다양한 목표 사이에서 우선순위를 정해야 합니다. 설계자는 하드웨어 요구사항과 컴파일러, 집적 회로 설계에 이르는 여러 측면을 두루 이해해야 하며, 특히 21세기에는 전력 소비와 발열 문제가 성능 향상의 주요 제한 요소가 되었습니다.