
컴퓨터는 복잡하고 여러 계층으로 구성되어 있다.
ISA란 소프트웨어(앱, OS 등)와 하드웨어(CPU 등) 사이의 인터페이스로, 하드웨어가 이해할 수 있는 명령어의 집합을 정의하는 약속 또는 규약이다.
SW와 HW 간의 약속 🤙🏻
❓ ISA가 왜 필요한데?
- SW와 HW 간의 연결 고리
System software와 Hardware 계층 사이에 Interface 역할을 수행함
- 호환성 유지
서로 다른 하드웨어라도 같은 ISA를 지원하면 동일한 소프트웨어가 실행됨
- 독립적 발전 가능
하드웨어와 소프트웨어가 서로 영향을 덜 받고 발전할 수 있음
- HW 저장 위치 및 실행 연산에 대한 기능적인 정의
저장 위치: registers, memory
실행 연산(Operations): add, multiply, branch, load, store, ⋯
Machine Language
하드웨어가 직접 이해하는 언어
2진수(0과 1)로 구성되어 있으며, 보통은 16진수로 표현한다.
Assembly Language
사람이 보기 쉬운 기호 형태의 언어
Assembler
Assembly → Machine Language로 번역해주는 프로그램
ISA의 주요 속성들
Instruction Encoding (명령어 인코딩)
명령어가 메모리/CPU 내부에 어떤 방식으로 저장되느냐?
| 방식 | 설명 | 예시 |
|---|---|---|
| Fixed length | 모든 명령어가 고정된 길이 | MIPS: 32비트 |
| Variable length | 명령어마다 길이가 다름 | x86: 1~16바이트 (평균 3바이트) |
| Limited variability | 일부 명령어만 짧게 사용 | ARM: 16비트 또는 32비트 명령어 존재 |
Register의 개수와 종류
Register = CPU 내부의 아주 빠른 저장소
| ISA | 정수 레지스터 (Integer) | 부동소수점 레지스터 (Floating-point) |
|---|---|---|
| MIPS | 32개 | 32개 |
| x86 | 16개 | 16개 |
| ARM | 16개 | 16개 |
(참고)
- MIPS 구조 : 교육용으로 많이 쓰이며, 구조가 단순하고 명확함
- x86 : PC에서 흔히 사용하는 복잡한 명령어 구조를 가진 ISA
- ARM : 모바일, 임베디드 기기에서 많이 사용. 전력 효율이 뛰어나고 명령어 구조도 단순함
ISA와 소프트웨어의 관계
소프트웨어(컴파일러/어셈블리)가 ISA 형식에 맞춰 기계어 생성
- 프로그래머는 C/C++ 같은 고급 언어로 프로그램을 작성한다.
- 컴파일러는 이를 해당 ISA에 맞는 어셈블리 코드 또는 기계어(binary)로 번역한다.
- 이 기계어는 특정 ISA를 이해하는 CPU에서만 실행될 수 있다.
ISA와 하드웨어의 관계
CPU는 ISA에 정의된 명령어들을 해석하고 실행(덧셈, 분기, 메모리 읽기 등)한다. 즉, ISA는 CPU가 어떤 기능을 할 수 있는지를 결정한다.
서로 다른 ISA를 가진 CPU는 내부 구조도 다르고, 실행 방식도 다르다.
호환성 & 최적화 측면에서 매우 중요 ✨
컴퓨터 하드웨어의 핵심 3요소
CPU가 중심이 되어 메모리와 I/O 장치를 제어
이들을 상호 연결하는 Bus 구조
메인 메모리 (RAM)
보조 기억장치 (스토리지)
컴퓨터에서 데이터를 장기적으로 저장하는 장치
주기억장치(RAM)과 달리 전원이 꺼져도 데이터가 유지된다.
CPU와는 직접 연결되지 않고, 운영체제를 통해 간접적으로 사용된다.
HDD(Hard Disk Drive), SSD(Solid State Drive) 등
Cache (캐시)
CPU와 메모리 사이에 위치
CPU가 메모리에 접근하는 시간 (느릿느릿) > CPU의 연산 속도
→ 이를 극복하기 위해 캐시 메모리가 필요
키보드, 마우스, 모니터, 네트워크 등
속도 및 인터페이스가 다양하다.
(ex) 키보드는 느리고, 네트워크는 빠르다.
(ex) 인터페이스: USB, HEMI, Bluetooth ⋯
CPU가 직접 I/O 장치와 통신하기보다는, I/O 컨트롤러와 버스를 통해 간접적으로 수행한다.
운영체제가 제공하는 소프트웨어 인터페이스인 드라이버로 애플리케이션에서 쉽게 사용 가능하다. (앱이 복잡한 하드웨어 동작을 알 필요 없이, 간단하게 I/O를 사용할 수 있도록 도와줌)
(ex) 우리가 마우스를 움직이면, 드라이버가 그 신호를 받아 운영체제에 전달하고, 운영체제는 커서를 움직인다.
CPU, 메모리, I/O 장치 등을 연결하는 공유 데이터 경로
컴퓨터는 CPU를 중심으로 버스를 통해 구성 요소들과 연결되어 있다.
일종의 고속도로처럼 생각하면 이해하기 쉽다. 모든 장치들이 이 도로를 통해 정보를 주고받는다.
시스템 버스 종류
Address Bus
주소 정보를 전달 (어디에 데이터를 쓸지/읽을지 지정)
"이 메모리 주소로 가라!"
Data Bus
실제 데이터를 전달
(ex) 네트워크
"여기로 42라는 데이터를 보내라!"
Control Bus
읽기/쓰기, interrupt 등 제어 신호를 전달
고전적 구조는 3가지 버스가 하나로 통합된 구조였으나, 현대적 계층 버스 구조는 Northbridge, Southbridge로 나뉘어 있다. 이렇게 계층적으로 나누는 이유는 고속 장치와 저속 장치의 속도 차이를 효율적으로 관리하기 위함이다.
CPU | [Northbridge] / | \ RAM GPU [Southbridge] | | | HDD USB Audio...
- CPU는 Northbridge를 통해 빠른 장치(RAM, GPU)와 직접 통신
- 느린 장치(HDD, USB)는 Southbridge를 통해 간접적으로 연결

