인터럽트 지연시간

  • 인터럽트가 발생한 시점부터 해당 인터럽트에 대한 처리가 시작되는 시점까지의 시간
  • 실시간 시스템은 특정 작업을 정해진 시간 내에 완료하는 것이 중요하기 때문에, 인터럽트 처리에 대한 지연은 시스템의 전반적인 성능에 큰 영향을 미칠 수 있습니다. 따라서 실시간 운영체제는 인터럽트 지연시간을 최소화하는 것이 중요합니다.
  • 커널 자료구조를 갱신하는 동안 인터럽트가 불능케 되는 시간은 뭐야?
    • 인터럽트 지연시간의 한 부분으로, 이는 커널이 중요한 자료구조를 안전하게 변경하거나 업데이트할 수 있도록 보장하는 시간
    • 커널은 이러한 자료구조를 갱신하는 동안 인터럽트를 비활성화하거나, 또는 락(lock) 같은 동기화 메커니즘을 사용하여 동시 액세스를 방지합니다. 이렇게 인터럽트가 비활성화되거나 락이 걸린 시간 동안 인터럽트는 처리되지 않으므로, 이 시간은 인터럽트 지연시간에 포함됩니다.

페이징

  • 페이징(Paging)은 가상 메모리 시스템에서 사용되는 기법으로, 물리 메모리를 일정한 크기의 페이지로 나누고, 이 페이지들을 가상 주소와 매핑하여 메모리를 관리하는 방식입니다. 이를 통해 프로세스가 필요한 메모리를 비연속적인 물리 메모리 공간에서도 연속적으로 사용할 수 있게 해줍니다.

역 페이지 테이블

  • 역 페이지 테이블(Inverted Page Table, IPT)은 가상 메모리 시스템에서 사용되는 데이터 구조 중 하나입니다. 일반적인 페이지 테이블은 가상 주소를 물리 주소로 매핑하는데 사용되지만, 역 페이지 테이블은 이와 반대로 물리 주소를 가상 주소로 매핑합니다.
  • 장점:

전통적인 페이지 테이블에서는 각 가상 페이지마다 항목이 있어야 하므로, 가상 주소 공간이 크면 페이지 테이블도 매우 커집니다. 이는 메모리를 많이 사용하게 되는 문제를 야기합니다.

반면, 역 페이지 테이블에서는 물리 메모리의 각 페이지마다 항목이 있습니다. 따라서, 물리 메모리 크기에 비례하는 공간만 사용하게 되므로 메모리 사용량을 크게 줄일 수 있습니다.

  • 단점:

그러나 역 페이지 테이블은 주소 변환 과정이 복잡해지며, 이로 인해 주소 변환 시간이 더 오래 걸릴 수 있습니다. 이는 역 페이지 테이블에서는 가상 주소를 찾기 위해 전체 테이블을 검색해야 하기 때문입니다. 이 문제를 해결하기 위해 보통 연관 메모리(Associative Memory) 또는 해시 기법 등을 사용하여 검색 성능을 향상시킵니다.

커널 메모리

  • 운영체제의 커널은 시스템의 핵심적인 부분으로, 항상 메모리에 존재해야 하며 빠르게 접근할 수 있어야 합니다. 따라서 커널 코드나 데이터는 페이징 시스템의 영향을 받지 않고, 물리 메모리의 특정 영역에 항상 로드되어 있습니다. 이를 통해 커널 코드나 데이터에 대한 접근 속도를 높이고, 시스템의 안정성을 유지합니다. 이러한 영역은 보통 '커널 공간' 또는 '커널 메모리'라고 부릅니다.

페이지 폴트

  • 컴퓨터 시스템에서 가상 메모리를 사용할 때 발생하는 특정 유형의 인터럽트입니다.
  • 프로세스가 실행되면서 메모리에 접근하려고 할 때, 해당 메모리 주소가 물리 메모리에 실제로 로드되어 있지 않은 경우에 페이지 폴트가 발생합니다. 이는 가상 메모리 시스템에서 프로세스가 접근하려는 페이지가 현재 물리 메모리에 존재하지 않는 상황을 가리킵니다. 이런 상황은 "페이지 미스(page miss)"라고도 부릅니다.
  • 페이지 폴트가 발생하면 운영체제는 해당 페이지를 디스크에서 찾아 물리 메모리로 로드하고, 프로세스가 계속 실행될 수 있도록 합니다. 이 과정은 페이지 폴트 핸들러에 의해 처리되며, 이는 운영체제의 일부입니다.
  • 페이지 폴트는 가상 메모리 시스템의 핵심적인 부분이지만, 너무 많은 페이지 폴트가 발생하면 시스템의 성능을 저하시킬 수 있습니다. 이는 각 페이지 폴트마다 디스크 I/O가 필요하기 때문이며, 디스크 I/O는 CPU 연산에 비해 상당히 느린 작업입니다. 이런 현상을 스레싱(thrashing)이라고 부릅니다.

페이지 수와 페이지 폴트의 관계

  • 페이지 프레임의 수를 늘리면 프로세스가 메모리에 더 많은 페이지를 유지할 수 있습니다. 이는 프로세스가 자주 사용하는 페이지가 메모리에 더 잘 유지되도록 하여 페이지 폴트율을 줄일 수 있습니다. 즉, 프로세스가 필요한 페이지를 메모리에서 바로 찾을 가능성이 높아지므로, 디스크에서 페이지를 불러오는 비용이 줄어듭니다.
  • 반면에 페이지 프레임의 수를 줄이면 메모리에 유지할 수 있는 페이지의 수가 줄어듭니다. 이는 프로세스가 필요로 하는 페이지가 메모리에 없을 가능성이 높아지므로, 페이지 폴트율이 증가할 수 있습니다. 즉, 프로세스가 필요로 하는 페이지를 디스크에서 불러와야 하는 경우가 더 많아집니다.

