페이지 장애

Page fault

컴퓨팅에서 페이지 장애(PF 또는 하드 [a]장애라고도 함)는 프로세스적절한 준비 없이 메모리 페이지에 액세스할 때 메모리 관리 장치(MMU)에 의해 발생하는 예외입니다.페이지에 액세스하려면 프로세스의 가상 주소 공간에 매핑을 추가해야 합니다.또, 디스크등의 백업 스토어에서 실제의 페이지 내용을 로드할 필요가 있는 경우도 있습니다.MMU는 페이지 장애를 검출하지만 운영체제의 커널은 물리 메모리에서 필요한 페이지에 액세스할 수 있도록 하거나 부정한 메모리 액세스를 거부함으로써 예외를 처리합니다.

유효한 페이지 장애는 일반적으로 Windows, macOS 및 Linux [1]커널같이 가상 메모리를 사용하는 운영 체제의 프로그램에서 사용할 수 있는 메모리 양을 늘리기 위해 필요합니다.

종류들

작은

장애가 발생했을 때 페이지가 메모리에 로딩되어 메모리 관리 유닛에 로딩되어 있지 않은 경우는 마이너 또는 소프트 페이지 폴트라고 불립니다.operating system의 페이지 폴트 핸들러는, 메모리 관리 유닛내의 그 페이지의 엔트리가 메모리내의 페이지를 가리키도록 해, 페이지가 메모리에 로드되고 있는 것을 나타내기만 하면 됩니다.페이지를 메모리로 읽을 필요는 없습니다. 문제는 메모리가 다른 프로그램에서 공유되고 있고 페이지가 이미 다른 프로그램의 메모리에 저장되어 있는 경우에 발생할 수 있습니다.

또한 이 페이지는 프로세스의 작업 세트에서 삭제되었지만 아직 디스크에 쓰이거나 삭제되지 않았을 수 있습니다(예: 보조 페이지 캐싱을 사용하는 운영 체제).예를 들어, HP OpenVMS는 디스크에 쓸 필요가 없는 페이지(예를 들어 디스크에서 마지막으로 읽은 이후 변경되지 않은 페이지 등)를 삭제하고 작업 세트가 너무 크다고 판단될 경우 빈 페이지 목록에 배치할 수 있습니다.단, 페이지 내용은 페이지가 다른 곳에 할당될 때까지 덮어쓰지 않습니다.즉, 페이지를 할당하기 전에 원래 프로세스에서 참조할 경우 계속 사용할 수 있습니다.이러한 장애는 디스크 지연 시간을 수반하지 않기 때문에 주요 페이지 장애보다 빠르고 비용이 적게 듭니다.

주요한

이는 운영 체제에서 온디맨드 방식으로 사용할 수 있는 프로그램 메모리의 양을 늘리기 위해 사용하는 메커니즘입니다.운영체제는 프로그램이 프로그램을 사용하려고 하고 페이지 장애가 발생할 때까지 디스크에서 프로그램의 일부를 로드하는 것을 지연시킵니다.장애 발생 시 페이지가 메모리에 로드되지 않은 경우 메이저 또는 하드 페이지 장애라고 합니다.OS 의 페이지 폴트 핸들러는, 메모리의 빈 페이지 또는 메모리의 빈 페이지 중 어느 쪽인가의 빈 위치를 찾을 필요가 있습니다.후자는 다른 프로세스에서 사용될 수 있습니다.이 경우 OS는 해당 페이지의 데이터를 기입하고(마지막으로 변경된 이후 기입되지 않은 경우), 프로세스 페이지 테이블의 메모리에 해당 페이지가 로드되지 않은 것으로 마킹해야 합니다.사용 가능한 공간이 확보되면 OS는 새 페이지의 데이터를 메모리에 읽어들이고 메모리 관리 유닛의 위치에 엔트리를 추가하여 페이지가 로드되었음을 나타낼 수 있습니다.따라서 주요 장애는 사소한 장애보다 비용이 많이 들고 중단된 프로그램 실행에 스토리지 액세스 지연이 추가됩니다.

무효한

가상 주소 공간의 일부가 아닌 주소에 대한 참조에 대해 페이지 장애가 발생한 경우, 즉 메모리 내에 대응하는 페이지가 존재하지 않는 경우 페이지 장애라고 합니다.그 후, operating system의 페이지 폴트 핸들러는, 통상, 문제의 프로세스에 세그먼트화 폴트를 건네, 액세스가 무효인 것을 나타냅니다.이것에 의해, 통상은 무효인 참조를 한 코드가 비정상적으로 종료됩니다. 포인터는 보통 주소 공간에서 주소 0에 대한 포인터로 나타납니다.많은 운영체제는 해당 주소를 포함하는 페이지가 메모리에 없는 것을 나타내도록 MMU를 설정하고 가상 주소 공간에 해당 페이지를 포함하지 않습니다.그러면 늘 포인터가 참조하는 메모리를 읽거나 쓰려고 하면 유효하지 않은 페이지가 나타납니다.올트

