Last update 24.10.20
- 공부중인 내용이므로 변경하고 있습니다.
- 틀린 내용은 언제든지 지적 부탁드립니다!
- 파란색 배경으로 강조된 부분은 예시문제에 나온 내용입니다.
1. 작동방식
컴퓨팅시스템 개요
•
컴퓨터의 역할 I = P(D)
◦
Data를 어떻게 저장할 지 = 데이터베이스
◦
Process를 어떻게 할 지 = 알고리즘
◦
알고리즘을 어떻게 구현할 지 = 통합프로그래밍
◦
어떤 시스템을 사용할 지 = 통합컴퓨팅시스템
•
컴퓨팅시스템은 정보처리를 위한 시스템
◦
하드웨어(← 논리회로, 컴퓨터구조 과목)와 소프트웨어(← 운영체제 과목)의 상호작용
◦
하드웨어
▪
중앙처리장치: 제어장치, 산술논리연산장치, 레지스터
▪
기억장치: 주기억장치(RAM/ROM), 보조기억장치, 캐시(메모리 계층구조)
▪
입출력장치
▪
시스템 버스: 제어 버스,주소 버스,데이터 버스
◦
소프트웨어: 시스템 소프트웨어, 응용 소프트웨어
▪
시스템 소프트웨어의 구분
•
제어 프로그램: 감시 프로그램, 작업제어 프로그램, 데이터 관리 프로그램
•
처리 프로그램: 언어 번역기, 서비스 프로그램, 문제해결 프로그램
▪
언어 번역 프로그램
Note. Compiler Driver: 컴파일 과정을 하나로 묶어둔 패키지
Note. Compiler vs Interpreter: 목적 프로그램의 생성 여부
•
컴파일러: 원시코드 → 어셈블리어 → 목적 프로그램
•
어셈블러: 어셈블리어 → 목적 프로그램
•
링커: 정적 링킹 / 동적 링킹
•
로더: 할당(메모리 등 자원 할당), 연결(동적 링킹된 라이브러리 연결), 재배치(실주소 변경), 적재(페이지 적재)
◦
하드웨어와 소프트웨어는 상호의존적이며 보완적
ex. 가상메모리 시스템: MMU(하드웨어) + TLB 관리(소프트웨어)
•
컴퓨터의 역사
◦
회로 소자의 발달로 컴퓨터의 역사 구분
◦
1세대: 진공관
▪
기계적 데이터 표현 → 전기적 데이터 표현
▪
기계어, 어셈블리어 - 프로그램 내장형 컴퓨터
◦
2세대: 트랜지스터
▪
고급 프로그래밍 언어 - 시스템 라이브러리, 컴파일러
▪
일괄 처리 시스템
◦
3세대: 집적회로(IC)
▪
소형화, 기억용량 증대
▪
멀티 프로세스
◦
4세대: 고밀도 집적회로(LSI/VLSI)
▪
반도체 비용 감소 → 개인용 컴퓨터 보급 → 네트워크 발달
▪
시분할 시스템, GUI, 분산시스템
논리회로
부울 대수
•
하드웨어는 전기적 신호를 처리하는 논리회로
◦
신호의 전압에 따라 상태를 구분: 기준 전압 → 0(Low)과 1(High) 구분
◦
노이즈 등의 영향을 줄이기 위해 두 가지 상태만 사용
•
부울 대수는 논리학을 기반으로 0과 1만을 사용하는 대수 규칙
◦
0(거짓), 1(참)의 상태와 합 , 곱, 보수, 배타적 논리합 등의 연산을 사용하는 대수 체계
◦
논리연산 → 불 대수
◦
논리회로를 불 대수로 표현 가능 = 회로 검증, 간소화
•
부울 대수의 연산규칙
◦
기본 연산
X | Y | ||||
0 | 0 | 0 | 0 | 0 | 1 |
0 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
◦
부울 대수의 연산규칙
▪
교환법칙: ,
▪
결합법칙: ,
▪
분배법칙: ,
▪
지배법칙: ,
▪
항등법칙: ,
▪
멱등법칙: ,
▪
보수법칙: ,
▪
이중 보수법칙:
▪
흡수법칙: ,
▪
드모르간의 법칙: ,
▪
합의의 정리
•
한 번은 일반항으로, 한 번은 보수로 나타난 변수가 포함된 식 = 적항
•
적항에 연산된 나머지 항 = 잉여항
•
•
▪
쌍대성의 원리
•
부울 함수의 표현
◦
최소항 = 참 = SOP(Sum of Product)
◦
최대항 = 부정 = POS(Product of Sum)
◦
ex.
(SOP형: 출력이 1이 되도록 하는 최소항의 합 = 1 + 3)
(POS형: 출력이 0이 되도록 하는 최대항의 곱 = 0 * 2)
•
부울 함수의 간소화
◦
카르노 맵
▪
진리표의 특수한 형태 - 변수가 1비트만 다르도록 나열: 00, 01, 11, 10
▪
인접한 항을 2의 거듭제곱만큼 묶으면 간소화 가능
(SOP형에서는 1인 칸을, POS형에서는 0인 칸을 묶는다)
◦
연산규칙 활용
•
논리게이트
◦
트랜지스터, 저항 등을 조합하여 논리연산 구현
▪
게이트를 조합해서 논리회로 구성
▪
기억능력이 있으면 (= 피드백 회로가 있으면) 순차논리회로, 없으면 조합논리회로
◦
AND 게이트, NAND 게이트
◦
OR 게이트, NOR 게이트
◦
XOR 게이트, XNOR 게이트
◦
NOT 게이트
조합논리회로
•
입력 변화에 따라 출력이 변화하는 회로
◦
저장을 위한 기억소자 없이 논리게이트로만 구성
◦
입력 변화가 전파되는 시간이 필요하므로, 지연이 발생
•
인코더, 멀티플렉서
◦
인코더(ex. 8x3): 개의 입력에 대해 n비트 출력이 나오는 회로 (부호화)
◦
멀티플렉서(ex. 8x1): 개 입력을 n비트 선택선을 이용해 선택해서 하나의 입력이 나오는 회로
•
디코더, 디멀티플렉서
◦
디코더(ex. 3x8): n비트 입력에 대해 개의 출력이 나오는 회로 (복호화)
◦
디멀티플렉서(ex. 1x8): 1비트 입력, n비트 선택선에 대해 개 중 하나의 선로로만 입력이 나오는 회로
•
가산기/감산기
◦
반가산기(XOR + AND)/전가산기(전가산기 2개 + OR)
◦
반감산기(반가산기 + NOT)/전감산기
◦
부호 비트를 활용한 가감산기
◦
가산기의 병렬처리
순차논리회로
•
입력 뿐 아니라 상태에 따라 출력이 결정되는 회로
◦
조합회로와 기억회로(피드백 회로)로 구성
◦
직전 상태를 기억
◦
클럭 여부에 따라 동기식(클럭 O)과 비동기식(클럭 X)으로 구분
◦
변화 시점에 따라 레벨 트리거와 에지 트리거로 구분
•
플립플롭: 동기식 에지 트리거
◦
SR
▪
S는 상태를 1로, R은 상태를 0으로 변경. 입력이 (0, 0)이면 이전상태
▪
기본적인 플립플롭의 형태
▪
(1, 1)을 입력으로 받을 수 없으므로 JK플립플롭 사용
◦
JK
▪
SR 플립플롭의 개선판
▪
J = S, K = R
▪
(0,0), (0,1), (1,0)은 SR 플립플롭과 동일. (1,1)일 때는 상태 반전
◦
T(JK→T)
▪
JK 플립플롭의 특수한 형태(J=K=T)
▪
입력이 0이면 기존 상태 유지, 입력이 1이면 상태 반전
◦
D(SR→D)
▪
D 플립플롭의 특수한 형태
▪
입력이 곧 다음 상태
▪
그럼 왜? 클럭 신호에 맞춰 신호를 주기 위해!
•
클럭 신호가 있어야 플립플롭의 출력이 변경된다는 점 이용
•
클럭 전 까지는 이전 출력이 D 플립플롭에서 나오고 있는 상황
•
클럭 신호가 있으면 그제서야 출력 변경 = 버퍼 역할
•
래치: 비동기식 레벨 트리거
•
순차논리회로의 응용
◦
입출력 방식 구분
▪
직렬방식: 한 번에 하나의 비트 전달. 간단한 회로이지만 여러 사이클이 필요
▪
병렬방식: 한 번에 모든 비트 전달. 전송 속도가 빠르지만 회로가 복잡
▪
입출력에 각각 어떤 방식을 쓰는지에 따라 4가지 입출력 방식이 있음
(직렬입력-병렬입력, 병렬입력-병렬출력, …)
◦
레지스터
◦
카운터
컴퓨터 연산
정수형 자료형
•
보수 표현방식
◦
n진수 → n의 보수(합이 ), n-1의 보수(합이 )
▪
ex. 880
10의 보수: 120
9의 보수: 119
▪
n의 보수는 n - 1의 보수에서 1을 더하는 것과 같음
◦
부호화 크기 표현방식(Signed-Magnitude Representation)
▪
나머지 비트는 그대로 두고, MSB로 부호 표현
▪
연산 불가능
◦
1의 보수 표현 (1’s Complement Representation)
▪
1의 보수를 취해 음수 표현
▪
이진법에서 1의 보수는 각 비트를 뒤집는 것과 같음
▪
0 vs -0 문제와 캐리 문제 발생
◦
2의 보수 표현(2’s Complement Representation)
▪
2의 보수를 취해 음수 표현
▪
GOAT. 부호화 크기 방식과 1의 보수 표현의 문제 해결
◦
ex. -7을 8비트 표현
부호화 크기 표현 방식: 1000 0111
1의 보수 표현 방식: 1111 1000
2의 보수 표현 방식: 1111 1001
◦
산술논리연산장치(ALU)에는 보수기가 있어서 보수 표현을 간단하게 해결
•
2의 보수 표현 방식의 연산
◦
덧셈, 뺄셈
◦
곱셈, 나눗셈
실수형 자료형
•
고정소수점 vs 부동소수점
•
IEEE 754
◦
단일정밀도(Single Precision)
▪
32비트 = 1(sign) + 8(exponent) + 23(mantissa)
▪
모든 시스템에 구현
◦
배정밀도(Double Precision)
▪
64비트 = 1(sign) + 11(exponent) + 52(mantissa)
▪
더 큰 범위나 정밀도가 필요한 경우 사용
▪
전용 레지스터와 명령어 (→ 연산 파이프라인)
◦
덧셈, 뺄셈
◦
곱셈, 나눗셈
2. 구성요소
중앙처리장치
명령어 구성
•
각 명령어(instruction)는 연산자(opcode)와 피연산자(operand)로 구성
◦
연산자: 어떤 작업을 수행할 지 명시 - 연산코드(산술/논리연산, 자료 전달, 분기 등) + 명령어 형식 + 주소지정방식
◦
피연산자: 연산에 필요한 자료 - 상수, 레지스터 번호, 메모리 주소
•
연산자마다 필요로 하는 피연산자의 개수가 다르다
◦
0-주소 명령어 (ex. ret)
◦
1-주소 명령어 (ex. push $RSP)
◦
2-주소 명령어 (ex. mov [$rsp + 0x16], $rax): 입출력 1, 입력 1
◦
3-주소 명령어 (ex. imul $eax, [$rsp + 0x16], 4): 입력 2, 출력 1
◦
note) x86과 같은 CISC는 이러한 분류로 명확하게 나누어지지 않는다.
0x55(push $esp)와 같이 0주소 명령어처럼 보이지만 opcode에 피연산자가 포함되어 있는 경우도 있고, imul 과 같이 하나의 인스트럭션이 여러 주소 형식을 갖는 경우도 있다
주소 지정 방식
•
연산자에 따라 피연산자를 다르게 해석
◦
유효주소: 실제로 사용할 데이터가 저장된 위치
◦
operand의 값을 적절하게 해석해서 실제 참조할 데이터가 있는 유효주소를 계산
(→ 적은 비트 수로 더 많은 주소 사용)
◦
opcode는 작업의 종류와 주소 지정 방식을 모두 포함
•
직접 주소 지정 방식(Direct Addressing): 그대로 유효주소로 사용 (ex. push [0xdeadbeef])
•
즉치 주소 지정 방식(Immediate Addressing = Imm): 상수 값을 그대로 사용 (ex. push 0x16)
•
묵시적 주소 지정 방식(Implied Addressing): opcode에 피연산자 정보 포함 (ex. 0x55 = push $rsp)
•
레지스터 주소 지정(Register Addressing): 레지스터 번호를 유효주소로 사용 (ex. push $rsp)
•
간접 주소 지정(Indirect Addressing): 주소에 저장되어 있는 다른 주소를 유효주소로 사용
◦
Note) x86에는 간접 주소 지정 방식이 없음
•
레지스터 간접 주소 지정방식(Register-Indirect Addressing Mode): 레지스터에 저장된 주소를 유효주소로 사용 (ex. push [$rax])
•
변위 주소 지정 방식(Displacement Addressing Mode): 레지스터 간접 주소 + 직접 주소
◦
레지스터에 저장된 값을 기준으로, 피연산자에 저장된 주소만큼 이동하여 유효주소 결정
◦
상대 주소 지정 방식(Relative Addressing Mode): PC + 변위(ex. mov $rsi, [$rip + 0xff])
◦
인덱스 주소 지정 방식(Indexed Addressing Mode): 인덱스 레지스터 + 변위(ex. cmp [$rsi + 0xff], 0xff)
◦
베이스-레지스터 주소 지정 방식(Base-Register Addressing Mode): 스택 포인터 등의 베이스 레지스터 + 변위(ex. push [$rbp - 0xff])
▪
Note) 세그먼테이션 기법 → 세그먼트 레지스터
명령어 종류
•
데이터 전달 명령어(ex. MOV)
•
산술,논리 연산 명령어(ex. LEA, SHR, AND, ADD)
•
분기 명령어(ex. JMP, JNE, CALL, RET)
•
기타 명령어
◦
인터럽트 명령(ex. INT, SYSCALL)
◦
입출력 전송(for PMIO) (ex. IN, OUT)
구성요소
•
ALU(연산)
◦
가산기, 보수기, 이동기(Shifter) 등으로 구성
◦
제어장치에서 명령을 받아 연산을 수행하고 레지스터(ACC) 및 상태 플래그 갱신
•
레지스터(저장)
◦
ALU 관련 레지스터
▪
ACC(Acculmulator)
▪
Status Flags(CF, OF, ZF, SF, …)
◦
제어장치 관련 레지스터
▪
System Flags(Interrupt, Real Mode, …)
▪
PC(Program Counter)
▪
IR(Instruction Register)
◦
버스 관련
▪
MAR(Memory Address Register)
▪
MBR(Memory Buffer Register)
•
제어장치(제어)
◦
제어신호 발생기, 주소 처리기 등으로 구성
◦
명령어(=외부신호) 해석 후 제어신호(=마이크로연산)를 만듦
◦
ALU의 결과에 따라 다음 연산 결정
◦
제어신호 발생기 구성방식
▪
마이크로프로그램 제어방식: 제어장치 내부 ROM → 명령어에 따라 ROM에 저장된 제어 워드 인출
▪
하드와이어 제어방식: 명령어에 따라 순차, 조합논리회로에서 제어 워드 생성
•
내부버스(전달)
◦
주소 버스, 제어 버스, 데이터 버스로 구성
◦
내부 버스 ≠ 외부 버스(시스템 버스, IO 버스 (→ DMA, 사이클 스틸링))
◦
외부 버스(시스템 버스)와의 연결경로 - 버퍼 레지스터(MAR, MBR), 시스템 버스 인터페이스
명령어 사이클 (2단계 명령어 사이클)
•
명령어 처리 흐름
1.
인출 사이클: Fetch, Decode
2.
[간접 사이클]: Operand Fetch
3.
실행 사이클: Execution
4.
[인터럽트 사이클]: 필요시 커널로 컨텍스트 스위칭, ISR 호출 후 복귀
5.
연산 결과에 따라 PC 설정(조건부 분기), 인출 사이클부터 반복
•
인출 사이클
◦
명령어 인출(Fetch)
MAR ← PC
PC ← PC + 1
MBR ← [MAR]
IR ← MBR
◦
명령어 해독(Decode)
▪
IR에 저장된 워드 중 연산코드는 제어신호 발생기로, 피연산자는 주소 처리기로 이동
▪
제어 신호 발생기에서는 명령어를 해독해 마이크로 연산을 단계적으로 실행
▪
제어 워드를 만들어 내부 버스로 전달
•
간접 사이클 = 피연산자 인출(Operand Fetch)
•
실행 사이클 (Execution)
•
인터럽트 사이클
◦
하나의 명령어를 끝낸 후에 인터럽트 발생 확인
◦
인터럽트가 있으면 ISR 호출
고성능 컴퓨팅
•
파이프라이닝
◦
하나의 코어에서 여러 명령어를 동시에 실행하는 병렬 처리 기법
▪
인스트럭션은 인출, 해독, 실행, 재기록 단계를 순차적으로 진행
▪
명령이 실행 단계에 있으면 인출, 해독을 위한 기능 유닛은 유휴 상태
▪
유휴 시간을 줄이기 위해 다음 명령어를 미리 인출, 해독하여 명령어 실행을 중첩
⇒ 처리량(Throughput) 증가
◦
파이프라이닝 종류
▪
슈퍼 파이프라인: 하나의 사이클이 끝나기 전에 다음 사이클을 시작하여 처리 속도를 높이는 기법
▪
슈퍼스칼라: 파이프라인된 기능 유닛을 여러 개 두어 명령어를 병렬로 실행하는 기법
▪
VLIW/EPIC: 컴파일러 단에서 명령어를 분석하여 병렬 실행 가능한 명령어를 삽입해 처리하는 기법
◦
명령어 파이프라이닝
▪
2단계 파이프라이닝
•
명령어 인출 - 명령어 실행 사이클
•
but, 파이프라인을 위해서는 인출과 실행 단계의 처리시간을 같게 맞춰야 할 필요
•
가장 긴 처리시간에 맞추기 위해 기다려야 함 = 효율
▪
4단계 파이프라이닝
•
인출(Fetch) - 해독(Decode) - 실행(Execution) - 재기록(Write Back) 사이클
•
단계를 세분화할수록 단계별 처리시간을 줄일 수 있고, 여러 명령어를 중첩할 수 있음
•
but, 무작정 단계를 늘리면 회로가 복잡해지고 해저드가 더 자주 발생
◦
연산 파이프라이닝
▪
정수형 자료의 곱셈이나 실수형 자료의 연산같이 복잡한 연산을 여러 단계로 나누어 병렬처리
▪
ex) 부동소수점 덧셈을 위한 파이프라인
1.
(A) 수 a와 b의 지수부를 비교
2.
(A) 지수가 일치하도록 정규화 (B) 기수가 일치하도록 정규화
3.
(B) 기수의 덧셈연산
4.
(A) 정규화된 지수 저장 (B) 계산된 기수 저장
◦
파이프라인 해저드
▪
구조적 해저드
•
하드웨어 자원이 부족하여 명령어 간 자원 충돌이 발생하는 상황
•
파이프라인에 들어간 각 명령어가 요구하는 기능 유닛이 충분하지 않은 경우 처리 지연이 생김
•
ex) 메모리 포트가 하나인 CPU에서, LOAD [M1], [M2] 같이 두 번의 포트 접근이 필요한 인스트럭션 실행
•
해결: 자원 확장, 버블 삽입(Pipeline Stall), 명령어 제약
•
ex) Intel x86: 다중 ALU, 메모리-메모리 이동 명령어 금지
▪
데이터 해저드
•
앞선 명령어의 결과가 다음 명령어에서 필요할 때 발생하는 문제
•
RAW(Read After Write), WAR(Write After Read), WAW(Write After Write) 유형
•
해결: 비순차적 실행(Out-of-Order Execution - 의존성이 있는 오퍼랜드의 재배치), 오퍼랜드 전달(Operand Forwarding - 재기록 전에 ALU로 전달), 버블 삽입
▪
제어 해저드
•
분기 명령어의 결과가 결정되기 전까지 다음 명령어를 파이프라인에 넣을 수 없는 상황
•
버블을 계속 삽입하면 낭비되는 사이클이 너무 많음
•
해결: 브랜치 예측 → 예측된 명령어를 일단 실행
◦
예측이 맞으면 재기록하고 계속 진행
◦
예측이 틀리면 잘못된 명령어를 무효화하고 올바른 명령 실행
▪
Note) 병행 처리 문제는 데이터베이스의 트랜잭션 처리에서도 중요하게 다루는 문제
•
트랜잭션의 의존성을 파악해서 직렬화 비순차적 실행
•
2단계 로킹 버블 삽입
•
멀티코어
◦
하나의 프로세서 안에 여러 개의 CPU코어를 탑재한 구조
◦
각각의 코어는 독립적인 ALU, CU, 레지스터를 갖지만 캐시 등 자원을 공유
▪
Note) MESI 프로토콜: 각 코어의 d-cache를 동기화하여 일관성 유지
◦
but 포트 개수나 버스 대역폭 등은 한계가 있어서 코어 수에 비례해 성능이 증가하지 않음
◦
하이퍼쓰레딩(SMT)
▪
SMT는 하나의 코어에서 동시에 여러 쓰레드를 처리하는 기술
▪
SMT와 슈퍼스칼라는 하드웨어 자원을 병렬로 활용한다는 점에서 기능적으로 유사
▪
하지만, 각각 TLP와 ILP를 위한 기술임
•
ILP(Instruction-Level Parallelism): 하나의 명령어를 병렬로 실행하는 데에 집중
•
TLP(Thread-Level Parallelism): 쓰레드 단위로 병렬 실행하는 데에 집중
◦
최신 프로세서들은 멀티코어 + SMT + 파이프라인을 모두 사용해 고성능으로 처리함
◦
Note) 멀티코어 ≠ 멀티프로세서
ISA
•
CISC(Complicated Instruction Set Computer)
◦
다수의 명령어, 다양한 주소 지정 방식, 가변 명령어 길이: 명령어의 개수를 줄여 성능 향상
◦
RISC에 비해 코드 길이가 짧음, 기능이 많음 = 고성능 PC에 유리
◦
회로 구성이 어려움(→마이크로프로그램 제어방식)
◦
파이프라이닝이 어려움 - 최근에는 CISC를 사용하는 아키텍쳐에서도 CPU 내부에서 하나의 명령어를 몇 개의 부 명령어로 나누어 RISC처럼 작동
◦
ex) x86-64, PowerPC 등
•
RISC(Reduced Instruction Set Computer)
◦
적은 수의 명령어, 한정적인 주소 지정 방식, 고정 명령어 길이: 명령어당 실행시간을 줄여 성능 향상
◦
CISC에 비해 코드 길이가 긺, 기능이 적음
◦
회로 구성이 간단함(→하드와이어드 제어방식)
◦
파이프라이닝에 유리함 = 임베디드 등 저전력 설계에 유리
◦
ex) ARM, AVR, RISC-V 등
기억장치
기억장치 분류
•
기억장치는 프로그램과 데이터를 저장
•
분류 기준
◦
CPU에 대한 물리적인 접근성: 레지스터 > 캐시메모리 > 주기억장치 > 보조기억장치
◦
접근방법
▪
임의접근(Random Access): 주소를 알면 즉시 그 위치에 접근 가능
▪
직접접근(Direct Access): 가장 가까운 주소로 이동한 후 순차적 접근
▪
순차접근(Sequential Access): 저장된 순서에 따라 순차적 접근
◦
저장성질: 휘발성(Volatile), 비휘발성(Non-volatile)
◦
저장방식: 반도체, 자기장, 광학 등
•
대표적인 기억장치
장치 | 계층 | CPU 접근성 | 접근방법 | 저장성질 | 저장방식 |
SRAM | 캐시 메모리 | CPU 내부 | 임의 접근 | 휘발성 | 반도체(플립플롭) |
DRAM | 주기억장치 | 시스템 버스(직접 통신) | 임의 접근 | 휘발성 | 반도체(커패시터) |
ROM | 주기억장치 | 시스템 버스(직접 통신) | 임의 접근 | 비휘발성 | 반도체(물리적 회로) |
자기디스크 | 보조기억장치 | 시스템 버스(주기억장치에 로드) | 직접 접근 | 비휘발성 | 자기장 |
SSD | 보조기억장치 | 시스템 버스(주기억장치에 로드) | 임의 접근 | 비휘발성 | 반도체(NAND 플래시) |
광디스크 | 보조기억장치 | 시스템 버스(입출력장치) | 직접 접근 | 비휘발성 | 광학 |
기억장치 계층구조
•
기억장치 계층구조
◦
병목은 주로 CPU 안팎으로 데이터를 전달하는 상황에서 발생
▪
접근속도와 비용은 반비례하므로, 지역성을 활용한 기억장치 계층구조 사용
◦
프로그램이 사용하는 데이터는 일정한 지역성을 가져서, 접근이 반복된다는 특징이 있음
▪
공간적 지역성(Spatial Locality): 물리적으로 인접한 데이터를 자주 사용
ex) 배열
▪
시간적 지역성(Temporal Locality): 한 번 사용한 데이터를 다시 사용
ex) 반복문 코드
◦
상위 계층은 하위 계층의 지역성을 활용하는 캐시 역할
⇒ CPU는 상위 계층의 빠른 속도와 하위 계층의 큰 용량을 모두 사용
◦
하위 계층으로 갈 수록 접근속도가 느려지고, 용량과 비용이 커지는 특성
◦
레지스터
▪
CPU 내부에 위치, 연산에 직접 사용하는 데이터
◦
캐시메모리
▪
CPU 내부에 위치, 주기억장치의 접근속도 증가
◦
주기억장치
▪
CPU 외부에 위치, 실행중인 프로세스의 정보 저장
▪
Note) 프로그램이 주기억장치에 로드되어야 실행중인 프로세스가 됨
◦
보조기억장치
▪
느리지만 비휘발성, 큰 용량 → 주기억장치를 보조 (보조기억장치는 CPU와 직접 통신 X)
▪
Note) 가상메모리 시스템에서 페이지는 보조기억장치에 있다가 주기억장치로 적재됨
주기억장치
•
RAM
◦
DRAM(Dynamic Random Access Memory)
▪
캐퍼시터에 저장: 리프래시가 필요하고 동작이 느리나 집적화에 유리
▪
SDRAM(Synchronus RAM), DDR(Double Data Rate)등 다양한 방식이 있음
▪
주기억장치에 사용
◦
SRAM(Static Random Access Memory)
▪
플립플롭에 저장: 리프래시가 필요 없고 동작이 빠르나 가격이 비싸고 집적화에 한계
▪
캐시메모리에 사용
•
ROM
◦
펌웨어나 BIOS같은 프로그램을 저장하는 데 사용 → 저장된 프로그램을 수정할 필요가 없음
◦
읽기 전용이므로 제어신호가 없음(주소버스, 데이터 버스와만 연결)
◦
종류에 따라 재기록이 가능하기도 함
▪
Masked ROM: 제조 시 물리적으로 데이터 기록, 수정 불가능
▪
PROM: WORM으로, 한 번 기록하면 끝
▪
EEPROM: 전기적으로 내부 데이터를 쓸 수 있음 → 플래시 메모리로 발전
캐시 기억장치
•
CPU와 중앙처리장치의 속도 차이를 극복하기 위해 사용
◦
CPU → MMU 캐시 ( 주기억장치 보조기억장치)
◦
찾으려는 데이터가 있으면 Cache Hit, 없으면 Cache Miss
◦
캐시 미스 발생시 캐시 라인을 교체하고 주기억장치에서 캐시로 데이터 이동. 이후 CPU에 전달
•
캐시 매핑(사상) 정책
◦
직접 매핑(Direct Mapping)
▪
주기억장치의 주소를 캐시 라인에 매핑
ex) [0x01, 0x11]은 1번 라인에, [0x02, 0x12]는 2번 라인에 저장
▪
주소를 인덱스-태그로 분리
▪
인덱스를 캐시 라인의 주소로 사용, 태그 + 데이터를 기록
▪
간단하지만 적중률이 매우 낮음 - 잦은 교체
◦
연관 매핑(Associative Mapping)
▪
주소 전체 + 데이터를 기록
▪
캐시되어있는지 확인하려면 캐시 전체를 검색해야 하므로 회로가 복잡하고 오버헤드가 큼
◦
집합-연관 매핑(Set-Associative Mapping)
▪
직접 매핑과 연관 매핑을 합친 형태
▪
한 라인에 n개의 데이터를 저장(set) = n-way set-associative cache
(직접 매핑은 1-way set-associative cache)
▪
주기억장치의 주소별로 어떤 set에 저장될 지는 결정
▪
하나의 set에서 데이터를 찾을 때에는 연관 매핑처럼 캐시의 태그를 사용
◦
Note) 캐시라인과 주기억장치의 매핑 방법은 분산 데이터베이스의 파티셔닝과 유사
▪
직접 매핑 해시 분할
▪
집합 연관 매핑 목록 분할
•
캐시 교체 정책
◦
FIFO(First-In-First-Out): 오래된 캐시 라인을 교체
◦
LFU(Least Frequently Used)
◦
LRU(Least Recently Used)
•
캐시 쓰기 정책
◦
즉시 쓰기(Write-Through)
▪
캐시와 주기억장치 모두에 기록
▪
데이터의 일관성을 보장할 수 있지만, 쓰기 작업은 캐시 사용의 효과가 없음
◦
나중 쓰기(Write-Back)
▪
캐시에만 변경을 기록, 캐시 교체 시에 주기억장치에 기록
▪
캐시 사용의 효과를 극대화할 수 있지만, 데이터의 불일치가 발생할 수 있음
▪
특히, 멀티 코어 프로세서는 캐시 동기화가 필요
보조 기억장치
•
자기디스크
•
SSD
•
RAID
입출력장치
시스템 버스
•
버스 구분
◦
기능에 따른 구분: 데이터버스, 주소버스, 제어버스
◦
소유에 따른 구분: 전용 버스(기능별 전용 버스), 다중화 버스(하나의 선로를 여러 용도로 사용)
◦
타이밍에 따른 구분: 동기식 버스, 비동기식 버스
•
버스 중재
◦
버스 구조는 하나의 선로에 여러 장치가 연결 → 경합 발생
◦
동시에 버스 요청이 있을 때 정해진 기준에 따라 권한 부여(= 버스 마스터 선택)
◦
버스 중재 방식
▪
중앙집중식 병렬 중재 방식
•
하나의 버스 중재기에 장치가 병렬로 연결
•
장치 수만큼 버스 요청 신호선과 버스 승인선이 필요
▪
중앙집중식 직렬 중재 방식
•
데이지 체인 방식 = 직렬로 연결된 선을 따라 버스 요청/승인 신호 전달
•
장치의 버스 독점 사용 문제
▪
폴링 방식
•
버스 중재기가 주기적으로 장치의 상태를 확인
•
폴링선이 많이 필요
▪
Note) HDLC 프로토콜의 요청 제어와 유사 (폴링, 요청 방식)
◦
버스 중재기 ← 입출력 제어기 또는 중앙처리장치
•
IO버스
◦
CPU와 RAM은 입출력장치에 비하면 고속
◦
버스의 대역폭을 확보하기 위해 입출력 장치가 직접 연결된 버스를 구분
◦
IO버스와 시스템 버스는 입출력 제어기를 통해 연결
입출력장치 제어
•
입출력장치 제어기(Device Controller)
◦
입출력장치 내부 부품
◦
입출력장치의 하드웨어 제어
◦
전송속도 제어(버퍼링), 오류 검출, 타이밍 제어 기능
•
입출력 제어기(I/O Controller)
◦
컴퓨팅시스템의 부품 - DMA 컨트롤러, IO 프로세서 등
◦
CPU의 명령 수행, 버스 중재
입출력 주소지정
•
MMIO(Memory-Mapped I/O)
◦
주기억장치 주소 영역의 일부분을 입출력장치에 할당
◦
주기억장치와 같은 명령어를 사용하여 입출력 작업
•
PMIO(Port-Mapped I/O, Isolated I/O)
◦
별도 주소 영역을 사용
◦
특수 명령어를 사용하여 입출력 작업
입출력 방법
•
CPU 제어
◦
Programmed I/O: CPU가 지속적으로 폴링하며 상태 확인, 입출력 제어
◦
Interrupt-Based I/O
▪
CPU가 입출력 명령어를 보내면 장치에서 수행이 끝난 후 인터럽트 발생
▪
입출력장치 CPU로 데이터 전송
▪
어느 장치에서 IO 인터럽트가 발생했는지 식별해야 함
•
다수의 인터럽트선
•
소프트웨어 폴
•
별도 처리기 사용
◦
DMA(Direct Memory Access)
▪
인터럽트 기반 IO와 유사하지만, 입출력장치에서 주기억장치에 직접 접근
▪
입출력장치 RAM으로 데이터 전송
▪
DMA 처리기에서 관리
•
제어회로, 주소 레지스터, 데이터 레지스터, 단어 계수 레지스터로 구성
▪
DMA를 사용한 입출력 과정
1.
CPU → DMA: 입출력 명령어 전송
2.
DMA → CPU: Bus Request
3.
CPU → DMA: Bus Grant
4.
IO장치 → RAM (또는 RAM → IO장치): 데이터 전달
5.
DMA → CPU: Interrupt
•
입출력 요청 시 워드 수 전달 → 단어 계수 레지스터를 1씩 감소시키며 데이터 전달
▪
Note) DMA 처리기가 버스를 사용중이면 CPU의 버스 사용은 지연됨(사이클 스틸링)
◦
Channel I/O
▪
별도의 입출력 프로세서(IOP) 사용
▪
메인프레임 등 대형 시스템에서 사용하는 방식
▪
DMA와 유사, IOP RAM
▪
여러 개의 입출력 장치를 동시에 관리, 채널을 시분할 공유(멀티플렉싱)