[CS 스터디] 보조기억장치, 입출력 장치

cjkangme·2023년 3월 16일
0

CS-스터디

목록 보기
2/9
post-custom-banner

혼자 공부하는 컴퓨터 구조+운영체제 책을 바탕으로 공부한 내용입니다.
노션에 정리한 것을 그대로 옮겨온 것으로, 일부 글자가 깨질 수 있습니다

Chapter 7. 보조기억장치

7-1. 다양한 보조기억장치

하드디스크

  • 구성요소
    • 플래터 : 실질적으로 데이터가 저장되는 동그란 원판, 0과 1을 기록하기 위해 자기물질로 덮여있다.
      • 일반적으로 여러겹의 플래터로 이루어져있고, 양면을 모두 사용할 수 있다.
    • 스핀들 : 플래터를 회전시키는 구성 요소
    • 헤드 : 데이터를 읽고 쓰는 역할을 하는 구성 요소
  • 데이터를 저장하는 방법
    • 트랙 : 플래터를 여러 동심원을 나누었을 때 각각의 원
    • 섹터 : 한 트랙을 여러조각으로 나누었을 때 하나의 조각
      • 한 섹터의 크기는 일반적으로 512바이트 ~ 4096바이트
    • 실린더 : 여러겹의 플래터상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위
      • 연속된 정보는 보통 하나의 실린더에 기록된다. (디스크 암을 움직이지 않고 접근 가능하므로)
  • 데이터 접근 과정
    • 탐색 시간 : 헤드가 접근하려는 데이터의 트랙까지 이동하는 시간
    • 회전 지연 : 헤드가 있는 곳으로 플래터를 회전시키는 시간
    • 전송 시간 : 하드디스크와 컴퓨터 간 데이터를 전송하는 시간
  • 데이터 접근 시간을 줄이기 위해
    • 물리적 : RPM을 높인다.
    • 논리적 : 플래터 혹은 헤드를 조금만 움직여도 접근할 수 있도록 최적의 데이터 저장 위치를 결정
  • 다중 헤드 디스크(고정 헤드 디스크)
    • 트랙별로 헤드가 달려있어 탐색 시간이 필요없는 하드디스크 구조를 말한다.
    • 반대로 헤드가 하나만 있어 탐색 시간이 필요한 헤드 디스크를 ‘이동 헤드 디스크’라고 한다.

플래시 메모리

  • USB, SD 카드, SSD가 모두 플래시 메모리 기반의 보조기억장치이다.
  • 보조기억장치 뿐 아니라 다양한 곳에서 널리 사용한다.
  • 셀 : 플래시 메모리에서 데이터를 저장하는 가장 작은 단위로, 한 셀에 몇비트를 저장할 수 있느냐에 따라 플래시 메모리 종류가 나뉜다.
    • SLC : 한 셀에 1비트 (한 셀에 2개의 정보)
      • 빠른 입출력이 가능하다. (고성능)
      • MLC 및 TLC보다 긴 수명을 갖는다.
      • 용량 대비 가격이 높다.
    • MLC : 한 셀에 2비트 (한 셀에 4개의 정보)
      • SLC와 TLC의 중간정도의 성능, 용량 대비 가격, 수명을 갖는다.
    • TLC : 한 셀에 3비트 (한 셀에 8개의 정보)
      • 용량 대비 가격이 가장 저렴하다.
      • SLC나 MLC보다 수명과 속도가 떨어진다.
  • 셀보다 더 큰 단위 : 셀 → 페이지 → 블록 → 플레인 → 다이
    • 읽기와 쓰기는 페이지 단위로 이루어진다.
    • 삭제는 블록 단위로 이루어진다.
  • 데이터를 읽고 쓸 때 페이지는 세 개의 상태를 가질 수 있다.
    • Free : 저장된 데이터가 없음
    • Valid : 이미 유효한 데이터를 저장하고 있음
    • Invalid : 유효하지 않은 데이터를 저장하고 있음 (삭제 해야 새로 쓸 수 있다)
  • 삭제는 블록 단위로 가능하기 때문에, 블록 내부에는 덮어쓸 수 없는 낭비되는 공간이 존재하게 되는데, 이를 정리하기 위해 가비지 컬렉션 기능을 제공한다.

