컴퓨터 시스템
- 하드웨어, 소프트웨어로 구성
- 소프트웨어: 운영체제, 응용 프로그램
- 주요 하드웨어: CPU(중앙처리장치), Memory, Storage, Network
폰 노이만 구조(현 컴퓨터 구조)
- CPU, 메모리, 프로그램으로 구성
- Memory에 프로그램, 데이터 저장
- 하나씩 꺼내서 CPU:Arithmetic Logic Unit(내부의 Accumulator에 Input 후 결괏값 Output)으로 연산
- 다른 작업을 할 때 소프트웨어만 교체하면 됨
컴퓨터 주요 구성 요소(3가지)
CPU
- 연산
- 산술 연산
- 논리 연산
- 제어
- IO Device(입출력 장치), Memory, ALU 동작 제어
Memory(코드, 데이터 저장)
- 프로그램, 프로그램 수행에 필요한 데이터 저장
- 내부 기억장치(주기억장치)
- CPU 안에 레지스터, 캐시 메모리
- DRAM 등(램, RAM, DDR4)
- 외부 기억장치(보조기억장치
- SSD, HDD
IO Devices(입출력 장치)
- 입력 장치: 마우스, 키보드, 터치패드 등
- 출력 장치: 모니터, 프린터, 스피커 등
Bus(버스)
- CPU, Memory, IO Devices를 연결하고 데이터를 송수신하는 장치
의사소통
- 2진법의 0과 1(비트)을 통해 문자 또는 숫자를 표현하여 의사소통
- 전원: 전기를 켜고(1) 끔(0)으로써 작동
논리 연산
AND Gate(직렬 회로)
- A: 0, B: 0 —> output: 0
- A: 0, B: 1 —> output: 0
- A: 1, B: 0 —> output: 0
- A: 1, B: 1 —> output: 1
OR Gate(병렬 회로)
- A: 0, B: 0 —> output: 0
- A: 0, B: 1 —> output: 1
- A: 1, B: 0 —> output: 1
- A: 1, B: 1 —> output: 1
NOT Gate
- input: 0 —> output: 1
- input: 1 —> output: 0
NAND Gate(AND의 결과를 마지막에 반대로 통과)
- A: 0, B: 0 —> output: 1
- A: 0, B: 1 —> output: 1
- A: 1, B: 0 —> output: 1
- A: 1, B: 1 —> output: 0
NOR Gate(OR의 결과를 마지막에 반대로 통과)
- A: 0, B: 0 —> output: 1
- A: 0, B: 1 —> output: 0
- A: 1, B: 0 —> output: 0
- A: 1, B: 1 —> output: 0
부울 대수식
- 논리연산을 식으로 표현
이진수 덧셈(가산기)
- (이진수) 논리연산을 통해 계산기를 만들 수 있음
- sum, carry, OR, NAND, XOR을 조합해 원하는 계산을 할 수 있음
sum
- 합을 계산
carry
- 상위 자릿수 계산
OR
- 하나가 1이면 1
NAND
- 둘 다 1이면 0
XOR
- input이 서로 다를 때만 1
반가산기(half adder)
- 두 bit를 덧셈하여 carry 계산
전가산기(full adder)
- 두 bit와 carry까지 같이 계산
8비트 전가산기
- Carry 8개를 조합
- 2^8까지 계산 가능
16비트 전가산기
- Carry 16개를 조합
- 2^16 = 65536까지 계산 가능
윈도우
- 16비트와 32비트
Oscillator
- 자기장을 이용해 NOT Gate의 두 값을 지속적으로 반복하는 회로
클럭(Oscillator를 통해 생성)
- CPU: 2.5GHz —> 1초에 1,000,000,000Hz의 명령을 처리
오버클럭
- Oscillator의 주기를 높여서 처리속도를 향상시키는 것
플립플롭
- NOR Gate
- 데이터를 저장(이전에 전기를 켰다는 사실을 기억)하는 논리 회로
- 첫 번째 스위치 켜면 불이 켜지고, 꺼도 켜진 채로 지속
- 두 번째 스위치 끄면 불이 꺼지고, 켜도 꺼진 채로 지속
Hold That Bit
- 조합 논리회로
1 bit latch
- 1 bit를 일시적으로 저장할 수 있는 메모리
- Write이 1일 때 1 bit를 저장
8 bit latch
- 8 bit를 일시적으로 저장할 수 있는 메모리
- Write이 1일 때 8 bit Data Inputs를 8 bit Data Outputs에 저장, 0이면 그대로 유지
- 3-to-8 decoder와 8-to-1 selector를 조합해 구성
8-to-1 selector
- 8 bit 데이터에서 특정 bit값만 출력
- 세 자리의 이진수를 조합하여 8개의 Inputs를 통해 특정 주소를 선택, 해당 Data를 출력
3-to-8 decoder
- 8 bit 중 특정데이터 입력
RAM(Random Access Memory)
- 온전한 8 bit latch(3-to-8 decoder와 8-to-1 selector로 구성)
- 3개의 주소(Address), Write, Data in(1개의 Data bit를 입력)의 입력과 3-to-8 decoder, 8-to-1 selector를 조합해 구성
기능
- Memory: 데이터 저장
- Read/Write: 특정 공간의 데이터 읽기, 저장
- Random Access: 순차 검색할 필요 없이 주소(Address)를 통해 특정 저장공간을 바로 찾아갈 수 있음
8 X 2 RAM array
- 8 X 1 RAM 두 개를 조합
- Data In은 두 개에 각각 입력
- Address와 Write는 두 개에 동일하게 입력
16 X 1 RAM array
- 8 X 2 RAM 위에 1-to-2 Decoder 추가(주소 하나 더 필요) —> Data In
- 주소 = 2^4 = 16개
- 2-to-1 Selector(아웃풋 둘 중 하나 선택) —> Data Out
m*n RAM array
- 많은 데이터를 저장할 수 있는 RAM array
- 8 X 1 RAM 여러 개 연결, 여러 개의 Select로 Decoder/Selector 구성
Accumulator
- Clear 입력 추가
- Claer 1 —> Q output 0
- Flip-flop 값 삭제
- 입력에 관계없이 Claer를 입력하면 output값 삭제
- 8-Bit Adder, 8-Bit Latch로 구성
- 8-Bit Latch
- Clear 스위치가 Clear 입력에 들어 감
- ADD 스위치가 Clock 입력에 들어 감
- 8-bit Adder에서 덧셈 계산, ADD 스위치가 눌러지면 8-bit Latch에 저장(Accumulating)
레지스터
- CPU가 요청 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치
메모리 계층
- CPU
- 레지스터(1 cycle) - L1 캐시(2 cycle) - L2 캐시(10 cycle) - L3 캐시(40 cycle)
- 메모리(RAM)(200 cycle)
- SSD(10 us)
- HDD(10 ms)
Assembly
- CPU와 유사한 로직을 사용하는 언어
Program Counter(PC)
- 16-Bit Counter: 1씩 증가하는 조합 논리회로
여러 숫자를 더하는 방법
- 각 숫자를 0000h부터 순차적으로 써 넣음
- Control Panel의 Takeover 스위치를 1로 만들고, 각 숫자를 각 주소에 써 넣음
- Takeover 스위치를 0으로 만들고, Control Panel의 RAM 제어 중지
- PC의 Clear 스위치가 0이 되면 PC가 0000h(h: Hex number, 16진수)부터 RAM에서 데이터 가져 옴
- Adder가 값 더함
- 클럭(Oscillator)이 0 또는 1로 변할 때마다 PC 값 증가
Automation
- 000h 주소부터 저장돼 있음
- 수 3개 덧셈, 2개 덧셈, 3개 덧셈하는 것을 가정
Programming
- 메모리에 명령(Load, Add, Store 등)을 추가하여 CPU가 이미 만들어진 회로를 통해 그에 맞춰 동작하도록 함
- Load: 2-to1 Selector로 Data를 Add하지 않고, 바로 8-bit Latch에 삽입
- Store: 8-bit Latch의 Output을 바로 64Kx8 RAM에 저장(Write 스위치 —> 1)
Instruction Set, Code
- Software: Code + Data
- Software Engineer: Code 작성
- Machine Language: CPU가 Instruction code를 만들어 놓고 제공
- Compile: 프로그래밍 언어로 작성된 프로그램을 CPU에게 제공받는 Instruction code 기반으로 변환
- 저급 언어: Assembler —> 기계어
- 고급 언어: Compiler, Interpreter —> 기계어
- Load
- OP(Operation) code: 10h
- Assembly Language: LOD
- Store
- OP(Operation) code: 11h
- Assembly Language: STO
- Add
- op(Operation) code: 20h
- Assembly Language: ADD
- Subtract
- OP(Operation) code: 21h
- Assembly Language: SUB
CPU
구조
- 레지스터: CPU 내부의 저장공간 —> 빠른 실행
- PC(Program Counter): 다음 실행할 명령어 주소 가리킴
- IR(Instruction Register): 가장 최근 인출한 명령어 보관
- 누산기(ACC, Accumulator): 데이터 일시적 보관
- MAR(Memory Address Register): CPU가 메모리 참조 위해 보관하는 데이터 주소 가짐
- MBR(Memory Buffer Register): CPU가 메모리로부터 읽거나 저장할 데이터 보관
실행 구조(순서)
- Instruction Fetch: 실행할 명령어를 메모리에서 읽어 가져 옴
- PC가 가리키는 주소 MAR로 보냄
- MAR에 적힌 주소를 메모리에서 읽어서 MBR로 전송
- MBR에 있는 명령어 IR에 저장
- 다음 명령어를 가리키도록 PC 주소값 증가
- Instruction Decode: 인출 명령어 포함된 데이터 가져온 후 명령어 해독
- Instruction Execution: 명령어 실행
- MBR 데이터와 ACC(Accumulator)의 데이터로 연산 후 ACC에 저장
- Write Back: 실행 결과 저장
구성
- 하나의 명령: opcode + argument(operand) 구조
- 3E: 사전 약속된 load 명령 —> operand: 바로 이어지는 데이터
- opperand: 데이터 주소
- 데이터를 opperand 주소로부터 가져 와서 레지스터에 저장
파이프라인
- CPU 성능 높이는 기법
- 하나의 작업에 필요한 일을 세부적으로 나눠 동시에 여러 세부작업 실행
- 하나의 실행을 취소하면 진행되고 있던 다른 모든 명령들 전체 롤백해야 함 —> CPU 사용 낭비
Fetch Stage (Instruction Fetch/Decode)
- 명령어 인출(IF: Instruction Fetch)
- 명령어 해독(ID: Instruction Decode): 인출된 명령어 해석
- 오퍼랜드 인출(OF: Operand Fetch): 메모리에서 데이터 인출
Execution Stage (Instruction Excecution)
- 명령어 실행(EX: EXecute)
- 실행 결과 저장(SR: STore)
실행 속도
- 하나의 명령 실행에 걸리는 시간: 5 cycle
- 1HZ = 1 cycle / sec
Intel(주로 데스크톱과 노트북)
CISC(Complex Instruction Set Computer)
- 한 명령어 실행으로 가능한 한 많은 작업 수행(복합 명령어)
- CPU 로직 회로 복잡도 증가(∵복합 명령어 수행)
- 한 명령어 실행 시간 증가
- 명령어 포맷이나 길에 관련 규칙 없음
- 하나 이상의 cycle로 명령어(세부 작업) 실행
- 전체 명령 소요시간 예측 어려움
ARM(스마트폰, 임베디드, IoT(사물 인터넷) 기기 등)
RISC(Reduce Instruction Set Computer)
- 간단한 명령어 조합해서 실행
- 명렁어 포맷, 길이 고정
- 한 cycle로 명령어(세부 작업) 실행
- 전체 명령 시간 예측 가능
메모리
- Register: CPU 안에서 데이터 보관
- SRAM: L1, L2, L3 캐시
- 가장 많이 사용하는 메모리의 데이터 저장
- DRAM: 메모리
- SSD/HDD: 전원이 꺼져도 데이터 보전
IO Devices
- Bus를 통해 IO Device에 데이터 송수신