본문 바로가기
CS(Computer Science)

[CS] 컴퓨터 구조

by 개발지망생 2023. 2. 8.

🖥 컴퓨터 시스템 구성

하드웨어(Hardware)와 소프트웨어(Software)로 구성.

 

소프트웨어(Software)

운영체제와 응용 프로그램 같은 우리가 컴퓨터를 틀어서 보는 Window 같은 친구들이 소프트웨어에 속한다.

 

하드웨어(Hardware)

모니터, 컴퓨터 기억장치, 그래픽카드, CPU 같은 물리적 장치들을 뜻한다.

 

👨‍🦳 폰노이만 구조

폰노이만

순서도를 최초로 사용했으며, 게임이론을 최초로 제안한 와중에 현 컴퓨터 구조를 만든 슈퍼 천재.

CPU, 메모리, 프로그램으로 구성된 현 컴퓨터 구조를 제안.

 

폰노이만 구조 이전 :

다른 작업을 하려고 할때 마다 스위치 설치, 전선 재배치하여 데이터 전송, 신호 처리를 해줘야 했다.

 

폰노이만 구조 이후 :

소프트웨어만 교체하면 The End~!


💻 컴퓨터 주요 구성 요소 3가지

CPU(중앙처리장치)

  • 연산
    • 산술 연산 - 계산 (ex. 사칙연산)
    • 논리 연산 - if문
  • 제어 : CPU 밖의 네트워크나 메모리, 저장매체 같은 걸 제어하는 역할도 한다.

 

Memory (코드와 데이터를 저장하는 장치)

프로그램과 프로그램 수행에 필요한 데이터를 저장한다

메모리는

  • 내부 기억장치 (주기억장치) - 속도 빠르나 컴퓨터 꺼지면 데이터 날아간다
    • CPU 안에 레지스터, 캐쉬
    • DRAM 등 메모리 (램, DDR4)
  • 외부 기억장치 (보조기억장치) - 컴퓨터 꺼져도 데이터 보존하나 주기억 장치보단 속도가 느리다
    • SSD, HDD

등을 포함한다

 

IO Device

input output Device의 준말이며,

말 그대로 입력장치와 출력 장치를 뜻한다.

종류는

  • 입력장치
    • 마우스
    • 키보드
    • 터치패드
  • 출력장치
    • 모니터
    • 프린터
    • 스피커

등 이 있다.

 

System Bus

위에 설명한 중요 핵심 3가지(CPU, Memory, IO Device)를 연결해 주는 중요한 장치다.

메인 보드 칩셋에서 지원하며, 개별적인 IO Devices들을 연결해 주고 데이터를 송수신해준다.

 

💻 비트로 문자 숫자 표현 이해

비트

데이터를 나타내는 최소 단위.

모든 데이터는 0과 1의 조합으로 구성되는데, 이 0 또는 1이 하나의 비트가 된다.

 

문자

비트의 문자를 나타내는 방식은 점자와 유사하다.점자를 살펴보면

예시로 보는 점자표

단, 6개의 칸으로 문자를 표현할 수 있는 게 보인다. 이걸 비트에 대입을 하여 점이 없을 때는 0, 점이 있을 때를 1로 간주한다면 6bit만으로 알파벳을 구현할 수 있다는 결론이 나온다.

 

숫자

기억이 가물가물할 정도로 먼 옛날 2진법이라는 걸 배웠다. 2진법은 150 같은 일반 숫자를 가차 없이 분해하여 0, 1로 표현해버리는 무자비한 방법인데,

2진법 예시

위 예시처럼 2진법으로 바꾸고 보니 더욱더 우리의 멋진 bit와 유사해 보인다.

만약 150을 2진법으로 변환하면 10010111로 변환되는데 그럼 총 8자리 숫자이니 8비트로 150을 표현할 수 있다.

 

💻 AND, OR 게이트 정리

우리는 앞에서 컴퓨터가 좋아죽어 하는 숫자 0, 1 단 두 개의 숫자만을 이용하여 알파벳을 표현해 봤으며, 150이라는 숫자를 2진법으로 표현해 보았다. 이제 논리연산을 해볼 차례다.

 

✅ 숫자로 보는 AND 게이트, OR 게이트

AND 게이트는 둘 다 1이 되어야 1이 되는 구조이며,

OR 게이트는 둘 중 하나만 1이어도 1이 되는 구조다.

숫자로 보는 AND, OR 게이트 예시 이미지

✅ 그림으로 보는 AND 게이트, OR 게이트

위 표를 그림으로 나타내면 이런 형태이다.

AND 게이트는 스위치가 두개 다 ON이 되어야 전구에 빛이 나는 형태이며,

OR 게이트는 하나의 스위치만 ON이 되면 전구에 불이 들어오는 구조이다.

그림으로 보는 AND, OR 게이트 예시 이미지

💡 외부에 스위치를 만들 경우 자기장을 이용해 만들 수 있다.

 

자바스크립트로 맛보는 AND 게이트, OR 게이트

위의 표와 그림을 자바스크립트에 대입하면 이런 형태이다.

// OR Gate
console.log(0 || 0) /* 0 */
console.log(0 || 1) /* 1 */
console.log(1 || 0) /* 1 */
console.log(1 || 1) /* 1 */


