저자 github
07 보조기억장치
7-1 다양한 보조기억장치
하드 디스크, 플래시 메모리
하드 디스크(HDD: Hard Disk Drive)
자기 디스크(magnetic disk)

출처: hard disk 영어 위키

출처: 블로그
데이터는 어떤 단위로 저장되나
- sector: 하드 디스크의 가장 작은 전송 단위
- block: 하나 이상의 섹터를 묶어서 표현하기도 함
- track
- cylinder: 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위. 연속된 정보는 한 실린더에 저장
하드디스크가 저장된 데이터에 접근하는 시간
- 탐색 시간(seek time) 접근하려는 데이터가 저장된 트랙까지 헤드를 이동시키는 시간
- 회전 지연(rotational time) 헤드가 있는 곳으로 플래터를 회전시키는 시간
- 전송 시간(transfer time): 하드디스크와 컴퓨터 간에 데이터를 전송하는 시간
탐색 시간과 회전 지연을 단축시키기 위해 플래터를 빨리 돌려 RPM을 높이는 것도 중요하지만, 참조 지역성 즉, 접근하려는 데이터가 플래터 혹은 헤드를 조금만 옮겨도 접근할 수 있는 곳에 위치해 있는 것도 중요하다.
플래시 메모리(flash memory)
- USB 메모리, SD 카드, SSD 모두 플래시 메모리 기반의 보조기억장치
- 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장장치
- 종류
- NAND 플래시 메모리: 오늘날 대용량 저장장치
- NOR 플래시 메모리
플래시 메모리의 종류
- 하나의 셀에 몇 비트를 저장할 수 있느냐에 따라 종류가 나뉜다.
- SLC 타입: 하나의 셀에 1비트
- 한 셀로 두 개의 정보(0,1) 표현
- 빠른 입출력
- 수명이 긴 편
- 용량 대비 가격이 높다.
- 기업에서 데이터를 읽고 쓰기가 매우 많을 때, 고성능 빠른 저장 장치가 필요한 경우 사용
- MLC 타입: 하나의 셀에 2비트
- 한 셀로 4 개의 정보 표현(대용량화 유리)
- 시중에서 많이 사용
- TLC 타입: 하나의 셀에 3비트
- 한 셀로 8개의 정보 표현(대용량화 유맄)
- 수명과 속도가 떨어지지만, 용량 대비 가격이 저렴하다.
- 시중에서 많이 사용
- QLC 타입: 하나의 셀에 4비트
구분 | SLC | MLC | TLC |
---|
셀당 bit | 1bit | 2bit | 3bit |
수명 | 길다 | 보통 | 짧다 |
읽기/쓰기 속도 | 빠르다 | 보통 | 느리다 |
용량 대비 가격 | 높다 | 보통 | 낮다 |
가비지 컬렉션(garbage collection)
플래시 메모리의 단위
셀(cell) ⊂ 페이지(page) ⊂ 블록(block) ⊂ 플레인(plane) ⊂ 다이(die)
페이지의 상태
- Free: 데이터 x, 새로운 데이터를 저장할 수 있는 상태
- Valid: 유효한 데이터를 저장하고 있는 상태
- Invalid: 유효하지 않은 데이터(쓰레기값)을 저장하고 있는 상태
- 플래시 메모리는 덮어쓰기가 불가능, valid 상태에서 새 데이터 저장 x
가비지 컬렉션
유효한 페이지들만을 새로운 블록으로 복사, 기존의 블록을 삭제하는 가능

⬆️ 동작 예시: 새롭게 저장된 C와 기존에 저장되어 있는 B는 그대로 둔 채 기존의 A만을 A'로 수정하고 싶다.
7-2 RAID의 정의와 종류
보조기억장치를 더욱 안전하고 빠르게 활용하는 방법, RAID
RAID의 정의
- Redundant Array of Independent Disks
- 데이터의 안정성 혹은 높은 성능을 위해 여러 개의 물리적 보조 기억장치를 마치 하나의 논리적 보조 기억장치처럼 사용하는 기술
- 여러 개의 하드 디스크나 SSD를 마치 하나의 장치처럼 사용
RAID의 종류
RAID 레벨: RAID를 구성하는 기술
- 가장 대중적인 RAID0, RAID1, RAID4, RAID5, RAID6
- 레이드 혼합 방식(Nested RAID)
- 예) RAID 0, RAID 1 혼합 → RAID 10
RAID 0

- stripe: 줄무늬처럼 분산되어 저장된 데이터
- striping: 분산하여 저장하는 것
- 데이터가 스트라이핑 되면 저장된 데이터를 읽고 쓰는 속도가 빨라진다.
- 단점: 하드 디스크 중 하나에 문제가 생긴다면 모든 하드 디스크의 정보를 읽는데 문제가 발생할 수 있음. 안전하지 않음
RAID 1

- 복사본을 만드는 방식(mirroring)
- 장점: 백업, 복구가 매우 간단하다
- 단점: 하드 디스크 개수가 한정되었을 때 사용 가능한 용량이 줄어든다
RAID 4