페이지의 크기와 성능 관계

  1. 페이지 테이블의 크기:
    • 페이지의 크기가 작을수록 페이지 테이블의 크기는 증가합니다. 페이지 테이블은 주소 공간의 크기에 따라 결정되므로, 작은 페이지 크기로 세분화된 주소 공간은 더 많은 페이지 테이블 엔트리를 필요로 합니다.
  2. 메모리 사용 효율:
    • 페이지의 크기가 작을수록 메모리 사용 효율이 향상됩니다. 작은 페이지 크기는 작은 단위로 메모리를 할당하므로 내부 단편화가 적어집니다. 따라서, 더 많은 페이지를 메모리에 로드하여 메모리 공간을 효율적으로 사용할 수 있습니다.
  3. 디스크 입출력 시간:
    • 페이지의 크기가 작을수록 디스크 입출력 시간이 증가할 수 있습니다. 작은 페이지 크기는 한 번의 페이지 폴트에도 많은 페이지를 디스크에서 읽어와야 하므로 입출력 작업이 더 많이 발생할 수 있습니다.
  4. 지역성과 직결된 입출력:
    • 페이지의 크기가 작을수록 지역성과 직결된 입출력이 증가합니다. 작은 페이지 크기는 프로세스가 한 번에 사용하는 데이터 양을 줄여 지역성을 높일 수 있으며, 이는 캐시 히트율을 향상시키고 입출력 작업을 줄일 수 있습니다.
  5. 페이지 폴트 발생 횟수:
    • 페이지의 크기와 페이지 폴트 발생 횟수는 복잡한 상호작용을 가지며, 일반적으로 페이지의 크기가 작을수록 페이지 폴트 발생 횟수는 증가합니다. 작은 페이지 크기는 한 번에 로드되는 데이터 양이 적기 때문에 더 자주 페이지 폴트가 발생할 수 있습니다.

요구 페이징

일반적으로 프로세스는 모든 코드와 데이터를 메모리에 올려놓고 실행됩니다. 하지만 이렇게 모든 페이지를 미리 메모리에 올려놓는 것은 비효율적일 수 있습니다. 왜냐하면 프로세스의 일부분만이 실제로 실행되기 때문에 모든 페이지를 메모리에 올려놓는 것은 낭비일 수 있기 때문입니다.

요구 페이징은 이러한 낭비를 줄이기 위해 필요한 페이지들만 메모리에 동적으로 로드합니다. 프로세스가 실행될 때 해당 페이지에 접근하면, 운영체제는 해당 페이지를 디스크에서 메모리로 로드합니다. 이로 인해 필요한 페이지만 메모리에 올라가므로, 메모리 사용이 효율적으로 이루어지고 여유 공간을 더 많이 확보할 수 있습니다.

모바일 운영체제

  • 모바일 운영체제에서는 일반적으로 스와핑을 지원하지 않습니다.
    • 스와핑: 메모리에 적재된 프로세스나 데이터를 하드 디스크로 이동시키는 것을 말합니다
    • 이는 모바일 기기의 제한된 메모리 용량과 전력 소모 등의 이유로 인해 결정된 것입니다. 스와핑은 디스크로의 많은 I/O 작업을 필요로 하며, 이는 모바일 기기의 성능과 배터리 수명에 부정적인 영향을 미칠 수 있기 때문입니다.
  • 요구 페이징은 파일 시스템에서 필요한 페이지를 로드하여 메모리에 올리기 때문에 스와핑이 필요하지 않습니다. 따라서 메모리 부족 상황에서는 요구 페이징을 통해 필요한 페이지들을 로드하고, 필요하지 않은 페이지를 디스크로 내보내어 메모리를 효율적으로 관리합니다.
  • 모바일 운영체제는 메모리가 부족하게 되면 응용에서 코드와 같은 읽기 전용 페이지를 방출합니다. 이것은 메모리를 확보하기 위한 방법 중 하나입니다. 운영체제는 응용에서 방출된 페이지가 필요하면 다시 메모리에 로드합니다.

클러스트 테이블 페이지

  • 데이터베이스에서 사용되는 페이지 구조 중 하나입니다. 주로 클러스터형 인덱스(Clustered Index)를 기반으로 데이터를 저장하는 테이블에서 사용됩니다.
    • 클러스터형 인덱스는 테이블의 주요 정렬 기준을 기반으로 데이터를 물리적으로 정렬하는 인덱스입니다. 이렇게 데이터를 물리적으로 정렬하는 것은 효율적인 데이터 접근과 쿼리 성능 향상을 목적으로 합니다. 클러스터형 인덱스를 사용하는 테이블은 클러스터 테이블이라고도 부릅니다.
  • 클러스터 테이블은 테이블의 데이터를 물리적으로 연속적인 블록에 저장하기 때문에, 클러스터 테이블 페이지는 일반적으로 연속적인 블록으로 구성됩니다. 즉, 한 페이지에 여러 개의 행이나 레코드가 저장될 수 있습니다.
  • 해시 테이블과 유사하지만 각 항목이 하나 이상의 여러 페이지를 가리킨다 특히 드문드문한 주소 공간을 나타내는 데 유용하다(메모리 참조는 연속적이지 않고 여기저기 흩어지게 된다)

디렉토리 구조로 사용 되는 해시 테이블

  • 디렉토리 구조에서 해시 테이블은 파일 시스템의 디렉토리 구조를 표현하는 데 사용됩니다. 디렉토리는 파일의 이름과 해당 파일의 위치 또는 메타 데이터를 매핑하는 역할을 합니다. 이를 위해 해시 테이블은 파일 이름을 해시 함수에 적용하여 버킷에 매핑하고, 각 버킷에는 파일 이름과 해당 파일의 위치 또는 메타 데이터에 대한 참조가 저장됩니다.
  • 해시 테이블은 **데이터의 삽입, 검색, 삭제에 대해 상수 시간(O(1))**에 수행할 수 있으므로, 많은 파일이 있는 디렉토리에서도 효율적인 파일 검색이 가능합니다. 또한, 해시 테이블은 빠른 액세스 속도를 제공하기 위해 해시 버킷의 개수를 조정할 수 있으며, 충돌을 해결하기 위한 다양한 충돌 해결 기법을 적용할 수 있습니다.
  • 하지만 디렉토리 구조로 사용되는 해시 테이블크기가 고정되어 있고, 작은 크기의 해시 테이블은 충돌이 자주 발생할 수 있습니다. 또한, 해시 테이블의 크기에 따라 해시 기능의 제약이 있을 수 있습니다. 이러한 한계를 극복하기 위해서는 적절한 해시 함수 선택, 충돌 해결 기법의 적용, 동적 크기 조정 등을 고려하여 디렉토리 구조의 해시 테이블을 설계해야 합니다.