7-2. RAID의 정의와 종류

  • RAID : 보조기억장치를 안전하고 빠르게 활용하는 방법

RAID의 정의

  • 상대적으로 장은 용량의 여러 개 물리적 보조기억장치를 합쳐 하나의 논리적 보조기억장치로 사용하는 기술
  • 데이터의 안정성을 높일 수 있다. (하나의 보조기억장치가 고장이나도 복구가 가능)
  • 큰 보조기억장치 하나를 사용하는 것 보다 더 빠르게 데이터를 입출력 할 수 있다.

RAID의 종류

  • RAID 구성 방법은 여러가지인데 이러한 구성 방법을 RAID 레벨이라 표현한다.
  • RAID 0
    • 여러 개의 보조기억장치에 데이터를 나누어 저장하는 방식
    • A라는 파일이 있다면 이를 보조기억장치 만큼 쪼개서 나누어 저장한다.
    • 이렇게 줄무늬처럼 분산되어 저장하는 것을 스트라이핑이라하며, 분산된 데이터를 스트라입이라 한다. 이렇게하면 하나의 데이터를 동시에 읽고 쓸 수 있기 때문에 데이터의 입출력속도가 빨라진다. (4TB 한 개보다 1TB 4개가 이론상 4배 빠름)
    • 다만 여러 보조기억장치중 하나라도 고장이 난다면 모든 장치의 정보를 읽는데 문제가 생길 수 있다.
  • RAID 1
    • 거울처럼 완전한 복사본을 만드는 방법으로, 미러링이라고도 한다.
    • 복구가 매우 간단하다는 장점이 있지만, 사용 가능한 용량이 절반이 되는 단점이 있다.
  • RAID 4
    • 오류를 검출하고 복구하기 위한 정보인 패리티 비트를 이용하여 RAID 1보다 적은 보조기억장치로 오류 검출 및 데이터 복구가 가능하다.
    • 패리티 비트는 본래 오류를 검출할 수만 있지만, RAID에서는 오류 복구 역시 가능하다.
  • RAID 5
    • RAID 4는 새로운 데이터가 저장될 때마다 패리티를 저장하는 디스크에도 데이터를 저장해야하므로, 패리티를 저장하는 장치에 병목현상이 발생하는 문제가 있다.
    • RAID 5는 모든 보조기억장치에 패리티 정보를 분산하여 저장한다.
  • RAID 6
    • RAID 5와 같은 구성이지만, 같은 패리티 비트를 두 개의 보조기억장치에 나누어 저장한다.
    • RAID 4, RAID 5보다 정보를 안전하게 저장할 수 있다.
    • 대신 쓰기 속도가 느리다는 단점이 있다.
  • Nested RAID : RAID 방식을 혼합한 방식이다. 예를들어 RAID 10은 RAID 0과 RAID 1을 혼합한 것이다. 이러한 구조를 Nested RAID라고 한다.

Chapter 8. 입출력장치

8-1. 장치 컨트롤러와 장치 드라이버

