Linux: "기본 페이지 오류 페이징"과 "수동으로 스와핑 활성화"의 차이점 [닫기]

Linux: "기본 페이지 오류 페이징"과 "수동으로 스와핑 활성화"의 차이점 [닫기]

Linux 시스템에서는 다음 명령을 통해 스왑을 활성화할 수 있습니다.

sudo fallocate -l 500M /data/swapfile
sudo chmod 600 /data/swapfile
sudo mkswap /data/swapfile
sudo swapon /data/swapfile

그러나 이 기능이 활성화되지 않은 경우에도 페이지가 메모리에 없을 때 커널은 계속 페이지를 표시합니다.

스왑 파일을 설정하지 않고 머신에서 명령을 실행 하여 sar -B 1 30이를 확인할 수 있습니다.

03:08:40 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
03:08:41 AM      0.00      0.00      3.00      0.00     44.00      0.00      0.00      0.00      0.00
03:08:42 AM      0.00      0.00     19.00      0.00     30.00      0.00      0.00      0.00      0.00
03:08:43 AM      0.00      0.00      0.00      0.00      3.00      0.00      0.00      0.00      0.00
03:08:44 AM     24.00      0.00      2.00      1.00      7.00      0.00      0.00      0.00      0.00
03:08:45 AM    364.00     60.00     18.00      3.00      4.00      0.00      0.00      0.00      0.00
03:08:46 AM    140.00      0.00    392.00      2.00    243.00      0.00      0.00      0.00      0.00

게다가메이푸르터이렇게 하면 디스크 간 페이징 데이터가 트리거됩니다 .

내 질문은 다음과 같습니다

  • 운영 체제에는 두 가지 유형의 스왑이 있다고 말할 수 있습니까?
  • 이 두 메커니즘은 어떻게 다르게 작동합니까?
  • 페이징 메커니즘이 항상 작동하는 경우 왜 스왑을 수동으로 활성화해야 합니까?

알아요어떤 사람들은 말한다:

스와핑이란 전체 프로세스 주소 공간 또는 최소한 공유할 수 없는 텍스트 데이터 세그먼트를 스왑 장치나 역(일반적으로 디스크)으로 한 번에 복사하는 것을 의미합니다.

페이징이란 주소 공간의 하나 이상의 페이지를 내부/외부로 복사하는 것을 의미합니다. 특히 이는 더 세분화된 수준입니다. 예를 들어, 1GB RAM 주소 공간에는 약 250,000개의 4KB 페이지가 있습니다.

그러나 책에서는Linux 가상 메모리 관리자 이해, Linux에서는 그렇지 않은 것 같습니다.

엄밀히 말하면 Linux는 스와핑을 수행하지 않습니다. "스와핑"은 전체 프로세스 주소 공간을 디스크에 복사하는 것을 의미하고 "페이징"은 개별 페이지를 복사하는 것을 의미하기 때문입니다. Linux는 실제로 최신 하드웨어에서 지원하는 페이징을 구현하지만 전통적으로 토론과 문서에서는 이를 스와핑이라고 합니다. Linux에서 단어 사용과 일관성을 유지하기 위해 이를 스왑이라고도 합니다.

누군가 이것을 설명할 수 있나요? 감사해요!

답변1

게다가메이푸르터그러면 디스크에 대한 데이터 페이징이 트리거됩니다.

반대로, 주요 오류는 페이지 오류로, 페이지 매김을 통해서만 해결할 수 있습니다.존재하다디스크의 데이터.

운영 체제에는 두 가지 유형의 스왑이 있다고 말할 수 있습니까?

완전히 다르지는 않습니다.호출(페이지를 폐기할 수 있도록 메모리 내용을 "다른 곳"에 복사) 다양한 백업 저장소를 사용할 수 있습니다. 메모리의 페이지에는 다양한 콜아웃 대상이 있습니다. 매핑된 파일은 일반적으로 자체 백업 저장소이고, 대부분의 다른 페이지에는 백업 저장소로 스왑 파일이나 파티션이 필요합니다. 교환은 후자를 의미합니다. 커널이 메모리 페이지를 해제해야 할 때 파일에서 수정되지 않은 페이지를 해제하려는 경우 필요할 때 파일에서 페이지를 복원할 수 있다는 것을 알고 간단히 이를 삭제할 수 있습니다. 파일의 수정된 페이지를 삭제해야 하는 경우 파일이 읽기/쓰기로 매핑되고 공유되지 않으면 페이지는 다시 삭제되기 전에 파일에 기록되며 커널은 파일에서 페이지를 복구할 수 있음을 알고 있습니다. . 다른 것에는 다른 형태의 저장이 필요하며, 그렇지 않으면 버릴 수 없습니다.

