Skip to main content

SSAFY CS 스터디: 이취컴 Chapter 2-5 정리

Chapter 02 컴퓨터 구조 - 5 보조기억장치와 입출력장치

p.107~131


RAID

오늘날의 대중적인 보조기억장치

  • 하드 디스크: 자기적인 방식으로 데이터를 읽고 쓰는 보조기억장치
    • 크게 스핀들, 플래터, 헤드로 구성
  • 플래시 메모리: 전기적인 방식으로 데이터를 읽고 쓰는 반도체 기반의 저장장치
    • Ex. USB, SD카드, SSD

보조기억장치의 역할 2가지

  1. 전원이 꺼져도 데이터를 안전하게 보관하기
  2. CPU가 필요로 하는 데이터를 보다 빠른 성능으로 메모리에 전달하기

즉, 보조기억장치의 데이터를 안전하고 빠르게 다루는 것이 중요 👉 RAID의 등장

RAID

데이터의 안전성 또는 성능을 확보하기 위해 여러개의 독립적인 보조기억장치를 마치 하나의 보조기억장치처럼 사용하는 기술
RAID 레벨에는 대표적으로 RAID0 ~ RAID6 이 있으며, 이로부터 RAID10, RAID50 등이 파생되기도 한다.
많이 사용되는 레벨은 0, 1, 4, 5, 6 이다.

0️⃣ RAID0

데이터를 여러 보조기억장치에 단순하게 나누어 저장하는 구성 방식

  • 스트라입: 분산 저장된 데이터
  • 스트라이핑: 분산하여 저장하는 동작

  • 장점: 빠른 입출력 속도
    • 각 저장장치에서 한번에 읽어들일 수 있음
    • 이론상 4TB 1개 읽고쓰는 속도보다 RAID0으로 구성된 1TB 4개의 속도가 4배 빠르다.
  • 단점: 저장된 정보가 안전하지 않다.
    • 1TB 하나 날라가면 나머지 분산 저장된 데이터는 불완전한 데이터가 됨.

1️⃣ RAID1

완전한 복사본을 만들어 저장하는 구성 방식 (= 미러링)

  • 장점: 복구가 간단하고, 안전성이 높다.
  • 단점: 데이터를 쓸 때, 원본과 복사본 두 곳에 써야 해서 RAID0보다 쓰기 속도가 느리다. 복사본 저장 공간만큼 가용 용량이 적어진다.

4️⃣ RAID4

패리티 정보를 저장하는 디스크를 따로 두는 구성 방식

패리티: 오류를 검출할 수 있는 정보

  • 장점: RAID1에 비해 적은 하드 디스크로 안전하게 데이터를 보관할 수 있음
  • 단점: 패리티 저장장치에 병목 현상 발생
    • 새로운 데이터가 저장될 때마다 패리티 저장 디스크에도 쓰기 작업을 해야 하므로

5️⃣ RAID5

패리티를 분산하여 저장하는 구성 방식

  • 장점: RAID4의 병목 현상을 보완함

6️⃣ RAID6

기본적인 구성은 RAID5와 동일하며, 서로 다른 2개의 패리티를 두는 구성 방식
👉 오류 검출 및 복구 수단이 2개인 것

  • 장점: RAID4, RAID5에 비해 안전성이 높다.
  • 단점: 새 데이터 저장마다 저장해야 하는 패리티가 2개라서 RAID5에 비해 쓰기 속도는 느리다.

*️⃣ Nested RAID

여러 RAID 레벨을 혼합한 구성 방식

  • RAID10: RAID0과 RAID1을 혼합
  • RAID50: RAID0과 RAID5를 혼합

입출력 기법

장치 컨트롤러와 장치 드라이버

  • 장치 컨트롤러: CPU와 입출력장치 사이의 통신을 중개하는 하드웨어

    • 입출력장치는 CPU와 직접 연결되어 정보를 주고받는 것이 아니라, 장치 컨트롤러라는 하드웨어를 통해 연결된다.
  • 장치 드라이버: 장치 컨트롤러의 동작을 알고, 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있도록 하는 프로그램

    • 장치 컨트롤러마다 이를 작동시키는 장치 드라이버가 있다.
    • 대중적인 장치 드라이버는 OS에 포함된 경우가 많다.
장치 컨트롤러 내의 RAM

CPU와의 통신 과정에서 기억해야 할 중간 값들이 장치 컨트롤러의 저장장치에 저장된다.
이 또한 휘발성이기에 입출력 작업 도중 연결이 해제되거나 장치를 안전 제거하지 않으면 입출력 데이터에 문제가 발생할 수 있다.

프로그램 입출력

프로그램 속 명령어로 입출력을 수행하는 방법

프로그램 입출력의 2가지 종류

입출력 명령어의 오퍼랜드를 식별하는 방식에 따라 고립형 입출력, 메모리 맵 입출력으로 나뉜다.

고립형 입출력

입출력장치에 접근하는 주소와 메모리에 접근하는 주소를 별도의 주소 공간으로 간주하는 방식
👉 입출력장치만을 위한 주소 공간에 접근하려면 별도의 입출력 명령어가 필요

메모리 맵 입출력