비순환 그래프 디렉토리

  • 비순환 그래프 디렉토리 구조는 파일 시스템에서 사용되는 특정한 디렉토리 구조입니다. 이 구조는 그래프 형태를 가지며, 디렉토리와 파일 간의 공유에 유연성을 제공합니다. 일반적인 트리 구조와 달리, 비순환 그래프 디렉토리 구조는 디렉토리가 여러 개의 부모 디렉토리를 가질 수 있습니다.
  • 비순환 그래프 디렉토리 구조는 파일 시스템의 유연성을 향상시키기 위해 사용됩니다. 이 구조에서는 디렉토리와 파일 간의 공유가 가능하므로, 동일한 파일을 여러 디렉토리에서 참조하거나, 디렉토리 간에 공통된 하위 디렉토리를 가질 수 있습니다. 이를 통해 파일과 디렉토리의 구조를 더욱 유연하게 조직할 수 있습니다.
  • 비순환 그래프 디렉토리 구조의 장점은 파일과 디렉토리 간의 공유가 자유롭다는 것입니다. 한 파일이 여러 디렉토리에 속할 수 있으므로 파일을 논리적인 그룹에 속하게 할 수 있습니다. 또한, 하나의 디렉토리가 다른 디렉토리의 하위 디렉토리로 동시에 속할 수 있어 디렉토리 간의 관계를 유연하게 설정할 수 있습니다
  • 하지만 비순환 그래프 디렉토리 구조는 사용되지 않는 디스크 공간을 회수하기 위해 쓰레기 수집(garbage collection)이 필요하다는 단점이 있습니다. 쓰레기 수집은 사용되지 않는 파일이나 디렉토리를 식별하고 삭제하여 디스크 공간을 확보하는 작업입니다. 이 작업은 파일 시스템의 성능에 영향을 미칠 수 있으므로 효율적인 쓰레기 수집 알고리즘을 사용해야 합니다.

디스크 메타데이터 갱신에 대한 로그

  • 디스크 파일 시스템에서 발생하는 메타데이터 변경 작업을 기록하는 로그입니다. 메타데이터는 파일 시스템에서 파일 및 디렉토리의 속성, 위치, 크기 등을 관리하는 정보입니다. 디스크 메타데이터 갱신 로그는 이러한 메타데이터 변경 작업을 추적하고 기록하여 파일 시스템의 일관성과 내구성을 유지하는 데 도움을 줍니다.
  • 디스크 메타데이터 갱신 로그는 보통 트랜잭션 로그(transaction log) 또는 저널 로그(journal log)라고도 불립니다. 이 로그는 파일 시스템의 일관성을 유지하기 위해 사용되는 트랜잭션 기법을 적용하여 메타데이터 변경 작업을 기록합니다. 예를 들어, 파일 생성, 삭제, 이동, 속성 변경 등의 작업이 수행될 때 해당 작업을 로그에 기록합니다.
  • 디스크 메타데이터 갱신 로그는 장애나 시스템 충돌 등의 예기치 않은 상황에서 파일 시스템의 일관성을 복구하는 데 사용됩니다. 로그에는 메타데이터 변경 작업이 순서대로 기록되므로, 시스템이 다시 시작되거나 복구 과정에서 로그를 검사하여 변경 작업을 재실행하고 파일 시스템을 이전 상태로 복원할 수 있습니다. 이를 통해 파일 시스템의 데이터 손실을 방지하고 일관성을 유지할 수 있습니다.
  • 디스크 메타데이터 갱신 로그는 파일 시스템의 성능에도 영향을 줍니다. 로그는 디스크에 지속적으로 기록되어야 하므로 디스크 I/O 작업이 추가로 필요하게 됩니다. 따라서 로그 기록에 따른 성능 저하를 최소화하기 위해 효율적인 로깅 방법과 로그 관리 전략이 필요합니다.
  • 요약하면, 디스크 메타데이터 갱신에 대한 로그는 파일 시스템에서 발생하는 메타데이터 변경 작업을 기록하는 로그로, 파일 시스템의 일관성과 내구성을 유지하기 위해 사용됩니다. 로그는 예기치 않은 상황에서 파일 시스템을 복구하는 데 도움을 주며, 성능 저하와 관련된 고려사항도 있습니다.

CPU 스케줄링 기법

  • Rate-Monotonic 스케줄링 기법(Rate-Monotonic Scheduling)은 주기적인 작업을 처리하는 데 사용되는 스케줄링 알고리즘입니다. 각 작업에는 주기(Period)가 할당되며, 주기가 짧을수록 우선순위가 높아집니다.
  • Earliest Deadline First(EDF)는 마감 시간이 가장 빠른 작업을 우선적으로 처리하는 스케줄링 알고리즘입니다.
  • 차이점
    • Rate-Monotonic은 주기가 짧은 작업에 더 높은 우선순위를 부여하므로 주기가 짧은 작업이 먼저 수행됩니다. 따라서, 마감 시간을 준수하기 위해서는 주기 내에 수행을 완료해야 합니다.
    • EDF는 마감 시간이 가장 빠른 작업을 우선적으로 처리하므로 마감 시간을 가장 빠르게 준수할 수 있습니다. 주기에 상관없이 마감 시간을 준수하도록 작업이 스케줄링됩니다.

프로세스 스케줄링

  • 결정론적 모델링 방법은 확률적 요소를 고려하지 않고, 예측 가능한 정확한 모델을 사용하여 시스템을 모델링하는 방법을 말합니다. 예를 들어, 각 프로세스의 도착 시간과 CPU 버스트 시간이 정확히 주어졌을 때, 이를 바탕으로 알고리즘의 성능을 분석하고 평가하는 것이 결정론적 모델링 방법입니다.

