본문 바로가기

프론트

컴퓨터 구조: CPU, 메모리, 보조기억장치, 입출력장치

컴퓨터에서 코드가 실행되기까지 메인보드라는 판 위에 각 장치들이 시스템 버스라는 통로를 통해 데이터를 주고받는다. 이는 CPU가 주소, 데이터, 제어 신호를 어떻게 실행하여 하드웨어를 통제하느냐에 있다.

 

🧠  CPU (중앙처리장치)

컴퓨터의 '두뇌' 역할로, 메모리에서 명령어(기계어)를 읽어와서 해석하고 실행한다. CPU가 명령어를 처리하는 로직은 크게 세 가지로, 제어장치(CU), 산술논리연산장치(CPU), 레지스터(Register)가 있다. 

 

제어장치(Control Unit)는 로직의 시작으로 컴퓨터 모든 부품에 전압 신호를 보내 무엇을 할지 결정한다.

메모리에서 가져온 기계어를 분석하여 현재 필요한 데이터가 메모리나 입출력장치에 있는 지 판단 후 제어 버스를 통해 읽기 신호를 발생시킨다. 이 신호가 각 부품에 도달하면 하드웨어가 물리적으로 반응하기 시작한다.

 

산술논리연산장치(ALU)는 가산기나 논리 게이트들의 복잡한 미로로, 제어장치의 신호를 받아 ALU 내부 특정 회로로 전류가 흐르게 된다. 이때 플래그 레지스터에 계산 결과(0, 음수, overflow)를 기록하며 이를 통해 다음에 실행할 코드를 결정하는 중요한 근거를 만든다.

 

레지스터(Register)는 제어장치와 ALU 과정 속 데이터가 머무는 징검다리 역할로, 당장 계산에 필요한 데이터와 명령어를 아주 작은 저장 공간인 레지스터에 옮겨 사용한다. 레지스터는 각 역할이 있으며 PC(Program Counter)는 다음에 실행할 명령어를 저장하며, MAR은 메모리 주소를 임시로 저장하고 MBR/IR은 메모리에서 읽어온 실제 데이터나 명령어를 담아 유기적으로 데이터를 주고받게 한다.

레지스터를 통해 Fetch - Decode - Execute 과정이 반복적으로 일어난다.

 

CPU 내부에서 찰나의 순간마다 일어나는 전기 신호의 인출, 해석, 실행 과정의 물리적 연쇄 반응이 반복되어 실행되는 것이다.

 

💾  메모리 (Main Memory / RAM)

CPU가 당장 처리할 데이터와 명령어를 임시로 보관하는 곳이자 속도가 느린 보조기억장치와 빠른 CPU 사이에서의 간극을 메워주는 전략적 요충지이다. RAM은 휘발성임의 접근 두 가지의 물리적 특성을 통해 시스템의 속도를 결정짓는다. 

프로그램이 실행되면 운영체제는 보조기억장치에서 실행 파일의 기계어 전체를 읽어와 RAM의 비어 있는 주소 공간에 배치하며, 모든 데이터는 RAM이라는 메모리는 거쳐 CPU 레지스터로 전달된다. 이때 RAM은 수많은 격자 모양의 공간으로 이루어지며 각 칸마다 고유한 메모리 주소가 부여된다.

임의 접근은 메모리 주소만 알면 즉각적으로 해당 위치로 점프하여 데이터를 읽거나 쓰는 방식을 뜻한다.

CPU가 주소 버스에 특정 숫자를 보내는 순간 해당 주소의 전기 신호를 즉시 개방할 수 있음을 뜻하며, 컴파일러가 실행 속도가 빠른 이유도 RAM의 물리적 주소 체계를 빌드 타임에 계산해 두었기에 가능한 것이다.

 

RAM의 영역은 Stack과 Heap, 코드 및 데이터로 나뉘어져 있다.

