페이지 부재
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
페이지 부재는 운영 체제에서 가상 메모리 시스템이 물리적 메모리에 없는 페이지에 접근하려는 시도를 처리하는 방식으로, 시스템 성능에 영향을 미치는 주요 요인 중 하나이다. 페이지 부재는 크게 마이너, 메이저, 무효 페이지 부재로 분류되며, 각각 메모리 접근 방식과 처리 과정에 차이가 있다. 마이너 페이지 부재는 페이지가 메모리에 있지만 메모리 관리 장치에 로드된 것으로 표시되지 않은 경우 발생하며, 메이저 페이지 부재는 요청된 페이지가 물리적 메모리에 없을 때 발생하여 디스크 I/O를 필요로 한다. 무효 페이지 부재는 유효하지 않은 메모리 주소에 접근하려는 시도로 인해 발생하며, 프로그래밍 오류로 인한 경우가 많다. 페이지 부재는 시스템 성능 저하와 스래싱을 유발할 수 있으며, 이를 줄이기 위해 메모리 사용량 감소, 메모리 지역성 개선, 적절한 페이지 교체 알고리즘 사용 등의 최적화가 필요하다.
더 읽어볼만한 페이지
- 가상 메모리 - 메모리 관리 장치
메모리 관리 장치(MMU)는 가상 주소를 물리 주소로 변환하여 메모리 접근을 관리하고 보호하는 하드웨어 장치로서, 가상 메모리 시스템에서 독립적인 가상 주소 공간을 제공하고 불법적인 메모리 접근을 차단하며, 페이지 테이블을 통해 외부 단편화 문제를 완화하고 트랜슬레이션 룩어사이드 버퍼(TLB)로 주소 변환 속도를 향상시킨다. - 가상 메모리 - 가상 주소 공간
가상 주소 공간은 운영 체제가 프로세스에 제공하는 논리적인 메모리 공간으로, 실제 물리 메모리 주소와 독립적으로 관리되며, 프로세스는 이 공간을 통해 실행 파일, DLL 파일, 페이지 파일 등을 매핑하고 메모리를 할당받는다. - 컴퓨터 오류 - 블루스크린
블루스크린은 윈도우 운영체제에서 발생하는 치명적인 오류로, 컴퓨터 작동을 멈추고 파란색 화면에 오류 메시지를 표시하며, 하드웨어 또는 소프트웨어 문제로 인해 발생하고, 시스템 복원, 안전 모드 부팅 등의 방법으로 대처한다. - 컴퓨터 오류 - 글리치
글리치는 예기치 않은 오작동이나 오류를 뜻하며, 전자 공학, 컴퓨터, 비디오 게임, 텔레비전 방송, 대중문화 등 다양한 분야에서 기능 실패, 오류, 그래픽 및 사운드 문제, 신호 오류 등의 이상 현상을 포괄적으로 지칭하는 용어이다.
페이지 부재 | |
---|---|
일반 사항 | |
종류 | 예외 |
발생 위치 | 가상 주소 공간 |
원인 | 프로세스가 유효하지 않거나 프로세스에 할당되지 않은 메모리 주소에 접근하려고 시도할 때 발생 |
다른 이름 | 페이지 폴트 (page fault) 하드 폴트 (hard fault) |
상세 정보 | |
정의 | 프로세스가 가상 주소 공간 내의 페이지에 접근하려 하지만, 해당 페이지가 현재 물리 메모리에 존재하지 않을 때 발생하는 예외 |
해결 방법 | 운영 체제가 디스크에서 해당 페이지를 찾아 물리 메모리로 로드 |
발생 시점 | 프로세스가 처음으로 특정 페이지에 접근할 때 페이지가 스왑 아웃된 후 다시 접근할 때 |
결과 | 프로그램 실행 일시 중단 운영 체제 개입 필요한 페이지 로드 후 프로그램 재개 |
영향 | 프로그램 성능 저하 (디스크 접근 시간으로 인해) |
관련 개념 | 가상 메모리 페이지 테이블 스왑 공간 |
페이지 폴트 핸들러 | 운영 체제의 일부로, 페이지 폴트 발생 시 필요한 조치를 수행 |
추가 설명 | |
부재 발생 조건 | 유효하지 않은 페이지에 접근할 때 보호 위반이 발생했을 때 |
기타 | |
참고 | 마이크로소프트는 일부 버전의 리소스 모니터에서 "하드 폴트"라는 용어를 사용 (예: 윈도우 비스타) |
2. 페이지 부재의 종류
페이지 부재는 접근하려는 데이터가 물리 메모리에 없는 상황 외에도 메모리 관리 방식에 따라 여러 유형으로 나뉜다.[1][2] 주요 유형으로는 마이너 페이지 부재, 메이저 페이지 부재, 무효 페이지 부재가 있다.
2. 1. 마이너 페이지 부재 (Minor/Soft Page Fault)
페이지 부재가 발생했을 때 요청한 페이지가 물리 메모리에 이미 로드되어 있지만, 메모리 관리 장치(MMU)의 페이지 테이블에는 해당 정보가 등록되지 않은 경우, 이를 '''마이너 페이지 부재'''(Minor Page Fault) 또는 '''소프트 페이지 부재'''(Soft Page Fault)라고 한다.[1][2] 즉, 필요한 데이터(특정 파일의 특정 오프셋 내용 등)를 담고 있는 물리 페이지 자체는 존재하지만, 현재 실행 중인 프로세스의 페이지 테이블에서 해당 가상 주소에 대한 항목이 이 물리 페이지를 가리키도록 설정되어 있지 않은 상태이다.[2]이 경우, 운영 체제의 페이지 부재 처리기는 보조 기억 장치에서 데이터를 새로 읽어올 필요 없이, 단순히 해당 물리 페이지를 프로세스의 페이지 테이블에 등록하여 메모리 관리 장치가 참조할 수 있도록 갱신하기만 하면 된다.[1][2]
마이너 페이지 부재는 주로 다음과 같은 상황에서 발생한다:
- 여러 프로세스가 공유 메모리를 사용할 때, 다른 프로세스가 이미 해당 페이지를 물리 메모리에 로드해 둔 경우.[1][2]
- 운영 체제가 메모리 최적화를 위해 프로세스의 워킹 세트에서 특정 페이지를 제거했지만, 해당 페이지가 물리 메모리에서 즉시 지워지지 않고 다른 용도로 재할당되기 전까지 내용이 유지되는 경우이다. 이 페이지는 일종의 캐시처럼 동작할 수 있다.[2] 예를 들어, OpenVMS와 같은 운영체제는 워킹 세트가 과도하게 커지면, 디스크에 다시 쓸 필요가 없는 페이지(디스크에서 읽은 후 변경되지 않은 페이지 등)를 제거하여 '자유 페이지 목록'에 추가한다. 하지만 이 페이지가 실제로 재사용되기 전까지는 내용이 그대로 남아있으므로, 원래 프로세스가 해당 가상 주소를 다시 참조하면 간단히 매핑을 복구하여 마이너 페이지 부재로 처리할 수 있다.[2]
마이너 페이지 부재는 디스크 I/O 작업이 수반되지 않으므로, 비교적 빠르게 처리될 수 있다.[2]
2. 2. 메이저 페이지 부재 (Major/Hard Page Fault)
프로그램이 접근하려는 페이지가 물리 메모리에 없는 경우 발생하는 페이지 부재를 의미한다. 이는 '''주요 페이지 부재'''(Major Page Fault) 또는 '''하드 페이지 부재'''(Hard Page Fault)라고도 불린다.[1][2] 운영 체제는 프로그램 실행에 필요한 모든 데이터를 미리 메모리에 로드하는 대신, 특정 데이터가 실제로 필요해질 때까지 로드를 지연시킨다. 프로그램이 아직 메모리에 올라오지 않은 페이지에 접근하려고 시도하면 페이지 부재가 발생하며, 이때 해당 페이지가 메모리에 없다면 메이저 페이지 부재로 처리된다.[1]메이저 페이지 부재가 발생하면, 운영 체제의 페이지 부재 처리기는 다음과 같은 과정을 수행한다.[1][2]
# 물리 메모리에서 사용 가능한 빈 페이지 프레임을 찾는다.
# 만약 빈 프레임이 없다면, 페이지 교체 알고리즘을 사용하여 현재 메모리에 있는 페이지 중 하나를 보조 기억 장치(주로 디스크)로 내보낼(swap out) 대상으로 선택한다.
# 선택된 페이지의 내용이 마지막으로 디스크에 저장된 이후 수정되었다면, 변경된 내용을 디스크에 기록한다. 이 작업이 완료될 때까지 기다려야 할 수 있다. 또한, 해당 페이지가 더 이상 메모리에 유효하지 않음을 페이지 테이블에 표시한다.
# 필요한 공간이 확보되면, 운영 체제는 보조 기억 장치에서 요청된 페이지 데이터를 메모리의 빈 프레임으로 읽어들인다(swap in).
# 데이터 로드가 완료되면, 메모리 관리 장치(MMU)의 페이지 테이블을 업데이트하여 새로운 페이지의 물리 주소를 등록하고, 페이지가 메모리에 로드되었음을 표시한다.
메이저 페이지 부재는 디스크 I/O 작업(읽기 및 필요한 경우 쓰기)을 수반하기 때문에 처리 시간이 상당히 길다. 이는 단순히 메모리 내 주소 매핑 정보만 수정하는 마이너 페이지 부재에 비해 훨씬 큰 비용(시간 지연)을 발생시킨다. 따라서 메이저 페이지 부재를 일으킨 프로그램은 디스크 작업이 완료될 때까지 실행을 즉시 재개할 수 없고 대기 상태에 들어간다.[1][2]
이 메커니즘은 가상 메모리 시스템을 구현하는 핵심 기술 중 하나이다. 이를 통해 프로그램은 실제 물리 메모리의 크기 제약을 넘어 더 큰 주소 공간을 사용할 수 있게 된다. 즉, 운영 체제는 필요에 따라 디스크 공간을 활용하여 프로그램에 할당된 메모리 양을 효과적으로 늘릴 수 있다.[1][2]
2. 3. 무효 페이지 부재 (Invalid Page Fault)
페이지 부재가 프로그램이 접근하려는 가상 주소 공간에 존재하지 않는 주소에 대한 참조 때문에 발생할 때, 이를 '''무효 페이지 부재'''라고 한다. 즉, 해당 주소에 매핑될 수 있는 메모리 내 페이지가 없는 경우이다.이러한 상황이 발생하면, 운영체제의 페이지 부재 처리기는 일반적으로 해당 접근이 유효하지 않음을 알리기 위해 위반한 프로세스에 세그먼테이션 오류(segmentation fault) 신호를 보낸다. 이는 보통 잘못된 참조를 한 코드의 비정상 종료로 이어진다.
널 포인터는 흔히 주소 0을 가리키는 포인터로 사용되는데, 많은 운영체제는 메모리 관리 장치(MMU)를 설정하여 주소 0을 포함하는 페이지가 메모리에 없도록 하고 가상 주소 공간에도 포함시키지 않는다. 따라서 프로그램이 널 포인터가 가리키는 메모리를 읽거나 쓰려고 시도하면 무효 페이지 부재가 발생하게 된다.
3. 잘못된 접근 및 무효 페이지 부재
가상 주소 공간의 일부가 아닌 주소에 대한 참조로 인해 페이지 부재가 발생하는 경우, 즉 해당 주소에 해당하는 메모리 내 페이지가 없을 경우, 이를 '''무효 페이지 부재'''라고 한다. 운영 체제의 페이지 부재 처리기는 일반적으로 이 경우 위반 프로세스에 세그먼테이션 오류를 전달하여 해당 접근이 무효임을 나타낸다. 이는 보통 무효 참조를 한 코드의 비정상 종료로 이어진다. 널 포인터는 일반적으로 주소 0에 대한 포인터로 표현되는데, 많은 운영 체제는 MMU를 설정하여 해당 주소를 포함하는 페이지가 메모리에 없음을 나타내고 해당 페이지를 가상 주소 공간에 포함시키지 않으므로, 널 포인터가 참조하는 메모리를 읽거나 쓰려고 시도하면 무효 페이지 부재가 발생한다.
잘못된 접근 및 무효 페이지 부재는 세그멘테이션 오류 또는 버스 오류를 발생시켜 앱 또는 운영 체제 충돌을 일으킬 수 있다. 소프트웨어 버그가 이러한 문제의 흔한 원인이지만, 오버클러킹으로 인한 것과 같은 하드웨어 메모리 오류는 포인터를 손상시키고 유효한 코드가 실패하게 만들 수도 있다.
운영 체제는 페이지 폴트 오류를 보고하는 다양한 메커니즘을 제공한다. 윈도우는 무효 페이지 부재를 접근 위반 예외로 보고하기 위해 구조화된 예외 처리를 사용한다. 유닉스 계열 시스템은 일반적으로 이러한 오류 조건을 프로그램에 보고하기 위해 시그널(예: SIGSEGV)을 사용한다.
오류를 수신하는 프로그램이 이를 처리하지 않으면 운영 체제는 기본 동작을 수행하며, 일반적으로 오류 조건을 발생시킨 실행 중인 프로세스를 종료하고 프로그램이 오작동했음을 사용자에게 알린다. 윈도우는 종종 이러한 충돌을 세부 정보 없이 보고하지만, 숙련된 사용자는 WinDbg와 윈도우가 충돌 시 생성하는 minidump를 사용하여 자세한 정보를 검색할 수 있다. 유닉스 계열 운영 체제는 이러한 조건을 "세그멘테이션 오류" 또는 "버스 오류"와 같은 오류 메시지로 보고하며, 코어 덤프를 생성할 수 있다.
4. 성능에 미치는 영향
페이지 부재는 시스템 성능을 저하시키고 심한 경우 스래싱을 유발할 수 있다. 특히 페이지 부재 발생 시점에 해당 페이지가 메모리에 로드되어 있지 않아 디스크에서 직접 읽어와야 하는 경우를 주요 페이지 부재(하드 페이지 부재)라고 하며, 이는 성능에 큰 영향을 미친다.
하드 디스크 드라이브를 사용하는 일반적인 컴퓨터에서 주요 페이지 부재가 발생하면 상당한 시간이 소요된다. 평균적인 하드 디스크 드라이브는 평균 회전 대기 시간이 3ms, 탐색 시간이 5ms, 페이지당 전송 시간이 0.05ms 정도 걸린다. 따라서 페이징에 필요한 총 시간은 약 8ms(8,000μs)에 달한다. 반면, 메모리 접근 시간은 약 0.2μs(200ns) 수준이므로, 주요 페이지 부재는 메모리 접근보다 약 40,000배 느린 작업이 되어 프로그램 실행 속도를 크게 저하시킬 수 있다.
따라서 프로그램이나 운영 체제의 성능 최적화에서는 페이지 부재 횟수를 줄이는 것이 중요한 목표가 된다. 최적화의 주요 방향은 다음과 같다.
- 메모리 사용량 감소: 프로그램이 사용하는 전체 메모리 양을 줄여 페이지 부재 발생 가능성을 낮춘다.
- 메모리 지역성 개선: 프로그램이 특정 메모리 영역을 집중적으로 참조하도록 하여 캐시 적중률 및 페이지 적중률을 높인다.
- 적절한 페이지 교체 알고리즘 사용: 페이지 부재 발생 시 어떤 페이지를 교체할지 결정하는 알고리즘을 최적화하여 페이지 적중률을 높인다. 페이지 부재 발생률을 줄이기 위해 휴리스틱 알고리즘을 구현하는 등 다양한 알고리즘이 제안되었다.
- 물리적 메모리 증가: 사용 가능한 물리 메모리 양을 늘리는 것은 페이지 부재를 줄이는 가장 직접적인 방법 중 하나이다.
5. 페이지 교체 알고리즘
요청된 페이지가 페이지 부재 시점에 메모리에 없는 경우, 이를 주요 페이지 부재 또는 하드 페이지 부재라고 부른다. 이런 상황이 발생하면, 운영 체제(OS)의 페이지 부재 처리기는 새로운 페이지를 로드할 메모리 공간을 확보해야 한다. 운영 체제는 먼저 비어 있는 메모리 페이지를 찾는다. 빈 페이지가 없다면, 현재 사용 중인 페이지 중에서 교체 대상을 선택해야 한다.
교체 대상 페이지가 다른 프로세스에서 사용 중이며 마지막 수정 후 디스크에 기록되지 않았다면, 운영 체제는 해당 페이지의 데이터를 먼저 디스크에 저장해야 한다. 이후 해당 프로세스의 페이지 테이블에 이 페이지가 메모리에 없음을 표시한다.
공간이 확보되면, 운영 체제는 필요한 새 페이지의 데이터를 디스크에서 메모리로 읽어 들인다. 마지막으로 메모리 관리 장치(MMU)에 해당 페이지의 위치 정보를 추가하고 페이지 로드를 완료했음을 표시한다. 주요 페이지 부재는 디스크 접근이 필요하므로 단순한 부재보다 처리 비용이 훨씬 크고, 프로그램 실행 중단 시간을 늘린다.
참조
[1]
서적
Understanding the Linux Kernel
http://gauss.ececs.u[...]
O'Reilly Media
2005-11
[2]
문서
パフォーマンスモニタ (perfmon) を起動し、リソースビューのヘルプを参照
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com