페이지 교체 기법

  • FIFO (First-In-First-Out) 페이지 교체 기법: 페이지 참조열을 순서대로 처리하면서 가장 오래된 페이지를 교체합니다.
  • Optimal 페이지 교체 기법: 미래에 참조될 페이지 중에서 어떤 페이지가 가장 오랫동안 사용되지 않을지를 미리 예측하여 교체합니다. (이 기법은 실제로 구현하기 어려움)
  • LRU (Least Recently Used) 페이지 교체 기법: 가장 오랫동안 참조되지 않은 페이지를 교체합니다.
    • LRU 페이지 교체 기법을 구현하는 방법은 두 가지가 있습니다.
      • 카운터로 구현 모든 페이지 항목은 카운터를 가진다; 페이지가 참조될 때마다 클록을 이 카운터로 복사한다. 페이지를 교체해야 하는 경우, 가장 작은 카운터 값을 가진 페이지를 찾는다.
      • 스택으로 구현 이중 연결 리스트를 사용하여 페이지 번호의 스택을 구현 페이지가 참조되면: top으로 이동 6개의 포인터를 변경해야 함 그러나 각 갱신의 경우에는 비용이 더 듬 교체를 위한 검색은 필요하지 않음
      • LRU와 OPT는 Belady’s Anomaly가 없는 stack algorithms

디스크 스케줄링

  • SSD에는 해당되지 않음
  • 시작점: 53 예시(큐): 67, 65, 124, 14, 122, 37, 183, 98
  • 실린더의 범위는 0~199로 가
  1. FCFS (First-Come, First-Served): 이것은 가장 단순한 스케줄링 알고리즘이며, 첫 번째로 요청이 들어온 순서대로 처리합니다.
    1. 53->67->65->124->14->122->37->183->98
  2. SSTF (Shortest Seek Time First): SSTF 알고리즘은 현재 디스크 헤드 위치에서 가장 가까운 요청을 먼저 처리합니다. 이 방법은 평균적으로 가장 짧은 시간 동안 요청을 처리하는데, 하지만 특정 요청이 계속 지연될 수 있는 '기아' 현상이 발생할 수 있습니다.
    1. 53->65->67->37->14->98->122->124->183
  3. SCAN (Elevator Algorithm): SCAN 알고리즘은 엘리베이터가 한 방향으로 이동하면서 각 층에서 승객을 태우는 방식과 유사합니다. 디스크 헤드는 한 방향으로 움직이면서 그 방향에 있는 모든 요청을 처리하고, 끝에 도달하면 반대 방향으로 움직이면서 또 다시 모든 요청을 처리합니다. 이 방법은 모든 요청이 공정하게 처리될 수 있도록 합니다.
    1. 53->37->14->0->65->67->98->122->124->183
  4. C-SCAN (Circular SCAN): SCAN 알고리즘의 변형으로, 디스크 헤드는 한 방향으로만 움직이면서 요청을 처리하고, 끝에 도달하면 바로 반대편으로 빠르게 돌아가서 다시 요청을 처리하는 방식입니다. 이 방법은 더 고른 응답 시간을 제공할 수 있습니다.
    1. 53->65->67->98->122->124->183->199->0->14->37
  5. LOOK and C-LOOK: 이들은 SCAN과 C-SCAN의 변형으로, LOOK은 요청이 더 이상 없는 곳까지가 아니라 마지막 요청까지만 이동하고 방향을 바꾸며, C-LOOK 역시 마찬가지로 요청이 있는 곳까지만 이동하고 반대 방향 끝으로 빠르게 돌아갑니다.
    1. SCAN-LOOK: 53->37->14->65->67->98->122->124->183
    2. CSCAN-LOOK: 53->65->67->98->122->124->183->0->14->37

'CS > OS' 카테고리의 다른 글

가용 공간 관리  (0) 2023.06.06
제목: ZFS: 아키텍처, 개념, 주요 기능, 장단점  (0) 2023.06.05
파일 시스템  (0) 2023.05.31
파일, 디스크, 디렉터  (0) 2023.05.29
대용량 저장장치 시스템 1  (0) 2023.05.23

가용 공간 관리

  • 그룹핑(Grouping): 가용 공간을 특정 기준에 따라 여러 그룹으로 분류하는 것
    • 디스크 공간: 파일 시스템, 디렉토리, 파일 유형
  • 카운팅(Counting): 각 그룹에 속하는 공간의 양을 세는 것
    • 특정 디렉토리에 속하는 파일들이 차지하는 디스크 공간의 총량을 계산
  • 효율성(Efficiency):
    • 디스크 할당 방법: 연속 할당, 연결 할당
    • 파일의 디렉터리 항목에 유지되는 데이터의 유형
    • 메타데이터 구조의 선-할당 또는 필요시 할당
    • 고정 또는 가변 크기 자료구조
  • 성능:
    • 데이터와 메타데이터를 가깝게 유지
    • 자주 사용하는 블록을 위한 별도의 메인 메모리 영역 버퍼 캐시의 히트율
    • 동기적, 비동기적
    • 사용 후 반환(Free-behind): 사용한 데이터를 바로 반환 하는 것
    • 미리 읽기(read-ahead): 다음 블록을 사용할 것이라 예상하고 미리 읽는 것
    • 페이지 캐쉬와 버퍼 캐쉬를 합쳐서 통합 버퍼 캐쉬를 사용

Bit map or Bit vector

  • 각각의 비트가 특정 자원을 나타내는 1차원 배열
  • 디스크 공간 관리에서 각 비트는 디스크의 특정 블록을 나타낸다.
  • 비트가 1이면 해당 블록이 사용 중임을 나타내고, 0이면 블록이 사용 가능함을 나타낸다.
  • 크기가 작을 때 유리하며 파일 사이즈가 커지면 감당하기 힘들다.

