
컴퓨터 구조 및 설계(David A. Patterson & John L. Hennessy) 와 학부 '컴퓨터 구조' 강의를 기반으로 이해한 내용을 정리하였습니다.
계층 구조와 Abstraction
소프트웨어와 하드웨어의 계층 구조

컴퓨터 시스템은 계층 구조(Layered structure)로 이루어져 있습니다. 이 계층 구조를 동심원 형태로 봐볼께요. 가장 안쪽에 Hardware가 있고, 그 위에 Systems Softwarer, 그 위에 Applications Software가 위치하고 있습니다.
이 그림에서 핵심적으로 이해해야 할 점은, 인접한 계층끼리만 상호작용한다는 점이에요. 응용 프로그램(Application Software)은 시스템 소프트웨어(System Software)와만 상호작용하고, 하드웨어와는 직접적인 관계가 없죠.
마찬가지로 시스템 소프트웨어는 하드웨어와 상호작용하지만, 응용 프로그램의 구체적인 내용에 대해서는 알 필요가 없습니다.

왜 계층을 나눌까요?
응용 프로그램이 하드웨어 위에서 직접 실행되지 않고, 중간에 운영체제 같은 시스템 소프트웨어를 거치는 이유는 여러 가지가 있습니다.
편의성
예를 들어볼께요. 프로그램을 만들 때 마우스 클릭이 어디서 발생했는지를 직접 감지하는 코드를 짤 필요가 없죠. 그 기능은 운영체제가 대행해줍니다. 이런 부분에서 편의가 있는거죠.
자원 관리
여러 프로그램이 동시에 실행될 때, 메모리의 같은 공간을 두 프로그램이 차지하면 안됩니다. 이런 관리를 각 응용 프로그램이 스스로 하도록 만들면 모든 프로그램이 동일한 관리 기능을 중복으로 구현해야 하고, 프로그램이 뚱뚱해지고 무거워집니다. 운영체제 하나가 잘 만들어져 있으면, 응용 프로그램은 그 기능을 위탁하면 됩니다.
추상화(Abstraction)
프로 그램을 만들 때 내 시스템의 메모리가 16GB인지 32GB인지, 프로세서의 코어가 어떤지, NPU가 어떤지 신경 쓰지 않습니다. 그게 가능한 이유는 시스템 소프트웨어가 하드웨어의 구체적인 세부사항을 감춰주기 때문이에요.
이것이 이식성(Portability)을 제공하는 핵심 원리죠. 16GB 버전 따로, 32GB 버전 따로 만들 필요 없이, 알아서 돌아갑니다.

