자격증 정복/컴퓨터시스템기사

컴퓨터시스템기사 실기 04 — 프로세서와 명령어 (레지스터·명령어 형식·주소지정·제어·파이프라인)

올드 IT직장인 2026. 10. 14. 00:30

컴퓨터시스템기사 실기 04 — 프로세서와 명령어 (레지스터·명령어 형식·주소지정·제어·파이프라인)

출제기준 코드: 2-1-1 · 2-1-2 · 2-2-1 · 2-2-2 · 2-2-3 · 2-3-1 · 2-3-2
시험일: 2026-10-25 (D-12) / 시리즈: 컴퓨터시스템기사 실기 04편

 

실기 시리즈 네 번째 글입니다.

이번 편은 대단원 2 (컴퓨터 프로세서 및 명령어) 전체입니다.

 

실기 복원 기출을 훑어보면 이 단원은 계산 문제(파이프라인·CPI·Opcode 비트·주소 계산) 와 단답형(하드와이어드 vs 마이크로프로그램, 해저드, 주소지정 방식) 이 섞여서 나옵니다.

 

계산은 공식만 알면 점수가 확실히 나오는 구간이라 우선순위를 높게 잡아야 합니다.


1. 실기 출제 포인트

구분 자주 나오는 형태 중요도
구분 자주 나오는 형태 중요도
파이프라인 계산 (k+n−1)·Tp, 속도 향상비, 슈퍼스칼라 클록 수 ⭐⭐⭐
유효 CPI 기본 CPI + 정지(stall) 확률 → 명령어 수·시간 ⭐⭐⭐
명령어 형식 Opcode 비트 수, 0~3주소 명령어, 스택 ⭐⭐⭐
주소지정 방식 즉시/직접/간접/레지스터/상대/인덱스 구분, 유효주소 계산 ⭐⭐⭐
제어 방식 하드와이어드 vs 마이크로프로그램, PLA ⭐⭐
마이크로 오퍼레이션 Fetch 사이클 빈칸, Major State ⭐⭐
해저드·분기 예측 구조/데이터/제어 해저드, 전방전달, BHT/BTB ⭐⭐
Amdahl 법칙 부분 개선 시 전체 속도 향상 ⭐⭐

💡 답안 키워드 박스 (이 단어가 답안에 들어가야 점수)
PC IR MAR MBR Opcode Operand 유효주소(EA) 하드와이어드 마이크로프로그램 제어 기억장치 해저드 전방전달(Forwarding) 분기 예측 슈퍼스칼라 Amdahl


2. ALU와 레지스터 (2-1-1, 2-1-2)

2-1. CPU 핵심 레지스터

레지스터 역할 암기 포인트
PC (Program Counter) 다음에 실행할 명령어 주소 Fetch 직후 PC ← PC + 명령어 길이
IR (Instruction Register) 현재 실행 중인 명령어 디코더로 전달
MAR (Memory Address Register) 접근할 메모리 주소 폭 = 주소 비트 수
MBR / MDR (Memory Buffer/Data Register) 메모리와 주고받는 데이터 폭 = 워드(데이터) 비트 수
AC (Accumulator) ALU 연산 결과·피연산자 임시 보관 1-주소 명령어의 암묵적 피연산자
상태(플래그) 레지스터 연산 결과 상태 (Zero, Carry, Sign, Overflow) 조건 분기의 판단 근거

 

기출 유형: 메모리가 4K × 16bit일 때 MAR, MBR의 비트 수는?

4K = 2^12  → 주소 12비트 → MAR = 12 bit
워드 16비트 → MBR = 16 bit

 

⚠️ 함정: MAR은 주소 폭, MBR은 데이터 폭입니다. 둘을 바꿔 쓰면 0점입니다.

 

2-2. ALU

  • 산술 연산(+, −, ×, ÷), 논리 연산(AND, OR, NOT, XOR), 시프트/회전을 수행
  • 연산 결과에 따라 플래그 레지스터를 갱신 → 이후 분기 명령이 이 플래그를 참조

3. 명령어 형식과 주소지정 (2-2-1)

3-1. 명령어 구조

| Opcode (연산 코드) | Operand (피연산자 / 주소) |

 

 

Opcode 비트 수 계산 (실기 단골)

Opcode 비트 = 명령어 길이 − (주소 필드 비트의 합)
표현 가능한 명령어 수 = 2^(Opcode 비트)

 

예시 (직접 풀이): 명령어 16비트, 2-주소 명령어(주소 필드 6비트 × 2)
→ Opcode = 16 − 12 = 4비트 → 최대 2⁴ = 16개 명령어

 

 