입출력장치에 접근하는 주소 공간과 메모리에 접근하는 주소 공간을 구분하지 않고,
메모리에 부여된 주소 공간 일부를 입출력장치를 식별하기 위한 주소 공간으로 사용하는 방식
👉 별도의 입출력 명령어가 필요하지 않음 (메모리 접근 명령어로 입출력이 가능하기 때문)

인터럽트 기반 입출력: 다중 인터럽트

인터럽트가 여러 입출력장치로부터 동시다발적으로 발생할 경우, 인터럽트 중에서도 우선순위가 더 높은 인터럽트가 우선적으로 처리된다.
이는 다음의 경우와도 같다.

  • 플래그 레지스터의 인터럽트 비트가 활성화된 경우
  • 또는 인터럽트 비트를 무시하는 NMI(Non-Maskable Interrupt)가 발생한 경우

다중 인터럽트 처리를 위해 프로그래머블 인터럽트 컨트롤러(PIC)가 사용된다.

  • PIC: 여러 장치 컨트롤러에 연결되어 있어, 장치 컨트롤러에서 보낸 하드웨어 인터럽트들의 우선순위를 판별하고, CPU에게 지금 처리할 하드웨어 인터럽트가 무엇인지 알려주는 장치 (당근, NMI는 판별 대상에서 제외)

DMA 입출력

프로그램 기반 입출력과 인터럽트 기반 입출력의 공통점: CPU가 입출력장치와 메모리 간의 데이터 이동을 주도하고, 데이터도 반드시 CPU를 거친다

  • 읽기: 장치 컨트롤러 -> 레지스터 -> 메모리
  • 쓰기: 메모리 -> 레지스터 -> 입출력장치

이렇게 반드시 CPU를 경유하면 CPU 부담이 늘어난다.
👉 CPU를 거치지 않고 입출력장치와 메모리가 상호작용하는 입출력방식인 DMA 등장

DMA

직접 메모리에 접근할 수 있는 입출력 기능
시스템 버스에 연결된 DMA 컨트롤러 필요

  • DMA 컨트롤러는 시스템 버스에, 각 입출력장치의 장치 컨트롤러는 입출력 버스에 연결됨

DMA 입출력 과정

  1. CPU가 DMA 컨트롤러에게 입출력장치 주소, 수행할 연산, 연산할 메모리 주소 등을 주고 입출력 작업 명령
  2. DMA 컨트롤러가 장치 컨트롤러와 상호작용하여 입출력 작업 수행, 필요시 DMA 컨트롤러가 직접 메모리에 접근하여 읽기/쓰기 수행
  3. 입출력 작업 완료 시 DMA 컨트롤러가 CPU에 인터럽트를 발생시킴
사이클 스틸링

버스는 공용 자원이므로 두 장치가 동시에 버스를 이용할 수 없다.
따라서 CPU가 시스템 버스를 사용하지 않거나 CPU가 양보할때 DMA 컨트롤러가 시스템 버스를 사용하게 되는데,
CPU 입장에서는 버스 접근 사이클을 DMA 컨트롤러에게 도둑 맞는 입장이므로
DMA 컨트롤러의 시스템 버스 사용을 사이클 스틸링이라고 한다.

PCIe

오늘날 메인보드에서 가장 대중적으로 볼 수 있는 대표적인 입출력 버스. PCI의 발전된 형태.
SSD, GPU, NIC 등 다양한 입출력장치 연결 가능
버전이 올라감에 따라 지원되는 최대 속도가 상향된다.

  • 레인: PCIe 버스를 통해 정보를 송수신하는 단위

GPU의 용도와 처리 방식

  • GPU: 대량의 그래픽 연산을 위한 그래픽 처리 장치
  • GPGPU: 딥러닝 연산, 가상화폐 채굴 등 범용적인 목적의 GPU 사용 기술

GPU의 개별 코어 성능은 CPU보다 떨어지지만, 수백~수천개의 코어가 있어 병렬처리에 용이
GPU는 자체 캐시 메모리 및 메인 메모리를 가지고 있음.

GPU가 CPU를 대체할 수 있는가?

  • GPU의 개별 코어가 CPU보다 느릴뿐만 아니라 작고, 복잡한 기능을 제공하지 않기에 불가하다.
  • CPU는 메모리 접근 최소화가 목표지만, GPU는 메모리 대역폭을 넓혀 최대한 많은 코어가 많은 작업을 받아 처리하는 것을 목표로 한다.
    • GPU는 산술 연산 등의 단순 연산을 빠르게, 병렬적으로 수행하기 위한 장치
    • CPU는 범용적인 연산을 수행하기 위한 장치

GPU는 CPU의 산술 연산을 보조한다는 점에서 보조프로세서라고 불리기도 한다.

GPU의 작업 처리 방식

GPU는 프린터, 키보드와 다르게 직접 소스코드를 통해 수행할 작업을 지정함 (Ex. CUDA)
CUDA는 CPU가 실행하는 호스트 코드와 GPU가 실행하는 디바이스 코드로 구성된다.
👉 CPU가 호스트 코드 실행하다 디바이스 코드를 맞닥뜨리면 디바이스 코드가 GPU 메모리로 복사되고, GPU가 복사된 디바이스 코드를 실행해 CPU에 실행 결과를 알린다.


취업 멘토가 알려 주는 기술 면접 질문 15

-