장치 컨트롤러

  • 입출력장치는 종류가 매우 다양하기 때문에, 장치별로 정보를 주고받는 방식을 규격화하기가 어렵다.
  • 입출력장치는 데이터 전송률이 일반적으로 낮기 때문에, CPU와 원활한 통신을 하기 어렵다.
    • 전송률 : 데이터를 얼마나 빨리 교환할 수 있는지 나타내는 지표
  • 이러한 이유로 입출력장치는 컴퓨터에 직접 연결되지 않고 장치 컨트롤러라는 하드웨어를 통해 연결된다.
    • 모든 입출력 장치는 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고 받는다.
    • 각 장치 컨트롤러는 하나 이상의 입출력 장치와 연결된다.
  • 장치 컨트롤러의 역할
    • CPU와 입출력장치 간의 통신 중개
    • 오류 검출
    • 데이터 버퍼링
      • 버퍼링 : 전송률이 다른 장치 사이의 원활한 통신을 위해 데이터를 버퍼라는 임시 저장 공간에 저장하는 것. 전송률을 비슷하게 맞추는 효과가 있다.
      • 일반적으로 빠른쪽에서 보낸 데이터를 천천하게 전송하는 역할, 느린쪽에서 보낸 데이터를 모았다가 한번에 전송하는 역할을 한다.
  • 장치 컨트롤러의 내부 구조
    • 데이터 레지스터
      • 서로 주고받을 데이터가 담기는 레지스터 (버퍼 역할)
      • 주고 받는 데이터가 많을 경우 레지스터 대신 RAM을 사용하기도 한다.
    • 상태 레지스터
      • 입출력 관련 작업 상태 정보를 저장
    • 제어 레지스터
      • 입출력장치가 수행할 내용에 대한 제어 정보 및 명령 저장

장치 드라이버

  • 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게하는 프로그램
    • 새로운 장치를 연결하여 사용하려면 장치 드라이버를 설치해야 한다.
  • 최종적으로 입출력장치와 컴퓨터가 연결된 구조는 다음 그림과 같다.

8-2. 다양한 입출력 방법

  • 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력 크게 세 가지가 있다.

프로그램 입출력

  • 프로그램(입출력 컨트롤러) 속 명령어를 통해 입출력 장치를 제어
    • CPU가 하드디스크에 새 정보를 쓰려는 경우
      1. CPU가 제어 레지스터에 ‘쓰기’ 명령어 전송
      2. 하드디스크 컨트롤러는 하드디스크의 상태를 확인하고 ‘준비’ 상태를 상태 레지스터에 저장
      3. CPU는 준비가 완료될때까지, 상태 레지스터를 체크하고, 준비가 확인되면 데이터 레지스터에 데이터 전송
  • 이러한 입출력을 수행하기 위해서는 CPU가 각 장치 컨트롤러 속 레지스터의 주소를 알고 있어야 한다. 이를 구현하는 2가지 방식이 있다.
  • 문제는 매번 cpu가 검사를 해주어야 입출력이 이루어지기 때문에, cpu가 짧은 주기로 체크하면 cpu 효율이 감소하고, 반대로 너무 긴 주기로 체크하면 입출력에 지연이 발생한다는 단점이 있다.

ㄴ 메모리 맵 입출력

  • 하나의 주소 공간에 메모리르 위한 주소 공간, 입출력장치를 위한 주소 공간을 나누어 사용한다.
  • 메모리 주소를 사용하듯 주소 접근이 가능하기 때문에 메모리 접근과 동일한 명령어를 사용할 수 있다.
  • 메모리 주소 공간이 축소된다는 단점이 있다.
  • 주로 임베디드나 RISC 시스템에서 주로 사용

ㄴ 고립형 입출력

  • 메모리를 위한 주소 공간과, 입출력장치를 위한 주소 공간을 분리하는 방법
  • 대신 제어버스에 메모리에 접근하기 위한 제어버스와 장치 컨트롤러에 접근하기 위한 제어버스를 따로 둔다. (별개의 선)
  • 사용할 제어버스가 다르기 때문에 서로 다른 입출력 명령어를 사용해야한다는 단점이 있다.
  • 주로 Intel 계열에서 사용하며, 프로세서 칩셋에 물리적인 신호판을 두어 IO명령을 전달한다.