시스템 소프트웨어의 구성
시스템 소프트웨어에는 크게 두 가지가 포함돼요.
운영체제(Operating System)
프로그램 실행 시간(Runtime)에 작용하며, I / O처리, 메모리 관리, 태스크 스케줄링 등을 담당합니다.
컴파일러(Compiler)
프로그램 실행 전(compile time)에 작용합니다. 고급 언어(High-Level Language)로 작성된 프로그램을 하드웨어가 이해할 수 있는 기계어(Machine Code)로 변환합니다.
하드웨어
가장 추상적으로 생각할 수 있는 하드웨어의 구성 요소는 프로세서(Processor)와 메모리(Memory)입니다. 더 내려가면 AND, OR gate 같은 논리 소자 수준이지만, 컴퓨터 구조에서는 이것들을 모듈화하여 프로세서와 메모리라는 단위로 다룹니다.
프로그램 코드의 수준
프로그램은 세 가지 수준의 표현이 존재합니다.
High-level Language(고급 언어)
문제 영역에 가까운 추상화 수준이에요. 생산성(Productivity)과 이식성(portability)을 제공합니다.
swap(int v[], int k) {
int temp;
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
}
Assembly Language(어셈블리 언어)
Instruction의 텍스트 표현입니다. 기계어와 1대1 대응 관계에 있으며, 기계어의 0과 1을 인간이 이해할 수 있는 기호(symbol)로 바꾼 것일 뿐이에요. 하지만 저는 아직도 이 언어를 보면 겁부터 납니다.
swap: slli x6, x11, 3
add x6, x10, x6
ld x5, 0(x6)
...
Machine Language(기계어)
Binary digits(bits)로 구성됩니다. 인코딩딘 instruction과 데이터로 이루어지고, 실제 하드웨어가 실행하는 형태입니다.
0과 1의 연속이지만 무작위가 아니라 매우 규칙적인 형태를 가지고 있어요. 예를 들면 32비트씩 한 덩어리로 구분되고, 각 덩어리가 하나의 instruction인 것이죠.
컴파일러의 본질적 역할은 고급 언어를 기계어로 바꾸는 것입니다. 정확히 말하면 "0과 1로 바꾼다"기 보다는 "컴퓨터가 이해할 수 있는 instruction 형태로 바꾼다." 는 표현이 맞습니다. 그 instruction이 binary 형태를 띠다 보니 무작위적으로 보였을 뿐인거죠.
예전에는 컴파일러 기술이 정교하지 않아서 사람이 직접 기계어에 가까운 수준으로 코딩했습니다. 사람이 직접 assembly 언어를 사용했었죠. 지금은 컴파일러가 이 변환을 자동으로, 그리고 매우 효과적으로 수행합니다.
Abstraction과 ISA
ISA(Instruction Set Architecture)
ISA는 컴퓨터 구조를 이해하는 데 있어 가장 핵심적인 개념입니다.
하드웨어 시각에서의 ISA
하드웨어가 실행할 수 있는 instruction들의 집합입니다. 하드웨어는 공장에서 만들어져 나오기 때문에, 미리 정해진 instruction만 실행할 수 있어요.
소프트웨어 시각에서의 ISA
하드웨어에게 시킬 수 있는 일들의 목록이라고 보면 됩니다. 소프트웨어 개발자는 이 목록 안에서만 하드웨어를 활용할 수 있어요.
ISA는 하드웨어와 소프트웨어의 인터페이스(Hardware / Software Interface)입니다. 이것이 Architecture를 정의하는 핵심이죠.
호환성(Compatibility)
ISA가 같으면 호환성이 있습니다.
예를 들어보죠. Intel 프로세서와 AMD 프로세서는 같은 ISA(x86-64)를 구현하기 때문에, Intel 위에서 돌아가는 소프트웨어가 AMD 위에서도 돌아갑니다. ISA가 다르면 하드웨어와 소프트웨어가 결합될 수 없습니다.
ABI(Application Binary Interface)
실제로 프로그램이 실행되려면 ISA만 같아서는 충분하지 않습니다. 응용 프로그램은 하드웨어에 직접 접근하지 않고, 운영체제를 경유하기 때문입니다.
같은 Intel 프로세서(같은 ISA) 위에서도 Window용 프로그램은 Linux에서 실행되지 않아요. 따라서 프로그램이 실제로 실행 가능하려면 ISA + 시스템 소프트웨어 인터페이스가 모두 일치해야 합니다. 이것을 통합하여 ABI 라고 부릅니다.
Microarchitecture
Architecture(ISA)가 소프트웨어-하드웨어 인터페이스를 정의하는 것이라면, Microarchitecture는 그 아리에서 하드웨어를 어떻게 구체적으로 구현하느냐에 관한 겁니다. Microarchitecture는 소프트웽와 직접 관련이 없지만 성능(performance)에 결정적 영향을 줍니다.
Intel 프로세서와 AMD 프로세서는 ISA가 같아서(호환성이 있어서) 같은 소프트웨어를 실행할 수 있지만, 어떤 application에서는 Intel이 빠르고 어떤 application에서는 AMD가 빠릅니다. 조립 컴퓨터 견적을 짤 때에도, 영상 작업 등을 주로 하는 직군의 경우 Intel 프로세서를 선호하고, 조금 더 가성비나 순수 코어를 많이 쓰는 작업이거나 전력 효율을 더 중시하는 사람들은 AMD를 쓰는 통념도 있기도 하죠. 물론 이 통념 또한 2020년 즈음에 접어들면서 많이 희석되기는 했지만요.
이 차이가 microarchitecture의 차이에서 비롯됩니다. 같은 Intel 프로세서라도 13세대와 14세대의 성능 차이도 microarchitecture 개선 때문입니다.
다시 말해, Microarchitecture의 본질은 가성비 즉, 비용을 덜 들이면서 어떻게 성능을 높일 것인가의 문제입니다.
컴퓨터의 구성 요소
기본 구조
컴퓨터 안에는 프로세서(Processor)와 메모리(Memory)가 이원화된 구조로 존재합니다. 프로세서는 처리(processing)를 담당하고, 메모리는 저장(storage)를 담당하죠.
이 안에서 데이터가 이동하는 경로를 Datapath(데이터 경로)라고 부릅니다.
데이터가 입력되고,
메모리에 저장되고,
프로세서로 전달되어 처리되고,
결과가 출력되는 과정에서 데이터가 지나가는 길 이라는 겁니다. 한 비트짜리 선이 아니라 여러 비트가 동시에 이동하는 여러 가닥의 선으로 이루어져 있습니다.
프로세서 내부
Datapath

