- Published on
보조기억장치와 입출력 장치
- Authors
- Name
- 손예지(Liv)
본 시리즈는 혼자 공부하는 컴퓨터 구조 책을 스터디 하며 남기는 기록 중 네번째 시리즈 입니다. 이전 시리즈 보러가기
보조기억장치
다양한 보조기억장치
하드 디스크
- 자기적인 방식으로 데이터 저장하는 보조기억장치
- 플래터
- 하드디스크에서 데이터 저장되는 곳
- 스핀들
- 플래터를 회전시키는 구성요소(가운데 동그라미)
- 단위 : 분당회전수 RPM
- 플래터를 회전시키는 구성요소(가운데 동그라미)
- 헤드
- 플래터를 대상으로 데이터를 읽고 쓰는 구성요소
- 헤드는 디스크 암에 부착 -> 원하는 위치로 헤드 이동시킴
- 플래터에 데이터가 저장되는 방식
- 저장 단위 : 트랙(track), 섹터(sector)
- 트랙을 모아 연결한 단위는 실린더
- 저장된 데이터에 접근하는 과정
- 탐색 시간(seek time)
- 접근하려는 데이터가 저장된 트랙까지 헤드를 이동시키는 시간
- 회전 지연(rotational latency)
- 헤드가 있는 곳으로 플래터를 회전시키는 시간
- 전송 시간(transfer time)
- 하드디스크 - 컴퓨터 간 데이터 전송하는 시간
- 탐색 시간(seek time)
플래시 메모리
- 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장장치
- 일상에서 사용하는 전자제품 대부분에 사용
- 종류
- SLC(Single Level Cell)
- 한 셀로 두개 정보 표현
- 수명이 가장 길지만 용량대비 가격도 가장 높음
- 고성능, 빠른 저장장치 필요한 경우 SLC 사용
- MLC(Multiple Level Cell)
- 한 셀로 네개 정보 표현 -> 한 셀에 두비트씩 저장
- 대용화 하기 좋다
- 한 셀로 네개 정보 표현 -> 한 셀에 두비트씩 저장
- TLC(Triple Level Cell)
- 한 셀로 여덟개 정보 표현
- 용량 대비 저렴한 가격
- 썼다 지우기를 자주 반복, 높은 성능 : SLC
- 저가의 대용량 저장 장치 : TLC
- 중간 : MLC
- SLC(Single Level Cell)
- 단위
- 셀 < 페이지 < 블록 < 플레인 < 다이 die
- 페이지의 세개 상태
- Free
- Valid
- 유효한 데이터를 저장하고 있는 상태
- Invalid
- 쓰레기값 이라고 부르는 유효하지 않은 데이터 저장한 상태
- 플래시 메모리에서 저장된 데이터를 수정할때 덮어쓰는게 불가능 해 이전 값은 쓰레기 값이 됨
- 사용하지 않지만 용량을 차지하고 있는 문제 -> 해결하기 위해 garbage collection 기능 제공
- 유효한 페이지만 새로운 블록으로 복사하고 기존 블록을 삭제하여 공간 정리하는 기능
RAID의 정의와 종류
- 정의
- RAID(Redundant Array of Independent Disks)
- 여러개의 물리적 보조기억장치를 하나의 논리적 보조기억장치처럼 사용하는 기술
- 종류
- RAID 0
- 데이터를 보조기억장치 갯수만큼 나눠서 저장
- 저장된 데이터 : stripe
- 분산해 저장하는 것 : striping
- 데이터를 여러개에 나눠서 읽어오기 때문에 한개의 보조기억장치보다 갯수만큼 빨라진다
- 단점
- 한개의 하드디스크에 문제가 생겨도 다른 하드디스크를 읽지 못할수도
- 데이터를 보조기억장치 갯수만큼 나눠서 저장
- RAID 1 = mirroring
- 저장하는 데이터의 복사본을 만듬
- 복구가 간단
- 단점
- 복사본의 용량만큼 사용자가 사용 불가능 -> 비용증가
- RAID 4
- 완전한 복사본과 오류 검출을 위한 저장장치를 따로 두는 방식
- 패리티 비트
- 오류 검출만 가능 하지만 RAID에서는 오류 수정도 가능
- RAID 5
- RAID4의 병목현상 해결하기 위해
- 패리티 정보를 분산해 저장해 병목현상 해결
- RAID 6
- 두개의 패리티
- RAID5 보다 느림 -> 저장 속도 보다 데이터를 안전하게 보관하고 싶을때 사용
- 혼합
- 여러 RAID 레벨을 혼합한 방식 : Nested RAID
- RAID 0
입출력장치
장치 컨트롤러와 장치 드라이버
장치 컨트롤러
- 입출력 장치가 다루기 어려운 이유
- 입출력 장치 종류가 많음 -> 규격화 어려움
- 입출력 장치의 데이터 전송률은 CPU와 메모리에 비해 적음
- -> 컴퓨터에 직접 연결되지 않고 장치 컨트롤러 통해 연결
- 장치 컨트롤러 역할
- CPU와 입출력 장치 간 통신 중계
- 오류 검출
- 데이터 버퍼링
- 데이터를 임시저장공간 버퍼에 담았다가 조금씩 내보내는 방법
- 데이터 레지스터
- 상태 레지스터
- 제어 레지스터
장치 드라이버
- 장치 컨트롤러의 동작을 감지, 제어
- 장치 컨트롤러가 컴퓨터 내부와 정보 주고받게 하는 역할
- 장치 드라이버는 운영체제 통해서 실행된다
다양한 입출력 방법
프로그램 입출력
- CPU가 명령어를 어떻게 읽을까
- 메모리 맵 입출력 memory-mapped I/O
- 메모리에 접근하기 위한 주소공간과 입출력장치에 접근하기 위한 주소공간을 하나의 주소공간으로 간주
- 고립형 입출력
- 메모리에 접근하는 주소공간, 입출력 장치에 접근하는 주소공간을 분리
- 메모리 맵 입출력 memory-mapped I/O
- 인터럽트 기반 입출력
- 인터럽트 발생 -> CPU - 하드웨어 사이에서 장치 컨트롤러가 입출력 제어
- 인터럽트가 동시에 발생하면?
- 순서대로 처리
- 우선순위가 높은 인터럽트 처리
- 프로그래머블 인터럽트 컨트롤러 사용
DMA 입출력
- 입출력장치와 메모리가 cpu를 거치지 않고 상호작용할 수 있는 방식
- DMA 컨트롤러(하드웨어) 필요
- 시스템 버스는 공용자원이어서 CPU와 DMA 컨트롤러가 동시에 사용 불가
- CPU가 시스템 버스 사용하지 않을때, CPU가 일시적으로 시스템 버스 이용하지 않도록 하고 이용
- 사이클 스틸링(cycle stealing)
- 입출력 버스
- DMA 를 위해 시스템 버스 자주 사용하게 되는 문제 해결하기 위해 사용
- DMA 컨트롤러 통해서 장치 컨트롤러가 연결 -> 시스템 버스 사용 빈도 줄임
- 입출력 전용 CPU(입출력 프로세서, 입출력 채널) 도 만들어짐
알게된 점
가비지 컬렉션이 자바에서 동작하는 건 알고 있었는데 플래시메모리를 공부하면서 하드웨어에도 가비지 컬렉션이 있다는 것을 알게되었습니다.
자바에서는 JVM에서 객체의 참조 여부를 확인해 더이상 참조되지 않는 데이터를 가비지 컬렉션으로 제거하지만 플래시 메모리에서는 데이터를 수정할 경우 데이터를 덮어쓸 수 없기 때문에 가비지 컬렉션이 필수적입니다. Invalid 상태의 데이터가 생기고 가비지 컬렉션을 통해서 새롭게 데이터를 저장할 공간을 확보합니다.
참고자료
혼자 공부하는 컴퓨터 구조 + 운영체제
How the Garbage Collector Works in Java, Python, and Go!
HotSpot Virtual Machine Garbage Collection Tuning Guide