1. 하드 디스크와 플래시 메모리
- 대표적인 보조기억장치 (하드 디스크, HDD)
- 플래시 메모리 (SSD, USB 메모리, SD 카드)
- 하드 디스크 (LP, CD/DVD 플레이어와 유사)
- 플래터: 하드 디스크 상에서 실질적으로 데이터가 저장되는 부분
- 스핀들: 플래터를 회전시키는 부분
- 헤드: 플래터의 데이터를 읽고 쓰는 부분
- 디스크 암: 헤드를 옮기는 부분
> 복수의 헤드와 플러터가 있는 경우가 많음
> 플래터의 양면을 사용하는 경우가 많음
- 하드 디스크의 데이터 단위
- 트랙: 플래터 상의 동심원
- 섹터: 트랙을 나눈 단위 (가장 작은 단위)
- 실린더: 여러 개의 트랙을 모은 단위
- 블록: 실제 입출력이 수행되는 단위
- 하드 디스크의 지연 시간
- 탐색 시간: 헤드를 원하는 섹터까지 이동시키는 시간
- 회전 지연: 원하는 섹터를 헤더까지 회전시키는 시간
- 전송 시간: 데이터를 송수신하는 시간
- 플래시 메모리
- 반도체 기반의 저장 장치
- 매우 범용성 넓은 저장 장치
- NAND 플래시 메모리와 NOR 플래시 메모리가 있음: 일반적으로 사용되는 것은 NAND 플래시 메모리
- 플래시 메모리의 저장 단위
- 셀(cell): 플래시 메모리의 가장 작은 저장 단위
- 한 셀에 몇 비트까지 저장이 가능한지에 따라 플래시 메모리의 종류가 나뉨
- 읽기와 쓰기는 페이지 단위
- 삭제는 블록 단위
2. RAID
- 보조기억장치에는 수명이 있다. 이때 사용 가능한 기술 중 하나가 RAID.
- 데이터의 안전성, 높은 성능을 위해 여러 보조기억장치를 하나처럼 사용 가능한 기능
- RAID 0
- 데이터를 단순히 보조기억장치에 나누어 저장하는 구성 방식: 성능 개선 / 신뢰성은 감소
- 마치 줄무늬처럼 저장된 데이터: 스트라입
- 분산하여 저장하는 것: 스트라이핑
- RAID 1
- 복사본을 만드는 방식(미러링)
- 쓰기 성능의 감소, 저장 공간 감소, 신뢰성 증가(복구 용이)
- RAID 4
- 패리티 비트(parity bit)라는 오류 검출용 비트를 저장하는 장치를 따로 두는 방식
- RAID 1에 비해 적은 하드 디스크로도 신뢰성 증가 가능
- 단, 패리티 비트를 저장한 디스크에 병목 현상이 증가
- 패리티 비트
- 오류 검출용 비트, 복구는 불가능
- But, RAID에서는 어느 정도의 복구가 가능하다.
- 홀수 패리티: 전체 1의 개수가 홀수가 되도록 패리티 비트를 정하는 방식
- 짝수 패리티: 전체 1의 개수가 짝수가 되도록 패리티 비트를 정하는 방식
- 두 개 이상의 비트에 문제가 생길 경우 오ㅠ 검출 불가능
- RAID 5
- 패리티 비트를 분산하여 저장하는 방식
- RAID 4의 병목을 해소하는 방식
- RAID 6
- 패리티를 두 개 두는 방식
- RAID 4 혹은 5보다 더욱 신뢰성이 높아진 방식 (단, 쓰기 성능은 감소)
- nested RAID
- 여러 RAID 구성 방식을 합친 방식
- RAID 10(RAID + RAID0), RAID 50 (RAID 5 + RAID 0)
3. 입출력 기법
- 보조기억장치도 입출력장치의 일부터 볼 수 잇다.
- 그저 특별한 입출력장치일 뿐 보조기억장치의 입출력 과정은 타 입출력장치와 유사하다.
- 입출력 장치는 CPU 입장에서 메모리 레지스터에 비해 다루기 까다롭다.
- 매우 다양한 입출력장치의 종류
- CPU와 입출력장치 간의 전송률 차이
- 따라서 장치 컨트롤러가 사용 된다.
- CPU와 입출력장치 간의 통신 중개
- 오류 검출
- 데이터 버퍼링을 통한 전송률 차이 완화
- 장치 드라이버
- 장치 컨트롤러를 동작시키기 위한 특별한 프로그램
- 운영체제의 일부로 포함되어 있는 경우가 많다.
- 결국 입출력이란 CPU가 장치 컨트롤러와 정보를 주가받는 것
==> 이를 가능케 하는 프로그램: 장치 드라이버 - CPU와 장치 컨틀롤러가 정보를 주고받는 방법
- 프로그램 입출력: 명령어를 기반으로 입출력을 수행하는 방법
- 인터럽트 기반 입출력: 인터럽트를 기반으로 입출력을 수행하는 방법
- DMA 기반 입출력: DMA를 기반으로 입출력을 수행하는 방법
- DMA (직접 메모리 접근)
- 입출력 작업 전달(e.g. 메모리의 내용을 하드디스크에 백업)
- 메모리로부터 백업할 정보를 읽어오고, 이를 하드 디스크의 장치 컨트롤러에 내보내기
- 입출력 작업이 끝났다면 인터럽트를 통해 작업이 끝났음을 알림
- 사이클 스틸링: CPU 입장에서는 시스템 버스를 사용할 사이클을 도둑맞음
- 직접연결해주는 입출력 전용 버스, 입출력 버스가 등장