CS/컴퓨터 구조

컴퓨터 구조 정리

Raymond 2023. 2. 18. 11:22

컴퓨터 구조 정리

컴퓨터 구조

  • 컴퓨터 구조를 알아야 하는 이유 : 문법만으로는 알기 어려운 성능, 용량, 비용을 고려하며 개발
  • 메모리 : 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품
  • CPU : 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 부품
  • 보조기억장치 : 전원이 꺼져도 보관할 프로그램을 저장하는 부품 (HDD, SSD 등)
  • 입출력장치 : 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품 (마우스, 키보드, 모니터 등)
  • 시스템 버스 : 메인보드에 존재하며 주소, 데이터, 제어 버스로 구성되며 컴퓨터의 부품들이 정보를 주고받는 통로
    • 메인보드 내부에는 시스템 버스를 비롯한 다양한 버스가 있음

데이터

  • 이진법에서 음수는 2의 보수로 표현
    • 모든 0과 1을 뒤집고 1을 더하면 음수가 나옵니다. 1101 → 0010 + 1 → 0011
  • 8비트는 1바이트
  • 문자를 표현하는 방법 : 아스키 코드에 0부터 127까지의 수가 할당되어 대응

명령어

소스 코드와 명령어

  • 고급 언어 : 사람이 이해하고 작성하기 쉽게 만들어진 언어 (C, C++, Java)
  • 저급 언어는 컴퓨터가 직접 이해하고 실행할 수 있는 언어 (기계어, 어셈블리어)
  • 컴파일 언어 : 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 언어 (C, C++)
  • 인터프리터 언어 : 인터프리터에 의해 소스 코드가 한 줄씩 저급 언어로 변환되어 실행되는 언어 (JavaScript, Python)

명령어의 구조

  • 명령어는 연산 코드와 오퍼랜드(operand-피연산자)로 구성 (오퍼랜드는 없을 수도 있음)
    • 오퍼랜드 : 연산에 사용될 데이터, 연산에 사용될 데이터가 저장된 위치를 나타낸다. 주소 필드라고도 합니다.
  • 연산 코드는 명령어가 수행할 연산을 의미합니다.
    • 연산코드 : 데이터 전송, 산술 논리 연산, 제어 흐름 변경, 입출력 제어로 종류가 나뉩니다. 연산코드의 종류와 생김새는 CPU마다 다릅니다.
ARM CPU의 명령어
https://developer.arm.com/documentation/dui0068/b/ARM-Instruction-Reference

 

ARM CPU의 연산코드와 오퍼랜드

 

  • 주소 지정 방식은 CPU가 연산에 사용할 데이터 위치를 찾는 방법입니다.
    • 즉시 주소 지정 방식(immediate addressing mode)
      • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
      • 가장 간단한 형태의 주소 지정 방식
      • 연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름 → 메모리를 접근하지 않으므로 빠르다
    • 직접 주소 지정 방식(direct addressing mode)
      • 오퍼랜드 필드에 유효 주소 직접적으로 명시
      • 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듬 → 메모리를 접근하기에 조금 느리다.
    • 간접 주소 지정 방식(indirect addressing mode)
      • 오퍼랜드 필드에 유효 주소의 주소를 명시
      • 앞선 주소 지정 방식들에 비해 속도가 느림
    • 레지스터 주소 지정 방식(register addressing mode)
      • 연산에 사용할 데이터가 저장된 레지스터 명시
      • 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠르다.
    • 레지스터 간접 주소 지정 방식(register indirect addressing mode)
      • 연산에 사용할 데이터를 메모리에 저장
      • 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시

