생각해보기
운영체제 -저장장치 관리- 본문
대용량 저장장치 구조
HDD
정보를 플래터상 자기적으로 기록하여 저장하고 플래터의 자기 패턴을 감지하여 정보를 읽는다
- 플래터 : CD 처럼 생긴 원판 모양
- 읽기 쓰기 헤드 : 모든 플래터 표면 바로 위에서 움직인다
- 디스크 암 : 모든 헤더를 한꺼번에 이동시킨다
- 트랙 : 플래터 표면을 원형으로 나눈다
- 섹터 : 트랙의 한 부분으로 각 섹터는 크기가 고정되어 가장 작은 전송 단위다.
- 실린더 : 동일한 암 위치에 있는 트랙의 집합을 말한다
일부 드라이브는 사용하지 않을 때 전원이 꺼지고 I/O 요청을 받으면 회전한다
데이터 전송 시간외에도 데이터 접근 시간이 필요하다(I/O 요청이 느린 이유)
- 디스크 암을 원하는 실린더로 이동하는 시간(탐색시간)
- 원하는 섹터가 디스크 헤드 위치까지 회전하는 데 걸리는 시간(회전 지연시간)
비휘발성 메모리 장치
NVM 장치는 기계식이 아니라 전기식이다. 플래시 메모리 기반 NVM은 SSD라고도 한다. 일반적으로 플래시 NAND 다이 반도체 칩으로 구성된다.
NVM 장치는 움직이는 부품이 없어 HDD보다 안정성도 높고 데이터 접근 시간이 없으므로 빠르다
단점은 HDD 보다 가격이 비싸고 용량이 작다
NAND 반도체는 데이터를 덮어쓰기 위해서는 NAMD 셀을 먼저 지워야한다. 또한 데이터 삭제를 할때 마다 기능이 열화되어 수명이 짧아진다. 따라서 컨트롤러를 통해 전반적인 셀의 평균 마모 수준을 맞춘다.
SSD 가득 찬 경우, 데이터를 지운다. 지울 때 가비지 수집 -> 셀 단위로 지우기 때문에 유효한 페이지 저장해야 한다. 쓰기 성능을 높이기 위해 과잉 공급(언제나 쓸 수 있는 페이지 따로 준비하는 것) 사용
보조저장장치 연결 방법
보조 저장장치는 시스템 버스 또는 I/O 버스에 의해 컴퓨터에 연결된다. 가장 일반적인 연결방법은 SATA이다
호스트 컨트롤러는 컴퓨터에 있는 컨트롤러이다.
각 저장장치에는 장치 컨트롤러가 있다.
사용자 명령 -> 호스트 컨트롤러 -> 장치 컨트롤러 -> 장치 명령 수행
DMA를 통해 보조 장치의 캐시와 호스트 DRAM 사이에서 데이터 전송이 이루어진다.
주소 매핑
저장장치는 논리 블록의 커다란 1차원 배열처럼 주소가 매겨진다. 논리 블록은 가장 작은 전송 단위다. 각 논리 블록은 물리 섹터 또는 반도체 페이지로 매핑된다
디스크 스케줄링
운영체제는 효율적으로 하드웨어를 사용할 수 있도록 제어할 수 있어야 한다. HDD의 경우 접근 시간을 최소화 하고 전송 대역폭을 최대화 해야한다.
HDD 스케줄링
- 선입 선출 스케줄링 : 입/출력 요청이 디스크 큐에 온 순서대로 처리
- SCAN 스케줄링 : 디스크 암이 디스크 한 끝에서 시작하여 다른 끝으로 이동하면서 가는 요청을 모두 처리한다. 다른 끝에서 도달하면 역방향으로 이동하면서 요청을 처리한다
- CSAN 스케줄링 : 각 요청에 걸리는 시간을 좀 더 균등하게 하기 위한 SCAN의 변형, 한쪽 끝에 다다르면 반대 방향으로 헤드를 이동하는 것이 아니라. 처음 시작했던 자리로 돌아가서 서비스 한다
NVM 스케줄링
NVM 장치에는 디스크 헤드가 없으므로 일반적으로 FCFS 정책을 사용한다
오류 감지 및 수정
오류 감지
- 체크섬 : 데이터를 모두 더하고 보수를 취하는 방법 (carry가 발생한 경우 값을 버리는 경우와 더하는 경우가 있음)
- 패리티 비트 : 홀수와 짝수 개수에 따라 여분의 비트로 체크하는 것
- CRC: 생성된 비트로 XOR 연산을 하고 나머지를 데이터에 추가해서 오류를 판단한다. 나머지가 0이면 정상
볼륨과 파티션
볼륨: 단일 파일 시스템을 사용해서 액세스 할 수 있는 저장공간, 즉 파일 시스템으로 포맷된 디스크상의 저장영역
파티션 : 디스크의 공간을 논리적인 별도의 데이터영역으로 분할한 공간
디스크를 파티션으로 구분하고,
각 파티션을 볼륨으로 만들고,
그 볼륨에는 파일 시스템으로 포맷해서 사용
비유
- 사무실 한 층이 하드디스크 전체의 볼륨
- 직원들 자리마다 파티션이 쳐져 있음
- 그리고 그 파티션으로 나누어진 덩어리들도 각각의 볼륨으로 볼 수 있음
- 그래서 파티션이 곧 볼륨이라고 언급되기도 함
효율성을 높이기 위해 대부분의 파일 시스템은 블록을 클러스터라고 하는 더 큰 청크로 묶는다.
스왑
스왑공간 사용
- 파일 시스템 : 할당과 관리 편함
- raw 파티션 : 성능이 좋음
* raw 파티션 : 파일 시스템 자료구조 없이 파티션으,ㄹ 대용량 순차 배열 처럼 사용하는 기능
보조저장 장치 접근
- 호스트 연결 방식 - 로컬 i/o 포트를 통해 엑세스 되는 저장장치 ex) usb
- 네트워크 연결 방식 - 네트워크를 통해 저장장치 엑세스 ex) nas
- 클라우드 저장장치 - 네트워크 연결 방식과 유사하지만 앱 api 기반
RAID
여러개의 디스크를 엮어 하나의 논리적인 볼륨으로 묶는 것 - 신뢰성과 성능을 목적으로 한다
- RAID 0 : 스트라이핑 (여러 디스크에 나누어서 저장)
- RAID 1 : 미러링(데이터 다른 디스크에 복제)
- RAID 4 : 스트라이핑 + 오류 검출을 위해 패리티 비트를 다른 디스크에 저장
- RAID 5 : 패리티 비트를 디스크들에 나누어 저장
RAID 1 + 0 과 RAID 0 + 1
RAID 1+0은 RAID 1 방식인 미러링 방식(데이터 복제만 한다)과 striping 방식(신뢰도 상관없이 분산 저장)을 합친 방식이다.
두 방법의 차이는 Mirroring을 먼저하느냐(RAID 1+0) Striping을 먼저하느냐(RAID 0+1) 차이다.
Disk가 불량이 나면 실 운영상 RAID 1+0 구성이 유리하다
- RAID 1+0 의 경우, 이미 Mirroring 후 Striping을 진행하므로 미러링으로 묶인 하드를 통해서 손실된 데이터만 복원 가능
- RAID 0+1의 경우, Mirroring 전 Striping을 진행하므로 그룹핑(RAID 0) Data 전체를 복구한다
스냅숏 : 마지막 갱신이 일어나기 전의 파일 시스템의 모습
복제 : 중복성과 복수를 위해 자동으로 분리된 지역에 같은 내용 쓰는 것
입출력 시스템
표준적 하드웨어 요소 개념 (포트, 버스, 장치 컨트롤러)들로 입출력 장치를 추상화 하여 다양한 입출력 장치 수용가능하게 한다.
장치 드라이버는 모든 하드웨어를 일관된 인터페이스로 표현해 준다 또한 이러한 인터페이스 상위층인 커널의 입출력 서브 시스템에 제공한다.
하드웨어 장치
- 포트 : 하드웨어 장치와 컴퓨터 시스템의 연결점
- 버스 : 하나 이상의 장치가 공동으로 사용하는 선, 회선의 집합. 프로토콜 까지 포함한다
- 데이지 체인 : A-B-C-(컴퓨터 포트) 처럼 각 장치가 체인 형태로 구성되있는 것. 하나의 버스 처럼 동작한다
PCI 버스(일반적인 PC system bus) : 프로세서-메모리 서브 시스템
확장 버스 : 키보드, USB 포트 등 주변 장치 연결
컨트롤러 : 포트, 버스 또는 장치를 작동할 수 있는 전자장치의 집합체
메모리 맵드 입출력(Memory-Mapped I/o)
모든 컨트롤러는 레지스터를 가지고 있으며 본체의 프로세서는 이 레지스터를 쓰거나 읽어 입출력을 수행한다
이러한 특수 장치 제어 레지스터를 프로세서 공간에 사상하는 방법이다.
오늘날 대부분의 I/O는 메모리 맵드 I/O를 사용하여 장치 컨트롤러가 수행한다
입출력 장치 컨트롤러
- 입력 레지스터 : 호스트가 입력을 얻기 위해 읽기를 수행한다
- 출력 레지스터: 호스트가 데이터를 출력하기 위해 쓰기를 수행한다
- 상태 레지스터: 호스트가 읽는 용도로 명령의 완료, 오류등 상태를 보고한다
- 제어 레지스터: 호스트가 주변 장치에 입출력 명령을 내리거나 장치 모드를 변경하기 위해 사용한다
폴링
호스트가 반복적으로 하드웨어 컨트롤러 상태를 체크한다, 바쁜 대기를 하기 때문에 효율적이지 않음
인터럽트
하드웨어 컨트롤러가 자신의 상태가 바뀌었을 때 CPU에게 통보한다. 호스트가 반복적으로 상태 체크를 하지 않으므로 폴링보다 효율적이다.
CPU는 매 명령어 끝나고 다음 명령어 수행전에 인터럽트 처리 라인을 검사한다.
인터럽트 핸들링
- 특수한 상황에 인터럽트 발생 연기 시키는 능력 필요하다
- 모든 장치를 폴링 하지 않고 어떤 장치가 인터럽트를 일으켰는지 아는 방법 필요하다
- 여러개의 인터럽트가 병행 발생 할때 우선순위 처리 방식 필요하다
- 페이지 폴트, 0 나누기 오류 같은 활동에 대해 운영체제의 주의를 돌릴 수 있는 방법 필요하다 (트랩)
CPU는 두 종류의 인터럽트
- 마스크 불가 인터럽트 : 해당 인터럽트 기능 중단 불가
- 마스크 가능 인터럽트 : 해당 인터럽트 기능 중단 가능
인터럽트 백터 테이블에서 적절한 인터럽트 서비스 루틴을 선택한다. (인터럽트 백터 -> 인터럽트 서비스 루틴)
인터럽트가 백터 내에 있는 주소 보다 더 많은 수의 장치가 있으므로 각 항목은 리스트로 관리한다
0~31 마스킹 불가능 우선순위 높음, 32~255 마스크 가능 우선순위 낮음
운영체제 인터럽트 사용
- 하드웨어 입출력을 위한 인터럽트
- 가상 메모리 페이징을 위한 인터럽트 (페이지 폴트가 일어날 경우 인터럽트가 일어난다. 해당 프로세스는 페이지가 메모리에 올라올 때 까지 대기 상태로 보낸다)
- 시스템 콜 수행(소프트 웨어 인터럽트 or 트랩)을 위해 사용한다
인터럽트는 비동기적으로 일어나는 이벤트를 처리하고 커널 모드를 수행하기 위한 방도로 사용된다. 이러한 인터럽트는 우선순위가 있다.
DMA
DMA는 주변장치(하드디스크, 그래픽 카드 등)들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능입니다.
CPU의 개입 없이 I/O 장치와 기억장치 사이의 데이터를 전송하는 접근 방식
응용 입출력 인터페이스
모든 입출력 장치들이 일관된 방법으로 다루어질 수 있도록 운영체제가 인터페이스를 구성하는 기술
장치 드라이버는 인터페이스를 구현한다
입출력 장치 특징
- 문자 스트림과 블록
- 순차 접근과 임의접근
- 동기식과 비동기식
- 공유와 전용
- 동작 속도
- 읽기/쓰기, 읽기 전용, 한 번만 쓰기.
대표적인 입출력 인터페이스
- 블록 장치 인터페이스 - 디스크나 이와 유사한 블록 지향 장치(데이터베이스)를 사용하기 위한 인터페이스
- 네트워크 소켓 인터페이스 - 네트워크 입출력 제공
blocking io 와 non blocking io
봉쇄형 : 입출력이 끝날 때 까지 기다린다
비봉쇄형 : 입출력이 끝날 때 까지 기다리지 않음 - 콜백 루틴이 필요하다
커널 입출력 서브 시스템
입출력 스케줄링
입출력을 요청하는 순서를 효율적으로 재배치 하는 것이다.
버퍼링
데이터가 전송되는 동안 전송 데이터를 임시로 메모리 영역에 저장하는 것
사용 이유
- 생산자와 소비자 사이에 속도가 다른 것을 대처하기 위해
- 다른 장치간의 데이터 전송 크기 차이를 완충하기 위해
- 간단하게 데이터 복제본을 만들기 위해
캐싱
빠른 메모리 영역에 자주 사용될 자료의 복사본을 저장하는 것
캐시된 복사본을 사용하면 원래 자료를 사용하는 것보다 효율적이다
스풀링
여러 응용 프로그램의 출력을 번갈아 쓸 수 없을 때 따로 버퍼를 통해 출력 데이터를 보관하고 작업이 끝났을 때 한번에 처리하는 것
Streams
응용 프로그램이 동적으로 드라이버 코드의 파이프라인을 조립할 수 있게 한다
입출력 효율 높이기 위한 방법
- 문맥 교환의 빈도를 줄인다
- 메모리에서 장치와 응용프로그램 사이에 데이터가 복사되는 횟수를 줄인다
- 인터럽트 빈도를 줄인다
- DMA등으로 CPU 입출력 부담을 줄이고, 입출력과 주 연산이 될수록 많이 중첩되도록 한다
- CPU, 메모리, 버스, 입출력 등에 대한 부하가 균일하게 되도록 한다
'스터디' 카테고리의 다른 글
운영체제 - 파일 시스템 (0) | 2022.02.21 |
---|---|
가상 면접 사례로 배우는 대규모 시스템 설계 기초 -1- (0) | 2022.02.18 |
운영체제 -메모리- (0) | 2022.02.06 |
대규모 서비스를 지탱하는 기술 -3- (0) | 2022.02.04 |
대규모 서비스를 지탱하는 기술 -2- (0) | 2022.02.04 |