연결 리스트

  • 공간의 낭비가 없고 전체 순회 할 필요가 없다.

ZFS

  • 장치 공간을 metaslab 단위로 나누고 metaslab을 관리
  • 특정 볼륨은 수백 개의 metaslab을 포함한다.
  • 각 metaslab은 연관된 공간 맵을 가진다.
  • 모든 블록 관련 행동을 로그 파일로 기록
  • 트랜잭션 기반 연산

NFS

NFS는 "Network File System"의 약자로
다른 컴퓨터 시스템의 파일들을 내 컴퓨터 파일 시스템에 마운트 하여 사용 할 수 있게 하는 개념
일반적으로 UNIX와 같은 네트워크 운영 체제에서 사용되며, 파일과 디렉토리를 공유하고 원격 파일을 로컬 컴퓨터에서 사용하는 것처럼 엑세스 할 수 있다.이를 통해 사용자는 자신의 시스템에서 직접적으로 파일을 수정, 이동, 또는 삭제 하는 것이 가능해 진다.
  • 서버와 클라이언트 개념으로 논리적 연결을 통해 작동한다.
  • 마운트 연산은 마운트 할 원격 디렉토리의 이름과 이를 저장하는 서버 시스템의 이름을 필요로 한다.
  • 마운트 연산은 사용자의 관점만 변경하며 서버 측에는 영향을 미치지 않는다.
  • NFS 서버는 상태가 없다. 각 요청은 모든 인자를 가지고 있어야 한다.

'CS > OS' 카테고리의 다른 글

운영체제 기말고사 교안  (2) 2023.06.12
제목: ZFS: 아키텍처, 개념, 주요 기능, 장단점  (0) 2023.06.05
파일 시스템  (0) 2023.05.31
파일, 디스크, 디렉터  (0) 2023.05.29
대용량 저장장치 시스템 1  (0) 2023.05.23

제목: ZFS: 아키텍처, 개념, 주요 기능, 장단점

1. ZFS 개론

ZFS(Zettabyte File System)는 Sun Microsystems가 원래 개발하고 현재는 Oracle이 유지 보수하는 고급 파일 시스템입니다. 이것은 2005년 Solaris 운영 체제의 일부로 처음 선보였습니다. ZFS의 독특한 특징 중 하나는 볼륨 관리자와 파일 시스템을 결합하여 일반적인 파일 시스템의 편리함과 볼륨 관리자의 유연성을 모두 가지고 있다는 것입니다. 즉, ZFS는 파일을 저장하는 것뿐만 아니라 하드 드라이브와 다른 저장 장치를 관리하며, 데이터를 안전하게 보호하는 역할을 합니다.

2. ZFS의 아키텍처와 개념

ZFS는 기본적으로 볼륨 관리자와 파일 시스템의 통합이라고 볼 수 있습니다. 이는 파일 데이터 및 메타데이터에 대한 블록 스토리지 풀, 즉 'zpool'을 관리하고, 이 풀에서 하나 이상의 파일시스템을 생성합니다. 이런 구조를 통해 ZFS는 저장 공간을 효과적으로 관리하고 확장성을 제공합니다.

3. ZFS의 주요 기능과 장점

  • 데이터 무결성 보장: ZFS는 체크섬 및 자가 수리 기능을 사용하여 데이터 무결성을 보장합니다. ZFS는 모든 파일 블록에 대한 체크섬을 생성하며, 이는 읽을 때마다 확인됩니다. 문제가 발생하면 가능한 경우 ZFS는 자동으로 이를 수정하려고 시도합니다.

  • RAID-Z: ZFS는 RAID-Z를 통해 데이터의 블록 수준 복제 및 패리티를 제공합니다. 이는 전통적인 RAID 5/6보다 효율적이며, 'write hole' 문제를 방지합니다. 이는 데이터를 보호하면서 동시에 데이터 저장 공간을 효율적으로 사용하는 방법입니다.

  • 스냅샷 및 클론: ZFS는 파일 시스템의 스냅샷을 빠르고 쉽게 생성할 수 있습니다. 이는 기존 데이터에 영향을 미치지 않고 특정 시점의 데이터 상태를 기록하는 방법입니다. 더 나아가, 이러한 스냅샷은 클론 파일 시스템으로 전환할 수 있습니다. 즉, 원본 데이터의 복사본

을 생성하고 이를 독립적으로 사용할 수 있습니다.

  • 쓰기 중심(copy-on-write) 방식: ZFS는 쓰기 중심 방식을 사용하여 데이터를 관리합니다. 이는 데이터를 새로운 위치에 쓰고 이전 데이터를 유지하는 방식입니다. 이 방식은 데이터 무결성을 보장하고, 시스템 오류나 손상으로부터 데이터를 보호하는 데 도움이 됩니다.

4. ZFS의 단점

  • 리소스 사용량: ZFS는 메모리 사용이 높습니다. 이는 ZFS가 데이터 무결성 및 성능을 위해 메모리 캐시를 사용하기 때문입니다. 이로 인해 ZFS는 큰 시스템에서 작동시키려면 상당한 양의 메모리가 필요합니다.

  • 리눅스 호환성: ZFS는 원래 Solaris를 위해 개발되었으며, 이로 인해 리눅스와의 호환성에 문제가 있습니다. 라이선스 문제로 인해 ZFS는 리눅스 커널에 직접 포함되지 않았으며, 별도로 설치해야 합니다.

  • 복잡성: ZFS는 많은 기능과 유연성을 제공하지만, 이러한 기능을 완전히 활용하려면 상당한 시간과 노력이 필요합니다. 따라서, ZFS를 처음 접하는 사람들에게는 이해하기 어렵고 복잡하게 느껴질 수 있습니다.

ZFS는 데이터 저장 및 관리에 대한 고급 솔루션을 제공하며, 특히 큰 스토리지 시스템에 대한 많은 효율적인 기능을 제공합니다. 그러나 이러한 효과를 최대한 활용하려면 사용자는 이를 이해하고 올바르게 관리하는 데 필요한 시간과 노력을 기울여야 합니다.

