CS

[컴퓨터과학개론] 컴퓨터 구조

Grace 2023. 12. 3. 22:21

불 대수와 논리 게이트

시스템 버스

중앙처리장치, 기억장치, 입출력장치 간의 물리적 연결 및 데이터 교환의 통로

주소 버스

  • CPU가 기억장치나 입출력장치의 주소 정보를 전송하는 신호선의 집합
  • 버스의 폭이 시스템의 메모리 용량을 결정 → n개의 신호선으로는 2^n개의 주소 지정 가능
  • 단방향 버스

데이터 버스

  • CPU와 기억장치/입출력장치 사이에 데이터 전송을 위한 신호선 집합
  • 버스의 폭이 한 번에 전송할 수 있는 비트의 수를 의미 → 워드
  • 양방향 버스

제어 버스

  • CPU가 각종 장치의 동작을 제어하기 위한 다양한 신호들의 통로
  • 버스의 폭(=제어신호의 수)은 CPU나 시스템의 구성에 따라 달라짐

불 대수

이진 변수의 논리 연산을 다루는 대수

  • 영국의 수학자 George Boole
  • 논리적 문제를 해결하기 위한 수학적 방법 → 논리 대수, 스위칭 대수
  • 논리 게이트: 논리 연산을 하드웨어로 구현한 것

  • 논리 게이트의 완전 집합: 원하는 임의의 회로를 구성할 수 있는 게이트들의 부분 집합
  • 불 대수의 기본 법칙

  • 불 대수와 논리회로: 불 함수 ↔ 논리회로 형태로 표현 가능

논리회로

논리 게이트들로 구성된 회로

조합회로(combination circuit)

  • 출력값이 단순히 현재 입력값의 조합으로만 결정되는 회로
  • 전가산기, 디코드, 인코더, 멀티플렉서, 디멀티플렉서 등 주로 연산을 위해서 사용되는 회로

전가산기

Full Adder: 아랫자리에서 올라온 올림수(carry)를 고려한 가산기

  • 가산기: 두 이진수를 입력받아서 더하는 회로
  • 반가산기(Half Adder): 아랫자리의 올림수를 미고려한 가산기

디코더

  • n비트의 이진 코드를 최대 2^n개의 서로 다른 정보로 변환 → 출력 중에서 오직 한 개만 1이 되고, 나머지는 모두 0이 됨
  • 주소 방식으로 주어진 입력으로부터 각각의 하드웨어 구성 요소를 개별적으로 구동하기 위해 주로 사용
    → 주기억장치에 접근할 때도 디코더의 기본 원리가 그대로 적용

멀티플렉서

  • 여러 개의 입력선 중에서 하나를 선택하여 단일의 출력으로 내보내는 회로(데이터 선택기)
  • 어떤 장치(회로)로부터 들어오는 데이터가 버스를 사용할 것인가를 정하는 경우에 사용

순서회로(sequential circuit)

  • 연산의 각 단계마다 회로의 특정 상태가 저장/참조되는 회로 → 출력값이 입력값과 기억소자에 저장된 현재 상태에 따라 결정
  • 카운터, 레지스터 등

플립플롭

1비트의 이진 정보를 저장할 수 있는 장치

  • 입력신호에 의해서 상태를 바꾸도록 지시할 때까지는 현재의 이진 상태를 유지하는 논리소자
  • 종류(입력의 개수와 상태를 변화시키는 방법에 따라)
    • RS(Reset-Set) 플립플롭
    • T(Toggle) 플립플롭

RS 플립플롭의 구조
RS 플립플롭 실행
T 플립플롭

카운터

클록펄스가 입력될 때마다 미리 정해진 순서에 따라 상태가 변하는 장치

  • 매번 구동 시마다 저장된 이진수가 1씩 증가하는 장치
  • 외부에서의 입력/출력이 없으며 클록펄스를 통해서만 상태가 변함

