1.1. 컴퓨터 3대 구성요소
1) 컴퓨터 공학 5대 과목: 컴퓨터 구조, 운영 체제, 시스템 프로그래밍과 서버 기술, 네트워트, 데이터 베이스 + (데이터 구조, 알고리즘, 프로그래밍 언어) - 괄호 안의 과목은 코딩테스트로 자연스럽게 익히게 된다.
2) 컴퓨터 시스템: 하드웨어(Hardware) + 소프트웨어(Software)
- 주요 S/W: 운영체제와 응용 프로그램
- 주요 H/W: CPU(중앙처리장치), Memory, Storage, Network, .... - 4대 H/W
3) 폰 노이만 구조 (현 컴퓨터 구조)
- 폰 노이만(컴퓨터의 아버지)가 제안한 구조
- 대부분의 컴퓨터는 폰 노이만 구조를 따른다.
- 폰 노이만 구조는 CPU, 메모리, 프로그램으로 구성된다.
- Memory에 프로그램고 데이터가 저장된다.
- 하나씩 꺼내서 CPU: Arithmetic Logic Unit으로 연산한다.
- 과거에는 어떤 프로그램을 만들기위해 하드웨어로 하나씩 로직을 만들어야만 했다.
-> 폰 노이만 구조 이전: 컴퓨터는 다른 작업을 위해 스위치를 설지하고 전선을 재배치하여 데이터 전송, 신호 처리를 했다.
-> 폰 노이만 구조 이후: 소프트웨어만 교체하면된다.
4) 컴퓨터의 주요 구성 요소
(1) CPU (중앙처리장치, Central Processor Unit)
- 연산: ALU(Arithmetic Logic Unit)
-> 산술 연산: Arithmetic Operation
-> 논리 연산: Logic Operation
- 제어: Control Device (IO Devices -입출력 장치, Memory, ALU 동작 제어)
(2) Memory (코드와 데이터를 저장)
- 프로그램과 프로그램 수행에 필요한 데이터를 저장한다.
- 내부 기억장치(주기억장치) - 속도는 빠르나 컴퓨터가 꺼지면 데이터가 휘발된다.
-> CPU 안에 레지스터(resister), 캐시(cache memory)
-> DRAM 등 메모리(램, RAM, DDR4)
- 외부 기억장치(보조기억장치): SSD, HDD - 속도는 느리지만 컴퓨터가 꺼져도 내용이 저장된다.
(3) IO Devices -입출력 장치
(4) Bus(위의 세 가지를 연결해준다.)
- CPU, Memory, IODevices 세가지를 연결한다.
- 개별적인 IO Devices를 연결시키고 데이터를 송수신한다.
1.2. 비트로 문자와 숫자 표현
- 전기를 Off(0) On(1) => 이것만으로 컴퓨터가 동작한다.
- 비트(bit): 데이터를 나타내는 최소 단위, 0 또는 1
1.3 AND, OR 게이트와 전구 이해
- AND: (0, 0 -> 0), (0, 1 -> 0), (1, 0 -> 0), (1, 1 -> 1)
- OR: (0, 0 -> 0), (0, 1 -> 1), (1, 0 -> 1), (1, 1 -> 1)
1.4 NAND, NOR게이트 이해
1) NAND: AND + NOT (AND 결과값의 반대)
2) NOR: OR + NOT (OR 결과값의 반대)
- 부울 대수식
-> OR Gate: A + B
-> AND Gate: AB
-> NOR Gate: A + B (AB위에 윗 줄 표시)
-> NAND Gate: AB (AB위에 윗 줄 표시)
1.5 반가산기와 전가산기 동작
1) 이진수의 덧셈 - carry bit
- +sum bit(공식 용어는 아님)는?
-> 0 + 0 = 0, carry는 0
-> 0 + 1 = 1, carry는 0
-> 1 + 0 = 1, carry는 0
-> 1 + 1 = 0, carry는 1
2) OR게이트와 NAND 게이트를 연결하면?
- OR과 NAND를 AND로 연결하면 XOR과 결과가 같다.
A | B | OR Out | NAND Out | 원하는 결과 |
0 | 0 | 0 | 1 | 0 |
0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 1 |
1 | 1 | 1 | 0 | 0 |
3) 반가산기(Half Adder): 두 bit를 덧셈하는 가산기를 의미한다.
- 전가산기(full adder): 두 bit외에 carry까지 계산할 수 있는 가산기를 의미한다. (반가산기 두 개를 연결한다.)
-> 입력: A, B, Carry / 출력: Sum, Carry(자리올림)
A -> -> Carry out B -> full adder Carry in-> -> Sum |
1.6 16비트 가산기와 클럭 동작
1) 전가산기는 여러 자리 계산이 가능하다.
2) Oscillator
Def) Oscillator: 시간 순서대로 0, 1를 반복하는 회로를 말한다. 클럭을 발생시킨다.
- 클럭
- 1GHz = 1000MHz = 1,000,000,000Hz
-> 최근 CPU: 2.5GHz
- 오버클럭: 2.3GHz보다 속도 빠르게 하기 위해 이용한다.
- cycle = interval
- 주기: 한 사이클에 필요한 시간
- frequency(단위: Hz): 주기 / 1 (cycle / sec)
1.7 플립플롭과 메모리 동작
Def) 플립플롭(flip-flop 또는 latch): 데이터를 저장하는 논리 회로
- 플립플롭: NOR게이트를 두 개 붙여서 만든다.
- 1bit의 정보를 보관, 유지할 수 있는 회로이며 순차회로의 기본 요소이다.
- 입력을 출력에 반영하는 시점을 클럭 신호의 순간 엣지에서 반영하는 플립플롭과, 입력에 따라 항상 반영되는 래치로 구분된다.
1) R-S 플립플롭 (Reset-Set flip flop)
- Q는 Q의 반대값 (윗줄 표시)
- S와 R이 1인 상태는 피한다. (Set과 Reset을 동시에 누르는 건 말이 안된다. )
- 가장 간단한 순차회로이다.
Inputs | Outputs | ||
S | R | Q | Q |
1 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 0 | Q | Q |
1 | 1 | Disallowed |
2) Level Triggered flip flop
- Hold That Bit를 추가한다.
- Hold That Bit이 1일 때만 세팅된 값이 회로를 타면서 Q값이 변경된다.
- 0, 1이 반복되므로 => "Level Triggered"
-> "Level Triggered"는 Hold That Bit이 1일 때만 Data값을 저장한다는 의미이다.
Inputs | Outputs | |
Data | Hold That Bit | Q |
0 | 1 | 0 |
1 | 1 | 1 |
X | 0 | Q |
3) Level Triggered D-type flip flop
- R-S플립플롭에서 R,S가 둘다 0이거나 1인 경우를 피하도록 설계한 조합논리회로
- D: Data
- R, S를 하나의 Data로 바꾼다.
- R과 S가 둘다 1인 경우는 피한다. (둘다 0인 경우도 Q에 영향을 주지 않으므로 삭제)
- 기존의 R자리와 S자리 사이에 NOT게이트를 추가해서 두 값이 반대가 되도록
-> 즉, R과 S가 같은 경우를 피할 수 있다.
Inputs | Outputs | |
Data | Hold That Bit | Q |
0 | 1 | 0 |
1 | 1 | 1 |
X | 0 | Q |
1.8 8 x 1 메모리 동작과 구성
1) 1 bit latch: "Level Triggered D-type flip flop"을 1bit의 latch라고 표현한다.
- 1bit를 일시적으로 저장할 수 있는 메모리
- Hold That Bit를 write로 표시한다.
2) 8 bit latch
- latch 8개를 연결한다.
- write가 1이면 8 bit Data Inputs이 8 bit Data Outputs에 저장된다.
- write가 0이면 8 bit Data Outputs값이 유지된다.
3) 8-to-1 Selector
- 8bit 데이터에서 특정 bit 값만 출력하기
- 8개의 1bit latch 중에서 하나의 데이터 출력 신호를 선택할 수 있다.
4) 3-to-8 decoder
- 8개의 출력 중, V스위치로 단 하나의 출력 이외에는 0
- write가 1, V스위치로 특정 출력 선정, Data In값이 특정 latch에 쓰인다.
5) 온전한 8bit latch 회로 (RAM, Random Access Memory)
- 3-to-8 decoder와 8-to-1 Selector로 구성된다.
- 8 x 1 RAM: 8개 비트 중 한 개의 특정 비트를 쓰고 읽을 수 있는 메모리
- 입력: Address, Write, Data In / 출력: Data Out
-> 3Address가 있으면 8개 중 하나의 비트를 선택해서 쓰거나 읽을 수 있다.
- S0, S1, S2가 decoder와 Selector에 동일하게 적용
- Write가 1이면 Address에 Data In값이 쓰인다.
- Data Out은 항상 Address에 해당하는 값을 출력한다.
1.9 64K 메모리 동작과 구성
1) RAM array
- 8 x 2 RAM array: 8 x 1 RAM을 두 개 엮은 구조, 8개의 데이터를 저장하고 읽는데 각 데이터는 2 bits이다.
-> Data In은 각각 8 x 1 RAM에 들어간다.
-> Address와 Write는 두 8 x 1 RAM에 동일하게 입력된다.
- 16 x 1 RAM array: 8 x 2 RAM array에 Select와 1 to 2 decoder / 2 to 1 Selector를 추가
-> Select는 네 번째 Addess역할을 한다.
-> 16개의 데이터를 읽고 저장하는데 각 데이터는 1bit가 된다.
- m x n RAM array
-> 8 x 1 RAM을 여러 개 연결하고 여러 개의 Select로 Decoder/ Selector를 구성하면 많은 데이터를 읽고 저장 가능
2) 1024 kilobytes = 1 megabytes
- 1024 megabytes = 1gigabytes
- kilobits/ megabits => 네트워크에서 많이 사용한다.
3) 64K RAM
- 65,536개의 데이터를 저장하고 쓸 수 있는 메모리
- 65,536(2^16) x 8 bits
- Address: 65,536개, Data In: 1 byte
1.10 Accumulator동작과 구성
1) Accumulator(가산기) : CPU에서 중간 산술 논리 장치 결과가 저장되는 레지스터이다.
- 플립플롭에 clear버튼(data 삭제)을 추가된 구조이다.
- Data값에 상관 없이 clear가 1이면 Q output은 0이 된다.(삭제)
- 플립플롭 값을 삭제한다.
- 8 bit Adder와 8 bit latch로 구성된다.
- Clear 스위치 On => Clear 입력에 들어간다.
- Add 스위치 On=> Clock 입력에 들어간다.
2) Assembly언어: CPU에 가장 가까운 기계어
- load
- add
- store
1.11 디지털 컴퓨터와 프로그래밍
1) Program Counter(PC): CPU 내부에 있는 레지스터 중 하나로 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정한다.( = 명령어 포인터)
- 각 명령 주기에 따라 자동으로 증가하여 메모리에 있는 명령어들이 순차적으로 실행될 수 있도록 한다.
- 16-bit Counter: 1씩 증가하는 조합논리회로
2) Automation
- 일종의 프로그래밍
- 메모리 주소 0000h부터 데이터가 저장되어 있다.
- 세 수를 더하고, 두 수를 더하고 세 수를 더한다고 가정한다.
3) load와 store명령
- Load: 2 to 1 Selector로 Data를 Add하지 않고 바로 8 bit Latch에 넣는다.
- Store: 8 bit latch의 output을 바로 64K x RAM에 저장한다.
4) Digital Computer: 구분된 숫자를 기반으로 동작하는 컴퓨터
- 메모리: 64KB RAM
1.12 레지스터와 프로그래밍
1) Instruction Set과 코드
- Software: code + Data
-> Software Engineer: code를 작성하는 사람
-> Machine Language: CPU는 Instruction code를 만들고 제공한다.
-> 컴파일: 프로그래밍 언어로 작성된 프로그램을 컴파일러를 통해 CPU가 제공하는 Instruction code를 기반으로 변환된다.
2) 레지스터의 종류
- PC(Program Counter): 다음 실행할 명령어 주소를 가리키는 레지스터
- IR(Instruction Register): 가장 최근에 인출한 명령어를 보관 레지스터
- 누산기(ACC, Accumulator): 데이터 일시 보관 레지스터
- MAR(Memory Address Register): CPU가 메모리 참조 위해 보관하는 데이터 주소를 가진 레지스터
- MBR(Memory Buffer Register): CPU가 메모리로부터 읽거나 저장할 데이터 자체를 보관하는 레지스터
1.13 CPU 파이프라인
1) 현 컴퓨터의 CPU 기본 실행 구조
(1) Instruction Fetch: 실행할 명령어를 메모리에서 읽어 CPU로 가져온다.
(2) Instruction Decode: 인출한 명령어에 포함된 데이터를 가져오고 해독
(3) Instruction Execution: 명령어 실행
(4) Write Back: 실행 결과를 저장
2) CPU 성능을 높이는 방법 - 파이프 라인
Def) 파이프 라인: 하나의 작업에 필요한 일을 세부적으로 나눠서 도시에 다른 세부 작업을 실행하는 기법
(1) Fetch stage(Instruction Fetch/ Decode)
(2) Excution Stage(Instruction Excution)
- 1Hz = 1 cycle / sec
1.14 CISC, RISC, CPU이해와 컴퓨터 구조
1) ARM CPU vs Intel CPU
2) CPU 명령어를 정의하는 전략
(1) CISC(Complex Instrucion Set Computer)
- 하나의 명령어 실행으로 가능한 한 많은 작업을 수행한다. (복합 명령어)
- 복합 명령어 수행을 위해 CPU 로직 회로 복잡도 증가
- 명령어의 포맷이나 길이에 규칙이 없다.
- 하나 이상의 사이클로 명령어 (세부 작업) 실행
- 시간 예측이 어렵다.
- 전력 효율이 좋다.
Ex) 대표적인 CISC CPU: Intel CPU, AMD
(2) RISC(Reduced Instrucion Set Computer)
- 간단한 명령어를 조합
- 명령어의 포맷과 길이가 고정
- 하나의 사이클로 명령어(세부 작업) 실행한다.
- 전체 명령 시간 예측 가능
Ex) 대표적인 RISC CPU: ARM, 스마트폰, 임베디드, IoT 기기
3) 메모리
- 비싼 메모리는 CPU 옆에 작게 잡는다.
- 느린 메모리는 먼 곳에 크게 잡는다.
(1) Register: CPU 안에 데이터 보관
(2) SRAM: L1, L2, L3 캐쉬 (캐쉬 = SRAM이라고도 부른다.)
(3) DRAM: 메모리
(4) SSD/HDD(하드디스크): 컴퓨터 꺼도 데이터 저장
4) DMA(Direct Memory Access)
- CPU가 캐시까지는 직접 데이터를 가져오지만(Instruction Fetch) 그 외의 저장매체에 대해서는 DMA가 그 역할을 대신한다. => CPU 효율성을 높인다.
'컴퓨터 과학 > [zerobase] 컴퓨터 공학' 카테고리의 다른 글
Chapter 04. 네트워크(network) (0) | 2022.05.31 |
---|---|
Chapter 03. 시스템 소프트웨어 (0) | 2022.05.25 |
Chapter.02 운영체제(Operation System, OS) (0) | 2022.05.23 |