'CS > OS' 카테고리의 다른 글

운영체제 기말고사 교안  (2) 2023.06.12
가용 공간 관리  (0) 2023.06.06
파일 시스템  (0) 2023.05.31
파일, 디스크, 디렉터  (0) 2023.05.29
대용량 저장장치 시스템 1  (0) 2023.05.23

파일 시스템

  • 컴퓨터의 디스크에서 데이터를 저장, 검색, 공유하는 방식을 정의하는 것
  • 파일 구조: 관련된 정보의 묶음, 논리적 저장장치 단위
  • SSD에 상주하며 논리 장치를 물리 장치로 변환하여 저장장치에 대한 사용자 인터페이스를 제공한다.
  • 디스크에 대한 효율적이고 편리한 접근을 제공한다.
  • 디스크는 즉성에서 다시 쓰는 것이 가능하고 임의 접근을 제공한다.
  • File control block: 파일에 관한 정보로 구성된 저장장치 구조
  • 계층(트리) 구조를 이룬다.

inodes

  • index + node 합친 것
  • 유닉스에서만 쓰는 용어
  • 파일 컨트롤 블록
  • 권한, 만든 사람, 만든 시간
  • 가지고 있는 데이터 블록들의 번호 13개를 가지고 있음
  • inode가 가지고 있는 번호 10개는 실제 데이터가 있는 번호 3개는 실제 데이터가 있는 곳에 대한 인덱스 정보 
    • 1024*10 보다 큰 파일 이라면 간접 인덱싱 기법을 사용하여 표시
    • 하드디스크에 있는 데이터 블록 번호를 가르킴

파일 시스템 계층

  • 장치 드라이버(I/O control) 입출력 제어 층에서 입출력 장치를 관리
  • 기본 파일 시스템(basic file system)은 물리적 블록 번호를 장치 드라이버에게 전달 한다.
    • 버퍼는 전송 중인 데이터를 유지한다.
    • 캐시는 자주 사용되는 데이터를 유지한다.
  • 파일 구성 모듈(file-organization module)은 파일, 논리 주소, 및 물리 주소를 변환한다.
  • logical file system은 파일 제어 블록(unix의 inodes)를 유지하여 파일 이름을 파일 번호, 파일 핸들, 위치로 변환한다.

파일 시스템 주요 구성 요소 

  • API 수준에서 시스템 콜이 있만 해당 기능을 어떻게 구현하는가?
    • 디스크 및 메모리에 존재하는 구조로 구현됨
  • 부팅 제어 블록(Boot control block): 해당 볼륨에서 OS를 부팅하는데 필요한 정보가 포환된 블록
    • 구조: 부트 블럭(0), 슈퍼 블럭(1), inode 블럭(2 ~ n개)
    • 문제: 16개의 inode 블록이 있을 때 125번 데이터 블록은 몇번 inode에 존재하는가?
    • 풀이: 125/16 = 7..13 → inode 시작 번호는 2 따라서 9번 inode에 데이터 블록이 존재한다.
  • 볼륨 제어 블록(Volume control block): superblock, 마스터 파일이라 불리우며 볼륨 세부 정보가 포함된 블록
  • 파일 제어 블록: 파일 생성 날짜, 파일 주인 그룹 권한, 파일 사이즈, 파일 데이터 블록 위치 등이 기록된 해당 파일을 제어하는데 필요한 정보가 기록된 블록 
  • 마운트 테이블: 파일 시스템 마운트, 마운트 포인트, 파일 시스템 유형을 저장하는 공간 

메모리 내 파일 시스템 구조

가상 파일 시스템

  • 가상 파일 시스템 (VFS): Unix에서 파일 시스템을 구현하는 객체 지향 방식
  • 구현 객체 방식
    • inode: 파일 시스템 내의 각 파일이나 디렉토리를 고유하게 식별하는 정보를 가진 구조체
    • file: 프로세스가 파일을 열 때마다 생성되는 파일 구조체
    • superblock: 파일 시스템의 전반적인 정보를 저장하는 구조체
    • dentry: 파일 시스템 내의 파일이나 디렉토리 이름을 inode와 연결하는 역할을 가진 구조
  • 지원하는 객체 연산 집합
    • int open(): 파일을 열고 해당 파일에 대한 파일 디스크립터를 반환합니다.
    • int close(): 열려 있는 파일을 닫습니다.
    • ssize t read(): 열려 있는 파일에서 데이터를 읽습니다.
    • sszie t write(): 열려 있는 파일에 데이터를 씁니다.
    • int mmap(): 파일이나 장치를 메모리에 매핑합니다. 이를 통해 파일이나 장치의 일부 또는 전체를 직접 메모리에 액세스할 수 있게 해줍니다.

'CS > OS' 카테고리의 다른 글

가용 공간 관리  (0) 2023.06.06
제목: ZFS: 아키텍처, 개념, 주요 기능, 장단점  (0) 2023.06.05
파일, 디스크, 디렉터  (0) 2023.05.29
대용량 저장장치 시스템 1  (0) 2023.05.23
메모리 관리 기법  (0) 2023.05.22

파일 연산 종류

  • 파일은 추상 데이터 유형
  • Create
  • Write
  • Read
  • Resposition within file
  • Delete
  • Truncate
  • Open(F)
    • Open-file table: 열린 파일의 상태 저장소
    • File-open count: 파일이 열린 횟수를 나타내는 카운터
  • Close(F)

열린 파일 락킹

  • Shared lock: 여러 프로세스가 병행하게 획득할 수 있는 lock
  • Exclusive lock: 하나의 프로세스만 획득할 수 있는 lock
  • Mandatory: 요청된 락에 따라 접근이 거부
  • Advisory: 프로세스는 락의 상태를 확인할 수 있고 해야 할 일을 결정할 수 있다.

파일 구조

  • 간단한 레코드 구조
    • 고정 길이
    • 가변 길이
  • 복잡한 구조
    • 형식화된 문서
    • 재배치 가능 적재 파일
  • 적절한 제어 문자를 삽입하여 첫번째 구조로 나중 2개 구조를 시뮬레이트 할 수 있음
  • 누가 결정하는가?
    • Operating system
    • Program

