computer_science/computer_architecture

[컴퓨터구조] 01. 컴퓨터 시스템 개론

렁치 2026. 6. 25. 02:22

컴퓨터구조는 "컴퓨터가 안에서 어떻게 동작하는가"를 다룬다. 우리가 작성한 코드가 어떻게 0과 1이 되어 CPU에서 실행되는지, 그 밑바닥을 들여다보는 과목이다. 첫 글에서는 컴퓨터 시스템의 큰 구성과, 코드가 기계어로 번역되는 과정을 정리한다.


1. 컴퓨터 시스템의 구성

컴퓨터 시스템은 크게 하드웨어소프트웨어로 나뉘고, 하드웨어는 다시 네 부분으로 구성된다.

요소 역할
입력장치 데이터 입력 키보드, 마우스, 스캐너
출력장치 결과 전달 모니터, 프린터
중앙처리장치(CPU) 두뇌. 제어장치+연산장치+레지스터 -
기억장치 데이터 저장 주기억(RAM/ROM), 보조기억(HDD/SSD)

 

이 중 CPU가 핵심이다. 명령을 해석·제어하는 제어장치(CU), 실제 계산을 하는 연산장치(ALU), 값을 임시로 담는 레지스터로 이뤄진다. 소프트웨어는 하드웨어를 운영하는 시스템 SW(운영체제·컴파일러)와 사용자 목적의 응용 SW로 나뉜다.


2. 프로그래밍 언어와 번역

우리가 쓰는 코드와 CPU가 이해하는 언어 사이에는 여러 계층이 있고, 각 단계마다 번역기가 있다.

언어 설명 번역기
고급 언어 C, Java 등 사람 친화적 컴파일러
어셈블리어 니모닉(LOAD, ADD, STOR) 사용 어셈블러
기계어 0·1 조합, CPU가 직접 이해 -

 

니모닉(Mnemonic)은 명령어 동작을 사람이 알아보기 쉽게 줄인 기호다(LOAD, ADD 등). 고급 언어 → 어셈블리어 → 기계어로 갈수록 사람에게서 멀어지고 기계에 가까워진다.


3. 기계어 명령어 구조

명령어 = OP코드 + 오퍼랜드
기계어 명령은 무엇을 할지(opcode)와 무엇에 할지(operand)로 이뤄진다. 예를 들어 8비트 명령어가 3비트 opcode + 5비트 operand라면, opcode 3비트로 2³=8가지 연산을, operand 5비트로 2⁵=32개 주소를 지정할 수 있다.

Z = X + Y 한 줄이 기계어로 번역되는 과정을 보면 명확하다.

 

어셈블리 의미 기계어(opcode / operand)
LOAD A, X X번지 값을 레지스터 A에 적재 001 / 00101
ADD A, Y A와 Y번지 값을 더해 A에 저장 100 / 00110
STOR Z, A A의 내용을 Z번지에 저장 010 / 00111

 

우리가 무심코 쓰는 덧셈 한 줄이, CPU 입장에선 "적재 → 더하기 → 저장"이라는 여러 단계의 비트 명령으로 쪼개진다는 걸 알 수 있다. CPU가 한 번에 처리하는 비트 묶음을 워드(WORD)라 하며, 위 예에선 8비트가 한 워드다.


4. 논리 주소 vs 물리 주소

프로그램이 보는 주소와 실제 메모리 주소는 다르다.

구분 설명
논리 주소 실행 중인 프로그램이 사용하는 주소. 프로그램마다 0번지부터 시작
물리 주소 실제 메모리(RAM)의 하드웨어 주소. 0번지는 하나뿐

 

왜 0번지가 여러 개일 수 있나?
모든 프로그램이 "나는 0번지부터 시작한다"고 가정하고 작성된다(논리 주소). 그래서 같은 프로그램을 실행할 때마다 실제 RAM에서의 위치(물리 주소)는 달라질 수 있어도, 프로그램 입장의 논리 주소는 늘 0번지부터다. 이 논리 주소를 물리 주소로 변환해주는 것이 하드웨어의 역할이다.

 


한 걸음 더

  • opcode 비트 수가 연산의 가짓수를 결정한다는 점은 명령어 집합 설계의 핵심 트레이드오프로 이어진다. opcode를 늘리면 더 많은 연산을 지원하지만 operand에 쓸 비트가 줄어 다룰 수 있는 주소 공간이 좁아진다. 한정된 명령어 길이를 어떻게 쪼갤지가 CPU 설계의 오랜 고민이다.
  • 논리 주소와 물리 주소의 분리는 운영체제의 메모리 관리와 직결된다. 이 분리 덕에 여러 프로그램이 서로의 메모리를 침범하지 않고, 각자 "0번지부터의 깨끗한 공간"을 가진 것처럼 동작할 수 있다. 가상 메모리가 바로 이 발상을 끝까지 밀어붙인 것이다.
  • 고급 언어가 결국 기계어로 번역된다는 사실은, "어떤 언어를 쓰든 최종적으로 CPU가 하는 일은 같다"는 통찰로 이어진다. 그래서 성능이 정말 중요한 부분에서는 컴파일된 결과(어셈블리)를 직접 들여다보며 최적화하기도 한다. 컴퓨터구조를 알면 코드의 진짜 비용이 보이기 시작한다.

'computer_science > computer_architecture' 카테고리의 다른 글

[컴퓨터구조] 02. 데이터의 표현  (0) 2026.07.08