유효하지 않은 조건

잘못된 액세스 및 잘못된 페이지 장애는 분할 오류 또는 버스 오류를 유발하여 앱 또는 OS가 충돌할 수 있습니다.소프트웨어 버그가 이러한 문제의 원인인 경우가 많지만 오버클럭에 의한 오류 등 하드웨어 메모리 오류로 인해 포인터가 파손되어 정상적인 코드가 실패할 수 있습니다.

페이지 장애 오류를 보고하는 메커니즘은 운영 체제에 따라 다릅니다.Microsoft Windows 는 구조화예외 처리를 사용하여 비활성 페이지 장애를 액세스 위반 예외로 보고합니다.UNIX와 같은 시스템은 일반적으로 SIGSEGV 등의 신호를 사용하여 이러한 오류 상태를 프로그램에 보고합니다.에러를 수신한 프로그램이 이 에러를 처리하지 않는 경우, operating system은 디폴트액션을 실행합니다.일반적으로 에러 상태의 원인이 된 실행 프로세스의 종료와 프로그램의 오동작을 사용자에게 통지합니다.Windows 에서는, 이러한 크래시를 상세하게 표시하지 않고 보고하는 일이 자주 있습니다.경험이 풍부한 사용자는 WinDbg와 크래시 시 Windows가 작성하는 미니 덤프를 사용하여 상세 정보를 얻을 수 있습니다.UNIX와 유사한 운영체제는 이러한 상태를 "세그멘테이션 위반" 또는 "버스 오류"와 같은 오류 메시지로 보고하며 코어 덤프를 생성할 수 있습니다.

퍼포먼스에 미치는 영향

페이지 장애는 시스템 성능을 저하시켜 스레싱을 일으킬 수 있습니다.하드 디스크 드라이브를 사용하는 기존 컴퓨터의 주요 페이지 장애는 하드 디스크 드라이브의 평균 회전 지연 시간이 3ms, 시크 시간이 5ms, 전송 시간이 0.05ms/페이지이므로 성능에 큰 영향을 미칠 수 있습니다.따라서 페이징 총 시간은 약 8ms(= 8,000μs)입니다.메모리 액세스 시간이 0.2μs일 경우 페이지 장애로 인해 동작이 약 40,000배 느려집니다.

프로그램 또는 운영 체제의 성능을 최적화하려면 페이지 장애 수를 줄여야 합니다.최적화의 2가지 주요 초점은 전체 메모리 사용량을 줄이고 메모리 인접성을 개선하는 것입니다.페이지 오류를 줄이려면 개발자는 페이지 조회수를 최대화하는 적절한 페이지 대체 알고리즘을 사용해야 합니다.페이지 폴트 발생률을 줄이기 위한 휴리스틱 알고리즘 구현과 같은 많은 제안들이 있었다.

물리 메모리가 클수록 페이지 폴트도 줄어듭니다.

「 」를 참조해 주세요.

메모들

  1. ^ Microsoft 는, Windows Vista 의 자원 모니터의 일부 버전(Microsoft operating system의 자원 뷰 도움말에 사용)에서 「하드 폴트」라고 하는 용어를 사용합니다.

레퍼런스

  1. ^ Bovet, Daniel; Cesati, Marco (November 2005). Understanding the Linux Kernel (PDF) (3rd ed.). O'Reilly Media. ISBN 0-596-00565-2. Retrieved 9 October 2021.
  • 존 L. 헤네시, 데이비드 A.패터슨, 컴퓨터 아키텍처, 정량적 접근법 (ISBN 1-55860-724-2)
  • 타넨바움, 앤드류 S운영 체제: 설계구현(제2판).뉴저지: 프렌티스홀 1997.
  • 인텔 아키텍처 소프트웨어 개발자 매뉴얼– Volume 3 : 시스템 프로그래밍

외부 링크

  • OSR Online의 "So Is A Page Fault?" (서브스크립션 필요) (Windows 고유의 설명)
  • Red Hat 웹사이트에서 "Virtual Memory Details"를 참조하십시오.
  • MSDN Online의 "Unhandled Exception Filter(Windows)"를 선택합니다.
  • 페이지 장애가 처리 시간에 결정적인 영향을 미치는 방법에 대한 정보를 제공하는 "페이지 장애 오버헤드"입니다.