Skip to content

Latest commit

 

History

History
94 lines (87 loc) · 7.77 KB

week10_0717.md

File metadata and controls

94 lines (87 loc) · 7.77 KB
  • 섹터블록에 대해 설명하시오.

    • 섹터
      • 블록 장치물리적 으로 접근할 수 있는 가장 작은 단위이다.
      • 섹터의 크기는 2의 거듭제곱 값이다.
      • 가장 일반적으로 512바이트다.
      • 모든 장치 입출력이 섹터 단위로 이루어진다.
    • 블록
      • 프로그램 측면 에서 논리적 으로 접근할 수 있는 최소 단위
      • 블록은 파일시스템 추상화 개념이다.
        • 블록 장치물리적 으로 접근 가능한 최소 단위가 섹터이므로, 파일시스템을 추상화 한 블록의 크기는 섹터보다 작을 수 없다.
        • 블록의 크기는 섹터 크기의 배수이다.
          • 섹터 크기의 배수이면서 2의 거듭제곱 형태가 되어야 한다.
          • 페이지의 크기보다 클 수 없다.
            • 이는 커널을 단순화시키기 위한 인공적인 제약 사항이다.
            • 블록의 크기가 페이지보다 크지 않다면 buffer_head구조체의 b_page 포인터 변수 하나로 해당 버퍼가 속한 페이지를 가리킬 수 있다.
  • bio구조체에 대해 설명하시오.

    • bio구조체는 커널 내부에서 블록 입출력을 전달하는 기본 장치로 현재 진행 중인 블록 입출력 동작을 세그먼트들을 리스트 형태로 관리한다.

    • 세그먼트버퍼

      • 세그먼트
        • 가상 주소와 물리 주소가 모두 연속적인 버퍼
      • 버퍼
        • 디스크 상의 블록을 메모리 상에 표현하는 객체
        • 각 버퍼마다 buffer_head 구조체 서술자를 갖는다.
    • 하나의 세그먼트는 메모리 상에서 연속적 이지만, 세그먼트들의 리스트는 그럴 필요가 없다.

      • bio구조체는 scatter-gather 를 기능을 지원하여 메모리 상에 연속적이지 않은 메모리 위치로부터 데이터를 전송받거나 메모리 상에 연속적이지 않은 메모리 위치로 데이터를 전송할 수 있다.
  • buffer_head구조체와 bio구조체의 차이점을 제시하시오.

    • buffer_head

      • 하나의 버퍼를 표현하는 구조체
      • 디스크 상의 블록과 메모리 상의 버퍼의 연결 관계를 정의하는 데이터가 담겨 있다.
    • buffer_head vs bio

      • 2.6 커널 이전에는 입출력 단위로 buffer_head를 사용하였다.
      • 기존 buffer_head의 문제점
        • 하나의 버퍼만을 다루는 buffer_head의 특성 상 큰 블록 입출력 요청을 처리할 때 모든 요청을 버퍼 단위로 분할해서 처리해야 한다.
          • 요청을 버퍼 단위로 처리하는 것은 간단하지 않고 좋은 방법이 아니다.
          • 분할된 버퍼마다 하나의 buffer_head구조체를 가지므로 메모리를 낭비한다.
      • buffer_head의 문제점을 해결한 bio
        • biobuffer_head추상화 한 것이다.
          • 근거
            • 하나의 버퍼만을 표현하는 것을 넘어, 앞으로 처리할 세그먼트들의 리스트를 유지하는 자료구조이기 때문이다.
          • 추상화 의 이점
            • bio구조체는 물리적 페이지를 다루므로 상위 메모리를 쉽게 표현할 수 있다.
            • 여러 물리적 페이지에 걸친 데이터를 처리하는 scatter-gather 기법을 사용할 수 있다.
            • 기존 블록버퍼의 간단하지 않은 연결 관계를 담느라 무거웠던 buffer_head의 한계를 극복하고, 블록 입출력 작업을 처리하는 데 필요한 최소한의 정보 만을 담아 훨씬 가벼워졌다.
    • buffer_head는 더 이상 사용하지 않는가?

      • bio에는 불록 입출력 작업을 처리하기 위한 정보만 담고 있으므로, 개별 버퍼에 대한 상태 정보를 가지고 있지 않다.
      • 따라서 개별 버퍼의 정보를 담고 있는 buffer_head의 역할이 없어진 것은 아니다.

    biobuffer_head는 서로 자신의 규모를 작게 유지할 수 있는 공생 관계 이다.

  • deadline, as, cfq, noop을 비교하시오.

    • deadline
      • 데드라인 입출력 스케줄러
      • starvation문제를 해결하기 위해 별도의 데드라인 큐 를 마련한다.
      • 구성
        • 정렬 큐
          • 섹터 번호를 기준으로 헤드와 가까운 순서대로 정렬
        • 데드라인 큐
          • read FIFO & write FIFO
            • 데드라인 순서대로 정렬
      • 동작 원리
        • 데드라인 큐 에서 데드라인을 넘긴 요청이 있는지 확인한다. 있으면 해당 요청을 실행한다.
          • read FIFO 큐 의 우선순위가 더 높은데, 그 이유는 사용자 프로세스가 읽기 요청을 보내고 대기하는 경우가 많고, 그렇기에 읽기 요청을 빠르게 처리하는 것이 시스템 성능에 중요한 요인이 되기 때문이다.
        • 데드라인 큐 에서 처리해야 할 요청이 없으면 정렬 큐 의 요청을 처리한다.
    • as
      • 예측 입출력 스케줄러
      • 데드라인 입출력 스케줄러 의 동작을 기본으로 한다.
      • 데드라인 입출력 스케줄러 와의 차이점
        • anticipation heuristic
          • 특정 요청을 처리한 다음 바로 다음 요청을 처리하는 대신, 미리 설정한 시간 동안 아무 일도 하지 않고 대기한다.
            • 대기 시간 은 통계치를 기준으로 적절한 시간을 계산한 것이다.
              • 대기 시간 을 올바르게 예측 하는 것이 예측 입출력 스케줄러 의 핵심이다.
          • 대기 시간 동안에 인접 영역에 해당하는 요청이 오면 처리하고, 오지 않으면 애초에 존재하던 다음 요청을 처리한다.
    • cfq
      • 완전 공정 큐 입출력 스케줄러
      • 프로세스마다 큐를 할당한다.
        • 각 큐는 섹터 위치에 따른 정렬을 한다.
      • synchronous requests
        • 프로세스의 동기적인 요청들은 프로세스마다 가지고 있는 큐로 들어간다.
        • 프로세스우선순위에 따라 타임 슬라이스를 가지고 있고, 그 시간 동안 디스크에 독점적으로 접근 가능하다.
        • 각 큐는 SCAN방식으로 요청을 처리한다.
        • 각 큐는 디스크를 독점적으로 사용하기 전에, asanticipation heuristic 과 비슷한 개념인 slice_idle 시간만큼 기다렸다가 디스크 사용을 시작한다.
          • 이는 해당 큐의 프로세스가 독점적으로 디스클 사용할 수 있는 기회를 얻었을 때 최대한 많은 요청을 다루기 위함이다.
      • asynchronous requests
        • 모든 프로세스가 17개의 우선순위를 가진 큐를 공유한다.
          • 이 큐들은 round robin방식으로 요청을 처리한다.
    • noop
      • 무동작 입출력 스케줄러
      • 인접 요청과의 병합을 제외하면 탐색 시간을 줄이기 위한 어떠한 알고리즘도 사용하지 않는다.
        • 하드디스크처럼 헤드의 움직임을 최소화 해야 하는 장치가 아닌 임의 접근이 가능한 플래시 메모리와 같은 장치를 사용한다면 noop은 좋은 선택지가 된다.