3-2. 주소 개수별 명령어

형식 예 특징
형식 예 특징
3-주소 ADD X, A, B (X ← A + B) 명령어 길이 김, 프로그램 짧음, 피연산자 보존
2-주소 ADD A, B (A ← A + B) 가장 일반적, 한쪽 값이 덮어씌워짐
1-주소 ADD B (AC ← AC + B) 누산기(AC) 사용
0-주소 ADD 스택 사용 (PUSH/POP만 주소 지정)

 

 

0-주소(스택) 명령어 추적 연습 — X = (A+B)*C 를 스택 머신으로:

PUSH A      ; 스택: A
PUSH B      ; 스택: A B
ADD         ; 스택: (A+B)
PUSH C      ; 스택: (A+B) C
MUL         ; 스택: (A+B)*C
POP X

 

→ 02편에서 정리한 후위 표기법과 그대로 연결됩니다. A B + C * 순서와 PUSH/연산 순서가 같다는 점이 핵심입니다.

 

3-3. 주소지정 방식 (Addressing Mode) ⭐⭐⭐

방식 유효주소(EA) / 피연산자 메모리 접근 횟수 키워드
즉시(Immediate) 오퍼랜드 자체가 데이터 0회 상수, 가장 빠름
직접(Direct) EA = 오퍼랜드 1회 주소 필드가 실제 주소
간접(Indirect) EA = M[오퍼랜드] 2회 포인터, 주소 범위 확대
레지스터(Register) 피연산자 = 레지스터 값 0회 메모리 접근 없음
레지스터 간접 EA = 레지스터 내용 1회 포인터 레지스터
상대(Relative) EA = PC(증가된 값) + 변위 1회 분기, 위치 독립 코드
인덱스(Index) EA = 인덱스 레지스터 + 변위 1회 배열 접근
베이스(Base) EA = 베이스 레지스터 + 변위 1회 재배치, 세그먼트

⚠️ 상대 주소 함정: PC는 명령어를 읽은 직후 이미 증가한 상태입니다.
EA = (명령어 주소 + 명령어 길이) + 변위.
그냥 "현재 명령어 주소 + 변위"로 계산하면 틀립니다.

 

 

CALL / RET 복귀 주소 문제

주소 1234번지에 3바이트 CALL 명령어가 있음
→ Fetch 후 PC = 1234 + 3 = 1237
→ 서브루틴 호출 시 스택에 저장되는 복귀 주소 = 1237

 

(CALL 명령어 길이에 따라 복귀 PC = CALL 주소 + 길이. 길이를 문제에서 반드시 확인하세요.)

🔎 기출 원본 대조 메모: 2020년 11월 B형 CALL 문제는 복원본 해설에 1238로 적힌 부분이 있으나,
위 계산(1234 + 3 = 1237)이 맞습니다. 복원 자료의 해설을 그대로 외우지 마세요.


4. 제어 장치와 마이크로 오퍼레이션 (2-2-2, 2-2-3)

4-1. 하드와이어드 vs 마이크로프로그램

항목 하드와이어드(Hardwired) 마이크로프로그램(Microprogrammed)
구현 논리 회로(게이트, PLA)로 직접 구성 제어 기억장치(Control Memory) 에 마이크로명령어 저장
속도 빠름 느림 (제어 메모리 접근 필요)
유연성 변경 어려움 (회로 재설계) 변경 쉬움 (ROM 수정)
복잡도 명령어 많으면 설계 복잡 체계적, 설계 단순
대표 RISC CISC

 

기출 형태: "명령어 해독 후 제어 신호를 논리 회로로 직접 생성하는 방식은?" → 하드와이어드 제어
"제어 신호를 ROM에 저장된 마이크로명령어로 만드는 방식은?" → 마이크로프로그램 제어

 

4-2. 명령어 사이클과 마이크로 오퍼레이션

Fetch 사이클 (모든 명령어 공통)

t0: MAR ← PC
t1: MBR ← M[MAR],  PC ← PC + 1
t2: IR  ← MBR

 

 

LDA (Load Accumulator) 실행 사이클 예:

t0: MAR ← IR(addr)
t1: MBR ← M[MAR]
t2: AC  ← MBR

 

기출 빈칸 유형: LDA의 마이크로 오퍼레이션에서 초기화를 포함할 때 AC <- 0 처럼 레지스터 초기화 단계가 빈칸으로 나옴 (복원본 기준). 문제에서 제시한 기호(←, <-)를 그대로 따라 쓰세요.

 

 

4-3. Major State (CPU 4대 상태)

