운영체제 | 요구 페이징

Faithful Dev·2025년 1월 26일

컴퓨터 공학

목록 보기
35/81

요구 페이징 (Demand Paging)

요구 페이징은 메모리 효율성을 높이기 위해 프로그램의 모든 페이지를 메모리에 미리 적재하지 않고, 실행 시점에 필요한 페이지만 메모리에 적재하는 메모리 관리 기법이다.

작동 원리

  1. 프로세스가 실행될 때, 초기에는 페이지 테이블의 모든 페이지 항목이 "존재하지 않음" 상태로 설정된다.
  2. CPU가 특정 페이지에 접근하려고 하면, 페이지 테이블을 통해 확인한다.
    • 페이지가 메모리에 존재하지 않으면 페이지 폴트(Page Fault)가 발생한다.
  3. 운영체제는 디스크에서 필요한 페이지를 읽어와 메모리에 적재하고, 페이지 테이블을 갱신한다.
  4. CPU는 갱신된 페이지 테이블을 참고하여 다시 명령을 실행한다.

장점

  • 불필요한 페이지 적재를 방지하여 메모리 사용량 최적화
  • 프로그램 크기가 물리 메모리 크기를 초과해도 실행 가능

단점

  • 페이지 폴트가 자주 발생하면 성능 저하(스래싱(Thrashing))가 발생할 수 있음.

페이지 폴트 (Page Fault)

페이지 폴트는 CPU가 접근하려는 페이지가 물리 메모리에 존재하지 않을 때 발생하는 이벤트이다.
이는 정상적인 시스템 작동 과정의 일부이며, 운영체제가 이를 처리한다.

페이지 폴트 처리 과정

  1. CPU가 논리 주소를 통해 페이지에 접근하려고 시도한다.
  2. 페이지 테이블에서 해당 페이지가 메모리에 없음을 확인하고, 페이지 폴트가 발생한다.
  3. MMU가 페이지 폴트 인터럽트를 발생시키고, 운영체제가 처리 루틴을 실행한다:
    • 디스크에서 필요한 페이지를 찾는다.
    • 메모리에 페이지를 적재하고, 페이지 테이블을 갱신한다.
  4. 작업이 완료되면 CPU는 페이지 폴트가 발생한 명령을 재실행한다.

페이지 폴트와 성능

  • 페이지 폴트가 적절히 관리되면 메모리 사용을 최적화하지만, 폴트 빈도가 높아지면 디스크 I/O 과부하로 인해 성능이 크게 저하된다.

페이지 폴트와 인터럽트

페이지 폴트는 소프트웨어 인터럽트의 한 형태로, 프로세스의 정상 실행 흐름을 일시적으로 중단시키고 운영체제의 페이지 관리 루틴을 실행하도록 한다.

페이지 폴트 인터럽트 처리

  1. IDT(Interrupt Descriptor Table):
    CPU는 인터럽트 발생 시 IDT를 참조하여 페이지 폴트 처리 핸들러의 주소를 찾는다.
  2. 운영체제 커널모드 전환:
    페이지 폴트 처리 루틴은 커널모드에서 실행된다. 커널모드는 메모리 및 하드웨어 자원에 대한 권한을 보유한다.
  3. 페이지 적재 및 테이블 업데이트:
    • 필요한 페이지를 메모리에 로드한다.
    • 프로세스의 페이지 테이블을 갱신한다.
  4. 사용자모드로 복귀:
    페이지 폴트 처리가 완료되면, 프로세스의 실행을 재개한다.

사용자 모드와 커널 모드, 프로세스 및 인터럽트

사용자 모드(User Mode)

  • 사용자 애플리케이션이 실행되는 제한된 모드이다.
  • CPU는 하드웨어 자원(메모리, I/O 장치)에 직접 접근할 수 없다.
  • 잘못된 명령 실행으로 인해 시스템 전체에 영향을 미치지 않도록 보호된다.

커널 모드(Kernel Mode)

  • 운영체제가 실행되는 모드로, 모든 하드웨어 자원에 대한 접근 권한을 가진다.
  • 페이지 폴트와 같은 인터럽트 처리 루틴은 커널모드에서 실행된다.
  • 운영체제는 사용자 모드에서 커널 모드로의 전환을 제어한다.

사용자모드 ↔︎ 커널모드 전환

  • 시스템 호출(System Call): 사용자 모드에서 커널 모드로 전환하기 위한 메커니즘
  • 인터럽트 발생: 페이지 폴트나 하드웨어 인터럽트 발생 시 자동으로 커널 모드로 전환

인터럽트와 IDT (Interrupt Descriptor Table)

인터럽트 (Interrupt)

인터럽트는 CPU가 정상적인 실행 흐름을 일시적으로 중단하고, 특정 이벤트(예: 하드웨어 요청, 페이지 폴트)를 처리하도록 하는 메커니즘이다.

IDT (Interrupt Descriptor Table)

IDT는 CPU가 인터럽트 처리 루틴의 주소를 찾는 데 사용하는 데이터 구조이다.

IDT의 구조

  • IDT는 최대 256개의 엔트리를 가지며, 각 엔트리는 특정 인터럽트 또는 예외의 처리 루틴을 가리킨다.
  • 주요 엔트리:
    • 0번: Divide-by-Zero 예외
    • 14번: 페이지 폴트
    • 32번: 사용자 정의 하드웨어 인터럽트

인터럽트 처리 과정

  1. CPU는 인터럽트가 발생하면 현재 실행 중인 프로세스를 멈추고 IDT를 참조한다.
  2. 인터럽트 핸들러의 주소를 찾고 해당 루틴을 실행한다.
  3. 인터럽트 처리가 완료되면 중단된 프로세스의 실행을 재개한다.

페이지 폴트와 인터럽트의 상호작용

  1. 페이지 폴트 발생:
    • 프로세스가존재하지 않는 페이지에 접근
    • MMU가 페이지 폴트 인터럽트를 발생
  2. IDT를 통해 핸들러 실행:
    • CPU가 IDT를 참조하여 페이지 폴트 처리 루틴 실행
  3. 커널모드 전환 및 처리:
    • 커널모드로 전환하여 디스크에서 페이지를 메모리에 로드
  4. 테이블 갱신 및 복귀:
    • 페이지 테이블 갱신 후, 사용자모드로 복귀하여 프로세스 재개

정리

  • 요구 페이징: 필요한 페이지만 적재하여 메모리 사용 최적화
  • 페이지 폴트: 페이지 미존재 시 발생하는 이벤트로, 운영체제가 처리
  • 페이지 폴트와 인터럽트: 페이지 폴트는 소프트웨어 인터럽트로 IDT를 통해 처리
  • IDT: CPU가 인터럽트 처리 루틴을 찾는 데 사용하는 테이블
profile
Turning Vision into Reality.

0개의 댓글