기억장치

ROM(Read Only Memory)

  • 내용이 항상 고정되어 있어 조합회로로 구성 가능(읽기 전용)
  • 설계자가 저장되는 이진 정보를 결정하고, 필요한 내부 연결 패턴을 기억장치 내에서 형성하여 구현

RAM(Random Access Memory)

  • 상태를 저장하고 변경할 수 있는 순차회로로 구성 가능(읽기/쓰기가 모두 가능)
  • DRAM(Dynamic RAM)
    • 플립플롭이 아닌 축전지로 구현
    • 시간이 지남에 따라 전류가 방전되므로 주기적인 refresh 과정 필요

기억장치의 계층 구조

  • 접근 속도와 저장 용량에 따라 계층적인 분류 가능: CPU가 데이터에 접근함에 있어서 가장 적은 비용으로 가장 높은 성능을 얻기 위한 전략
  • 참조의 지역성(locality of reference)
    • 공간의 지역성: 다음 순간에 접근할 위치는 현재의 접근 위치와 근접해 있을 가능성이 큼
    • 시간적 지역성: 최근에 접근한 위치들이 가까운 미래에 다시 접근할 가능성이 큼

  • 레지스터: CPU 내부에 존재하여 각종 연산에서 직접적으로 사용
  • 캐시기억장치: CPU와 주기억장치 간의 속도 차이를 줄여주는 역할
    • CPU와 주기억장치 사이에 위치한 접근 속도가 빠른 소규모 기억장치
    • 수행 중인 명령어와 자주 사용되는 데이터를 저장하였다가 CPU 요청이 있을 경우 즉시 제공
  • 주기억장치: 현재 수행 중인 프로그램과 데이터를 저장
  • 보조기억장치
    • 반영구적인 저장
    • 사용을 위해서는 주기억장치에 적재되어야 함

명령어

명령어 집합 구조

  • 내장 프로그램 개념으로부터 직접적으로 도출된 개념
    • ISA, Instruction Set Architecture
    • 명령어 집합
      • 컴퓨터 시스템 내에 정의되어 있는 기본적인 명령어들의 집합
      • 명령어 종류, 명령어 형식, 주소지정방식 등을 고려해서 결정
  • 명령어 집합이 정의되면 상응하는 하드웨어 구조가 결정됨

복합 명령어 집합 컴퓨터(CISC, Complex Instruction Set Computer)

복합 명령어를 포함하여 명령어와 주소지정방식의 수를 많이 사용

  • 프로그램에서 사용되는 전체 명령어의 수를 줄여서 프로그램의 실행 시간 단축
  • 연산 코드 해석 및 실행을 위한 제어장치가 복잡해지는 단점

단축 명령어 집합 컴퓨터(RISC, Reduced Instruction Set Computer)

명령어를 단순화하고 개수를 줄여서 하드웨어를 개선시킨 구조

  • 각 명령어의 길이를 가능한 짧게 함으로써 각 명령어의 실행 시간을 최소화 → 많은 처리량과 빠른 속도 지향
  • 제어장치는 비교적 간단하며, 일반적으로 하드웨어로 구성

명령어 종류

  • 데이터 전송 명령어: 데이터 이동(레지스터 ↔ 레지스터, 주기억장치 ↔ 레지스터, 기억장치 ↔ 기억장치 등)
  • 데이터 처리 명령어: 산술 명령어, 논리연산 명령어, 비트 단위 명령어, 시프트 명령어 등
  • 프로그램 제어 명령어: 프로그램의 제어 흐름 관리 → 무조건적 분기, 조건적 분기
  • 입출력 명령어: 보조기억장치, IO장치 등과의 정보 교환 명령어, 인터럽트(프로그램의 정상 수행을 잡시 멈추고, CPU 이외의 다른 장치의 요구 사항을 수행하는 기능) 관련 명령어

명령어 형식