① Fetch      : 명령어 인출
② Indirect   : 간접 주소일 때 유효주소 인출
③ Execute    : 명령어 실행
④ Interrupt  : 인터럽트 처리

 

기출 키워드: "CPU가 명령어를 수행하는 4가지 사이클" → Fetch, Indirect, Execute, Interrupt (순서 주의)


5. 파이프라인과 병렬 처리 (2-3-1, 2-3-2) ⭐⭐⭐

5-1. 핵심 공식

항목 공식
파이프라인 총 시간 (k + n − 1) × Tp (k: 단계 수, n: 명령어 수, Tp: 단계 시간)
비파이프라인 총 시간 n × k × Tp
속도 향상비 비파이프라인 시간 / 파이프라인 시간
이상적 최대 속도 향상 n → ∞ 일 때 k
슈퍼스칼라 (m-way) k + ⌈n / m⌉ − 1 클록
유효 CPI 기본 CPI + (stall 확률 × stall 사이클)
실행 시간 명령어 수 × CPI × 클록 주기
Amdahl 법칙 S = 1 / ((1 − f) + f / s) (f: 개선 비율, s: 개선 배율)

5-2. 기출 계산 풀이

① 2025년 1회 — 속도 향상비

세그먼트 하나가 20ns, 4세그먼트 파이프라인, 100개 태스크 → 비파이프라인 대비 속도 향상?

파이프라인   = (4 + 100 − 1) × 20 = 103 × 20 = 2,060 ns
비파이프라인 = 100 × 4 × 20     = 8,000 ns
속도 향상비  = 8,000 / 2,060 ≈ 3.88배   ← 정답

 

 

② 2026년 1회 — 유효 CPI로 명령어 수 구하기

기본 CPI 5, 명령어의 15%에서 1사이클 정지, 총 12,000 사이클 → 실행된 명령어 수?

평균 CPI = 5 + (0.15 × 1) = 5.15
명령어 수 = 12,000 / 5.15 ≈ 2,330.1  → 2,330개   ← 정답

 

 

③ 슈퍼스칼라 클록 수 (복원 기출 유형)

4단계, 5-way 슈퍼스칼라, 명령어 15개

4 + ⌈15 / 5⌉ − 1 = 4 + 3 − 1 = 6 클록

 

 

④ 2024년 3회 — Amdahl

전체의 70%를 2배 빠르게 개선 (f = 0.7, s = 2)

S = 1 / ((1 − 0.7) + 0.7 / 2) = 1 / (0.3 + 0.35) = 1 / 0.65 ≈ 1.54배

 

 

⑤ 직접 풀어본 연습 (기출 변형)

4단계 파이프라인, 클록 1MHz, 명령어 15개 → 총 시간?

Tp = 1 μs
(4 + 15 − 1) × 1 μs = 18 μs   (비파이프라인은 15 × 4 = 60 μs)

⚠️ 위 ⑤는 기출 원문이 아닌 공식 적용 연습 문제입니다.

 

5-3. 파이프라인 해저드 (Hazard) ⭐⭐

종류 원인 해결
구조적 해저드 하드웨어 자원 충돌 (메모리·ALU 동시 사용) 자원 복제, 명령/데이터 캐시 분리
데이터 해저드 이전 명령 결과를 아직 못 쓰고 다음 명령이 사용 (RAW 등) 전방전달(Forwarding/Bypassing),
스톨(버블), 명령어 재배치
제어 해저드 분기 명령으로 다음 명령 주소 불확실 분기 예측, 지연 분기, 분기 목적지 버퍼
  • 전방전달(Forwarding): ALU 결과를 레지스터 쓰기(WB)까지 기다리지 않고 다음 명령의 ALU 입력으로 직접 전달
  • 분기 예측: 정적(항상 taken / not taken) vs 동적(BHT 분기 이력 테이블, BTB 분기 목적지 버퍼)
  • 분기 예측 실패 시 페널티 사이클 발생 (기출: 분기 실패 시 2 cycle 손실 가정)

 

5-4. 병렬/멀티스레딩 개념

용어 설명
슈퍼스칼라 한 클록에 여러 명령어를 동시에 발행하는 구조 (다중 파이프라인)
슈퍼파이프라인 파이프라인 단계를 더 잘게 쪼개 클록을 높임
멀티스레딩 한 코어에서 여러 스레드를 번갈아/동시에 실행해 자원 활용률 향상
SIMD 하나의 명령으로 여러 데이터 동시 처리

6. 기출 Q&A 모음

