1. 가상 메모리(Virtual Memory)의 정의 및 하드웨어적 근거
가상 메모리란 컴퓨터가 실제로 가지고있는 물리적 메모리(RAM)보다 더 큰 메모리 공간을 가진 것처럼 보이도록 속여서 사용하는 메모리 관리 기법이다.
즉, 프로그램 중 필요한 부분만 메모리에 올리고 나머지는 저장장치에 보관한다. 이를 통해 실제 용량 한계를 넘어 더 많은 프로그램을 동시에 안정적으로 구동하는 환경을 제공한다.
1.1 폰 노이만 구조와 메모리의 필연성
1. 프로그램 내장 방식(Stored-program concept):
- 폰 노이만 구조에 기반한 현대 컴퓨터는 실행하고자 하는 코드와 데이터가 반드시 메모리에 적재되어 있어야 한다. CPU 내부의 레지스터는 극소량의 데이터만 처리 가능하며, 하드디스크와 같은 보조기억장치는 CPU와의 속도 격차가 수만 배에 달하여 직접적인 명령어 인출(Fetch)이 불가능하기 때문이다.
2. 메모리 로드 과정:
- 실행 파일 형태(Binary)로 저장 장치에 존재하던 프로그램은 CPU에 의해 처리되기 위해 RAM이라는 작업 공간으로 복사되어야 한다. CPU는 오직 메모리 주소만을 바라보며 명령어를 찾으므로, 메모리에 코드가 없다면 CPU는 아무런 동작을 수행할 수 없다.
1.2 물리 메모리 확장의 한계
1. 외부 단편화(External Fragmentation):
- 가상 메모리가 부재한 환경에서는 프로세스를 메모리에 연속된 공간으로 할당해야 한다. 이 경우 전체 메모리 용량이 충분하더라도 중간중간 발생한 빈틈(Gap)으로 인해 특정 크기의 프로세스를 실행하지 못하는 자원 낭비가 발생한다.
2. 주소 공간의 아키텍처적 제약:
- 32비트 시스템의 경우 CPU가 참조 가능한 주소 범위는 232인 4GB로 제한된다. 하드웨어적으로 RAM을 아무리 증설하더라도 아키텍처가 인식할 수 있는 범위를 넘어서는 영역은 논리적으로 활용이 불가능하다.
3. 메모리 보호 및 격리:
- 다중 프로그래밍 환경에서 프로세스가 물리 주소에 직접 접근할 경우, 특정 프로세스의 버그나 악의적인 코드가 타 프로세스 혹은 운영체제의 영역을 침범할 수 있다. 이는 시스템 전체의 안정성을 위협하는 치명적인 요인이 된다.
2. 주소 변환 메커니즘과 MMU/TLB 아키텍처
CPU는 프로세스가 참조하는 논리적인 주소인 가상 주소(Virtual Address)를 다루며, 실제 데이터 접근을 위해 이를 물리 주소(Physical Address)로 변환하는 실시간 매핑 과정을 거친다.
2.1 MMU(Memory Management Unit)의 역할
1. 실시간 주소 변환:
- MMU는 CPU가 메모리에 접근할 때 가상 주소를 실제 물리적인 RAM 주소로 변환해 주는 핵심 하드웨어 장치이다. 소프트웨어가 아닌 하드웨어로 구현된 이유는 초당 수억 번 발생하는 변환 과정을 O(1)에 수렴하는 속도로 처리하여 시스템 성능 저하를 막기 위함이다.
2. 보안 및 최적화:
- 허가되지 않은 영역에 대한 접근을 차단하고, 실제 RAM에는 데이터가 흩어져 있더라도 CPU에게는 연속된 공간인 것처럼 논리적으로 이어 붙여서 보여주는 역할을 수행한다.
3. 동작 원리:
- CPU가 명령어를 실행하며 가상 주소를 요청하면 MMU는 내부의 고속 캐시인 TLB(Translation Lookaside Buffer)를 가장 먼저 검색한다.
- 만약 TLB에 해당 변환 정보가 없다면 메인 메모리에 저장된 페이지 테이블(Page Table)을 참조하여 가상 번호를 물리 주소로 매핑하는 과정을 수행한다.
- 변환이 완료되면 유효한 접근 권한이 있는지 최종 확인한 후 실제 물리 메모리(RAM)의 해당 위치로 신호를 보내 데이터를 읽거나 쓴다.
4. 참고
-
MMU의 CPU 내부 통합 이유
- 가상 주소를 물리 주소로 변환하는 작업은 모든 메모리 접근 시마다 수반되므로 극도의 저지연성이 필수적이다. MMU가 CPU 외부에 존재할 경우 데이터 전송 지연이 발생하여 전체 연산 속도가 저하된다. 따라서 이를 CPU 내부에 통합함으로써 데이터 이동 경로를 단축하고 시스템 버스의 병목 현상을 방지하여 성능을 최적화하는 것이다.
-
MMU의 하드웨어 구현 이유
- 주소 변환을 소프트웨어로 처리할 경우 매 메모리 참조마다 수많은 추가 명령어가 실행되어 시스템 속도가 기하급수적으로 느려진다.
- 하드웨어 방식은 전용 논리 회로를 통해 나노초 단위의 고속 변환을 수행하며, 소프트웨어의 개입 없이도 메모리 접근 권한을 강제할 수 있어 보안과 시스템 안정성을 효과적으로 보장한다.
2.2 TLB(Translation Lookaside Buffer)를 통한 가속
1. 주소 변환 전용 캐시:
- 주소 변환 시 매번 RAM의 페이지 테이블을 참조하는 것은 심각한 성능 저하를 유발한다. TLB는 MMU 내부에 위치한 아주 빠르고 작은 캐시 메모리로, 최근에 변환된 주소 정보를 저장하여 RAM 접근 횟수를 최소화한다.
2. 문맥 교환(Context Switch)의 영향:
- 프로세스가 교체되어 CR3 레지스터(페이지 테이블의 시작 주소를 가리키는 레지스터)의 값이 변경되면 이전 프로세스의 주소 정보는 더 이상 유효하지 않게 된다. 이때 보안과 정확성을 유지하기 위해 TLB의 내용은 대개 모두 삭제(Flush)된다.
3. 동작 원리:
- CPU로부터 가상 주소가 전달되면 MMU는 페이지 테이블을 보기 전, 가장 먼저 TLB 내부에 해당 가상 페이지 번호에 매핑된 물리 프레임 번호가 있는지 검색한다.
- TLB Hit: 정보가 존재하면 즉시 물리 주소로 변환을 마친다. 이는 RAM에 접근할 필요가 없어 시스템 성능이 극대화되는 경로이다.
- TLB Miss: 정보가 없다면 메인 메모리의 페이지 테이블을 직접 참조(Page Walk)하여 주소를 변환한다. 이후 변환된 정보를 다시 TLB에 기록하여 다음번 동일 주소 접근 시에는 'Hit'이 발생하도록 유도한다.
3. 페이징 시스템(Paging System)과 메모리 구조
페이징 시스템은 메모리를 고정된 크기의 블록으로 나누어 관리하는 가상 메모리 기법의 표준이다.
3.1 페이지(Page)와 프레임(Frame)
1. 최소 관리 단위:
- 가상 메모리를 나누는 최소 단위를 페이지라 하고, 물리 메모리를 나누는 단위를 프레임이라 한다. 통상적으로 4KB 크기를 가지며, 비연속적인 프레임 배치를 통해 외부 단편화 문제를 근본적으로 해결한다.
3.2 페이지 테이블과 주소 구성
1. 매핑 지도(Page Table):
- 가상 주소의 페이지 번호가 실제 RAM의 몇 번 프레임에 위치하는지 기록한 데이터 구조이다. 프로세스 생성 시 정보가 생성되며, 각 항목(PTE)에는 주소 외에도 읽기/쓰기 권한 및 현재 메모리 적재 여부(Valid-Invalid bit)가 포함된다.
2. 내부 단편화(Internal Fragmentation):
- 메모리를 고정된 크기로 할당함에 따라 발생하는 현상이다. 프로세스가 요청한 크기가 페이지 크기의 배수가 아닐 경우, 마지막 블록 내에서 사용되지 않고 남는 공간이 발생한다.
3. 다단계 페이징 시스템:
- 64비트와 같은 대용량 주소 체계에서 모든 페이지 정보를 생성하면 테이블 자체가 막대한 메모리를 점유한다. 이를 해결하기 위해 테이블을 계층화하여 필요한 영역의 정보만 메모리에 적재하는 방식을 취한다.
4. 참고
4. 요구 페이징(Demand Paging)과 페이지 폴트(Page Fault)
요구 페이징은 실행 중인 프로세스가 특정 데이터를 요구할 때만 해당 페이지를 RAM에 올리는 방식이다.
4.1 페이지 폴트 처리 매커니즘
1. 트랩(Trap) 발생:
- CPU가 가상 주소에 접근했으나 해당 페이지가 RAM에 없을 때 하드웨어 인터럽트가 발생한다. MMU가 페이지 테이블의 유효 비트를 확인하여 부재를 감지하고 운영체제에 도움을 요청한다.
2. 스왑 영역(Swap Area) 및 로드:
- 운영체제는 보조기억장치의 스왑 영역에서 해당 페이지를 찾아 빈 프레임에 적재한다. 이 과정은 디스크 I/O를 동반하므로 메모리 접근 대비 수천 배 이상 느리며, 처리 완료 후 페이지 테이블을 갱신하고 명령어를 재실행한다.
3. 요구 페이징과 페이지 폴드 동작 원리:
-
1. 가상 주소 참조 및 부재 확인
- 프로세스가 특정 가상 주소에 접근하면 MMU는 페이지 테이블을 참조한다. 이때 해당 엔트리의 유효 비트가 0(Invalid)으로 설정되어 있다면, 물리 메모리에 데이터가 존재하지 않음을 감지하고 CPU에 트랩을 발생시켜 운영체제에 제어권을 넘긴다.
-
2. 커널 모드 전환 및 유효성 검사
- 운영체제는 페이지 폴트 핸들러를 실행하여 해당 메모리 접근이 정당한지 확인한다. 만약 잘못된 주소 접근이라면 프로세스를 강제 종료하고, 정당한 접근이나 메모리에 적재되지 않은 경우라면 빈 프레임을 확보하기 위한 과정을 시작한다.
-
3. 보조기억장치 탐색 및 데이터 적재
- 물리 메모리에 빈 프레임이 없다면 교체 알고리즘을 통해 희생 프레임을 선정하여 디스크로 내보낸다(Swap-out). 이후 보조기억장치의 스왑 영역으로부터 요청된 페이지를 찾아 물리 메모리의 빈 프레임으로 읽어 들인다(Swap-in).
-
4. 페이지 테이블 갱신 및 명령어 재개
- 데이터 적재가 완료되면 해당 페이지 테이블 엔트리의 프레임 번호를 기록하고 유효 비트를 1(Valid)로 갱신한다. 모든 준비가 끝나면 중단되었던 프로세스의 상태를 복구하고, 페이지 폴트를 유발했던 명령어를 처음부터 다시 실행하여 정상적인 연산을 수행한다.
4. 참고
4.3 스와핑(Swapping)
-
스와핑의 정의
- 스와핑이란 운영체제가 한정된 물리 메모리(RAM)를 효율적으로 활용하기 위하여, 현재 실행에 즉각적으로 필요하지 않은 프로세스나 메모리 페이지를 보조 기억 장치의 특정 영역인 스왑 영역으로 이동시키는 메모리 관리 기법을 의미한다.
- 이를 통해 시스템은 실제 장착된 물리 메모리의 용량보다 더 큰 메모리 공간을 사용하는 것과 같은 효과를 거둘 수 있다.
-
스와핑의 동작 원리
- 스와핑의 동작 메커니즘은 크게 두 가지 과정으로 나뉜다.
- 스왑 아웃(Swap-out)
- 운영체제는 새로운 프로세스를 실행하거나 기존 프로세스에 추가적인 메모리 할당이 필요할 때, 물리 메모리의 여유 공간을 확보하기 위한 동작을 수행한다.
- 이때 현재 실행 상태가 아니거나 우선순위가 낮은 프로세스를 선정하여 해당 데이터를 보조 기억 장치의 스왑 영역으로 내보내고, 점유하고 있던 물리 메모리 주소를 가용 상태로 전환한다.
- 스왑 인(Swap-in)
- 보조 기억 장치로 밀려났던 프로세스가 다시 CPU 점유권을 얻어 실행되어야 하거나, 해당 데이터에 대한 접근 요청이 발생할 경우 운영체제는 스왑 영역에 저장된 데이터를 다시 물리 메모리의 빈 공간으로 불러들인다.
- 만약 이때 물리 메모리에 빈 공간이 없다면 다시 다른 데이터를 스왑 아웃하는 과정을 거치게 된다.
-
스와핑의 필요성 및 성능적 고려사항
- 스와핑은 다중 프로그래밍 환경에서 메모리 부족으로 인해 시스템이 중단되는 것을 방지하고 자원 활용도를 극대화하는 데 목적이 있다.
- 그러나 물리 메모리와 보조 기억 장치 간의 데이터 전송 속도 차이로 인해 과도한 스와핑은 시스템 성능을 급격히 저하시키는 스래싱(Thrashing) 현상을 야기할 수 있다.
- 따라서 현대의 시스템 설계에서는 효율적인 페이지 교체 알고리즘과 적절한 스왑 영역의 크기 산정이 필수적으로 요구된다.
4.4 요구 페이징과 스와핑의 차이
-
개념적 정의의 차이
- 스와핑은 프로세스 전체를 물리 메모리와 보조 기억 장치 사이에서 교체하는 방식인 반면, 요구 페이징은 프로세스를 페이지(Page)라는 일정한 단위로 분할하여 현재 실행에 필요한 페이지만을 선별적으로 메모리에 적재하는 방식이다. 즉, 요구 페이징은 가상 메모리 관리 기법의 핵심으로서 스와핑의 개념을 더욱 세분화한 형태라 할 수 있다.
-
동작 메커니즘의 차이
-
적재 단위 및 시점
- 스와핑은 프로그램 실행 시 혹은 문맥 교환(Context Switch) 발생 시 해당 프로세스의 주소 공간 전체를 이동시킨다. 그러나 요구 페이징은 프로세스 실행 중 특정 메모리 주소에 대한 참조가 발생했을 때, 해당 데이터가 메모리에 없는 경우(Page Fault)에만 보조 기억 장치에서 데이터를 읽어온다.
-
자원 활용 효율성
- 스와핑은 프로세스 전체를 다루므로 메모리 입출력 부하가 크고, 실행되지 않는 부분까지 메모리를 점유하게 되는 비효율이 존재한다. 반면 요구 페이징은 실제 사용되는 부분만 메모리에 유지하므로 물리 메모리의 낭비를 최소화하며, 더 많은 수의 프로세스를 동시에 수용할 수 있는 다중 프로그래밍 정도(Degree of Multiprogramming)를 높여준다.
-
주요 차이점 요약
- 관리 단위
- 스와핑은 프로세스(Process) 단위, 요구 페이징은 페이지(Page) 단위로 관리한다.
- 입출력 오버헤드
- 요구 페이징은 필요한 부분만 전송하므로 전체를 옮기는 스와핑보다 일반적으로 입출력 효율이 높다.
- 응답 속도
- 스와핑은 프로세스 전체가 준비되어야 하므로 초기 구동 시 지연이 발생할 수 있으나, 요구 페이징은 실행 중 잦은 페이지 부재가 발생할 경우 성능 저하의 원인이 될 수 있다.
-
결론
- 현대 운영체제는 순수한 의미의 프로세스 단위 스와핑보다는 페이징 기법을 기반으로 한 메모리 관리를 주로 수행한다. 다만 시스템의 메모리 압착이 심화되어 더 이상 페이징만으로 해결이 불가능한 임계 상황에 도달했을 때, 프로세스 전체를 일시적으로 중단하고 내보내는 전통적인 의미의 스와핑이 병행되어 시스템의 안정성을 꾀하게 된다.
4.5 스왑 영역(Swap Area)
4.6 세그먼테이션(Segmentation) 기법
-
정의
- 세그멘테이션이란 프로세스를 물리적인 고정 크기가 아닌, 논리적 의미를 가진 세그먼트(Segment) 단위로 분할하여 메모리에 적재하는 기법을 의미한다. 여기서 세그먼트는 코드(Code), 데이터(Data), 스택(Stack), 혹은 개별 함수나 서브루틴과 같이 프로그래머가 인지하는 논리적인 단위를 일컫는다.
-
동작 원리와 매핑 메커니즘
- 가상 주소는 세그먼트 번호(s)와 변위(d)의 쌍으로 구성되며, 이를 물리 주소로 변환하기 위해 세그먼트 테이블(Segment Table)을 참조한다. 세그먼트 테이블은 각 세그먼트의 물리적 시작 주소인 기준(Base) 값과 해당 세그먼트의 크기를 나타내는 한계(Limit) 값을 보유한다. CPU가 특정 주소에 접근하려 할 때, 변위 값(d)이 한계 값(Limit)을 초과하는지 검증함으로써 메모리 보호 기능을 수행한다.
-
세그멘테이션 기법의 주요 특징 및 장점
- 논리적 단위로 메모리를 관리하므로 사용자 및 프로그래머의 관점에 부합하며, 세그먼트별로 서로 다른 권한(읽기, 쓰기, 실행 등)을 부여하기 용이하여 메모리 보호와 공유 측면에서 강점을 가진다. 또한, 페이징 기법에서 발생하는 내부 단편화(Internal Fragmentation) 문제가 발생하지 않는다는 특징이 있다.
-
한계점 및 성능적 고려사항
- 세그먼트들의 크기가 가변적이므로, 이들을 물리 메모리에 배치하고 회수하는 과정에서 빈 공간이 조각나게 되는 외부 단편화(External Fragmentation) 문제가 발생할 수 있다. 이로 인해 메모리 배치 전략(First-fit, Best-fit 등)에 따른 관리 복잡도가 증가하며, 현대 운영체제에서는 이러한 단점을 극복하기 위해 페이징과 세그멘테이션을 혼합한 '세그먼트 페이징 기법'을 주로 채택하고 있다.
4.7 세그먼테이션 기법 vs 페이징 기법
4.8 공유 메모리(Shared Memory)의 효율성
1. IPC 통신 최적화:
- 서로 다른 프로세스의 페이지 테이블이 물리 메모리의 동일한 프레임을 가리키도록 설정함으로써 구현된다. 데이터 복사 과정 없이 실시간으로 대용량 데이터를 공유할 수 있어 가장 빠른 통신 성능을 제공한다.
2. 공유 메모리의 원리
-
페이지 테이블 매핑을 통한 물리 프레임 공유
- 가상 메모리 시스템은 각 프로세스마다 독립적인 페이지 테이블을 할당하지만, 서로 다른 가상 주소가 물리 메모리의 동일한 프레임 주소를 가리키도록 설정할 수 있다. 이러한 매핑 기술을 통해 물리적인 데이터 복사 과정 없이도 여러 프로세스가 동일한 데이터 영역에 접근하는 것이 가능해진다.
-
시스템 자원 절약 및 라이브러리 공유
- 공유 메모리 원리는 프로세스 간 통신뿐만 아니라 시스템 전체의 메모리 효율성을 높이는 데에도 활용된다. 예를 들어, 여러 프로세스가 공통으로 사용하는 표준 라이브러리(C Standard Library 등)를 물리 메모리에 단 한 번만 적재하고 각 프로세스의 가상 공간에 연결함으로써 메모리 낭비를 획기적으로 방지한다.
-
커널 수준의 접근 제어와 동기화
- 운영체제는 공유 영역에 대한 페이지 테이블 엔트리의 권한 설정을 통해 데이터의 무결성을 보호한다. 동일한 물리 프레임을 참조하더라도 프로세스에 따라 읽기 전용 혹은 읽기/쓰기 권한을 다르게 부여할 수 있으며, 세마포어와 같은 동기화 기법을 병행하여 데이터 충돌을 방지한다.
5. 페이지 교체 알고리즘(Page Replacement Algorithm)
RAM 용량이 부족할 때 어떤 페이지를 내보내고(Swap-out) 새로운 페이지를 들여올지 결정하는 전략이다.
5.1 주요 알고리즘 분석
1. FIFO (First-In, First-Out):
- 메모리에 가장 먼저 들어온 페이지를 교체한다. 구현은 간단하나 사용 빈도를 고려하지 않아 메모리 증설 시에도 성능이 저하되는 벨레이디의 모순이 발생할 수 있다.
2. OPT (Optimal):
- 미래에 가장 오랫동안 사용되지 않을 페이지를 교체하는 이론적 최적 방식이다. 실제 시스템에서는 미래 예측이 불가능하여 구현할 수 없으나, 타 알고리즘의 성능 평가 벤치마크로 활용된다.
3. LRU (Least Recently Used):
4. LFU (Least Frequently Used):
-
참조 횟수가 가장 적은 페이지를 교체한다. 과거의 인기도를 중시하나, 초기화 단계에서만 사용되고 방치된 페이지가 메모리를 점유하는 단점이 존재한다.
-
운영체제 수준에서의 낮은 채택률
LFU는 범용 운영체제의 페이지 교체 알고리즘으로는 거의 사용되지 않는다. 매 메모리 참조마다 참조 횟수를 기록하고 갱신해야 하는 소프트웨어적 오버헤드가 크며, 이를 하드웨어적으로 효율적으로 구현하기가 매우 까다롭기 때문이다.
-
이력 누적에 따른 판단 오류
프로세스 초기 단계에서 일시적으로 집중 참조된 페이지가 실제 사용이 끝난 후에도 높은 참조 횟수를 유지하여 메모리를 계속 점유하는 현상이 발생한다. 이러한 과거의 데이터가 현재의 메모리 관리 효율을 저해하는 문제가 있어, 실무에서는 시간적 국부성을 더 잘 반영하는 LRU 계열을 선호한다.
-
특정 도메인 및 변형된 형태의 활용
순수 LFU는 드물지만 웹 캐시나 데이터베이스 인덱스 관리처럼 데이터의 '인기도'가 시급성보다 중요한 특정 도메인에서는 변형된 형태로 사용되기도 한다. 이때는 오래된 참조 횟수의 영향력을 줄이는 Aging 기법을 결합하여 단점을 보완하며, LRU와 LFU의 장점을 결합한 ARC(Adaptive Replacement Cache)와 같은 복합 알고리즘이 실무에서 더 높은 비중을 차지한다.
5. NUR (Not Used Recently):
-
참조 비트와 변형 비트(Dirty bit)를 사용하여 최근 사용 여부를 판별한다. 자원 소모가 적으면서도 LRU와 유사한 효율을 내어 현대 OS에서 실용적으로 쓰인다.
-
비트 조합을 통한 교체 우선순위 결정
참조 비트(R)와 변형 비트(M)의 조합을 통해 페이지를 네 가지 클래스로 분류한다. 참조되지 않고 수정도 되지 않은 페이지(0,0)를 최우선 교체 대상으로 삼으며, 이를 통해 교체 시 발생하는 디스크 쓰기 작업의 비용을 최소화하고 시스템의 전체적인 입출력 효율을 높인다.
-
클럭 알고리즘으로의 실용적 구현
NUR의 원리는 실제 운영체제에서 클럭 알고리즘이라는 형태로 주로 구현된다. 포인터가 원형 리스트를 순회하며 참조 비트가 1인 페이지에는 기회를 한 번 더 주고 비트를 0으로 설정하는 방식을 취하며, 이는 순수 LRU 구현에 필요한 막대한 하드웨어 오버헤드 없이도 그에 근접한 성능을 도출하는 핵심 기법이 된다.
-
참조 비트의 주기적 초기화 매커니즘
사용 여부의 시의성을 보장하기 위해 운영체제는 일정 주기마다 모든 페이지의 참조 비트를 0으로 재설정한다. 이러한 초기화 과정을 거치지 않으면 한 번이라도 참조된 모든 페이지의 비트가 1로 유지되어 교체 대상을 식별하기 어려워지므로, 정기적인 갱신을 통해 최근의 참조 경향을 정확히 반영한다.
6. 메모리 지역성(Locality)과 성능 임계점
시스템의 효율은 프로그램이 메모리의 특정 영역을 집중적으로 참조하는 경향인 지역성에 크게 의존한다.
6.1 지역성의 유형
1. 시간 지역성(Temporal Locality):
- 최근 참조된 주소는 가까운 미래에 다시 참조될 가능성이 높다. 루프문의 제어 변수나 반복적으로 호출되는 함수가 대표적이다.
- 예시
- 반복문(for, while)에서 사용되는 루프 제어 변수나 합계를 계산하는 누적 변수가 대표적이다.
- 동일한 메모리 위치에 짧은 시간 간격으로 여러 번 접근하여 읽기 및 쓰기 작업을 수행하게 된다.
2. 공간 지역성(Spatial Locality):
- 특정 메모리 주소가 참조되면 그 인근의 주소들도 곧 참조될 가능성이 높다. 배열의 순차적 접근이 이에 해당한다.
- 예시
- 배열(Array)의 순차적 탐색이 전형적인 사례이다.
- 메모리상에 연속적으로 배치된 배열 요소들을 순서대로 읽어 들일 때, 하나의 요소를 참조한 직후 바로 옆의 주소를 참조하게 된다.
3. 참고
6.2 스레싱(Thrashing) 현상
1. 스레싱(Thrashing) 현상 정의
- 스레싱은 하드웨어의 자원보다 과도하게 많은 프로세스가 실행되어, 시스템이 실제 유효한 연산을 수행하는 시간보다 페이지 교체(Page Swap)에 소요되는 시간이 더 많아지는 현상을 의미한다. 이 상태에 진입하면 CPU 이용률이 급격히 저하되며 시스템이 사실상 멈춘 것과 같은 성능 마비 상태에 이르게 된다.
2. 스레싱 현상의 주요 원인
3. 스레싱 현상의 해결 및 예방 전략
4. 참고
7. 인터럽트 체계와 제어 레지스터
1. IDT(Interrupt Descriptor Table):
- 인터럽트 벡터 번호를 인덱스로 하여 실제 처리 코드인 ISR의 주소 정보를 담고 있는 비상 연락망 명부이다. CPU는 사건 발생 시 이 테이블을 참조하여 커널 모드에서 즉각적인 대응을 수행한다.
2. CR3 레지스터:
-
CR3 레지스터의 정의와 역할
- CR3(Control Register 3)는 x86 계열 프로세서에서 현재 활성화된 프로세스의 페이지 테이블 시작 주소를 보관하는 제어 레지스터이다. 하드웨어 기반의 페이징 기법에서 MMU가 가상 주소를 물리 주소로 변환하는 과정을 시작할 때 최초로 참조하는 물리적 지표가 된다.
-
문맥 교환과 메모리 격리에서의 기능
- 프로세스 문맥 교환이 발생할 때 운영체제는 새로 실행될 프로세스의 페이지 테이블 물리 주소를 CR3 레지스터에 기록한다. 이를 통해 각 프로세스는 자신만의 독립된 가상 메모리 공간을 확보할 수 있으며, 특정 프로세스가 다른 프로세스나 커널의 메모리 영역에 무단으로 접근하는 것을 방지하여 시스템의 보안과 안정성을 유지한다.