각 명령어는 실행에 필요한 모든 정보를 포함해야 함

  • 연산자 코드(OP Code): CPU가 처리할 연산의 종류
    →할당된 비트 수: CPU가 수행할 수 있는 명령의 최대 개수
  • 오퍼랜드(operand, 피연산자): 멸령어가 사용할 데이터 또는 데이터가 저장되어 참조될 기억장치의 주소
    • 오퍼랜드의 개수는 컴퓨터 구조에 따라 달라짐
    • 연산의 대상이 되는 데이터가 어디서 추출되고, 결과가 어디에 저장할 지에 따른 구분

주소지정방식

연산에 사용될 데이터가 기억장치의 어디에 위치하는지를 지정하는 방법(addressing mode)
→ 유효주소(effective address): 주소 지정방식에 의해 계산되어 실제 데이터가 저장된 주소

중앙처리장치

명령어의 구현 방법

마이크로 프로그램에 의한 제어장치(micro-programmed control device)

  • 연산과 명령어 수행 순서 조작 회로가 제어기억장치에 저장된 비트 패턴(마이크로 연산)으로 기동하는 장치
  • 각 명령어는 여러 개의 마이크로 연산으로 구현
  • 명령어 세트의 변경이나 명령어 추가 등이 용이
  • CISC 컴퓨터 구조에서 주로 사용

직접 회로로 구성된 제어장치(hard-wired control device)

  • 연산과 명령어 수행 회로가 기억장치에 의존하지 않고 직접 구성된 제어 회로에 의해 기동되는 장치
  • 빠른 수행, 멸령어 세트의 변경에 쉽게 적응할 수 없음
  • 명령어 수가 적은 RISC 컴퓨터 구조에서 주로 사용

레지스터

특수 레지스터

  • AC(누산기, accumulator): 데이터 연산 결과를 일시적으로 저장하는 레지스터 → CPU의 연산 결과는 반드시 누산기에 저장
  • MAR(기억장치 주소 레지스터, Memory Address Register): 현재 PC의 내용(다음에 수행될 명령어가 저장되어 있는 기억장소의 주소) 시스템 버스의 주소 버스로 출력되기 전에 일시적으로 저장
  • MBR(기억장치 버퍼 레지스터, Memory Buffer Register): 기억장치에 저장될 또는 기억장치에서 읽어온 데이터를 임시적으로 저장

제어단어(control word)

  • 각 비트들이 처리장치의 논리회로 내의 각종 MUX와 디코더의 선택 제어선으로 연결되어 하드웨어를 직접적으로 통제
  • 각 마이크로 연산은 제어단어로 일대일 매핑되어 있음

제어장치

메모리에 저장된 명령을 어떻게 순차적으로 가져와서 수행할 것인가를 통제하는 부분

  • 처리장치를 구동해서 특정 연산을 수행한 후 처리장치 내의 레지스터 값을 갱신하고 연산 결과를 출력
  • 현재 명령을 수행한 후 다음에 수행할 멸령의 주소 정보를 생성

명령어 사이클(instruction cycle)

  • PC(프로그램 카운터, Program Counter): 다음에 수행될 명령어가 저장되어있는 주기억장치의 주소를 저장하고 있는 레지스터
  • IR(명령어 레지스터, Instruction Register): 기억장치에서 가져와서 현재 실행 중인 명령어를 저장하고 있는 레지스터
  • 제어장치(control memory): 마이크로연산의 집합을 저장하고 있는 기억장치(ROM으로 구현)
  • 명령어 해독기: 주어진 명령어를 제어기억장치의 해당 마이크로명령이 시작하는 주소로 매핑해주는 것
  • 주소 결정회로: 명령어에 포함된 주소 정보, 제어단어와 연결된 주소 정보, 처리장치 구동 후 결과로 나오는 상태 비트 등으로부터 제어기억장치의 다음 수행할 마이크로 명령의 주소를 생성
  • 제어기억장치 주소 레지스터(CMAR): 제어기억장치에서 다음에 수행할 마이크로 명령의 위치를 가리키는 주소를 저장
  • 제어기억장치 데이터 레지스터(CMDR)
    • 제어기억장치에서 가져온 다음 수행할 마이크로연산을 저장
    • CMDR 없이 제어기억장치의 출력이 직접 다른 장치들로 연결될 수 있음