CPU

  • ALU : 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호를 받아들입니다. 또한 연산 결과와 플래그를 내보냅니다.
  • 제어장치 : 클럭, 현재 수행할 명령어, 플래그, 제어 신호를 받아들입니다. 또한 CPU내부와 외부(입출력장치, 메모리)로 제어 신호를 내보냅니다.
  • 레지스터
    • 프로그램 카운터 : 메모리에서 가져올 명령어의 주소,
    • 명령어 레지스터 : 해석할 명령어를 저장합니다. 제어장치는 명령어 레지스터 속 명령어를 받아들이고 해석한 뒤 제어신호를 보냅니다.
    • 메모리 주소 레지스터 : 메모리 주소를 저장합니다. CPU가 주소 값을 주소 버스로 보낼 때 거치게 됩니다.
    • 메모리 버퍼 레지스터 : 데이터와 명령어를 저장합니다. CPU가 데이터 버스로 주고 받을 값은 메모리 버퍼 레지스터를 거칩니다.
    • 범용 레지스터 : 데이터와 주소를 모두 저장합니다. 일반적인 상황에서 자유롭게 사용하는 레지스터입니다.
    • 플래그 레지스터 : 연산 결과 혹은 CPU상태에 대한 부가 정보를 저장합니다.
    • 스택 포인터 : 스택 최상단의 위치를 저장
    • 베이스 레지스터 : 기준 주소로서의 역할
  • 인터럽트 : CPU의 정상적인 작업을 방해하는 신호이며 종류에는 동기 인터럽트와 비동기 인터럽트로 나뉩니다.
    • 동기 인터럽트 : CPU에 의해 발생하는 인터럽트
    • 비동기 인터럽트 : 주로 입출력 장치에 의해 발생하는 인터럽트
      • 인터럽트 요청신호 → 인터럽트 플래그 확인 → 인터럽트 벡터(인터럽트 서비스 루틴 시작주소) → 인터럽트 서비스 루틴 진행
  • 인터럽트 서비스 루틴 : 인터럽트를 처리하기 위한 동작들로 이루어진 프로그램
  • 명령어 사이클 : 하나의 명령어가 처리되는 주기로, 인출, 실행, 간접, 인터럽트 사이클로 구성
  • 클럭 속도가 높은 CPU는 빠르게 작동
  • 코어 : CPU 내에서 명령어를 실행하는 부품 (ALU, 레지스터, 제어장치로 구성)
  • 멀티코어 프로세서 : 여러 개의 코어를 포함하는 CPU를 말합니다.
  • 스레드 : 하드웨어적 스레드와 소프트웨어적 스레드가 있습니다.
    • 하드웨어적 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위
    • 소프트웨어적 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위
  • 멀티스레드 프로세서 : 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU를 말합니다.

명령어 병렬 처리 기법

  • 명령어 파이프라이닝 : 동시에 여러 개의 명령어를 겹쳐 실행하는 기법
  • 슈퍼스칼라 : 여러개의 명령어 파이프라인을 두는 기법
  • 비순차적 명령어 처리 기법 : 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 기법입니다.

CSC와 RSC

  • ISA(Instruction Set Architecture) : CPU가 이해할 수 있는 명령어들의 모음입니다. 즉, CPU마다 ISA가 다를 수 있습니다. 아래 두 가지 CPU 설계 방식을 보겠습니다.
    • CISC(Complex Instruction Set Architecture) : 가변길이 명령어를 활용합니다. 여러 클럭에 거쳐 실행이 되며 파이프라이닝 하기 어렵습니다.
    • RISC(Reduced Instruction Set Architecture) : 짧고 규격화된 고정길이 명령어를 활용합니다. 하나의 명령어가 1클럭 내외로 실행되어 명령어 파이프라이닝에 최적화 되어있습니다.

메모리와 캐시 메모리

  • CISC(Complex Instruction Set Architecture) : 가변길이 명령어를 활용합니다. 여러 클럭에 거쳐 실행이 되며 파이프라이닝 하기 어렵습니다.
  • RISC(Reduced Instruction Set Architecture) : 짧고 규격화된 고정길이 명령어를 활용합니다. 하나의 명령어가 1클럭 내외로 실행되어 명령어 파이프라이닝에 최적화 되어있습니다.

RAM의 특징과 종류

  • RAM은 휘발성 저장 장치이고, 보조기억 장치는 비휘발성 저장 장치
  • DRAM(Dynamic RAM) : 시간이 지나면 저장된 데이터가 점차 사라지는 RAM
  • SRAM(Static RAM) : 시간이 지나도 저장된 데이터가 사라지지 않는 RAM
  • SDRAM(Synchronous Dynamic RAM) : 클럭과 동기화된 발전된 형태의 DRAM
  • DDR SDRAM(Double Data Rate SDRAM) : SDR SDRAM에 비해 대역폭이 두 배 넓습니다.

