⭐⭐⭐ 반드시 / ⭐⭐ 중요 / ⭐ 참고 ⚠️ = 기출 함정 포인트
Chapter 01. 컴퓨터 시스템
하드웨어 / 소프트웨어
- 하드웨어 = 물리적 부품 (CPU, 기억장치, 입출력장치)
- 소프트웨어 = 외형 없는 명령과 데이터의 집합
CPU 내부
- 제어장치: 주기억장치에서 명령어 인출·해독 → 제어신호 발생 (지휘자)
- 구성: MAR, MBR, 명령레지스터(IR), 프로그램카운터(PC), 명령해독기
- 연산장치(ALU): 제어신호에 따라 실제 연산 수행 (일꾼)
- 구성: 산술·논리연산기, 상태레지스터, 쉬프터, 보수기
- 레지스터: CPU 내 임시기억장치 (고속)
- CPU 내부버스: 데이터/주소/제어 신호 전송
⭐⭐⭐ 기억장치 계층구조
1 | |
- ⚠️ 보조기억장치(HDD/SSD)는 CPU와 직접 정보교환 불가 → 반드시 주기억장치 경유
- 주기억: RAM(휘발성) / ROM(비휘발성)
소프트웨어
- 시스템 S/W = 제어 프로그램(감시·작업제어·데이터관리) + 처리 프로그램(언어번역·서비스)
- 응용 S/W = 사용자 목적용
⭐⭐ 컴파일러 vs 인터프리터
| 컴파일러 | 인터프리터 | |
|---|---|---|
| 번역 단위 | 파일 | 문장 |
| 목적 프로그램 | 생성 O | 생성 X |
| 메모리 할당 | 받음 | 안 받음 |
| 번역 속도 | 느림 | 빠름 |
| 실행 속도 | 빠름 | 느림 |
- 펌웨어: S/W를 H/W화. ROM에 저장, 미들웨어라고도 함. 대표 예 = BIOS
- 부팅: 전원 → ROM의 부트로더 실행 → HDD의 OS 커널을 RAM에 적재 → 제어권 OS로
⭐⭐ 컴퓨터 구조의 발전
- ENIAC: 프로그램 외장식 → 작업 바꿀 때마다 배선 재배치
- EDSAC / EDVAC: 프로그램 내장식 → 프로그램과 데이터를 동일 형태로 메모리에 저장 = 폰노이만 구조
- ⚠️ 폰노이만 구조 최초 컴퓨터는 ENIAC이 아님 (ENIAC은 외장식)
- UNIVAC-1: 세계 최초 상업용 (국세조사)
- 하버드 아키텍처: 명령어/데이터 메모리를 분리 → 병렬 인출
⭐⭐⭐ 정보처리 시스템의 분류
| 방식 | 구성 | 현실 예시 |
|---|---|---|
| 일괄처리 | CPU1-메모리1-프로그램1-사용자1 | 모아서 한번에 |
| 다중프로그래밍 | CPU1-메모리1-프로그램n-사용자1 | 일반 PC |
| 시분할 | CPU1-메모리1-프로그램n-사용자n | 다중프로그래밍의 논리적 확장 |
| 다중처리(강결합) | CPUn-메모리1-프로그램n-사용자n | 멀티코어 프로세서 |
| 분산처리(약결합) | CPUn-메모리n-프로그램n-사용자n | 클라우드 |
- ⚠️ 다중처리 = 메모리 공유(강결합) / 분산처리 = 메모리 각자(약결합)
- 실시간 시스템: 자료 발생 즉시 처리
⭐ 세대별 발전 / 성능 단위
| 세대 | 소자 | 키워드 |
|---|---|---|
| 1 | 진공관 | 전력소모↑ |
| 2 | 트랜지스터 | 신뢰성↑ |
| 3 | 집적회로 | MIS, 시분할 |
| 4 | 고밀도 IC | PC 대중화 |
| 5 | 초고밀도 IC | 인공지능 |
- 주파수 = 1/주기
- CPU 실행시간 = 명령어 개수 × 평균 CPI × 클록주기
⭐⭐ CPU 시간 계산 (기출 단골)
- CPI = 명령어 1개 처리에 필요한 평균 클록 수
- 주기 = 1/주파수 이므로 → 실행시간(초) = 명령어 수 × CPI ÷ 클록 주파수
- 앞 숫자끼리 / 10의 지수끼리 따로 계산 (곱하면 지수 더하기, 나누면 빼기)
- 단위: G = 10⁹ / 만 = 10⁴ / 백만 = 10⁶ ・ ms = 10⁻³초 / μs = 10⁻⁶초 / ns = 10⁻⁹초
| 기출 | 계산 | 답 |
|---|---|---|
| 1GHz, 15만개, CPI 5 (2013 국가) | 1.5×10⁵ × 5 ÷ 10⁹ = 7.5×10⁻⁴초 | 0.75ms |
| 4GHz, 10¹⁰개, CPI 4 (2021 국가) | 10¹⁰ × 4 ÷ (4×10⁹) | 10초 |
| 2GHz, 100만개, CPI 1 (2012 국회) | 10⁶ × 1 ÷ (2×10⁹) = 0.5×10⁻³초 | 0.5ms |
⭐⭐ GPU / GPGPU / APU
- GPU: CPU보다 ALU가 훨씬 많음 → 대량의 간단한 연산을 병렬로 빠르게 처리
- 그래서 기계학습·인공신경망·블록체인에 사용 (2021 국회)
- ⚠️ CPU보다 ALU 적다 / 전력 적게 소모 / 트랜지스터 적다 → 전부 틀림 (다 많음)
- GPGPU: GPU를 그래픽 외 범용 연산에 사용하는 기술 (OpenCL로 프로그래밍)
- ⚠️ “CPU용 모든 프로그램이 GPGPU에서 실행 가능” → 틀림
- 병렬처리 불가능한 프로그램은 GPGPU에서도 성능향상 기대 어려움
- APU: CPU + GPU를 하나의 칩에 (AMD 최초 제시). 크기↓, 발열↓
- 암기: APU = CPU + GPU
Chapter 02. 데이터의 표현과 컴퓨터 연산
⭐⭐ 정보 표현 단위
1 | |
- 비트: 최소 단위. n비트 = 2ⁿ개 표현
- 니블: 4비트 = 16진수 1자리. 독립 처리 안 됨
- 바이트: 8비트. 문자 표현의 최소 단위
- 워드: ⚠️ CPU가 한 번에 처리하는 데이터 크기
- Half Word=2B / Full Word=4B / Double Word=8B
⭐⭐ 진법 변환
- 정수부: x로 나눠 나머지 → 아래에서 위로 읽기
- 소수부: x를 곱해 올라간 정수 → 위에서 아래로 읽기
- 2진수 ↔ 8진수: 3자리씩 묶기 (2³)
- 2진수 ↔ 16진수: 4자리씩 묶기 (2⁴)
2진 소수 자리값 (정수부의 반대 방향으로 ÷2씩)
1 | |
- 10진 소수를 이 값들의 합으로 쪼개면 바로 변환: 0.625 = 0.5 + 0.125 → .101
- 0.5 / 0.25 / 0.125 / 0.0625 네 개만 외우기
x진수 → 10진수: 각 자리 × 밑수의 거듭제곱을 모두 더하기
- 264₍₈₎ = 2×64 + 6×8 + 4×1 = 180 (⚠️ 181 아님, 2021 지방직 함정)
- 소수점 오른쪽은 밑수⁻¹, 밑수⁻² … (0.4₍₈₎ = 4/8 = 0.5)
용량 단위: 2¹⁰=K, 2²⁰=M, 2³⁰=G, 2⁴⁰=T, 2⁵⁰=P, 2⁶⁰=E, 2⁷⁰=Z, 2⁸⁰=Y (한 칸 = ×2¹⁰)
⭐⭐ 보수
- 컴퓨터는 뺄셈 회로가 없음 → 보수로 덧셈 처리
- 1의 보수: 모든 비트 반전
- 2의 보수: 1의 보수 + 1
- 밑수 R → R의 보수, R-1의 보수 (10진수는 10/9의 보수)
2의 보수로 표현된 수 읽기
- 맨 앞(MSB) 0 → 양수, 1 → 음수 (문제에서 “부호 있는 / 2의 보수”일 때만)
- 음수 값 = 2의 보수를 한 번 더 취한 값에 − 붙이기
- 11111010 → 반전 00000101 → +1 → 00000110 = 6 → −6
- 전부 1(1111…1) = −1 / 1000…0 = 가장 작은 음수 (4비트면 −8)
⭐⭐ 코드
| 코드 | 비트 | 표현 수 | 특징 |
|---|---|---|---|
| 표준 BCD | 6 (zone2+digit4) | 64 | 대소문자 구별 X |
| 아스키 | 7 (zone3+digit4) | 128 | PC·통신용 |
| 확장BCD(EBCDIC) | 8 (zone4+digit4) | 256 | 범용 컴퓨터 |
| 유니코드 | 16 | 65536 | 언어 무관 |
- 3초과(Excess-3): 8421코드 + 3(0011). 자기보수 코드, 비가중치
- Gray 코드: 인접 값이 1비트만 차이. A/D 변환기, 에러율↓
- 패리티 비트: 1개 에러만 검출
- 해밍코드: 에러 검출 + 수정
- ASCII 7비트 + 패리티 1비트 = 8비트(1바이트) → 데이터 통신용
⭐⭐ 해밍코드 풀이 틀
1 | |
- 패리티 = 1, 2, 4, 8, 16… (2의 거듭제곱 자리) / 나머지 = 데이터
- 담당 구역: Pn은 n번째부터 n개 잡고 n개 건너뛰기
- P1 = 1,3,5,7,9… / P2 = 2,3,6,7,10,11… / P4 = 4,5,6,7,12… / P8 = 8~15
- 만들기: 데이터를 3,5,6,7에 넣고 → 각 구역 1 개수 홀수면 패리티 1, 짝수면 0 (짝수 패리티)
- 1001 → 0011001 / 1010 → 1011010
- 오류 수정: 각 구역 검사 → 홀수 나온 패리티 번호를 더한 값 = 오류 위치 → 그 비트 뒤집기
- 0011111 → P1, P2 틀림 → 1+2 = 3번 → 0001111
- 16비트 코드 → 패리티 1,2,4,8,16 = 5개, 데이터 11개 (2020 해경)
- 짝수/홀수 판단: 문제에 명시 or
p = (d합) mod 2식이면 짝수 패리티 - ⚠️ 적는 방향 주의: 배치표 주면 표대로(예: d4 d3 d2 p4 d1 p2 p1 = 오른쪽이 1번), 없으면 왼쪽이 1번, 선지에 없으면 뒤집기
⭐⭐ 수치형 데이터 표현
언팩 vs 팩
- 언팩: 숫자 1자리 = 1바이트 → 입출력용
- 팩: 숫자 1자리 = 4비트(1바이트에 2자리 압축) → 연산용
- 부호: C(1100) = 양수, D(1101) = 음수
⭐⭐⭐ 고정소수점 - 음수 표현 3가지
| 부호와 절대치 | 1의 보수 | 2의 보수 | |
|---|---|---|---|
| 방법 | 최상위 비트만 변환 | 전체 반전 | 1의보수+1 |
| 0 표현 | +0, -0 | +0, -0 | +0만 |
| 표현범위 | -(2ⁿ⁻¹-1)~+(2ⁿ⁻¹-1) | 동일 | -(2ⁿ⁻¹)~+(2ⁿ⁻¹-1) |
| 속도 | 느림 | 가장 느림 | 가장 빠름 ★ |
- 양수는 3가지 모두 동일하게 표현
- 캐리 발생 시 버림 / 미발생 시 결과는 음수
⭐⭐⭐ 부동소수점 (IEEE 754)
| 형식 | 부호 | 지수 | 가수 |
|---|---|---|---|
| 단정도(32bit) | 1 | 8 (Bias 127) | 23 |
| 배정도(64bit) | 1 | 11 (Bias 1023) | 52 |
- 정규화: ±1.bbb × 2^E 형태로
- 잠복비트: 소수점 앞의 1은 항상 1이라 저장 안 함
- 바이어스: 음수 지수를 양수로 만들려고 더하는 값
- ⚠️ 연산 순서: ① 0인지 검사 → ② 지수를 큰 쪽에 맞춤 → ③ 가수 연산 → ④ 정규화
⭐⭐ IEEE 754 변환 풀이 (예: −30.25 × 2⁻⁸, 2021 국가)
- 부호: 음수 → 1
- 2진수: 30.25 = 11110.01
- 정규화: 11110.01 × 2⁻⁸ = 1.111001 × 2⁻⁴ (소수점 왼쪽 4칸 이동 → 지수 +4)
- 지수부: −4 + 127 = 123 = 01111011
- 가수부: “1.” 뒤만 → 111001 + 0 채워 23비트
- 16진수: ⚠️ 필드 경계 무시하고 32비트 전체를 왼쪽부터 4자리씩
- 1011 1101 1111 0010 0000 … → BDF20000 - ⚠️ 가수부 ≠ 소수부: 가수부는 정규화 후 “1.” 뒤의 유효숫자 (원래 정수부 비트도 포함됨)
⭐ 논리연산
- AND(둘 다 1) / OR(하나라도 1) / XOR(다르면 1)
- 선택적-세트 = OR / 선택적-보수 = XOR / 마스크(삭제) = AND
- Shift: 밀려난 비트 제거, 빈자리 0
- Rotate: 밀려난 비트가 반대편으로 순환
- 산술적 shift: 부호비트 유지. 좌측 = ×2ⁿ, 우측 = ÷2ⁿ
Chapter 04. 중앙처리장치(CPU)
⭐⭐⭐ RISC vs CISC
| 구분 | CISC | RISC |
|---|---|---|
| 명령어 개수 | 많다 | 적다 |
| 명령어 길이 | 가변 | 고정(1워드) |
| 주소지정 방식 | 많다 | 적다 |
| 레지스터 수 | 적다 | 많다 ⚠️ |
| 처리속도 | 저속 | 고속 |
| 전력소모 | 많다 | 적다 |
| 제어방식 | 마이크로프로그래밍 | Hard-Wired |
| 파이프라이닝 | 어려움 | 효율적 |
- ⚠️ “RISC는 레지스터를 적게 쓴다” → 틀림! 많이 씁니다
- RISC는 연산을 레지스터끼리만, 메모리 접근은 Load/Store만
⭐⭐⭐ CPU 내부 레지스터 5종
| 레지스터 | 역할 |
|---|---|
| PC | 다음에 인출할 명령어의 주소 |
| IR | 가장 최근에 인출된 명령어 |
| AC | 연산 결과 일시 저장 |
| MAR | 주기억장치 주소 임시 저장 |
| MBR | 주기억장치에 쓸/읽은 데이터 임시 저장 |
- ⚠️ “MAR = 가장 최근 인출한 명령어 보관” → 틀림! 그건 IR
- MAR = Address(주소), MBR = Buffer(데이터)
⭐⭐ 소속 구분 (함정 단골)
| 제어장치 | 연산장치 |
|---|---|
| PC, IR, MAR, MBR, 명령해독기(디코더), 번지해독기, 제어신호 발생기(부호기) | 누산기(AC), 가산기, 보수기, 시프트 레지스터, 상태 레지스터, 데이터 레지스터 |
- CPU 구성요소 = 제어장치 + ALU + 레지스터 (⚠️ DRAM, PCI, 메인보드 X)
- ⚠️ 캐시 메모리는 CPU 내부 레지스터가 아님 (2019 국가)
- ⚠️ 세그먼트 포인터는 가상기억장치 개념 → 제어장치 구성요소 아님
- ⚠️ 레지스터는 플립플롭으로 구성 (DRAM 아님, 2008 국가)
- ⚠️ 인출된 명령어는 MBR → IR 에 저장 (누산기 아님)
- ⚠️ 시스템 동작 제어 = 제어신호 발생기 (PC 아님)
- 스택 포인터(SP): 인터럽트 시 원래 프로그램으로 돌아오도록 복귀 주소(PC) 를 스택에 임시 저장
- CPU 처리속도 단위: MIPS
⭐⭐ 플래그 레지스터(PSW): 연산 결과 상태 기록
- Carry(자리올림) / Parity(1의 개수 짝수) / Zero(결과 0) / Sign(음수) / Overflow
필요한 비트(선) 수 = n개를 구분하는 최소 k (2ᵏ ≥ n)
- 20가지 작업 → 2⁴ < 20 ≤ 2⁵ → 5개 선 (2013 서울시)
- 레지스터 16개 → 2⁴ → 4비트 / 3-주소 명령어면 × 3 = 12비트 (2012 국회)
⭐ 명령어 형식 (오퍼랜드 수)
- 0-주소: 스택 사용, PUSH/POP, 후위표기법
- 1-주소: 누산기(AC) 사용, LOAD/STORE
- 2-주소: 가장 많이 사용 / 3-주소: 프로그램 짧음, 입력자료 보존
- 0-주소 스택 계산: PUSH C → PUSH A → PUSH B → ADD → MUL → POP Z
- 스택(LIFO)에 C, A, B → ADD로 위 두 개(B+A) → MUL로 그 결과 × C → Z = (A+B)×C
⭐⭐ 주소지정 방식 — 메모리 접근 횟수
| 방식 | 접근 횟수 |
|---|---|
| 즉시(Immediate) | 0회 (가장 빠름) |
| 레지스터 | 0회 |
| 직접(Direct) | 1회 |
| 간접(Indirect) | 2회 (가장 많음) ⚠️ |
- 상대 주소지정 = PC + 변위
- 인덱스 주소지정 = 인덱스 레지스터(IX) + 변위
- 베이스 레지스터 주소지정 = 베이스 레지스터 + 주소필드
- 묵시적(implied) 주소지정 = 오퍼랜드가 명령어 정의에 이미 정해짐 (스택 등)
⭐⭐⭐ 비유: 오퍼랜드 = 쪽지, 메모리 = 사물함
| 방식 | 쪽지 내용 | 과정 | 레벨 |
|---|---|---|---|
| 즉시 | 데이터 자체 | 쪽지가 곧 데이터 | 0 |
| 레지스터 | 레지스터 이름 | 레지스터 안 = 데이터 | 0.5 |
| 직접 | 사물함 번호 | 1번 열기 | 1 |
| 레지스터 간접 | 레지스터 이름 | 레지스터 안 = 사물함 번호 → 열기 | 1.5 |
| 간접 | 사물함 번호 | 열면 또 번호 → 한 번 더 열기 | 2 |
| 상대 | 숫자 | 숫자 + PC = 사물함 번호 |
- 속도: 즉시 > 레지스터 > 직접 > 레지스터 간접 > 간접 (메모리 1점, 레지스터 0.5점)
- 메모리 참조 안 하는 방식 = 즉시, 레지스터 (2009 서울시)
- 간접 방식 쓰는 이유: 짧은 명령어로 지정 가능한 주소 범위 확대 (단점: 가장 느림)
- 상대 주소 = 분기 명령어에서 주로 사용
- ⚠️ 상대 주소의 PC는 이미 +1 된 값 (명령어 인출하면서 PC ← PC+1)
⭐⭐ 163번 유형 (2008 국회) — LDA MODE 400, PC=100, R1=300
메모리: [300]=600, [400]=700, [500]=800, [501]=375, [700]=302
| 방식 | 유효주소 | AC |
|---|---|---|
| 직접 | 400 | 700 |
| 간접 | [400]=700 | 302 |
| 상대 | 400 + 101 = 501 | 375 |
| 레지스터 | R1 | 300 |
| 레지스터 간접 | R1 = 300 | 600 |
- AC(누산기) = 최종 꺼낸 데이터를 담는 바구니 (LDA = Load Accumulator)
⭐⭐ 인터럽트
- 외부 인터럽트 = 정전, 기계결함, 입출력 → 하드웨어 원인
- 내부 인터럽트 = 0으로 나누기, 오버플로, 보호영역 침범 → 프로그램 오류
- SVC(슈퍼바이저 호출) = 사용자가 의도적으로 OS 서비스 요청
우선순위 판별 3가지
| 방식 | 장점 | 단점 |
|---|---|---|
| 소프트웨어 폴링 | 우선순위 변경 쉬움, 저렴 | 시간 많이 소요 |
| 데이지 체인 | 하드웨어 간단 | 낮은 우선순위 처리 어려움 |
| 벡터 인터럽트 | 빠른 식별 | 하드웨어 복잡, 장치 수 제한 |
- 동작 순서: 요청 → 현재 상태 저장 → 원인 분석·ISR 수행 → 상태 복구 → 재개
⭐ 시스템 버스
- 데이터 버스: 양방향. 폭 = 한 번에 전송되는 비트 수
- 주소 버스: 단방향. 비트 수 = 접근 가능한 주소 개수 결정
- 제어 버스: 제어신호 전송
Chapter 05. 기억장치
⭐⭐⭐ DRAM vs SRAM
| DRAM | SRAM | |
|---|---|---|
| 소자 | 캐패시터 | 플립플롭 |
| 재충전(refresh) | 필요 | 불필요 |
| 속도 | 느림 | 빠름 |
| 가격 | 저렴 | 비쌈 |
| 집적도(밀도) | 높음 | 낮음 |
| 전력소모 | 적음 | 많음 |
| 용도 | 주기억장치 | 캐시 메모리 |
- ⚠️ “DRAM은 주기적 충전 없어도 영구 저장” → 틀림! (2010 국가직)
- 암기: Static=가만히 둬도 유지 / Dynamic=계속 새로고침
⭐⭐ ROM 종류
- Mask ROM: 제작 시 고정, 변경 불가
- PROM: 1회에 한해 기록 가능
- EPROM: 여러 번 지우고 재기록 (UVEPROM=자외선 / EEPROM=전기)
- EEPROM: 비휘발성 + 읽기·쓰기 가능, 갱신 횟수 제한
- 플래시 메모리: ROM의 비휘발성 + RAM의 자유로운 입출력
- NAND: 데이터 저장용, 셀 직렬, 대용량, USB
- NOR: 코드 저장용, 셀 병렬, 읽기 빠름
⭐⭐⭐ 캐시 메모리
- 목적: CPU와 주기억장치의 속도 차이 보완
- 적중률(Hit Ratio) = 적중 수 ÷ 전체 참조 횟수
⭐⭐⭐ 평균 접근시간 공식
1 | |
예) 캐시 20ns, 주기억 150ns, 적중률 80% = 0.8×20 + 0.2×150 = 16 + 30 = 46ns (2020 지방직)
지역성(Locality) — 캐시가 효과를 내는 이유
- 시간 지역성: 한 번 쓴 걸 또 씀 (반복문, 서브루틴)
- 공간 지역성: 근처 주소를 이어서 씀 (배열, 순차 실행)
⭐⭐ 사상(Mapping) 기법
| 기법 | 특징 |
|---|---|
| 직접 사상 | 캐시블록 = 메모리블록 mod 캐시블록수. 간단·저렴, 충돌 잦음 |
| 완전연관 사상 | 어느 라인에도 적재 가능. 적중률 최고, 회로 복잡·비쌈 |
| 집합연관 사상 | 둘의 절충. 실제 가장 많이 사용 |
- 속도 순: 연관 > 집합연관 > 직접
⭐⭐ 쓰기 정책
- 즉시 쓰기(Write-Through): 캐시 + 주기억 동시 기록 → 일관성 O, 느림
- 나중 쓰기(Write-Back): 캐시에만 기록, 교체 시 반영 → 빠름, 일관성 X
- ⚠️ “write-back은 적중 시 메인메모리도 갱신” → 틀림!
교체 알고리즘: LRU(적중률 높음, 비쌈) / Random / FIFO
⭐⭐ RAID
| 레벨 | 방식 | 핵심 |
|---|---|---|
| RAID 0 | 스트라이핑 | 패리티·미러링 없음 → 장애 시 전부 손실 |
| RAID 1 | 미러링 | 복사. 신뢰성↑, 저장비용↑, 쓰기 느림 |
| RAID 2 | 비트 + 해밍코드 | 거의 사용 X |
| RAID 3 | 비트 단위 + 패리티 1개 | |
| RAID 4 | 블록 단위 + 패리티 1개 | 패리티 디스크 병목 |
| RAID 5 | 블록 + 분산 패리티 | 병목 해결, 현재 최다 사용 |
| RAID 6 | 블록 + 이중 분산 패리티 | 두 가지 패리티 |
- ⚠️ “RAID 5는 이중 분산 패리티” → 틀림! 이중은 RAID 6
- 암기: 2=해밍, 3=비트, 4=블록+고정, 5=블록+분산, 6=이중
⭐ 기타
- 주기억장치 용량 = 주소 개수 × 주소 1개 크기
- 주소 개수 ← MAR 크기 / 워드 길이 ← MBR 크기
- 엔디언: 빅=큰 단위가 앞(적은 주소) / 리틀=작은 단위가 앞
-
(1234)₁₆ → 빅: 12 34, 리틀: 34 12
-
- 메모리 인터리빙: 모듈 여러 개 독립 접근 → 연속 바이트 한 번에
- 디스크 접근시간 = Seek Time + Search Time + Transmission Time
- 연관 기억장치(CAM): 주소가 아닌 내용으로 검색
Chapter 06. 입출력장치
입출력장치 특징: 주기억장치보다 동작 속도가 매우 느림 (기계적 동작), 처리 단위 다름, 에러 확률 높음
- ⚠️ “입출력장치는 반드시 CPU 제어를 거쳐야만 데이터 교환” → 틀림! DMA로 CPU 거치지 않고 직접 교환 가능 (2023 국가)
⭐⭐⭐ 입출력 제어 기법 (CPU 부담 순)
| 방식 | CPU 개입 | 설명 |
|---|---|---|
| 프로그램 I/O(폴링) | 가장 많음 | CPU가 끝날 때까지 계속 대기 |
| 인터럽트 구동 I/O | 중간 | CPU는 다른 일. 단 메모리 접근은 CPU 담당 |
| DMA | 가장 적음 | DMA 제어기가 전송 처리 |
- ⚠️ CPU 부담 작은 순서: DMA < 인터럽트 구동 < 프로그램 I/O (2012 국회)
DMA
- 대용량 데이터 이동에 효과적
- CPU는 시작과 마지막에만 관여
- 사이클 스틸링: DMA가 버스 사용권을 CPU로부터 일시적으로 빼앗음
채널: DMA보다 발전. 자기 자신의 프로그램을 가져 CPU와 독립 동작
- 셀렉터 = 고속 1개 / 바이트 멀티플렉서 = 저속 여러 개 / 블록 멀티플렉서 = 고속 여러 개
주소 지정 방식
- 메모리 맵 I/O: 기억장치 주소공간과 함께 사용
- 분리형 I/O: 주소공간 분리, 별도 명령어 필요, 프로그래밍 복잡
Chapter 07. 병렬처리
⭐⭐⭐ 플린의 분류
| 분류 | 명령어 | 데이터 | 특징 |
|---|---|---|---|
| SISD | 단일 | 단일 | 단일 프로세서. 파이프라인·슈퍼스칼라 |
| SIMD | 단일 | 다중 | 벡터/배열 프로세서 |
| MISD | 다중 | 단일 | 이론상만 존재 |
| MIMD | 다중 | 다중 | 공유 기억장치 / 분산 기억장치 |
- ⚠️ SISD를 “여러 프로세서로 구성”이라 하면 틀림
⭐⭐⭐ 파이프라인
공식: S = (K + N − 1) × T (K=단계 수, N=명령어 수, T=클록 주기)
예) 4단계, 10개 명령어 → (4+10-1)×T = 13T
⭐⭐⭐ 해저드 3종
| 해저드 | 원인 | 별칭 | 해결 |
|---|---|---|---|
| 구조적 | 동일 하드웨어 자원 동시 요구 | 자원 해저드 | 자원 추가, NOP |
| 명령어 | 분기(branch) 명령어 | 분기/제어 해저드 | 분기 예측, 재배치 |
| 데이터 | 앞 결과를 뒤가 사용(종속) | — | 데이터 전방전달(forwarding) |
이상적 효과가 안 나는 이유
- 클록 주기는 가장 긴 단계 기준
- 오퍼랜드 불필요 명령어도 모든 단계 통과
- IF·OF 단계 기억장치 충돌
- 조건 분기 시 미리 인출한 명령어 무효화
⭐⭐ 슈퍼스칼라 / 슈퍼파이프라인
- 슈퍼스칼라: 파이프라인을 여러 개 (폭을 늘림) → (k + ⌈N/m⌉ − 1) × T
- 슈퍼파이프라인: 클록 주기를 절반 이하로 (주기를 쪼갬) → (k + ⌈(N−1)/m⌉) × T
⭐⭐ 암달의 법칙
1 | |
예) 부동소수점 50%, 하드웨어 2배 개선 → 1/[(1−0.5)+0.5/2] = 1/0.75 ≈ 1.33배 → s를 ∞로 해도 최대 2배를 못 넘음 (1/(1−0.5))
- 의미: 개선 안 된 부분이 전체 성능을 제한한다
- 구스타프슨 법칙: 암달의 반대 개념
🎯 시험 직전 최종 체크 15
- 다중처리=멀티코어(메모리 공유) / 분산처리=클라우드(메모리 각자)
- RISC는 레지스터가 많다 (적다 아님)
- MAR=주소, MBR=데이터, IR=최근 명령어
- 간접 주소지정 = 메모리 접근 2회 (가장 많음)
- DRAM은 재충전 필요, SRAM은 불필요
- write-back은 캐시에만 기록 (메인메모리 동시 갱신 X)
- RAID 5=분산 패리티(1개 복구), RAID 6=이중(2개 복구)
- CPU 부담: DMA < 인터럽트 < 프로그램 I/O
- IEEE754 단정도 = 부호1+지수8(Bias 127)+가수23
- 파이프라인 = (K+N−1)×T
- 실행시간 = 명령어 수 × CPI ÷ 주파수, 지수끼리 따로 계산
- 해밍 오류 위치 = 틀린 패리티 번호의 합
- 상대 주소는 PC+1 된 값 사용
- 레지스터는 플립플롭, 캐시는 레지스터 아님, 시프트 레지스터는 연산장치
- GPU는 ALU 많고 병렬 처리 → 머신러닝 / APU = CPU+GPU
명령어 처리순서
- 인출(IF) -> 해독(ID) -> 피연산자 인출(OF) -> 실행(EX) -> 저장
- PC -> MAR -> MEMORY -> MBR -> IR -> 해독 -> 실행 -> 인터럽트 확인
RISC / CISC
- cisc 명령어 길이는 가변
- cisc : 메모리 피연산자를 직접 처리 / risc: Load/Store로만 메모리 접근
- risc는 레지스터 많음, 전력소모 적음, 내부캐시 슈퍼스칼라 파이프라이닝 활용
펌웨어
-
sw를 hw화 한것으로 전원 켜지면 자동으로 실행됨 rom에 저장됨. bios가 대표적인 예임.
사상방식
- 직접은 한곳만들어감 적중률은 낮고 교체알고리즘은 필요없고 회로는 간단함
- 집합연관은 정해진 집합 아무곳 적중률은 중간이고 교체알고리즘은 필요하고 회로는 중간
- 완전연관은 아무데나 들어가고 적중률은 높고 교체알고리즘은 필요하고 회로는 복잡함
주소 필드 비트 계산
- 블록수 = 캐시 크기 / 블록 크기
- 집합수 = 블록(라인) 수 / way
- 태그 = 주소길이 - 세트 - 오프셋
쓰기 정책
- write through : 캐시 + 메인 동시 기록 -> 일관성 높아지고 느림 따라서 쓰기버퍼 사용, 다중 프로세서에선 불일치 발생가능
- write back: 캐시에만 기록 교체될때 메인이 반영됨 -> 빠름, 불일치 가능함
인터럽트
- 우선순위 = 전원이상 -> 기계착오 -> 외부신호 -> 입출력 -> 명령어의 잘못 사용 -> 슈퍼바이저 콜
- 소프트웨어보다 하드웨어 인터럽트가 우선순위가 높음.
- daisy chain은 우선순위 판별을 위한 하드웨어 방법. 모든 장치를 직렬로 연결하되 우선순위가 순대로.
- 소프트웨어 폴링은 cpu가 각 주변장치들을 연속적으로 순환하며 입출력 요구를 체크하는 방법
- 인터럽트 벡터 = cpu와 장치사이에 버스를 설치하여 cpu에게 알리는 방식
- 컨텍스트 스위칭: 인터럽트 발생시 제어권을 넘겨주는것.
- 외부인터럽트 : 전원이상, 기계착오, 외부신호, 입출력
- 내부인터럽트 : 잘못된 명령어, 프로그램 검사
- 소프트웨어인터럽트 : 슈퍼바이저 콜 인터럽트
버스
- 시스템 버스에 해당하는것은 제어, 주소- 단방향, 데이터 -양방향 버스가있음
- 버스의 폭은 전송량을 의미하며 컴퓨터 성능에 영향을 줌
병렬
- 슈퍼스칼라: 한 사이클에 여러 명령어 동시 실행
- VLIW : 컴파일러가 동시 실행 명령어를 하나로 묶음
- SMT: 하드웨어 멀티스레딩
- 병렬연산장치는 배열 프로세서, spu, simd
- 파이프라이닝 4단계 : 명령어 인출(IF) -> 명령어 해독(ID) -> 주소 인출(OF) -> 실행(EX)