인터럽트 지연시간
- 인터럽트가 발생한 시점부터 해당 인터럽트에 대한 처리가 시작되는 시점까지의 시간
- 실시간 시스템은 특정 작업을 정해진 시간 내에 완료하는 것이 중요하기 때문에, 인터럽트 처리에 대한 지연은 시스템의 전반적인 성능에 큰 영향을 미칠 수 있습니다. 따라서 실시간 운영체제는 인터럽트 지연시간을 최소화하는 것이 중요합니다.
- 커널 자료구조를 갱신하는 동안 인터럽트가 불능케 되는 시간은 뭐야?
- 인터럽트 지연시간의 한 부분으로, 이는 커널이 중요한 자료구조를 안전하게 변경하거나 업데이트할 수 있도록 보장하는 시간
- 커널은 이러한 자료구조를 갱신하는 동안 인터럽트를 비활성화하거나, 또는 락(lock) 같은 동기화 메커니즘을 사용하여 동시 액세스를 방지합니다. 이렇게 인터럽트가 비활성화되거나 락이 걸린 시간 동안 인터럽트는 처리되지 않으므로, 이 시간은 인터럽트 지연시간에 포함됩니다.
페이징
- 페이징(Paging)은 가상 메모리 시스템에서 사용되는 기법으로, 물리 메모리를 일정한 크기의 페이지로 나누고, 이 페이지들을 가상 주소와 매핑하여 메모리를 관리하는 방식입니다. 이를 통해 프로세스가 필요한 메모리를 비연속적인 물리 메모리 공간에서도 연속적으로 사용할 수 있게 해줍니다.
역 페이지 테이블
- 역 페이지 테이블(Inverted Page Table, IPT)은 가상 메모리 시스템에서 사용되는 데이터 구조 중 하나입니다. 일반적인 페이지 테이블은 가상 주소를 물리 주소로 매핑하는데 사용되지만, 역 페이지 테이블은 이와 반대로 물리 주소를 가상 주소로 매핑합니다.
- 장점:
전통적인 페이지 테이블에서는 각 가상 페이지마다 항목이 있어야 하므로, 가상 주소 공간이 크면 페이지 테이블도 매우 커집니다. 이는 메모리를 많이 사용하게 되는 문제를 야기합니다.
반면, 역 페이지 테이블에서는 물리 메모리의 각 페이지마다 항목이 있습니다. 따라서, 물리 메모리 크기에 비례하는 공간만 사용하게 되므로 메모리 사용량을 크게 줄일 수 있습니다.
그러나 역 페이지 테이블은 주소 변환 과정이 복잡해지며, 이로 인해 주소 변환 시간이 더 오래 걸릴 수 있습니다. 이는 역 페이지 테이블에서는 가상 주소를 찾기 위해 전체 테이블을 검색해야 하기 때문입니다. 이 문제를 해결하기 위해 보통 연관 메모리(Associative Memory) 또는 해시 기법 등을 사용하여 검색 성능을 향상시킵니다.
커널 메모리
- 운영체제의 커널은 시스템의 핵심적인 부분으로, 항상 메모리에 존재해야 하며 빠르게 접근할 수 있어야 합니다. 따라서 커널 코드나 데이터는 페이징 시스템의 영향을 받지 않고, 물리 메모리의 특정 영역에 항상 로드되어 있습니다. 이를 통해 커널 코드나 데이터에 대한 접근 속도를 높이고, 시스템의 안정성을 유지합니다. 이러한 영역은 보통 '커널 공간' 또는 '커널 메모리'라고 부릅니다.
페이지 폴트
- 컴퓨터 시스템에서 가상 메모리를 사용할 때 발생하는 특정 유형의 인터럽트입니다.
- 프로세스가 실행되면서 메모리에 접근하려고 할 때, 해당 메모리 주소가 물리 메모리에 실제로 로드되어 있지 않은 경우에 페이지 폴트가 발생합니다. 이는 가상 메모리 시스템에서 프로세스가 접근하려는 페이지가 현재 물리 메모리에 존재하지 않는 상황을 가리킵니다. 이런 상황은 "페이지 미스(page miss)"라고도 부릅니다.
- 페이지 폴트가 발생하면 운영체제는 해당 페이지를 디스크에서 찾아 물리 메모리로 로드하고, 프로세스가 계속 실행될 수 있도록 합니다. 이 과정은 페이지 폴트 핸들러에 의해 처리되며, 이는 운영체제의 일부입니다.
- 페이지 폴트는 가상 메모리 시스템의 핵심적인 부분이지만, 너무 많은 페이지 폴트가 발생하면 시스템의 성능을 저하시킬 수 있습니다. 이는 각 페이지 폴트마다 디스크 I/O가 필요하기 때문이며, 디스크 I/O는 CPU 연산에 비해 상당히 느린 작업입니다. 이런 현상을 스레싱(thrashing)이라고 부릅니다.
페이지 수와 페이지 폴트의 관계
- 페이지 프레임의 수를 늘리면 프로세스가 메모리에 더 많은 페이지를 유지할 수 있습니다. 이는 프로세스가 자주 사용하는 페이지가 메모리에 더 잘 유지되도록 하여 페이지 폴트율을 줄일 수 있습니다. 즉, 프로세스가 필요한 페이지를 메모리에서 바로 찾을 가능성이 높아지므로, 디스크에서 페이지를 불러오는 비용이 줄어듭니다.
- 반면에 페이지 프레임의 수를 줄이면 메모리에 유지할 수 있는 페이지의 수가 줄어듭니다. 이는 프로세스가 필요로 하는 페이지가 메모리에 없을 가능성이 높아지므로, 페이지 폴트율이 증가할 수 있습니다. 즉, 프로세스가 필요로 하는 페이지를 디스크에서 불러와야 하는 경우가 더 많아집니다.
페이지의 크기와 성능 관계
- 페이지 테이블의 크기:
- 페이지의 크기가 작을수록 페이지 테이블의 크기는 증가합니다. 페이지 테이블은 주소 공간의 크기에 따라 결정되므로, 작은 페이지 크기로 세분화된 주소 공간은 더 많은 페이지 테이블 엔트리를 필요로 합니다.
- 메모리 사용 효율:
- 페이지의 크기가 작을수록 메모리 사용 효율이 향상됩니다. 작은 페이지 크기는 작은 단위로 메모리를 할당하므로 내부 단편화가 적어집니다. 따라서, 더 많은 페이지를 메모리에 로드하여 메모리 공간을 효율적으로 사용할 수 있습니다.
- 디스크 입출력 시간:
- 페이지의 크기가 작을수록 디스크 입출력 시간이 증가할 수 있습니다. 작은 페이지 크기는 한 번의 페이지 폴트에도 많은 페이지를 디스크에서 읽어와야 하므로 입출력 작업이 더 많이 발생할 수 있습니다.
- 지역성과 직결된 입출력:
- 페이지의 크기가 작을수록 지역성과 직결된 입출력이 증가합니다. 작은 페이지 크기는 프로세스가 한 번에 사용하는 데이터 양을 줄여 지역성을 높일 수 있으며, 이는 캐시 히트율을 향상시키고 입출력 작업을 줄일 수 있습니다.
- 페이지 폴트 발생 횟수:
- 페이지의 크기와 페이지 폴트 발생 횟수는 복잡한 상호작용을 가지며, 일반적으로 페이지의 크기가 작을수록 페이지 폴트 발생 횟수는 증가합니다. 작은 페이지 크기는 한 번에 로드되는 데이터 양이 적기 때문에 더 자주 페이지 폴트가 발생할 수 있습니다.
요구 페이징
일반적으로 프로세스는 모든 코드와 데이터를 메모리에 올려놓고 실행됩니다. 하지만 이렇게 모든 페이지를 미리 메모리에 올려놓는 것은 비효율적일 수 있습니다. 왜냐하면 프로세스의 일부분만이 실제로 실행되기 때문에 모든 페이지를 메모리에 올려놓는 것은 낭비일 수 있기 때문입니다.
요구 페이징은 이러한 낭비를 줄이기 위해 필요한 페이지들만 메모리에 동적으로 로드합니다. 프로세스가 실행될 때 해당 페이지에 접근하면, 운영체제는 해당 페이지를 디스크에서 메모리로 로드합니다. 이로 인해 필요한 페이지만 메모리에 올라가므로, 메모리 사용이 효율적으로 이루어지고 여유 공간을 더 많이 확보할 수 있습니다.
모바일 운영체제
- 모바일 운영체제에서는 일반적으로 스와핑을 지원하지 않습니다.
- 스와핑: 메모리에 적재된 프로세스나 데이터를 하드 디스크로 이동시키는 것을 말합니다
- 이는 모바일 기기의 제한된 메모리 용량과 전력 소모 등의 이유로 인해 결정된 것입니다. 스와핑은 디스크로의 많은 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로 가
- FCFS (First-Come, First-Served): 이것은 가장 단순한 스케줄링 알고리즘이며, 첫 번째로 요청이 들어온 순서대로 처리합니다.
- 53->67->65->124->14->122->37->183->98
- SSTF (Shortest Seek Time First): SSTF 알고리즘은 현재 디스크 헤드 위치에서 가장 가까운 요청을 먼저 처리합니다. 이 방법은 평균적으로 가장 짧은 시간 동안 요청을 처리하는데, 하지만 특정 요청이 계속 지연될 수 있는 '기아' 현상이 발생할 수 있습니다.
- 53->65->67->37->14->98->122->124->183
- SCAN (Elevator Algorithm): SCAN 알고리즘은 엘리베이터가 한 방향으로 이동하면서 각 층에서 승객을 태우는 방식과 유사합니다. 디스크 헤드는 한 방향으로 움직이면서 그 방향에 있는 모든 요청을 처리하고, 끝에 도달하면 반대 방향으로 움직이면서 또 다시 모든 요청을 처리합니다. 이 방법은 모든 요청이 공정하게 처리될 수 있도록 합니다.
- 53->37->14->0->65->67->98->122->124->183
- C-SCAN (Circular SCAN): SCAN 알고리즘의 변형으로, 디스크 헤드는 한 방향으로만 움직이면서 요청을 처리하고, 끝에 도달하면 바로 반대편으로 빠르게 돌아가서 다시 요청을 처리하는 방식입니다. 이 방법은 더 고른 응답 시간을 제공할 수 있습니다.
- 53->65->67->98->122->124->183->199->0->14->37
- LOOK and C-LOOK: 이들은 SCAN과 C-SCAN의 변형으로, LOOK은 요청이 더 이상 없는 곳까지가 아니라 마지막 요청까지만 이동하고 방향을 바꾸며, C-LOOK 역시 마찬가지로 요청이 있는 곳까지만 이동하고 반대 방향 끝으로 빠르게 돌아갑니다.
- SCAN-LOOK: 53->37->14->65->67->98->122->124->183
- CSCAN-LOOK: 53->65->67->98->122->124->183->0->14->37