메모리의 주소공간

  • 물리 주소 : 메모리 하드웨어상의 주소
  • 논리 주소 : CPU와 실행중인 프로그램이 사용하는 주소
  • MMU(Memory Management Unit) : 논리 주소를 물리 주소로 변환
  • 베이스 레지스터 : 프로그램의 첫 물리 주소를 저장
  • 한계 레지스터 : 실행중인 프로그램의 논리 주소의 최대 크기를 저장합니다. 다른 영역 침범 방지

캐시 메모리

  • 저장 장치 계층 구조 : 각기 다른 용량과 성능의 저장 장치들을 계층화하여 표현한 구조
  • 캐시 메모리 : CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위한 저장 장치입니다. 참조 지역성의 원리에 따라 데이터를 예측하여 캐시 적중률을 높입니다.
    • 참조 지역성의 원리 : 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다. 또한 접근한 공간 근처를 접근하려는 경향이 있는 것을 말합니다.
    • 캐시 적중률 : 높으면 CPU의 메모리 접근 횟수를 줄일 수 있습니다.

보조기억장치

다양한 보조기억장치

  • 하드 디스크 : 구성 요소에는 플래터, 스핀들, 헤드, 디스크암이 있습니다.
    • 플래터 : 트랙과 섹터로 나뉘고, 여러 플래터의 동일한 트랙이 모여 실린더를 이룹니다.
    • 하드 디스크의 데이터 접근 시간은 크게 탐색시간, 회전 지연, 전송 시간으로 나뉩니다.
  • 플래시 메모리 : 한 셀에 몇 비트를 저장할 수 있느냐에 따라 SLC(Single Level Cell), MLC(Muliple), TLC(Triple)로 나뉩니다.
    • 플래시 메모리의 읽기와 쓰기는 페이지 단위로, 삭제는 블록 단위로 이루어 집니다.

RAID의 정의와 종류

  • RAID : 데이터의 안전성 혹은 높은 성능을 위해 여러 하드 디스크나 SSD를 마치 하나의 장치처럼 사용하는 기술입니다.
    • RAID 0 : 데이터를 단순히 병렬로 분산하여 저장 (4TB → 1TB + 1TB + 1TB + 1TB)
    • RAID 1 : 데이터를 단순히 병렬로 분산하여 저장하고 완전한 복사본을 만듭니다. (4TB → 1TB + 1TB + 1TB(복사본) + 1TB(복사본))
    • RAID 4 : 패리티를 저장한 장치를 따로 두는 방식 (4TB → 1TB + 1TB + 1TB + 1TB(패리티 저장))
      • 패리티비트(Parity bit) : 오류를 검출하고 복구하기 위한 정보
    • RAID 5 : 패리티를 각각에 분산하여 저장하는 방식
    • RAID 6 : 서로 다른 두 개의 패리티를 두는 방식입니다.

입출력장치

장치 컨트롤러와 드라이버

  • 입출력장치 : 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고받습니다.
    • 장치 컨트롤러 : 데이터, 상태, 제어 레지스터를 가지고 있습니다.
      • 데이터 레지스터 : CPU와 입출력 장치가 주고 받을 데이터가 담기는 레지스터
      • 상태 레지스터 : 입출력장치의 준비, 완료, 오류 등의 상태정보가 저장
      • 제어 레지스터 : 입출력장치가 수행할 내용에 대한 제어정보와 명령을 저장
  • 장치 드라이버 : 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램입니다.

다양한 입출력 방법

  • 프로그램 입출력(Programmed I/O) : 프로그램 속 명령어로 입출력 작업을 하는 방식입니다.
  • 메모리 맵 입출력(Memory mapped I/O) : 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 입출력 방식입니다.
  • 고립형 입출력(Isolated I/O) : 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 별도로 분리하는 입출력 방식입니다.
  • 인터럽트 기반 입출력 : 인터럽트로써 입출력을 수행하는 방법입니다.
  • DMA(Direct Memory Access) 입출력 : CPU를 거치지 않고 메모리와 입출력장치 간의 데이터를 주고받는 입출력 방식입니다.
  • 입출력 버스 : 입출력장치와 컴퓨터 내부를 연결 짓는 통로로, 입출력 작업 과정에서 시스템 버스 사용횟수를 줄여줍니다.