디스크 구조

  • 디스크는 파티션으로 나누어 진다.
  • 파티션은 미니 디스크 슬라이스라고 불리며
    • 파일 시스템 없이 raw 형태로 사용하거나
    • 파일 시스템을 가지도록 포맷될 수 있다.
  • 파일 시스템을 포함하는 개체는 볼륨이라고 한다.
    • 각 볼륨은 장치 디렉터리 또는 볼륨 목차에서 해당 파일 시스템의 정보를 추적한다.

디렉터리

  • 디렉터리 연산
    • 파일 탐색
    • 파일 생성
    • 파일 삭제
    • 디렉터리 리스팅
    • 파일 이름 바꾸기
    • 파일 시스템 순회
  • 디렉터리 구성
    • 단일 단계 디렉터리: 모든 사용자가 하나의 디렉터리를 사용
      • 사용자 디렉토리
    • 두 단계 디렉터리: 각 사용자 마다 별도의 디렉터리 배정
      • 마스터 디렉토리(각 사용자들의 디렉터리) → 각각의 사용자 디렉토리
    • 트리 구조 디렉터리: 일반적으로 사용하는 디렉터리 구조
      • root 디렉토리 → 디렉토리 → 디렉토리…
    • 사이클이 없는 그래프 디렉터리: 공유 서브 디렉터리와 파일이 존재하는 구조
      • 서로 다른 디렉토리에서 공통으로 접근 가능한 경로가 존재하는

'CS > OS' 카테고리의 다른 글

제목: ZFS: 아키텍처, 개념, 주요 기능, 장단점  (0) 2023.06.05
파일 시스템  (0) 2023.05.31
대용량 저장장치 시스템 1  (0) 2023.05.23
메모리 관리 기법  (0) 2023.05.22
스레싱  (0) 2023.05.22

대용량 저장장치 구조 개관

  • 현대 컴퓨터의 보조저장장치의 대부분은 자기 디스크가 차지한다.
  • 디스크는 탈착 가능하다.
  • 드라이브 I/O bus를 통해 시스템에 부착한다.

하드 디스크

  • 바깥에 있는 트렉일 수록 섹터의 면적이 크다
    • 바깥으로 갈수록 면적이 넓긴 하지만 동일한 데이터가 저장된다.
  • 원하는 데이터를 얻기 위해서는 몇 번 track 인지 알고 어디 sector 에 위치해 있는지 알고 해당 섹터가 read-writer head 에 위치해야 한다.
  • 저장 용량: 30GB ~ 3TB
  • 성능: 5ms ~ 14.56ms
    • 접근 지연시간
    • 평균 접근 시간
    • 평균 탐색 시간 + 평균 지연시간
  • 낮은 단위 비용

반도체 디스크

  • HDD 보다 신뢰성이 더 좋다
  • MB 당 비용이 더 비싸다
  • 더 짧은 생명 주기를 가진다
  • 용량이 작지만 속도가 훨씬 빠르다
  • 버스는 너무 느릴 수 있다.
  • 기계식 부품이 없기 때문에 탐색 시간 또는 회전 지연시간이 없다.

디스크 구조

  • 매우 큰 1 차원 배열 형식의 논리 블록과 물리 블록으로 구성
  • 논리 블록의 1 차원 배열은 디스크의 섹터로 순차적으로 매핑된다.
    • 디스크 컨트롤러는 운영체제로부터 받은 논리 블록 주소를 사용해 해당 블록이 위치한 물리적인 디스크의 트랙과 섹터를 찾아 매핑한다.
  • 등선속도가 아닌 각 속도를 유지하여 어떤 트랙의 어떤 섹터든지 비슷한 속도로 찾아 갈 수 있도록 한다.

디스크 스케줄링

  • SSD에는 해당되지 않음
  • 시작점: 53 예시(큐):  67, 65, 124, 14, 122, 37, 183, 98
  • 실린더의 범위는 0~199로 가
  1. FCFS (First-Come, First-Served): 이것은 가장 단순한 스케줄링 알고리즘이며, 첫 번째로 요청이 들어온 순서대로 처리합니다.
    1. 53->67->65->124->14->122->37->183->98 
  2. SSTF (Shortest Seek Time First): SSTF 알고리즘은 현재 디스크 헤드 위치에서 가장 가까운 요청을 먼저 처리합니다. 이 방법은 평균적으로 가장 짧은 시간 동안 요청을 처리하는데, 하지만 특정 요청이 계속 지연될 수 있는 '기아' 현상이 발생할 수 있습니다.
    1. 53->65->67->37->14->98->122->124->183
  3. SCAN (Elevator Algorithm): SCAN 알고리즘은 엘리베이터가 한 방향으로 이동하면서 각 층에서 승객을 태우는 방식과 유사합니다. 디스크 헤드는 한 방향으로 움직이면서 그 방향에 있는 모든 요청을 처리하고, 끝에 도달하면 반대 방향으로 움직이면서 또 다시 모든 요청을 처리합니다. 이 방법은 모든 요청이 공정하게 처리될 수 있도록 합니다.
    1. 53->37->14->0->65->67->98->122->124->183
  4. C-SCAN (Circular SCAN): SCAN 알고리즘의 변형으로, 디스크 헤드는 한 방향으로만 움직이면서 요청을 처리하고, 끝에 도달하면 바로 반대편으로 빠르게 돌아가서 다시 요청을 처리하는 방식입니다. 이 방법은 더 고른 응답 시간을 제공할 수 있습니다.
    1. 53->65->67->98->122->124->183->199->0->14->37
  5. LOOK and C-LOOK: 이들은 SCAN과 C-SCAN의 변형으로, LOOK은 요청이 더 이상 없는 곳까지가 아니라 마지막 요청까지만 이동하고 방향을 바꾸며, C-LOOK 역시 마찬가지로 요청이 있는 곳까지만 이동하고 반대 방향 끝으로 빠르게 돌아갑니다.
    1.  SCAN-LOOK: 53->37->14->65->67->98->122->124->183
    2. CSCAN-LOOK: 53->65->67->98->122->124->183->0->14->37