- RAID 1 처럼 완전한 복사본을 만드는 대신 오류를 검출하고 복구하기 위한 정보를 저장한 장치를 두는 방식
- 페리티 비트(parity bit)
- 나머지 장치들의 오류를 검출/복구
- 본래 검출용 정보지만, RAID에서는 오류 복구도 가능
- 단점: 새로운 데이터가 저장될 때마다 페리티를 저장하는 디스크에도 데이터를 쓰게 됨. 고로, 병목 현상 발생 문제
RAID 5
- 페리티 정보를 분산하여 저장하는 방식, RAID 4의 병목 현상 해소

RAID 6
- 기본적으로 RAID 5와 같으나, 두 개의 다른 패리티를 두는 방식
BIOS 설정에서 RAID를 구성할 수 있음
08 입출력장치
8-1 장치 컨트롤러와 장치 드라이버
장치 컨트롤러
입출력 장치를 연결하기 위한 하드웨어적 통로
전송률(transfer rate): 데이터를 얼마나 빨리 교환할 수 있는지를 나타내는 지표
- 일반적으로 CPU, 메모리의 데이터 전송률은 높지만, 입출력장치의 데이터 전송률은 낮다.
장치 컨트롤러(device controller)의 역할
- CPU와 입출력장치 간의 통신 중개
- 오류 검출
- 데이터 버퍼링:
- 전송률이 높은 장치(CPU)와 낮은 장치(입출력장치)에 사이에 주고받는 데이터를 버퍼라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법
- 버퍼(임시 저장 공간)에 데이터를 조금씩 모았다가 한꺼번에 내보내거나, 데이터를 한 번에 많이 받아 조금씩 내보내는 방법
- 장치 컨트롤러는 일반적으로 전송률이 높은 CPU와 전송률이 낮은 입출력장치와의 전송률 차이를 데이터 버퍼링으로 완화한다.
장치 컨트롤러의 내부

출처: 영어위키

- data register: CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터(버퍼 역할)
- status register: 상태 정보 저장. 입출력 작업할 준비가 되었는가, 작업이 완료되었는가, 오류는 없는가 상태 정보 저장
- control register: 입출력 장치가 수행할 내용에 대한 제어 정보 저장
장치 드라이버(device driver)
- 장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램
- 입출력장치를 연결하기 위한 소프트웨어적인 통로
- 인식하고 진행하는 주체는 운영체제.
8-2 다양한 입출력 방법
프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력
프로그램 입출력(programmed I/O)
- 프로그램 속 명령어로 입출력 장치를 제어하는 방법
- CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어짐.
CPU는 입출력 장치들의 주소와 명령어를 어떻게 아는 걸까? 또는 CPU는 장치 컨트롤러의 레지스터들을 어떻게 아는 걸까?
- 메모리 맵 입출력(memory-mapped I/O): 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법. 메모리와 입출력장치에 같은 명령어 사용이 가능하다.
- 고립형 입출력(isolated I/O): 메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하기 위한 방법. 입출력 전용 명령어를 사용해야 한다.
인터럽트 기반 입출력(Interrupt-Driven I/O)
- 입출력장치에 의한 하드웨어 인터럽트는 장치컨트롤러에 의해 발생한다.
1) CPU는 장치 컨트롤러에 입출력 작업 명령
2) 장치 컨트롤러가 입출력장치 제어, 입출력 수행
3) CPU는 다른 일(효율적)
4) 장치 컨트롤러가 입출력 작업을 모두 끝냈다. CPU에 인터럽트 요청 신호를 보냄
5) CPU는 하던 일을 잠시 백업, 인터럽트 서비스 루틴 실행
여러 입출력장치에서 인터럽트가 동시에 발생한 경우, 인터럽트들을 어떻게 처리할까?
- 순차적으로: 발생 순서대로
- 우선순위 고려
DMA 입출력
- Direct Memory Access: 입출력장치와 메모리가 CPU를 거치지 않고도 상호작용할 수 있는 입출력 방식. 직접 메모리에 접근.
- 시스템 버스에 연결된 DMA 컨트롤러(하드웨어)가 필요하다.
- 시스템 버스는 CPU와 DMA 컨트롤러와 동시 사용이 불가하다. 어떤 것은 기다려야 함. CPU 입장에서는 cycle stealing.
- 공용 자원
DMA 입출력 가정
- CPU는 DMA 컨트롤러에 입출력 장치의 주소, 수행할 연산, 메모리 주소 등 정보로 입출력 작업을 명령
- DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용, 입출력 작업 수행. 필요한 경우 메모리에 직접 접근하여 메모리를 읽고 쓴다.
- 입출력 장치가 끝나면 DMA 컨트롤러는 CPU에 인터럽트를 걸어 작업이 끝났음을 알린다.
입출력 버스
- DMA를 위해 DMA 컨트롤러가 시스템 버스를 너무 자주 사용하면 CPU는 시스템 버스를 이용할 수 없다.(CPU 는 쉬는데...)
- 그래서, 입출력 버스(input/output bus): DMA 컨트롤러와 장치 컨트롤러들을 별도에 버스에 연결함.
- 현재의 컴퓨터는 입출력 버스가 있다.

-
종류
1) PCI 버스(Peripheral Component Interconnect bus): 컴퓨터 메인 보드에 주변 장치를 장착하는 데 쓰이는 컴퓨터 버스의 일종

PCI 확장 슬롯
2) PCI Express(PCle) 버스(Peripheral Component Interconnect express bus)

Two types of PCIe slot on an Asus H81M-K motherboard
매번 읽으면서 CS 공부를 하게 되네요. 오늘도 유익한 글 감사합니다☺️