이 두 메커니즘은 어떻게 다르게 작동합니까?

찾다.

페이징 메커니즘이 항상 작동하는 경우 왜 스왑을 수동으로 활성화해야 합니까?

대부분은 위를 참조하세요. 스왑의 목적은 아직 자체 백업 저장소가 없는 페이지에 백업 저장소를 제공하는 것입니다.

당신은 또한 볼 수 있습니다Linux에 가상 머신에 스왑 공간이 필요한 이유는 무엇입니까?

답변2

두 인용문 모두 역사적/원래 의미가 교환되어 있습니다. 위키피디아페이징:

1960년대에는 스와핑이 초기 가상 메모리 기술이었습니다. 하나 쇼 전체하나는 RAM에서 디스크로 "스왑 아웃"(또는 "스왑 아웃")되고, 다른 하나는 스왑 인(또는 스왑 인)됩니다.

인텔 매뉴얼은 명확합니다.

운영 체제나 실행 프로그램에서 페이징이 올바르게 구현되면물리적 메모리와 디스크 간 페이지 스와핑이는 프로그램의 올바른 실행에 투명합니다.

(16비트 가상 8086 모드에서도 투명하게 작동한다고 계속 설명합니다...)

AMD에는 또한 매우 읽기 쉬운 섹션이 있습니다.

마지막으로 시스템 소프트웨어를 사용할 수 있습니다.페이징 메커니즘매핑 여러 개의 대규모 가상 주소 공간더 작은 물리적 메모리로. 각 애플리케이션은 전체 32비트 또는 64비트 가상 주소 공간을 사용할 수 있습니다. 시스템 소프트웨어는 가장 일반적으로 사용되는 가상 메모리 페이지를 사전에 매핑합니다.사용 가능한 실제 메모리 페이지 풀. 가장 일반적으로 사용되지 않는 가상 메모리 페이지는 다음과 같습니다.교체하다하드 드라이브에. 이 과정을 요청 시 가상 메모리 페이징.

설정이 없다는 점은 고려하지 않습니다.하드 드라이브로 교체. 이 경우 LFU는 파일을 다시 쓰거나(사용 가능한 경우) 파일을 삭제해야 합니다(깨끗한 경우).


이 새로운 64 지시문은 다소 관련이 있습니다.

SWAPGS 명령어는 시스템 소프트웨어에 시스템 데이터 구조에 대한 포인터를 로드하는 빠른 방법을 제공합니다. SWAPGS는 SYSCALL 명령이나 인터럽트 또는 예외로 인해 시스템 소프트웨어 루틴에 들어갈 때 사용할 수 있습니다.

...

이 스왑을 통해 시스템 커널 소프트웨어는GS 세그먼트 적용 범위 접두어 기간메모리 참조.

항상 이것으로 돌아와분할:

분할은 소프트웨어와 데이터를 재배치하고 보호하는 데 뛰어난 유연성을 제공하지만 메모리 격리 및 재배치를 처리하려면 분할을 사용하는 것이 더 효율적인 경우가 많습니다.소프트웨어와 하드웨어를 결합한 페이징지원하다. 결과적으로 대부분의 최신 시스템 소프트웨어는 분할 기능을 우회합니다. 하지만, 세분화를 완전히 비활성화할 수 없습니다.,장거리 모드 시스템 소프트웨어를 구현하려면 분할 메커니즘을 이해하는 것이 매우 중요합니다.


따라서 RAM에는 페이지별 스와핑이 있고 스와핑의 컨텍스트 전환 측면이 있다고 말할 수 있습니다. 이는 60년대 구현에 반영되었지만 최신 SWAPGS 명령어에도 반영되었습니다.

관련 정보