[운영체제] 10. 대용량 저장장치 구조

임호연·2021년 5월 21일
0

기록

목록 보기
11/20
post-thumbnail

대용량 저장장치 구조

하드디스크 드라이브

구성요소

  • 실린더
  • 섹터
  • 트랙
  • 디스크 암

전송속도

  • 디스크와 컴퓨터까지의 전기적 전송속도

  • 임의엑세스시간

    탐색시간(해당 암이 앞뒤로 수직이동, 실린더로 들어오기)

    회전시간(디스크가 회전하는 시간, 해당 섹터로 들어오기)

비휘발성 메모리 장치(NVM, non volatile memory device)

좋은 점

  • 움직이는 부품이 없기에 안정성이 높고 탐색시간이 빠르다.
  • 전력도 싸다

안 좋은 점

  • 비싸다

  • 페이지 단위로 읽고 쓸 수 있지만 overwrite은 불가능하다.

  • 삭제는 블록단위로 이루어진다.

    시간이 존내걸린다.

  • 삭제 횟수가 넘으면 셀이 죽어버린다.

특이한 기법

  • 가비지 수집

    빈 공간으로 유효한 메모리들을 복사한 뒤, 삭제를 박는다.

  • 이거를 위해서, 한 20% 정도의 공간은 남겨 놓는다.

  • 일부러, 삭제박는 블록을 이리저리 카운팅해가며 평균적으로 비슷하게 해서 마모를 막는다.

    드라이브거 알아서 해 준다.

연결 방법

  • SATA, NVMe

논리주소 매핑 방법

  • 논리 블록주소는 순차적으로 유지되지만, 물리적 섹터 위치는 변경시킨다

    각종 최적화를 위함이겠지

  • 각종 최적화

    • 베드섹터를 숨기기

    • 트랙당 섹터수가 일정하지 않다.

      안쪽은 작고 바깥쪽은 크다

    • 디스크 제조업체가 이러한 논리블록주소와 실제주소를 알아서 매핑하기때문에 알 수 있는 일이 없다.

디스크 스케줄링

  • LBA를 물리적 주소로 매핑하는 책임이 드라이브에 있다. 따라서, 정확하지는 않지만, 그래도 어느정도 가시성을 준다.

피포

SCAN

  • 양쪽 끝에 있는 거는 서비스를 잘 못 받는다.

    대기할 시간이 적다는 맥락이다.

  • 기아가 적긴 하겠다.

C-SCAN

  • 기아가 적긴 하겠다.

SSTF

  • 그냥 현 위치에서 가까운 것으로

CLOOK, LOOK

  • 그냥 갈떄까지만 가고, SCAN처럼 꺾는다.

CFQ

  • 프로세스마다 관리, C-Scan
  • 프로레스들은 라운드로빈으로 실행.

NVM 스케줄링

  • FCFS사용

    읽기는 그냥 하지만

    쓰기같은 경우는 시간이 조금 걸리므로

    인접한 요청 병합하도록 수정

  • 쓰기 연산 시 개지랄을 다하므로 병목이 발생할 수 있다.

초기화 단계

  • 물리적 포맷팅 → 기본적으로, 물리블록주소를 논리블록주소로 바꿔줄 수 있는 최소한의 하드웨어 관리

    섹터 크기 설정 등,,

  • 파티션 → 그룹으로 나누고, 별도의 장치처럼 취급하는 일.

  • 여러 파티션이 합쳐서 볼륨이 될 수도 있겠죠?

  • 논리적 포매팅과 파일시스템 생성이 다음 단계입니다.

    초기 자료구조를 올려놓고요,,

    여기에는 가용공간이나 초기의 빈 디렉터리,,

손상된 블록 관리

전체를 다 훓기

  • 훓어서 이상한 애들을 블락처리

예비섹터 만들기

  • 애초에, 가용 섹터를 몇 개 빼둔다.
  • 만약, 컨트롤러가 ECC를 계산했는데 뭔가 손상의 흔적이 발견되면, 예비섹터로 포워딩을 한다.
  • 논리 블록 주소를 기반으로 한 실린더 최적화 등이 먹히게 하기 위해, 가능한 동일 실린더의 예비섹터를 잡겠다.

섹터 밀어내기

  • 내가 17번이 고장났어
  • 근데 빈 예비섹터가 35번이야
  • 그러면 18~34를 다 한칸 밀어내고,
  • 18번을 비워준다.

11.6 스왑공간 관리

두가지 방법

  • 사용자 공간에다가 그냥 생성

    관리가 매우 편하다.

  • 별도의 RAW 파티션 할당

    속도효율성 최적화된 알고리즘 사용

    관리가 좀 불편한다.

    스왑공간을 늘리려면 새로 만들던가, 아니면 다른 장소에 또 만들어야 한다.

리눅스에서

  • 만약 파일에 대한 페이지라면, 가져오기보다는 그냥 바로 파일시스템에 박는다.
  • 스왑공간은 그냥 스택이나 힙등의 익명메모리를 위함이다.

저장 장치 연결 방법

  • 호스트 저장

    그냥 컴퓨터에 박기

  • 네트워크연결(NAS)

  • 클라우드 저장장치

    NAS와 차이점은, NAS는 실제로 마운트되지만

    클라우드는 API를 통한 통신이다.

    NAS는 LAN에서 사용할 거를 전제로 했기 때문에,

    그냥 지연시간과 오류율이 되게 낮았다.

  • SAN

    그냥, 저장장치 배열을 중간에서 관리하는, 네트워크 프로토콜이 아니라 저장장치 프로토콜을 사용하는 중간매개체가 있다.

    이것들이, 그냥 일반 장치처럼 서로를 연결한다.

레이드

디스크 시스템에서의 병렬성

  • 데이터스트레이핑
  • 부하균등화
  • 규모가 큰 액세스의 응답시간을 줄인다.
  • 만약, 디스크 8개 있다면, 8비트를 한번에 읽을 수 있는 기적

레이드 0(콘켓)

레이드 0(스트라이프)

레이드1

  • 쓰기 두번 발생 귀찮다.

레이드2

  • 해밍코드

레이드3/4

  • 패리티연산에 대한 부담이 물론 있다.
  • 쓰기할 때 마다 패리티연산을 해야되니까.

레이드5

  • 하나만 터져야 복구 가능

레이드6(2차패러티)

  • 2개가 터져도 복구 가능

레이드의 선택

  • 레이드1은 복구는 쉽다.

    하나만 뺴면 되니까

  • 레이드 5는 모든 디스크를 다 뒤져야 하므로 시간이 꽤나 오래 걸린다.

단점

  • 파일포인터같은 소프트웨어적인게 제대로 복구 안 되어 있을 수도 있따.

  • 조금 한정적이다

    만약, 디스크가 5개인데, 디스크 하나가 사실은 parity를 4개 밖에 못 담는 어이없는 상황이랄까..

    • 그래서 ZFS
      그냥 malloc, free같은 간편한 모델

객체저장소

  • 하둡은 키벨류처럼,, 그냥 구조화되지 않은 데이터를 객체로 저장하고 관리한대
  • 몰라시발

부팅 방법

  1. 디스크 내의 MBR을 자동으로 불러오게 한다.
  2. boot code는 블록을 읽을 정도의 최소한의 프로그램이다.
  3. 그리고, partition table을 통해 boot 파티션으로 간다.

profile
해탈하자

0개의 댓글