Q1. 하드와이어드 제어와 마이크로프로그램 제어의 차이를 쓰시오.
A. 하드와이어드는 논리 회로(PLA 등)로 제어 신호를 직접 생성하여 속도가 빠르나 변경이 어렵고, 마이크로프로그램은 제어 기억장치의 마이크로명령어로 제어 신호를 생성해 유연하나 상대적으로 느리다.

 

Q2. 4단계 파이프라인(단계당 20ns)에서 100개 태스크 수행 시, 비파이프라인 대비 속도 향상은? (2025-1)
A. 약 3.88배 (8,000ns / 2,060ns).

 

Q3. 기본 CPI 5, 15% 확률로 1사이클 정지, 12,000 사이클에 완료된 명령 수는? (2026-1)
A. 12,000 / 5.15 ≈ 2,330개.

 

Q4. CPU의 4대 Major State를 쓰시오.
A. Fetch, Indirect, Execute, Interrupt.

 

Q5. 파이프라인에서 이전 명령의 결과가 쓰이기 전에 후속 명령이 읽는 문제와 해결책은?
A. 데이터 해저드, 전방전달(Forwarding) 또는 스톨.

 

Q6. f = 0.7 부분을 2배 빠르게 했을 때 전체 속도 향상은? (2024-3)
A. 약 1.54배.


7. ⚠️ 함정 패턴 정리

  1. MAR ↔ MBR 폭 혼동 — MAR = 주소 비트, MBR = 데이터 비트
  2. 상대주소에서 PC 증가 여부 무시
  3. CALL 복귀 PC = CALL 주소 + 명령어 길이 (+1 아님)
  4. 파이프라인 공식에서 k + n − 1 의 −1 누락
  5. 슈퍼스칼라는 ⌈n/m⌉ 올림 처리
  6. 유효 CPI: 확률 × 사이클을 더하는 것이지 곱하는 것이 아님
  7. 하드와이어드 = 빠름·경직, 마이크로프로그램 = 느림·유연 — 반대로 쓰기 쉬움
  8. 기출 복원본의 해설 오류 — 숫자 문제는 반드시 직접 재계산

8. 💡 실무에서는?

  • 분기 예측 실패 비용은 실제 성능 튜닝에서 자주 나옵니다. 정렬된 배열이 정렬 안 된 배열보다 반복문이 훨씬 빠른 이유가 분기 예측 적중률입니다. perf stat의 branch-misses로 확인할 수 있습니다.
  • 파이프라인/슈퍼스칼라 개념은 서버 CPU 선정(코어 수 vs 클록 vs IPC) 시 근거가 됩니다. 인프라 용량 산정에서 "코어 수만 늘리면 된다"가 안 되는 이유도 Amdahl 법칙으로 설명됩니다 (직렬 구간이 병목).
  • 보안 관점에서는 분기 예측·투기적 실행을 악용한 Spectre/Meltdown 계열 취약점이 대표 사례입니다. 이 개념은 실기와 직접 무관하지만, 해저드·분기 예측을 이해해 두면 관련 패치(마이크로코드, 커널 완화)가 왜 성능 저하를 유발하는지 이해됩니다.
  • 장애 분석 시 CPU 사용률이 높은데 처리량이 안 나오면 IPC(명령어/사이클) 가 낮은 것, 즉 stall(캐시 미스·분기 실패)이 많다는 신호입니다. 다음 편의 캐시와 이어집니다.

9. 핵심 정리

✅ PC = 다음 명령 주소 / IR = 현재 명령 / MAR = 주소 / MBR = 데이터
✅ Opcode 비트 = 명령어 길이 − 주소 필드 합
✅ 0-주소 = 스택 / 1-주소 = 누산기 / 2·3-주소 = 레지스터·메모리
✅ 상대주소 EA = (증가된) PC + 변위
✅ CALL 복귀 PC = CALL 주소 + 명령어 길이
✅ 하드와이어드 = 빠름·경직 / 마이크로프로그램 = 유연·느림
✅ Major State = Fetch → Indirect → Execute → Interrupt
✅ 파이프라인 = (k + n − 1) × Tp / 비파이프라인 = n × k × Tp
✅ 슈퍼스칼라 = k + ⌈n/m⌉ − 1
✅ 유효 CPI = 기본 CPI + 정지 확률 × 정지 사이클
✅ 해저드 = 구조 / 데이터(전방전달) / 제어(분기 예측)
✅ Amdahl: S = 1 / ((1 − f) + f / s)

10. 다음 편 예고

다음 편(05편)은 기억장치와 캐시 입니다.

캐시 사상 방식, 평균 접근 시간 계산, 적중률, RAID·저장 장치까지 이어갑니다!

 

궁금한 점은 댓글로 남겨주세요!

반응형