// AND Gate
console.log(0 && 0) /* 0 */
console.log(0 && 1) /* 0 */
console.log(1 && 0) /* 0 */
console.log(1 && 1) /* 1 */

 

프로그래밍 언어에서는 Boolean이란 참(true)과 거짓(false)을 나타내는 좋은 타입이 있다. if문과 떼려야 뗄 수 없는 논리 연산자에 굉장히 적합한 친구다. 

// 타입까지 검사 할게 아니기 때문에 비교연산자는 == 으로 한다
console.log(true == 1) // true
console.log(false == 0) // true

 

그래서 위와 같이 0과 1을 true, false에 각각 비교했고 소녀 같은 자바스크립트는 수줍게 둘 다 true 라 얘기해 주셨다.

 

이 결과를 대입해 보면,

// OR Gate
console.log(0 || 0); /* 0 */   /* => */   console.log(false || false); /* false */
console.log(0 || 1); /* 1 */   /* => */   console.log(false || true); /* true */
console.log(1 || 0); /* 1 */   /* => */   console.log(true || false); /* true */
console.log(1 || 1); /* 1 */   /* => */   console.log(true || true); /* true */


// AND Gate
console.log(0 && 0); /* 0 */   /* => */   console.log(false && false); /* false */
console.log(0 && 1); /* 0 */   /* => */   console.log(false && true); /* false */
console.log(1 && 0); /* 0 */   /* => */   console.log(true && false); /* false */
console.log(1 && 1); /* 1 */   /* => */   console.log(true && true); /* true */

이렇게 표현할 수 있지 않을까? (틀린 부분 있으면 꼭 피드백 주시면 감사합니다!)

 

NAND 게이트, NOR 게이트

지금까지 알아본 결과에서 NOT을 붙여 반대의 결과를 뱉어내는 게이트다. (0이었던 결과는 1, 1이었던 결과는 0)

 

 

💻 반가산기 전가산기 동작 이해

✅ 2진수의 덧셈

2진수에서 1 + 1 은 다음 자릿수에 1을 더해 10이 된다. 하지만 컴퓨터 구조상 0, 1만 표현되므로 0 이 표현된다.

💡 1+1=2인데 2진수에서 2는 10으로 표현되기 때문에  1+1=10입니다

carry

carry-bit라고도 하며,

1 + 1을 하여 자릿수가 넘어오는 경우에만 1로 표현되고 나머지는 0으로 표현된다. (carry의 관점)

 

✅ 덧셈에 필요한 논리게이트

SUM 0 1
0 0 1
1 1 0

덧셈에 필요한 논리게이트를 테이블화 하면 위처럼 표기할 수 있다. 보시다시피, 지금까지 배운 AND 게이트와 OR 게이트로는 만들 수 없다.

하지만, 기존의 논리게이트를 응용해서 OR게이트 NAND게이트의 결과에 AND게이트를 넣어서 구현할 수 있다.

이렇게 만들어진 덧셈에 필요한 논리게이트의 이름을 XOR게이트(가산기)라 한다.

 

carry-bit는 XOR게이트보다 훨씬 쉽다. 기존 논리게이트를 응용할 필요 없이 AND게이트를 쓰면 된다.

이러한 회로를 보통 반가산기(half adder)라고 한다.

 

✅ 반가산기, 전가산기

  • 반가산기(half adder) : 두 bit를 덧셈하는 가산기를 의미한다.
  • 전가산기(full adder) : 두 bit 외, carry까지 계산할 수 있는 가산기를 의미한다.

그림으로 표현한 전가산기 로직

전가산기 로직 설명 이미지

 

💻 16비트 가산기와 클럭 간략 정리

✅ 전가산기를 연결한다면?

위에서 정리한 전가산기(full adder) 하나당 1bit 단위의 덧셈이 가능하다.

전가산기들끼리 연결해서 사용한다면,

  • 8비트 전가산기 : 256자리(2의 8승)까지 계산이 가능하다
  • 16비트 전가산기 : 65536(2의 16승)까지 계산이 가능하다

로 정리 되며 우리가 흔히 접하는 윈도우 32비트와 64비트도 같은 맥락이다.

 

✅ 클럭 관련 간략 정리

 

Osillator란?

NOT게이트를 통해 계속 0,1을 반복하는 주기적인 사이클을 만들어 주며, 클럭을 만들 수 있다.

 

클럭

최근 CPU 사양을 보면 2.5 GHz 라 적혀있는걸 보게 된다. => 1초에 2.5GHz 만큼 클럭이 돈다고 이해하면 된다.

 

오버클럭?

평소 2.5 GHz라면 4 GHz로 순간 뻥튀기 하는 것이나 그만큼 부하가 있기 때문에 식혀주기 위해 쿨러 같은 걸 장착해야 한다.

💡 단위 : 1 GHz = 1,000 MHz = 1,000,000,000 HZ 

 


💡 컴퓨터 구조의 KEY CONCEPT
0과 1로 데이터를 표현할 수 있다 → (0과 1로) 논리연산을 표현할 수 있다 → (논리연산으로) 복잡한 회로구성을 할 수 있다 → (복잡한 회로구성으로) 산술연산을 할 수 있다 → (일련의 앞의 일들을 가지고) 컴퓨터로 구성할 수 있다 → (컴퓨터를 가지고) 프로그래밍 코드를 넣어서 전에 있던걸 전부 동작하게끔 만들 수 있다.

댓글