⭐⭐⭐ 반드시 / ⭐⭐ 중요 / ⭐ 참고 ⚠️ = 기출 함정 포인트
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 × 클록주기
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⁴)
⭐⭐ 보수
- 컴퓨터는 뺄셈 회로가 없음 → 보수로 덧셈 처리
- 1의 보수: 모든 비트 반전
- 2의 보수: 1의 보수 + 1
- 밑수 R → R의 보수, R-1의 보수 (10진수는 10/9의 보수)
⭐⭐ 코드
| 코드 | 비트 | 표현 수 | 특징 |
|---|---|---|---|
| 표준 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개 에러만 검출
- 해밍코드: 에러 검출 + 수정
⭐⭐ 수치형 데이터 표현
언팩 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인지 검사 → ② 지수를 큰 쪽에 맞춤 → ③ 가수 연산 → ④ 정규화
⭐ 논리연산
- 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(데이터)
⭐⭐ 주소지정 방식 — 메모리 접근 횟수
| 방식 | 접근 횟수 |
|---|---|
| 즉시(Immediate) | 0회 (가장 빠름) |
| 레지스터 | 0회 |
| 직접(Direct) | 1회 |
| 간접(Indirect) | 2회 (가장 많음) ⚠️ |
- 상대 주소지정 = PC + 변위
- 인덱스 주소지정 = 인덱스 레지스터(IX) + 변위
⭐⭐ 인터럽트
- 외부 인터럽트 = 정전, 기계결함, 입출력 → 하드웨어 원인
- 내부 인터럽트 = 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 부담 순)
| 방식 | 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))
- 의미: 개선 안 된 부분이 전체 성능을 제한한다
- 구스타프슨 법칙: 암달의 반대 개념
🎯 시험 직전 최종 체크 10
- 다중처리=멀티코어(메모리 공유) / 분산처리=클라우드(메모리 각자)
- 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