Post

CPU

컴퓨터 사이언스 부트캠프 with 파이썬을 보고 정리한 내용입니다.

트랜지스터와 논리 게이트

전압, 전류, 저항

  • 전압 강하: 높은 전압을 가지고 있다가 저항이라는 좁은 통로를 지나면서 전압이 낮아짐
    • 5V는 높은 전압, 0V는 낮은 전압, 톱니 모양은 저항을 뜻함
    • 저항을 지나면서 전압 강하가 일어남
    • 전압이 컴퓨터가 0과 1을 인식하는 방법! 5V나 5V에 가까운 높은 전압은 1 또는 true로 인식하고, 0V 나 0V에 가까운 낮은 전압은 0 또는 false로 인식
  • 그러면 0과 1을 어떻게 바꿀까?
    • 트랜지스터가 스위치 역할을 해서 바꿈
    • 베이스에 전압을 공급하면 콜렉터에서 이미터로(+에서 -로) 전류가 흐르고, 스위치가 켜짐

논리 게이트

  • 논리게이트: 컴퓨터에 들어가는 수많은 디지털 회로를 구성하는 가장 기본적인 요소로, 불(bool) 함수를 구현하기 위한 회로
    • AND, OR, XOR, NOT 등
  • 예를 들어 AND 게이트는,
    • 다음과 같이 입력 A와 B 모두가 전류가 흘러야만 출력 Y가 5V, 즉 참이 됨
  • 그 외의 게이트들 = 조합 논리 회로(Combinational Logic Circuit) = 현재 입력에 의해서만 출력이 결정되는 논리 회로

조합 논리 회로와 가산기

CPU의 구성

  • 4비트 CPU(Central Processing Unit; 중앙 처리 장치)의 구성
    • CU(Control Unit; 제어 장치): 우리가 작성한 코드는 컴퓨터가 이해할 수 있는 언어인 기계어 (0 또는 1)로 번역되어 메모리에 저장되는데, 이후 CPU가 이를 한줄씩 읽어들여 실행함. 이때 해석과 실행에 있어 CPU의 각 파트에 지시를 내리는 역할
    • ALU(Arithmetic Logic Unit; 산술 논리 연산 장치): 덧셈, 뺄셈 같은 산술 연산과 AND, OR 같은 논리 연산을 하는 곳
    • AX, BX, IR, PC는 모두 레지스터 (CPU 안에 내장된 메모리)
  • 가산기는 ALU 내부에 존재하고 레지스터 AX와 BX 값을 입력받음 (4비트 CPU이므로 AX와 BX 값도 4비트로 입력) → 연산 후 다시 AX로 출력됨
    • AX에서 A는 Accumulator, 값을 축적해 나가는 레지스터

가산기

  • 전가산기(Full-Adder)
    • 반가산기(half-adder)는 단순히 비트 두개만 더함
    • 캐리(carry)까지 연산에 포함하는 것을 전가산기라고 하며, 반가산기 2개와 OR 게이트 한개로 이루어져 있음
      • AX와 BX에 2진수 1이 들어와 2진수 덧셈을 하려고 함 (결과물: 10)
      • CI는 Carry In, CO는 Carry Out (Carry = 받아올림 수)
      • 캐리를 왜 쓰냐? 출력 회로가 두개라면 1과 0을 출력하면 되지만 출력회로가 하나밖에 없음
      • 그래서 출력 회로에서는 0을 출력하고, Carry Out 1을 통해 10 이라는 걸 표시함
      • 이걸 4비트로 보면? Adder1에서 내보낸 CO가 Adder2에서 CI로 받는 걸 볼 수 있음
        • 예시 0100(AX) + 0110(BX)
          • Adder 3에서만 carry 발생

순차 논리 회로와 레지스터

  • 순차 논리 회로(Sequential Logic Circuit)는 현재의 출력이 현재의 입력에만 영향 받는 게 아니라 현재의 입력과 과거의 출력에 따라 정해지는 논리 회로
  • 가장 간단한 예시: \(\bar{SR}\) 플립플롭(Flip-flop)
  • NAND는 AND의 반전임
    • S가 0, R이 1일 때 Q가 1 / S가 1, R이 0일 때 Q가 0
    • S와 R이 둘 다 1일 때는 2가지 경우가 있음
      • 이전 Q값을 보관(유지)함