'CS > OS' 카테고리의 다른 글

파일 시스템  (0) 2023.05.31
파일, 디스크, 디렉터  (0) 2023.05.29
메모리 관리 기법  (0) 2023.05.22
스레싱  (0) 2023.05.22
페이징  (0) 2023.05.21

Windows API의 공유 메모리 과정

  • 매핑될 파일을 위한 file mapping 생성
  • 맵드 파일의 view를 프로세스의 가상 주소 공간 내에 구축
    • 생산자는 공유 메모리 객체를 메모리 매핑을 기능을 이용하여 생성한다.
    • CreateFile()을 통하여 파일을 열고 HANDLE을 반환한다.
    • CreateFileMapping()을 토앟여 매핑을 생성하여 named shared-memory object를 생성
    • MapViewOfFile()을 통하여 view를 생성한다.

버디 시스템

  • 물리적으로 인접한 페이지로 구성된 고정 크기의 세그먼트를 사용하여 메모리 할당
  • power-of-2 allocator를 사용하여 메모리 할당
    • 2의 거듭제곱 크기 단위로 요청을 충족
  • ex: 256KB 청크가 있을 때 커널이 21KB를 요청한다면 256KB 를 128KB 크키의 2개로 분할 하고 또 한개를 64 → 32 로 분할하고 32에서 21KB를 할당 하는 방식
  • 장점: 사용되지 않는 청크를 더 큰 크기의 청크로 빠르게 병합 할 수 있다.
  • 단점: 단편화

대체 전략 슬랩 할당기

  • 슬랩(Slab)은 하나 이상의 물리적으로 인접한 페이지
  • 캐시(Cache)는 하나 이상의 슬랩으로 구성
  • 커널 자료구조 마다 하나의 캐시 배정
    • 각 캐시는 objects로 채워짐
  • 캐시가 생성될 때, free로 표시된 object로 채워짐
  • 자료구조가 저장될 때 object가 used로 표시
  • 슬랩이 사용중이면 다음 슬랩을 배정함
  • 장점: 단편화가 발생하지 않음

프리페이징

프로세스가 시작할 때 발생하는 많은 수의 페이지 폴트 개수를 줄이기 위하여프로세스가 필요로 할 것 같은 페이지를 참조되기 전에 메모리에 반입 하는 기법
그러나 프리페이징한 페이지가 사용되지 않으면 입출력과 메모리가 낭비된다.
s 개의 페이지가 프리페이징 되고, 그중 a 페이지만 사용한다고 가정 한다면
페이지 폴트를 줄인 비용 s*a 가 불필요하게 프리페이징 한 비용 s*(1-a) 보다 큰가 작은가 비교 하여
프리페이징이 효율적인지 비효율적인지 판단 할 수 있다.

페이지 크기 고려 사항

  • 단편화 (페이지 크기가 작아야 유리)
  • 페이지 테이블 크기 (페이지 크기와 반 비례)
  • 주소 변환(Resolution) (페이지 크기가 작아야 유리)
  • 입출력 오버헤드 (페이지 크기가 큰게 유리)
  • 페이지 폴트의 횟수 (페이지 크기가 큰게 유리)
  • 지역성 (페이지 크기가 작은게 더 정교하게 페이지 안을 구성 할 수 있다)
  • TLB 크기와 유효성 (테이블 사이즈가 클 수록 비용이 더 많이 들어감)
  • 현재는 페이지의 크기가 점점 커지는 추세

(Translation Lookaside Buffer)TLB 범위

  • TLB Reach = (TLB Size) X (Page Size)
  • 이상적으로 각 프로세스의 작업 집합이 TLB에 저장되면 좋다.

'CS > OS' 카테고리의 다른 글

파일, 디스크, 디렉터  (0) 2023.05.29
대용량 저장장치 시스템 1  (0) 2023.05.23
스레싱  (0) 2023.05.22
페이징  (0) 2023.05.21
메인 메모리  (0) 2023.05.02
  • 가상 메모리 시스템에서 메모리 부족으로 인해 과도한 페이지 교체가 발생하면서 프로세스가 거의 대부분의 시간을 페이지 폴트 처리에 할애하는 현상
    • 페이지 폴트 처리: 참조하려는 페이지가 물리적 메모리에 없을 때 운영체제가 해당 페이지를 디스크에서 메모리로 로드하는 것

페이지 폴트 처리 정책

  1. 페이지 폴트 인터럽트: 운영체제는 페이지 폴트를 인식하고 인터럽트를 발생시킵니다. 이 인터럽트는 CPU에게 현재 실행 중인 명령을 일시 중지하고 페이지 폴트 처리 루틴을 실행하도록 지시합니다.
  2. 스왑 공간에서 페이지 탐색: 운영체제는 해당 페이지가 디스크의 스왑 공간에 있는지 확인하고 해당 페이지를 찾습니다.
  3. 메모리에 페이지 로드: 운영체제는 물리적 메모리의 사용 가능한 공간에 해당 페이지를 로드합니다. 만약 사용 가능한 공간이 없다면, 운영체제는 페이지 교체 알고리즘을 사용하여 메모리에서 제거할 페이지를 결정합니다.
  4. 페이지 테이블 업데이트: 페이지가 메모리에 로드되면, 운영체제는 페이지 테이블을 업데이트하여 해당 페이지의 새로운 위치를 반영합니다.
  5. 프로세스 재개: 마지막으로, 운영체제는 페이지 폴트가 발생한 프로세스를 재개합니다. 이제 프로세스는 메모리에 존재하는 페이지에 액세스할 수 있습니다.

'CS > OS' 카테고리의 다른 글

대용량 저장장치 시스템 1  (0) 2023.05.23
메모리 관리 기법  (0) 2023.05.22
페이징  (0) 2023.05.21
메인 메모리  (0) 2023.05.02
CPU 스케쥴링2  (0) 2023.05.01

+ Recent posts