컴퓨터 과학/[zerobase] 컴퓨터 공학

Chapter.01 컴퓨터 구조

계란💕 2022. 5. 20. 14:03

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 효율성을 높인다.

 

 출처: https://zero-base.co.kr/