컴퓨터의 뇌 역할 🧠
산술 및 논리 연산, 명령어 해석과 실행을 담당한다.
속도(클록 주파수, (ex) GHz 단위), 코어 수(싱글코어, 듀얼코어, 쿼드코어 등)가 성능에 큰 영향을 준다.
제어장치(Control Unit)
명령어를 해석해 어떤 연산을 수행할지 제어
ALU(산술논리연산장치)
덧셈, 뺄셈, 비교 등 실제 연산을 수행
Register
CPU 내부의 초고속 작업 메모리
연산에 필요한 데이터나 결과를 일시적으로 저장한다.
CPU 성능
Latency (지연 시간)
프로그램을 실행하는 데 걸리는 시간
seconds / program
= (instructions / program) × (cycles / instruction) × (seconds / cycle)
- instructions / program
프로그램이 실행하는 명령어 개수 (동적 명령어 수)- cycles / instruction (CPI)
- seconds / cycle
하나의 클록 사이클이 걸리는 시간 = 1 / Clock frequency
클록 주파수 (Clock Frequency)
단위: GHz (1 GHz → 109 cycles/초)
초당 몇 번의 Clock cycle을 발생시키는지?
⚠️ 단순히 클록이 높다고 빠른 건 아님
✅ CPU 내부 구조가 어떻게 명령어를 병렬 처리하느냐,
✅ 캐시가 얼마나 잘 작동하느냐,
✅ 파이프라인 설계는 어떤 방식이냐 등도 성능을 좌우함
CPI(Cycles Per Instruction)
명령어 하나당 걸리는 평균 클록 사이클 수
🚀 예제
명령어 비율 Cycle Integer ALU 50% 1 Load 20% 5 Store 10% 1 Branch 20% 2 CPI = (0.5 × 1) + (0.2 × 5) + (0.1 × 1) + (0.2 × 2) = 2
⚖️ 성능 향상 비교
- Branch prediction으로 Branch 비용을 1 cycle로 줄일 경우
CPI = (0.5 × 1) + (0.2 × 5) + (0.1 × 1) + (0.2 × 1) = 1.8- Load 비용을 3 cycle로 줄일 경우
CPI = (0.5 × 1) + (0.2 × 3) + (0.1 × 1) + (0.2 × 2) = 1.6⇒ 2번이 1번보다 성능에 더 큰 영향!
최적화 전략: 어떤 명령어를 줄이는 것이 성능 향상에 더 효과적인지 분석 필요
❓ OS의 역할
하드웨어 자원 관리
CPU 스케줄링, 메모리 관리, 디바이스 드라이버 등
Process/Thread 관리
여러 프로그램이 동시에 실행될 수 있도록 CPU 스케줄링, context switching 등 수행
파일 시스템
보안 및 권한 관리
사용자/앱 ↔ 하드웨어 사이에서 중재자 역할
계층 모델 상, ISA 위에서 동작 → OS가 ISA를 인터페이스로 씀
🫱🏻🫲🏻 OS와 하드웨어의 상호작용
System Call
사용자 모드의 프로그램이 커널 모드 기능을 요청할 때 사용하는 인터페이스
(ex) 파일 열기, 네트워크 전송, 프로세스 생성 등
💡 사용자 모드와 커널 모드
- 사용자 모드(User mode)
애플리케이션이 실행
제한된 권한, 직접 자원 접근 X- 커널 모드(Kernel mode)
운영체제 커널이 실행
최고 권한, 모든 자원 접근 가능, 제한 없음즉, 사용자 모드에서는 직접적으로 하드웨어 자원(I/O, 메모리 등)에 접근할 수 없고, 반드시 시스템 콜을 통해 운영체제의 도움을 받아야 한다.
사용자 모드에서는 운영체제의 직접 자원 관리를 받기 때문에, 자원 요청 및 해제는 모두 시스템 콜을 통해 커널이 처리한다.
하지만 자원 요청이 적절히 관리되지 않으면, deadlock이 사용자 모드에서 실행되는 애플리케이션들 사이에서도 발생할 수 있다.하드웨어가 mode bit를 두어 실행 중인 코드가 어디 소속인지 구분
system call이나 interrupt 발생 시 커널 모드로 전환
드라이버
특정 하드웨어 장치를 제어하기 위한 SW 모듈
OS는 하드웨어 직접 제어 대신 드라이버를 사용한다.
OS가 CPU의 메모리 보호 기법(MMU, paging 등)을 사용
🚀 계층 모델 – 소프트웨어 예시
(ex) 간단한 파일 읽기 동작
- 사용자 앱(텍스트 에디터)
- OS에게 “파일 열기” 요청 (시스템 콜)
- OS의 파일 시스템 모듈이 HDD/SSD 드라이버 호출
- 드라이버가 하드웨어 디바이스와 통신
- CPU-버스-디스크 간 데이터 전송
- 데이터를 메모리에 적재 → 사용자 앱으로 전달