입출력장치 및 병렬처리

입출력 시스템

  • 입출력장치: 사용자와 컴퓨터 시스템을 연결해주는 장치
  • 입출력장치 제어기: 상이한 기계적/전자적 특성을 가진 입출력장치를 물리적/전자적으로 제어해서 구동시키는 작업을 수행하는 기기
    • 모터 회전, 헤드 이동, 입출력 매체의 위치 정렬 등의 작접
    • 제어기가 입출력장치에 포함된 경우, 하나의 제어기로 여러 입출력장치를 제어하는 경우도 존재
  • 입출력장치 인터페이스: 입출력장치와 중앙처리장치/주기억장치 사이의 데이터 전송 속도, 데이터 처리 단위, 오류 확률의 차이를 상쇄해서 올바른 전송 방법을 제공
  • 입출력 버스
    • 입출력 전용으로 사용되는 정보 회선을 묶음 → 입출력장치와 중앙처리장치 상이의 정보 교환에 사용
    • 여러 장치에 의한 버스 사용 충돌을 막기 위한 중재기가 필요

입출력 제어 방식

CPU에 의한 제어

독립된 입출력 제어기 없이 입출력 장치의 정보가 CPU를 통해 주기억장치에 쓰고 읽혀지는 방식

  • 프로그램에 의한 방식: CPU가 주기적으로 입출력장치에 신호를 보내 입출력 여부를 물어보는 방식
  • 인터럽트에 의한 방식: 입출력장치가 인터럽트를 통ㅎ래 입출력 요청이 있을 때만 CPU가 하던 일을 중단하고 해당 장치와 연락하는 방식

DMA(Direct Memory Access) 방식

  • 입출력장치가 주기억장치와 직접 연결
  • CPU는 두 장치 간의 초기 설정 및 허가에만 관여
  • 직접적인 정보의 이동은 장치 간에 DMA 제어기가 해결

채널 방식

  • 채널(입출력 전용의 별도 프로세서) 사용
  • 정보 전송 통로 제공 및 CPU와 같은 산술/논리/분기 연산 작업도 수행 가능

병렬처리

파이프라인 처리기(pipeline processor)

  • 프로그램 내에 내재하고 있는 시간적 병렬성을 활용
    → CPU내의 하드웨어 요소의 일부를 파이프라인 형태로 구성하여 프로그램 수행에 필요한 작업을 시간적으로 중첩하여 수행시키는 처리기
  • 하나의 연산을 서로 다른 기능을 가진 여러 개의 단계로 분할하여, 각 단계가 동시에 서로 다른 데이터를 취급하도록 함
    • 현재 명령의 특정 단계가 끝나고 다음 단계로 넘어가면 바로 다른 명령을 불러들여서 해당 단계를 동시에 처리하는 방식
    • 연달아 수행될 명령어들이 서로 간에 간섭이 없어야 함

멀티코어(multicore) 구조

하나의 CPU에 2개 이상의 코어를 넣어서 동시에 여러 개의 명령어를 처리할 수 있는 구조

  • 코어: CPU의 일부분으로 명령을 가져와 수행하는 주회로
  • 각 코어는 수행 중인 응용 프로그램의 프로세스나 스레드를 하나씩 담당

GPGPU(General Purpose Computing on Graphics Processing Unit)

  • 그래픽스 처리 장치를 사용한 범용 연산
  • 그래픽 카드의 고도의 병렬처리 능력을 연산에 사용하는 기술