스택 영역에는 함수 호출 시 생성되는 지역 변수들이 쌓이고, 힙 영역은 동적으로 할당되는 데이터들이 불규칙하게 자리잡는다. CPU는 PC를 통해 RAM의 코드 영역을 한 줄씩 명령어를 가져오고, 계산이 필요할 때마다 데이터 영역의 주소를 참조하여 값을 가져온다. 

RAM은 데이터를 잃지 않기 위해 주기적으로 전기를 다시 채우는 Refresh 과정을 거친다. 

 

💿 보조기억장치 (Secondary Storage)

전원이 꺼져도 사라지지 않는 공간이자 컴퓨터가 다루는 모든 정보의 거점이다.

수많은 프로그램을 안전하게 보관 후 필요시 RAM에게 데이터를 넘겨준다.

특징으로는 '비휘발성'과 '대용량 저장'이 있다. CPU가 직접 접근할 수 있는 RAM은 비싸고 공간이 한정적이므로, OS나 게임, 사진 등 수백기가바이트의 데이트터는 물리적으로 보조기억장치에 기록된다. 보조기억장치는 CPU와의 속도가 수천 배 차이나는데, 이 병목 현상을 해결하는 게 중요한 과제이다.

전통 방식인 HDD는 물리적인 로직으로 데이터를 읽지만, 현대의 SDD는 물리적 로직 없이 '낸드 플래시 메모리'라는 반도체 소자에 전자를 가두는 방식으로 데이터를 저장하고, 이는 전기적 신호로만 소통하기에 HDD보다 수십 배 빠르며 충격에도 강한 이점을 갖는다.

 

프로그램 실행 로직 관점으로 본다면, 실행 파일(.exe)를 실행하는 순간 OS는 보조기억장치의 특정 주소 영역을 훑어 기계어 데이터들을 찾아내고 시스템 버스를 통해 데이터들을 RAM의 빈 공간으로 복사해 CPU의 PC(Program Counter) 레지스터가 RAM에 복사된 기계어의 첫 번째 주소(Entry Point)를 가리키게 되며 기계어를 가져와 연산이 수행된다. 컴파일 언어의 기계어가 전기 신호로 바뀌기 전 정적인 상태로 보조기억장치에 머무는 것이다. 

 

⌨️ 입출력장치 (I/O Devices)

마우스 움직임이나 키보드의 타건 같은 물리적 에너지를 전기 신호로 바꾸어 컴퓨터 내부를 들여다보거나, 연산 결과인 디지털 데이터를 빛이나 소리로 변환하여 모니터나 스피커로 출력한다.

입출력장치는 CPU나 RAM에 비해 속도가 제일 느리며 종류마다 데이터 전송 방식도 다르다. 이를 해결하기 위해 장치 컨트롤러(Device Controller)가 존재한다. Local Buffer은 장치 컨트롤러 내부의 임시 저장소로, 입출력장치에서 들어온 데이터를 CPU가 가져가기 편하게 잠시 모아두거나, CPU가 보낸 데이터를 장치가 출력할 때까지 보관한다. CPU가 시스템 버스의 제어 버스를 통해 출력하라는 명령어를 내리면, 장치 컨트롤러는 이를 해석하여 실제 하드웨어를 물리적으로 작동시킨다. 

 

 

🚌 시스템 버스 (System Bus)

시스템 버스는 앞선 CPU, RAM, 보조기억장치, 입출력장치들을 모두 연결하는 통로이다. 전기적 신호가 충돌 없이 도달하도록 통제하며 세 가지 핵심 통로를 갖는다.

버스 종류 설명 흐름 방향
주소 버스 (Address Bus) 데이터를 읽거나 쓸 '메모리 주소'를 전달한다. CPU → 장치 (단방향)
데이터 버스 (Data Bus) 실제 명령어와 데이터를 주고받는다. 양방향
제어 버스 (Control Bus) "읽어라(Read)", "써라(Write)" 같은 제어 신호를 보낸다. 양방향