데이터에 대한 연산(operation)을 수행하는 부분. 두 데이터가 들어가서 더해진 결과 하나가 나오는 식입니다.
Control
Datapah에서 어떤 연산을 수행할 지 지시하는 부분. 프로그램(Instruction)을 보고, 이번에는 더하기를 하라던지, 이번에는 빼기를 하라던지 등을 결정합니다. Control이 들고 있는 것이 곧 프로그램(소프트웨어)입니다.
Cache Mememory
프로세서 안에 들어있는 작고 빠른 SRAM 메모리로, 데이터에 즉시 접근할 수 있게 해줍니다. 추후에 제대로 다뤄보도록 할께요.
Touchscreen

모바일 디바이스의 혁신적 기술입니다. 입력 장치와 출력 장치가 하나로 통합되어 있어요. 저항(Resistive) 방식과 정전용량(Capacitive) 방식이 있죠. 현대에는 정전용량 방식이 대세입니다. 정전용량 방식은 사람 몸의 정전기를 이용하여 터치 위치를 감지하고, 멀티 터치가 가능합니다. 요즘 스마트폰 사용하신다면 다 공감하실꺼에요. 저항 방식은 감압식으로도 표현했었는데, 학창시절 사용했던 햅틱 폰 기억하시나요? 따로 터치펜도 악세서리로 걸어서 가지고 다니던 때가 있었어요. 그 세대의 폰들이 모두 감압식 터치폰이었습니다. 그 당시에 썼던 PMP도 감압식이었네요.
이 모든 것도 궁극적으로는
0과 1로 변환되어 컴퓨터 시스템에서 처리됩니다. 화면의 각 픽셀에 해당하는 색상도 이진 정보로 표현되고, 터치 위치도 디지털 좌표로 변환됩니다.
LCD 화면

화면은 픽셀(picture element) 단위로 쪼개져 있고, 각 픽셀의 Frame buffer 메모리의 내용을 반영(mirror)한다. 예를 들어 0011은 빨간색, 0110은 노란색으로 매핑하여 화면을 구성한다고 하면, 화면은 약 1/30초 간격으로 업데이트 합니다.
'CS & AI > Computer Architecture' 카테고리의 다른 글
| <컴퓨터구조> Instruction Cont'd (0) | 2026.04.19 |
|---|---|
| <컴퓨터 구조> 기본 산술 instruction과 RISC-V Assembly Language 요약 (0) | 2026.04.17 |
| <컴퓨터구조> Instructions - Language of the Computer (0) | 2026.04.16 |
| <컴퓨터구조> Performance (0) | 2026.04.16 |
| <컴퓨터 구조> Digital Logiac Circuits 디지털 논리 회로 (0) | 2026.03.22 |
나의 성장 드라마
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!