인터럽트 기반 입출력

  • 앞서 배웠던 인터럽트를 통해 CPU와 입출력을 주고 받는다.
    • CPU의 명령을 받고 인터럽트를 보내는 것은 장치 컨트롤러가 수행한다.
  • 앞서 프로그램 입출력 방식에서는 CPU가 주기적으로 장치 컨트롤러의 상태 레지스터를 체크해야 했다. 이를 폴링(polling)이라고 하는데, 인터럽트 기반 입출력에서는 폴링이 필요 없기 때문에 CPU의 부담이 감소한다.
  • 입출력 장치는 매우 많기 때문에 동시에 여러 인터럽트가 발생할 수 있다. 이러한 경우 어떤 인터럽트를 먼저 처리할지 결정하는 방법이 중요한 요소이다.
    • 이를 위해 인터럽트에 우선순위를 부여하여, 우선순위가 높은 인터럽트 부터 처리한다.
    • 우선 순위가 낮은 인터럽트가 먼저 처리중이라고 하더라도, 우선 순위가 높은 인터럽트가 들어오면, 높은 쪽 부터 처리한다.

  • 컴퓨터는 이러한 다중 인터럽트에 우선순위를 부여하기 위해 프로그래머블 인터럽트 컨트롤러(PIC) 라는 하드웨어를 사용한다.
    • PIC는 입출력 장치의 인터럽트를 보낼 수 있는 약속된 하드웨어와 물리적으로 연결되어있다.
    • PIC에 다중 인터럽트가 들어오면 PIC가 우선순위를 판단하여 CPU에 처리할 인터럽트 요청 신호를 보낸다.
    • 일반적으로 더 많고 복잡한 장치의 인터럽트를 관리하기 위해 PIC를 두 개 이상 계층으로 구성한다.
  • NMI(Non-Maskable Interrupt)는 플래그 레지스터의 인터럽트 비트와 상관없이 최우선 처리되는 인터럽트로, PIC의 판단을 거치지 않는다.

DMA 입출력

  • 프로그램 입출력과 인터럽트 기반 입출력은 모두 CPU를 거쳐서 이루어진다.
  • DMA(Direct Memory Access)는 CPU를 거치지 않고 입출력장치와 메모리간 상호작용할 수 있는 입출력 방식이다.
  • DMA 입출력을 위해서는 시스템 버스에 DMA 컨트롤러라는 별도 하드웨어가 필요하다.

DMA 입출력 과정

  • CPU가 입출력장치에 명령을 한 경우
    1. CPU가 DMA 컨트롤러에 필요한 정보 및 작업 명령을 전송한다.
    2. DMA가 장치 컨트롤러와 직접 상호작용하고, 메모리에 접근하면서 작업을 수행한다.
    3. 작업이 완료되면 DMA가 CPU에 작업 완료 인터럽트를 전송한다.
  • CPU는 작업의 시작과 끝에만 관여하기 때문에 작업 부담이 훨씬 감소한다.
  • 단, 시스템버스는 공용자원이기 때문에 CPU와 DMA가 동시에 시스템버스를 사용할 수 없다는 단점이 있다. (DMA의 작업으로 CPU가 시스템 버스를 사용할 수 없는 상황을 사이클 스틸이라 한다)
    • CPU가 시스템 버스를 사용하지 않을 때마다 DMA가 사용하거나
    • CPU가 시스템 버스를 이용하지 않도록 하고 집중적으로 이용하는 방법이있다.

입출력 버스

  • DMA가 시스템 버스를 너무 너무 오래 사용하면, CPU가 시스템 버스를 이용할 수 있는 시간이 감소한다. 이를 위해 입출력 버스라는 별도의 버스에 DMA와 장치 컨트롤러를 연결하는 방법이 있다.
  • 입출력 버스에는 PCI버스, PCIe 버스 등 다양한 종류가 존재한다. 이러한 버스를 연결해주는 통로를 PCIe 슬롯이라고 한다.
  • 최근에는 입출력 장치에 입출력 전용 CPU가 탑재되어 아예 컴퓨터의 CPU를 거치지 않고 컴퓨터 내부와 데이터를 주고받는 경우가 있다.
post-custom-banner

0개의 댓글