클록

  • 진자가 주기 운동을 할 때 1초 동안 왕복한 횟수를 주파수라고 하고 이를 헤르츠(Hz)라고 부름
    • 1초 동안 2번 왕복했다 = 2Hz = 1번 왕복하는 데 0.5초가 걸린다.
  • 작업관리자에서 CPU를 누르면 속도가 GHz = 0.74 x 10^9 Hz라고 나옴
    • 이를 클록 속도(clock rate)라고 하고, CPU 혹은 프로세서 속도의 지표로 1초에 클록이 몇 번 발생했는가를 의미함
    • 컴퓨터 내부에 클록 발생기가 있어서 일정한 시간에 맞춰 펄스(신호)를 생성함
    • 상승 에지(빨간 동그라미)에 맞춰 인스트럭션(=코드가 번역된 기계어 명령어)을 실행함
    • 클록 주파수가 높을수록 1초당 상승 에지 수가 높아지고 그만큼 실행되는 인스트럭션 수도 늘어남 → 즉 CPU의 주파수가 높을수록 연산 속도가 빠른 성능 좋은 컴퓨터
    • 성능 지표로 CPI(Clock cycles Per Instruction; 인스트럭션 당 클록 수)를 사용하기도 함
  • 클록 동기화
    • ALU의 가산기나 레지스터는 어떻게 클록에 동기화할까?
      • D 플립플롭 (D: Data / Delay)
        • 클록이 0이면 입력이 무엇이든 출력 Q는 변하지 않음
        • 클록이 1일 때만 Q는 입력과 같은 값을 전달함
    • 레지스터는 플립플롭의 묶음으로, 클록에 맞춰 결과값을 저장함으로써 결국 클록에 동기화된 것

시스템 버스

각 레지스터의 의미

  • IR (Instruction Register): 변환된 명령어는 프로그램 실행 시 메인 메모리에 올려지고 하나씩 실행되는데 이때 메모리에 있는 명령어를 CPU로 가져와 저장해두는 곳
  • PC(Program Counter): 현재 실행 중인 명령어 다음에 실행될 명령어의 메모리 주소를 담고 있음
  • AX, BX : 범용 레지스터로 메모리에서 읽어들인 데이터를 저장했다가 ALU가 연산할 때 피연산자로 전달하거나 연산 결과 값을 저장함

시스템 버스의 구성과 특징

  • 시스템 버스는 CPU와 메모리에 국한된 이야기는 아니고 CPU, I/O, 주변 장치 모두 시스템 버스를 통해 데이터를 주고받음
  • CPU와 메모리로 설명하면
    • 데이터 버스: 제어 버스의 신호에 따라 데이터를 CPU에서 메모리로 전송하거나 반대로 메모리에서 CPU로 전송함, 그러므로 데이터 버스는 양방향이어야 함
    • 제어 버스: 데이터를 레지스터로 읽어올지 아니면 메모리에 쓸지 CPU가 메모리에 전달함
    • 주소 버스: 메모리에서 레지스터로 혹은 레지스터에서 메모리로 데이터를 전송할 때 필요한 메모리 주소를 전달함, CPU가 메모리에 알려 주는 형식이므로 단방향

인스트럭션 세트

  • 인스트럭션 세트란 CPU가 인식하여 실행할 수 있는 기계어(바이너리 형태)
    • 어셈블리어: 기계어를 사람이 읽을 수 있도록 일대일로 대응한 문자 형태의 명령어
  • 인스트럭션 세트는 CPU마다 달라서 새로운 CPU를 도입했다면 그 CPU에 적합한 인스트럭션 세트로 다시 프로그래밍 해야 함
    • 이러한 불편함을 없애고자 C 언어를 비롯한 하이레벨 언어가 탄생한 것
    • 컴파일 언어는 작성한 코드는 그대로 두고 작동하는 컴퓨터에 따라 컴파일만 다시 하면 됨
  • 8비트(1바이트) 명령어를 설계해보자.
    • 앞에서 3비트는 명령어 종류를 의미함 → 3비트이므로 8개의 명령어를 표현할 수 있다.
      • ADD, SUB, MUL, DIV, LOAD(직접/간접주소), STORE(직접/간접주소)
    • 덧셈과 뺄셈 명령어
      • 명령어 종류 뒤 2비트가 첫번째 레지스터, 다음 2비트가 2번째 레지스터를 가리킴
        • 범용 레지스터가 AX, BX, CX, DX 4개로 2비트면 모두 표현 가능
      • ADD AX, CX : AX와 CX를 더해 그 값을 AX에 저장하라.
    • 곱셈과 나눗셈 명령어
      • 피연산자가 하나임
      • MUL CX : AX에 이미 저장된 값에 피연산자 CX 값을 곱한다음 AX에 저장하라.
      • DIV BX : AX 값을 BX로 나눈다음 몫을 AX에 저장하고 나머지를 DX에 저장하라.
    • 메모리 접근 명령어
      • 직접 주소 방식
        • 가운데 2비트는 범용 레지스터 4개 중에서 메모리를 저장하려는 위치, 나머지 3비트는 데이터가 있는 메모리 주소
        • 이때 3비트는 주소를 여덟 개만 가리킬 수 있는데, 8비트 컴퓨터는 주소를 256개 가질 수 있으므로 비효율적임
      • 간접 주소 방식
        • [] 안에 있는 주소는 읽어들일 메모리의 주소가 아니라 데이터의 메모리 주소 값을 저장하는 공간의 주소
This post is licensed under CC BY 4.0 by the author.