메모리 페이징

Memory paging

컴퓨터 운영 체제에서 메모리 페이징은 컴퓨터메인 [citation needed]메모리에서 사용하기 위해 2차[a] 스토리지에서 데이터를 저장하고 검색하는 메모리 관리 체계입니다.이 스킴에서는, operating system은, 페이지라고 불리는 같은 크기의 블록에 있는 secondary 스토리지로부터 데이터를 취득합니다.페이징은 최신 운영 체제에서 가상 메모리 구현의 중요한 부분이며, 세컨더리 스토리지를 사용하여 프로그램이 사용 가능한 물리적 메모리 크기를 초과하도록 합니다.

단순성을 위해 메인 메모리는 "RAM"(랜덤 액세스 메모리의 약자), 세컨더리 스토리지는 "Disk"(하드 디스크 드라이브, 드럼 메모리 또는 솔리드 스테이트 드라이브 의 약자)라고 부릅니다.그러나 컴퓨팅의 많은 측면과 마찬가지로 사용되는 기술과 독립적입니다.

메모리 모델에 따라 페이지 메모리의 기능은 보통 MMU(Memory Management Unit) 또는 MPU(Memory Protection Unit)를 사용하여 CPU/MCU에 유선 연결되며 커널이라고 불리는 시스템 코드를 통해 개별적으로 활성화됩니다.를 들어 x86 명령 집합 아키텍처(ISA)를 구현하는 CPU에서 메모리 페이징은 CR0 제어 레지스터를 통해 활성화된다.

이력

1960년대에 스와핑은 초기 가상 메모리 기술이었다.프로그램 전체 또는 세그먼트 전체가 RAM에서 디스크 또는 드럼으로 "스왑 아웃"(또는 "롤 아웃")되고 다른 하나가 스왑 인(또는 롤 인)[1][2]됩니다.스왑 아웃된 프로그램은 최신이지만 RAM이 다른 프로그램에서 사용되는 동안 실행이 중단됩니다. 스왑 아웃된 세그먼트를 가진 프로그램은 해당 세그먼트가 필요할 때까지 실행을 계속할 수 있으며, 그 세그먼트가 스왑 인될 때까지 중단됩니다.

프로그램에는 같은 메모리를 다른 시간에 점유하는 여러 오버레이가 포함될 수 있습니다.오버레이는 RAM을 디스크로 페이징하는 방법이 아니라 단순히 프로그램의 RAM 사용을 최소화하는 방법입니다.이후의 아키텍처에서는 메모리 분할을 사용하였으며, 개별 프로그램 세그먼트는 디스크와 RAM 간에 교환되는 단위가 되었습니다.세그먼트는 프로그램의 전체 코드 세그먼트 또는 데이터 세그먼트 또는 다른 대규모 데이터 구조입니다.이러한 세그먼트는 RAM에 상주할 때 연속적으로 배치되어야 했고,[3] 분할을 수정하기 위해 추가적인 계산과 이동이 필요했습니다.

Ferranti의 Atlas와 Manchester [4]대학에서 개발Atlas Supervisor는 메모리 페이징을 최초로 구현한 시스템입니다.마친 뒤 초기 기계, 그들의 운영 체제를 지원하는 페이징은 IBMM44/44X와 MOS운영 체제(1964년)[5], SDS940[6]고 버클리 Timesharing 시스템(1966년), 수정된 IBM시스템/360모델 40과 CP-40 운영 체제(1967년), IBM시스템/360모델 67과 TSS/360과 CP/CMS 같은 티켓 운영 체제 포함한다.1967년), RCA 70/46 시분할 운영체제(1967), GE 645 멀티ics(1969), PDP-10에 BBN에 의해 설계된 페이징 하드웨어와 TENEX 운영체제(1969)가 추가되었습니다.

메모리 페이징을 지원하는 머신 및 그 이후의 머신에서는 페이지 주소 레지스터 세트 또는 메모리페이지 테이블을 사용하여 프로세서가 RAM 내의 임의의 페이지에서 인접해 보이는 논리 주소 공간으로서 동작할 수 있도록 합니다.이러한 페이지는 디스크와 RAM 간에 교환되는 단위가 되었습니다.

페이지 장애

프로세스가 RAM에 현재 존재하지 않는 페이지를 참조하려고 하면 프로세서는 이 비활성 메모리 참조를 페이지 장애로 처리하여 프로그램에서 운영체제로 제어를 전송합니다.operating system은,

  1. 디스크상의 데이터의 위치를 확인합니다.
  2. 데이터 컨테이너로 사용할 빈 페이지 프레임을 RAM에 가져옵니다.
  3. 요청된 데이터를 사용 가능한 페이지 프레임에 로드합니다.
  4. 새 페이지 프레임을 참조하도록 페이지 테이블을 업데이트합니다.
  5. 제어권을 프로그램으로 되돌려 페이지 장애를 일으킨 명령을 투명하게 재시도합니다.

모든 페이지 프레임이 사용 중인 경우 운영체제는 프로그램에서 현재 필요한 페이지에 재사용할 페이지 프레임을 선택해야 합니다.제거된 페이지 프레임이 프로그램에 의해 데이터를 보유하기 위해 동적으로 할당되거나 RAM으로 읽힌 이후 프로그램이 이를 수정한 경우(즉, "더러워진" 경우) 해방되기 전에 디스크에 기록해야 합니다.프로그램이 나중에 제거된 페이지를 참조할 경우 다른 페이지 장애가 발생하여 페이지를 RAM으로 다시 읽어야 합니다.

operating system이 재이용하는 페이지 프레임을 선택하는 방법(페이지 치환 알고리즘)은 효율화에 중요합니다.운영체제는 가장 최근에 사용된 (LRU) 알고리즘 또는 프로그램 작업 세트에 기반한 알고리즘을 통해 페이지 프레임이 곧 필요할 것으로 예측합니다.응답성을 더욱 높이기 위해 페이징 시스템은 곧 필요한 페이지를 예측하여 프로그램이 참조하기 전에 미리 RAM에 로드합니다.

페이지 치환 기술

디맨드 페이징
순수 요구 페이징을 사용하는 경우 페이지는 참조될 때만 로드됩니다.메모리 매핑파일로부터의 프로그램은 RAM에 페이지가 없는 상태에서 실행을 시작합니다.프로그램이 페이지 폴트를 커밋하면 운영체제는 메모리 매핑 파일, 페이징 파일, 페이지 데이터를 포함하는 스왑 파티션 등의 파일에서 필요한 페이지를 RAM으로 복사합니다.

예상 페이징
스왑 프리페치라고도 불리는 이 기술은 미래의 페이지 장애를 최소화하기 위해 곧 참조될 페이지를 예측합니다.예를 들어 페이지 폴트를 서비스하기 위해 페이지를 읽은 후 운영체제는 아직 필요하지 않은 경우에도 다음 몇 페이지를 읽을 수 있습니다(참조 인접성을 이용한 예측).프로그램이 종료되면 사용자가 동일한 프로그램을 다시 실행할 경우 운영체제는 페이지 해방을 지연시킬 수 있습니다.
프리 페이지 큐, 도난 및 회수
빈 페이지 큐는 할당 가능한 페이지 프레임 목록입니다.이 큐가 비워지는 것을 방지함으로써 페이지 폴트 처리에 필요한 컴퓨팅이 최소화됩니다.일부 운영체제는 최근에 참조되지 않은 페이지를 정기적으로 검색하여 페이지 프레임을 해방하여 프리 페이지 큐에 추가합니다.이 프로세스는 "페이지 도용"이라고 불립니다.일부 운영체제는[b] 페이지 회수를 지원합니다.프로그램이 도난당한 페이지를 참조하여 페이지 장애를 범한 경우 운영체제는 이를 검출하여 페이지 프레임을 복원하고 내용을 RAM으로 다시 읽을 필요가 없습니다.
프리클리닝
operating system은, 정기적으로 더티 페이지를 프리 클리닝 하는 경우가 있습니다.변경된 페이지를 디스크에 다시 쓸 수 있습니다.이것에 의해, 새로운 프로그램을 기동하거나 새로운 데이터 파일을 여는 시점에서, 새로운 페이지 프레임을 취득하기 위해서 필요한 클리닝량이 최소한으로 억제되어 응답성이 향상됩니다.(Unix 운영체제는 정기적으로 동기화를 사용하여 모든 더러운 페이지를 사전 청소합니다.Windows 운영체제는 "수정된 페이지 작성기" 스레드를 사용합니다.)

스래싱

초기화가 완료된 후 대부분의 프로그램은 프로그램에 필요한 총 메모리에 비해 적은 수의 코드 및 데이터 페이지에서 작동합니다.가장 자주 액세스하는 페이지를 작업 세트라고 합니다.

작업 세트가 시스템 전체 페이지 수에서 차지하는 비율이 작을 경우 가상 메모리 시스템이 가장 효율적으로 작동하고 페이지 장애를 해결하는 데 적은 양의 컴퓨팅이 소비됩니다.작업 세트가 커짐에 따라 페이지 장애 해결은 증가율이 임계점에 이를 때까지 관리 가능한 상태로 유지됩니다.그 후 장애가 극적으로 증가하여 이를 해결하는 데 소요되는 시간이 프로그램 작성에 소요되는 컴퓨팅 시간을 압도합니다.이 상태를 슬래싱이라고 합니다.스레싱은 대규모 데이터 구조에서 작동하는 프로그램에서 발생합니다. 대규모 작업 집합으로 인해 지속적으로 페이지 장애가 발생하여 시스템이 크게 느려지기 때문입니다.페이지 폴트를 만족시키려면 디스크에서 다시 읽어야 하는 페이지를 해제해야 할 수 있습니다."스래싱"은 가상 메모리 시스템 이외의 컨텍스트에서도 사용됩니다.예를 들어 컴퓨팅의 캐시 문제나 네트워킹의 바보 같은 창 증후군을 설명하는 데 사용됩니다.

VAX 프로세서에서 최악의 상황이 발생할 수 있습니다.페이지 경계를 넘는 단일 MOVL에는, 피연산자 주소를 포함한 롱 워드가 페이지 경계를 넘는 변위 지연 어드레싱 모드를 사용하는 소스 피연산자 및 피연산자 주소를 포함한 롱 워드가 페이지 경계를 넘는 행선지 피연산자 모드를 사용하는 행선지 피연산자가 있을 수 있습니다.ce 와 destination 는 모두 페이지 경계를 넘을 수 있습니다.이 명령어에서는 10페이지가 참조되고 있습니다.모든 페이지가 RAM에 포함되어 있지 않으면 각각 페이지 장애가 발생합니다.각 장애 발생 시 운영체제는 광범위한 메모리 관리 루틴을 수행해야 합니다.아마도 디스크에 다른 프로세스 페이지를 쓰고 디스크에서 활성 프로세스의 페이지를 읽는 등의 여러 I/O가 발생할 수 있습니다.OS가 이 프로그램에 10페이지를 할당할 수 없는 경우 페이지 장애를 복구하면 지시에 필요한 다른 페이지가 폐기되고 명령을 재시작하면 다시 오류가 발생합니다.

과도한 페이징을 줄이고 스레싱 문제를 해결하려면 동시에 실행하는 프로그램의 수를 줄이거나 컴퓨터의 RAM 용량을 늘려서 프로그램당 사용 가능한 페이지 수를 늘릴 수 있습니다.

공유.

멀티프로그래밍 또는 멀티유저 환경에서는 많은 사용자가 동일한 프로그램을 실행할 수 있으며 코드와 데이터가 별도의 페이지에 있도록 작성됩니다.RAM 사용을 최소화하기 위해 모든 사용자가 프로그램의 복사본을 공유합니다.각 프로세스의 페이지 테이블은 코드를 지정하는 페이지가 단일 공유 복사본을 가리키도록 설정되며, 데이터를 지정하는 페이지는 각 프로세스에 대해 서로 다른 실제 페이지를 가리키도록 설정됩니다.

다른 프로그램에서도 같은 라이브러리를 사용할 수 있습니다.공간을 절약하기 위해 공유 라이브러리의 복사본 하나만 물리적 메모리에 로드됩니다.동일한 라이브러리를 사용하는 프로그램에는 동일한 페이지(라이브러리의 코드와 데이터 포함)에 매핑되는 가상 주소가 있습니다.프로그램이 라이브러리의 코드를 수정하고 싶을 때는 Copy-on-Write를 사용하기 때문에 메모리는 필요할 때만 할당됩니다.

공유 메모리는 프로그램 간의 효율적인 통신 방법입니다.프로그램은 메모리의 페이지를 공유한 후 데이터를 교환하기 위해 쓰고 읽을 수 있습니다.

실장

페란티 아틀라스

페이징을 지원하는 최초의 컴퓨터는 1963년 Ferranti, Manchester Plesey의해 공동 개발된 슈퍼 컴퓨터 [7][8][9]Atlas였습니다.머신에는, 512 워드 페이지 마다 1개의 엔트리가 있는 관련(컨텐츠 주소 지정 가능) 메모리가 있습니다.슈퍼바이저는[10] 프로그램에 1레벨의[11] 스토어를 제공하기 위해 동등하지 않은 인터럽트를[c] 처리하고 코어와 드럼 사이의 페이지 전송을 관리했습니다.

Microsoft Windows

Windows 3.x 및 Windows 9x

페이징은, 1990년의 Windows 3.0 이후, Microsoft Windows 의 기능이 되어 왔습니다.Windows 3.x 는, 다음의 이름의 숨김 파일을 작성합니다.386SPART.PAR또는WIN386.SWP스왑 파일로 사용합니다.일반적으로 루트 디렉터리에 있지만 다른 곳(일반적으로 WINDOWS 디렉터리)에 표시될 수 있습니다.이 크기는 시스템의 스왑 공간(제어판 → "가상 메모리"에서 사용자가 선택한 설정)에 따라 달라집니다.사용자가 이 파일을 이동하거나 삭제하면 다음 번에 Windows를 시작할 때 "영구적인 스왑 파일이 손상되었습니다"라는 오류 메시지와 함께 블루 스크린이 나타납니다.파일 삭제 여부(존재 여부)를 선택하라는 메시지가 나타납니다.

Windows 95, Windows 98 및 Windows Me는 유사한 파일을 사용하며, 이 파일의 설정은 제어판 → 시스템 → 성능 탭 → 가상 메모리 아래에 있습니다.Windows 에서는, 자동적으로 페이지 파일의 사이즈를 물리 메모리의 1.5배 사이즈로 설정해, 필요에 따라서 물리 메모리의 3배까지 확장할 수 있습니다.사용자가 물리 메모리가 적은 시스템에서 메모리 사용량이 많은 애플리케이션을 실행하는 경우 이러한 크기를 기본값보다 높은 값으로 수동으로 설정하는 것이 좋습니다.

윈도 NT

Windows NT 패밀리에서 페이징에 사용되는 파일은 다음과 같습니다.pagefile.sys페이지 파일의 기본 위치는 Windows 가 설치되어 있는 파티션의 루트 디렉토리에 있습니다.Windows 는, 페이지 파일에 사용 가능한 드라이브의 빈 영역을 사용하도록 설정할 수 있습니다.다만, 시스템이 Bluetooth Screen of Death(죽음의 블루 스크린) 에 커널 또는 풀 메모리 덤프를 쓰도록 구성되어 있는 경우는, 부트 파티션(Windows 디렉토리가 격납되어 있는 드라이브)에 페이지 파일이 필요합니다.Windows 에서는, 페이징 파일을 메모리 덤프의 임시 스토리지로서 사용합니다.시스템이 재부팅되면 Windows는 메모리 덤프를 페이지 파일에서 다른 파일로 복사하고 페이지 [12]파일에서 사용된 공간을 비웁니다.

단편화

Windows 의 디폴트 설정에서는, 필요에 따라서 페이지 파일을 초기 할당 이상으로 확장할 수 있습니다.이 문제가 서서히 발생하면 상당히 단편화되어 퍼포먼스 [13]문제가 발생할 수 있습니다.이 문제를 피하기 위한 일반적인 조언은 Windows에서 확장되지 않도록 단일 "잠긴" 페이지 파일 크기를 설정하는 것입니다.단, 페이지 파일은 꽉 찼을 때만 확장됩니다.기본 설정에서는 페이지 파일은 물리 메모리 [citation needed]총량의 150%입니다.따라서 페이지 파일이 확장되기 전에 페이지 파일 백업 가상 메모리의 총 수요가 컴퓨터 물리적 메모리의 250%를 초과해야 합니다.

페이지 파일이 확장될 때 발생하는 페이지 파일의 조각화는 일시적입니다.확장된 영역을 더 이상 사용하지 않는 즉시(빠르지 않은 경우 다음 재부팅 시) 추가 디스크 공간 할당이 해제되고 페이지 파일이 원래 상태로 돌아갑니다.

Windows 애플리케이션이 물리 메모리와 페이지 파일의 합계 사이즈보다 많은 메모리를 요구하면, 페이지 파일의 사이즈를 잠그는 것이 문제가 되어, 메모리 할당 요구가 실패해, 애플리케이션이나 시스템프로세스가 실패하는 일이 있습니다.또, 페이지 파일을 차례차례 읽거나 쓰는 일이 거의 없기 때문에, 완전하게 차례차례의 페이지 파일을 가지는 것에 의한 퍼포먼스의 메리트는 최소한으로 억제된다.그러나 일반적으로 큰 페이지 파일은 메모리 사용량이 많은 응용 프로그램을 사용할 수 있으며 디스크 공간을 더 사용하는 것 외에 패널티도 없습니다.단편화된 페이지 파일 자체는 문제가 되지 않을 수 있지만 가변 크기 페이지 파일의 단편화는 시간이 지남에 따라 드라이브에 여러 개의 단편화된 블록이 생성되어 다른 파일이 단편화됩니다.따라서 할당된 크기가 모든 응용 프로그램의 요구를 수용할 수 있을 만큼 크면 연속된 고정 크기의 페이지 파일이 더 좋습니다.

필요한 디스크 용량은, 최신 사양의 시스템(예를 들면, 750 GB 디스크 드라이브에 6 GB의 고정 사이즈의 페이지 파일을 가지는 3 GB의 메모리를 가지는 시스템, 또는 6 GB의 고정 사이즈의 페이지 파일과 2 TB의 디스크 용량을 가지는 시스템)에 간단하게 할당할 수 있습니다.두 예에서 시스템은 디스크 공간의 약 0.8%를 사용하며 페이지 파일이 최대값으로 사전 확장되어 있습니다.

Windows 시스템이 만성적으로 물리 [citation needed]메모리의 합계보다 훨씬 많은 메모리를 사용하고 있는 경우는, 퍼포먼스를 향상시키기 위해서, 페이지 파일의 디플러그를 추천합니다.이 보기는 일시적인 확장 결과를 제외하고 페이지 파일이 시간이 지남에 따라 단편화되지 않는다는 사실을 무시합니다.일반적으로 페이지 파일 액세스와 관련된 성능 문제는 물리 메모리를 추가하는 것으로 훨씬 효과적으로 처리됩니다.

Unix 및 Unix 유사 시스템

Unix 시스템 및 기타 Unix 유사 운영 체제에서는 물리적 RAM이 [14]가득 찼을 때 RAM의 디스크 공간을 대체하는 동작을 설명하기 위해 "swap"이라는 용어를 사용합니다.일부 시스템에서는 하드 디스크의 전체 파티션을 스왑 전용으로 사용하는 것이 일반적입니다.이러한 파티션을 스왑 파티션이라고 합니다.많은 시스템에서 스왑 파티션만 포함하는 데이터 드라이브와는 별도로 스왑 전용 하드 드라이브 전체를 사용하고 있습니다.스왑 전용 하드 드라이브는 "스왑 드라이브" 또는 "스크래치 드라이브" 또는 "스크래치 디스크"라고 불립니다.이러한 시스템 중 일부는 스왑 파티션으로의 스왑만 지원합니다.또 다른 시스템은 파일로의 스왑도 지원합니다.

리눅스

Linux 커널은 스왑 백엔드(디바이스 또는 파일)를 거의 무제한으로 지원하며 백엔드 우선순위 할당도 지원합니다.커널은 물리적 메모리에서 페이지를 스왑할 때 사용 가능한 공간이 있는 가장 우선순위가 높은 백엔드를 사용합니다.여러 스왑 백엔드가 동일한 우선순위로 할당된 경우 라운드 로빈 방식으로 사용되므로(RAID 0 스토리지 레이아웃과 다소 유사함), 기본 디바이스에 [15]병렬로 효율적으로 액세스할 수 있는 한 성능이 향상됩니다.

파일 및 파티션 스왑

최종 사용자의 관점에서 보면 Linux 커널 버전 2.6.x 이후의 스왑 파일은 스왑 파티션과 거의 같은 속도입니다.단, 스왑 파일은 기본 파일 시스템에 연속적으로 할당해야 합니다.스왑 파일의 성능을 향상시키기 위해 커널은 스왑 파일이 기본 디바이스에 배치되어 있는 위치를 맵으로 유지하고 직접 액세스하므로 캐시를 바이패스하고 파일 시스템 [16][17]오버헤드를 방지할 수 있습니다., Red Hat에서는 스왑 파티션 [18]사용을 권장합니다.회전 자기 미디어 장치인 HDD에 설치할 때 스왑 파티션을 사용하면 데이터 처리량이 더 높거나 탐색 시간이 더 빠른 인접한 HDD 영역에 배치할 수 있다는 이점이 있습니다.그러나 스왑 파일의 관리 유연성은 스왑 파티션의 특정 이점을 능가할 수 있습니다.예를 들어 스왑 파일은 마운트된 파일 시스템에 배치할 수 있으며 원하는 크기로 설정할 수 있으며 필요에 따라 추가 또는 변경할 수 있습니다.스왑 파티션은 유연성이 떨어집니다.파티션이나 볼륨 관리 툴을 사용하지 않으면 확장할 수 없기 때문에 복잡하고 다운타임이 발생할 수 있습니다.

스와피니스

Swappiness는 Linux 커널 파라미터로 빈 메모리에서 메모리 할당 요구를 충족할 수 없는 경우 시스템 페이지 캐시에서 페이지를 삭제하는 대신 런타임 메모리에서 스왑아웃할 때 부여되는 상대적 가중치를 제어합니다.스와프성은 0 ~200(포함)[19]의 값으로 설정할 수 있습니다.값이 작을 경우 커널은 페이지 캐시에서 페이지를 삭제하는 것을 선호하며 값이 클 경우 커널은 "콜드" 메모리 페이지를 교환하는 것을 선호합니다.기본값은 다음과 같습니다.60콜드 페이지를 다시 교환할 필요가 있는 경우(예를 들어 아이돌 상태였던 프로그램과 교환할 필요가 있는 경우)에는 레이텐시를 길게 설정할 수 있습니다.또한 캐시에서 삭제된 파일을 다시 읽어야 할 경우 레이텐시를 길게 설정할 수 있지만 인터랙티브한 프로그램의 응답성은 낮아집니다.콜드 페이지를 다시 교환해야 합니다.스왑은 랜덤 쓰기를 많이 수반하기 때문에 HDD의 속도를 더 늦출 수 있지만 SSD에는 이러한 문제가 없습니다.디폴트 값은 대부분의 워크로드에서 올바르게 동작하지만 예상되는 태스크에 대해서는 데스크톱 및 인터랙티브 시스템에서 설정을 낮추고 배치 처리 및 인터랙티브하지 않은 시스템에서 [20]설정을 늘릴 수 있습니다.

스왑 데드

시스템 메모리가 현재 작업에 매우 부족하여 메모리 작업의 많은 부분이 느린 스왑을 거치면 CPU가 유휴 상태라도 실질적으로 작업을 수행할 수 없게 될 수 있습니다.모든 프로세스가 스왑 대기 중이면 시스템은 스왑 [21][22]데스 상태로 간주됩니다.

스왑 중단은 잘못 구성된 메모리 오버 [23][24][25]커밋으로 인해 발생할 수 있습니다.

"스왑 투 데스" 문제에 대한 원래 설명은 X 서버와 관련이 있습니다.키 스트로크에 응답하기 위해 X 서버가 사용하는 코드 또는 데이터가 메인메모리에 없는 경우 사용자가 키 스트로크를 입력하면 서버에서1개 또는 여러 페이지 장애가 발생하고 키 스트로크가 처리되기 전에 스왑에서 이들 페이지를 읽어야 하므로 이에 대한 응답이 느려집니다.이러한 페이지가 메모리에 남아 있지 않으면 다음 키 입력을 처리하기 위해 다시 폴트인해야 하므로 실제로 [26]다른 작업을 정상적으로 실행하고 있어도 시스템이 응답하지 않습니다.

MacOS

macOS는 여러 스왑 파일을 사용합니다.기본(및 Apple 권장) 설치에서는 루트 파티션에 배치되지만 별도의 파티션 또는 [27]디바이스에 배치할 수도 있습니다.

아미가OS 4

AmigaOS 4.0은 RAM 할당 및 물리 메모리 조각 모음을 위한 새로운 시스템을 도입했습니다.조각 모음을 할 수 없는 플랫 공유 주소 공간을 사용합니다.슬래브 할당 방식과 스왑이 가능한 페이징 메모리를 기반으로 합니다.페이징은 AmigaOS 4.1에서 구현되었지만 모든 물리 메모리를 사용했을 [28]경우 시스템이 행업할 수 있습니다.스왑 메모리는 언제든지 활성화 및 비활성화할 수 있으며 사용자는 물리 RAM만 사용하도록 선택할 수 있습니다.

성능

가상 메모리 운영 체제의 백업 저장소는 일반적으로 RAM보다 훨씬 느립니다.또한 기계식 스토리지 디바이스를 사용하면 하드 디스크에 몇 밀리초의 지연이 발생합니다.따라서 가능하면 스왑을 줄이거나 제거하는 것이 좋습니다.일부 운영체제는 커널 결정에 영향을 주는 설정을 제공합니다.

  • Linux는/proc/sys/vm/swappiness파라미터: 시스템페이지 캐시에서 페이지를 삭제하는 것이 아니라 런타임메모리의 스왑아웃의 밸런스를 변경합니다.
  • Windows 2000, XP 및 Vista는DisablePagingExecutive레지스트리 설정 - 커널 모드코드 및 데이터를 페이징 아웃할 수 있는지 여부를 제어합니다.
  • 메인프레임 컴퓨터는 페이지 및 스왑 스토리지에 헤드 퍼 트랙 디스크 드라이브 또는 드럼을 자주 사용하여 탐색 시간을 없애고 회전 지연 시간을 줄이기 위해 여러 개의 동시 요청을 동일한 장치에 보내는 여러 기술을[29] 사용했습니다.
  • 플래시 메모리의 소거-쓰기 사이클은 한정되어 있습니다(플래시 메모리의 제한 참조).한 번에 소거할 수 있는 데이터의 양은 매우 적을 수 있습니다(인텔 X25-M SSD의 경우 128KiB).페이지 사이즈와 일치하는 경우는 거의 없습니다.따라서 메모리 부족 상태에서 스왑 공간으로 사용하면 플래시 메모리가 빠르게 마모될 수 있습니다.플래시 메모리는 하드디스크에 비해 지연이 거의 없고 RAM 칩처럼 휘발성이 없다.ReadyBoost 나 Intel Turbo Memory 의 스킴은 이러한 특성을 이용하기 위해 작성되었습니다.

많은 Unix 유사 운영 체제(: AIX, 리눅스 및 Solaris)에서는 성능을 높이기 위해 스왑 공간에 여러 스토리지 장치를 병렬로 사용할 수 있습니다.

스왑 공간 크기

일부 이전 가상 메모리 운영 체제에서는 프로그램이 런타임 데이터에 메모리를 할당할 때 스왑 백업 저장소의 공간이 예약됩니다.일반적으로 운영체제 벤더는 할당해야 할 스왑 영역의 양에 관한 가이드라인을 발행합니다.

32비트 하드웨어 주소 제한

페이징은 프로세스가 사용하는 주소의 크기(프로세스의 "가상 주소 공간" 또는 "논리 주소 공간")를 특정 컴퓨터에 실제로 설치된 메인 메모리 양(물리 주소 공간)과 다르게 하는 한 가지 방법입니다.

메인 메모리가 가상 메모리보다 작음

대부분의 시스템에서는 프로세스의 가상 주소 공간의 크기가 사용 가능한 기본 [31]메모리보다 훨씬 큽니다.예를 들어 다음과 같습니다.

  • CPU를 메인 메모리에 접속하는 주소 버스는 제한될 수 있습니다.i386SX CPU의 32비트 내부 주소는 4GB를 처리할 수 있지만 주소 버스에 연결된 핀은 24개뿐이므로 설치된 물리적 메모리는 16MB로 제한됩니다.장착할 수 있는 RAM의 최대 용량에는 다른 하드웨어 제한이 있을 수 있습니다.
  • 최대 메모리는 비용, 모델의 표준 구성이 누락되었거나 구매자가 이것이 유리하다고 생각하지 않았기 때문에 설치되지 않을 수 있습니다.
  • 하드웨어 아키텍처가 I/O 또는 기타 기능을 위해 대규모 영역을 예약할 수 있기 때문에 내부 주소 중 일부를 메모리에 사용할 수 없는 경우가 있습니다.

가상 메모리와 같은 크기의 메인 메모리

진정한 n비트 주소 지정을 사용하는 컴퓨터에는 주소 지정 가능한 RAM 유닛이 2개 장착되어n 있을 수 있습니다.를 들어 4GB의 물리 주소 확장(PAE)이 없는 32비트 x86 프로세서가 있습니다.이 경우, 프로세서는 장착되어 있는 모든 RAM에 주소를 지정할 수 있지만, 그 이상의 RAM은 사용할 수 없습니다.

그러나 이 경우에도 페이징을 사용하여 4GB가 넘는 가상 메모리를 생성할 수 있습니다.예를 들어, 많은 프로그램이 동시에 실행되고 있을 수 있습니다.모두 합치면 4GB가 넘는 용량이 필요할 수 있지만 모든 용량이 동시에 RAM에 저장될 필요는 없습니다.페이징 시스템은, 어느 메모리를 secondary 스토리지에 격납할지를 효율적으로 판단해, 인스톨 끝난 RAM 를 최대한으로 활용할 수 있습니다.

이 예에서는 프로세서가 4GB를 넘는 RAM을 수신처로 지정할 수 없지만, operating system은 설치된 RAM의 제한을 초과하는 파일 등 대용량 메모리를 상정하는 프로그램에 서비스를 제공할 수 있습니다.operating system에서는, 필요에 따라서, 파일의 일부를 RAM으로 가져오는 페이징을 사용해 파일의 데이터를 임의로 조작할 수 있습니다.

메인 메모리가 가상 주소 공간보다 큽니다.

일부 컴퓨터에는 프로세스의 가상 주소 공간보다 큰 메인 메모리가 있습니다. 예를 들어 Magic-1,[31] 일부 PDP-11 시스템 및 물리 주소 확장이 있는 32비트 x86 프로세서를 사용하는 시스템도 있습니다.이는 단일 프로세스가 가상 주소 공간보다 더 많은 메인 메모리를 사용할 수 없기 때문에 페이징의 큰 이점을 무효화시킵니다.이러한 시스템은 페이징 기술을 사용하여 다음과 같은 2차적 이점을 얻을 수 있습니다.

  • "추가 메모리"는 페이지 캐시에서 디렉토리 정보 등 자주 사용되는 파일 및 메타데이터를 세컨더리 스토리지에서 캐시하기 위해 사용할 수 있습니다.
  • 프로세서와 운영 체제가 여러 가상 주소 공간을 지원하는 경우 "추가 메모리"를 사용하여 더 많은 프로세스를 실행할 수 있습니다.페이징을 사용하면 가상 주소 공간의 누적 합계가 물리적 기본 메모리를 초과할 수 있습니다.
  • 프로세스는 메모리 백업 파일 시스템(tmpfs 파일 시스템이나 RAM 드라이브의 파일 시스템 등)의 메모리 매핑된 파일에 데이터를 저장하고 필요에 따라 파일을 주소 공간에 매핑할 수 있습니다.
  • 일련의 프로세스는 페이지 기반 분리가 멀티태스킹 환경에 가져올 수 있는 강화된 보안 기능에 의존할 수 있습니다.

가상 주소 공간의 누적 합계 크기는 여전히 사용 가능한 보조 스토리지의 양에 따라 제한됩니다.

「 」를 참조해 주세요.

메모들

  1. ^ 처음에는 드럼, 다음에는 하드 디스크 드라이브솔리드 스테이트 드라이브가 페이징에 사용되었습니다.
  2. ^ 예를 들어 MVS(Multiple Virtual Storage)가 있습니다.
  3. ^ 주소의 상위 비트가 관련 메모리 내의 어떤 엔트리와도 일치하지 않을 때 비등가성이 중단됩니다.

레퍼런스

  1. ^ Belzer, Jack; Holzman, Albert G.; Kent, Allen, eds. (1981). "Operating systems". Encyclopedia of computer science and technology. Vol. 11. CRC Press. p. 442. ISBN 0-8247-2261-2. Archived from the original on 2017-02-27.
  2. ^ Cragon, Harvey G. (1996). Memory Systems and Pipelined Processors. Jones and Bartlett Publishers. p. 109. ISBN 0-86720-474-5. Archived from the original on 2017-02-27.
  3. ^ Belzer, Jack; Holzman, Albert G.; Kent, Allen, eds. (1981). "Virtual memory systems". Encyclopedia of computer science and technology. Vol. 14. CRC Press. p. 32. ISBN 0-8247-2214-0. Archived from the original on 2017-02-27.
  4. ^ Kilburn, T; Payne, R B; Howarth, D J (1962). "The Atlas Supervisor".
  5. ^ R. W. O'Neill. Experience using a time sharing multiprogramming system with dynamic address relocation hardware. Proc. AFIPS Computer Conference 30 (Spring Joint Computer Conference, 1967). pp. 611–621. doi:10.1145/1465482.1465581.
  6. ^ Scientific Data Systems Reference Manual, SDS 940 Computer (PDF). 1966. pp. 8–9.
  7. ^ Sumner, F. H.; Haley, G.; Chenh, E. C. Y. (1962). "The Central Control Unit of the 'Atlas' Computer". Information Processing 1962. IFIP Congress Proceedings. Vol. Proceedings of IFIP Congress 62. Spartan.
  8. ^ "The Atlas". University of Manchester: Department of Computer Science. Archived from the original on 2012-07-28.
  9. ^ "Atlas Architecture". Atlas Computer. Chilton: Atlas Computer Laboratory. Archived from the original on 2012-12-10.
  10. ^ Kilburn, T.; Payne, R. B.; Howarth, D. J. (December 1961). "The Atlas Supervisor". Computers - Key to Total Systems Control. Conferences Proceedings. Vol. 20, Proceedings of the Eastern Joint Computer Conference Washington, D.C. Macmillan. pp. 279–294. Archived from the original on 2009-12-31.
  11. ^ Kilburn, T.; Edwards, D. B. G.; Lanigan, M. J.; Sumner, F. H. (April 1962). "One-Level Storage System". IRE Transactions on Electronic Computers. Institute of Radio Engineers (2): 223–235. doi:10.1109/TEC.1962.5219356.
  12. ^ Tsigkogiannis, Ilias (2006-12-11). "Crash Dump Analysis". driver writing != bus driving. Microsoft. Archived from the original on 2008-10-07. Retrieved 2008-07-22.
  13. ^ "Windows Sysinternals PageDefrag". Sysinternals. Microsoft. 2006-11-01. Archived from the original on 2010-12-25. Retrieved 2010-12-20.
  14. ^ Both, David (2020-03-27). "An introduction to swap space on Linux systems". Opensource.com. Retrieved 2021-12-08.
  15. ^ "swapon(2) – Linux man page". Linux.Die.net. Archived from the original on 2014-02-28. Retrieved 2014-09-08.
  16. ^ ""Jesper Juhl": Re: How to send a break? - dump from frozen 64bit linux". LKML. 2006-05-29. Archived from the original on 2010-11-24. Retrieved 2010-10-28.
  17. ^ "Andrew Morton: Re: Swap partition vs swap file". LKML. Archived from the original on 2010-11-24. Retrieved 2010-10-28.
  18. ^ 7장 스왑 공간 - Red Hat Customer Portal "스왑 공간은 전용 스왑 파티션(권장), 스왑 파일 또는 스왑 파티션과 스왑 파일의 조합입니다."
  19. ^ "The Linux Kernel Documentation for /proc/sys/vm/".
  20. ^ Andrews, Jeremy (2004-04-29). "Linux: Tuning Swappiness". kerneltrap.org. Archived from the original on 2013-05-24. Retrieved 2018-01-03.
  21. ^ Rik van Riel (1998-05-20). "swap death (as in 2.1.91) and page tables". Archived from the original on 2017-12-29.
  22. ^ Kyle Rankin (2012). DevOps Troubleshooting: Linux Server Best Practices. Addison-Wesley. p. 159. ISBN 978-0-13-303550-6. Archived from the original on 2017-12-29.
  23. ^ Andries Brouwer. "The Linux kernel: Memory". Archived from the original on 2017-08-13.
  24. ^ Red Hat. "Capacity Tuning". Archived from the original on 2017-07-23.
  25. ^ "Memory overcommit settings". 2014-02-16. Archived from the original on 2017-05-31.
  26. ^ Peter MacDonald (1993-02-10). "swapping to death". Archived from the original on 2017-03-28.
  27. ^ John Siracusa (2001-10-15). "Mac OS X 10.1". Ars Technica. Archived from the original on 2008-09-05. Retrieved 2008-07-23.
  28. ^ AmigaOS Core Developer (2011-01-08). "Re: Swap issue also on Update 4 ?". Hyperion Entertainment. Archived from the original on 2013-04-12. Retrieved 2011-01-08.
  29. ^ 예: 블록 멀티플렉서 채널의 회전 위치 감지
  30. ^ "Aligning filesystems to an SSD's erase block size Thoughts by Ted". Thunk.org. 2009-02-20. Archived from the original on 2010-11-13. Retrieved 2010-10-28.
  31. ^ a b Bill Buzbee. "Magic-1 Minix Demand Paging Design". Archived from the original on 2013-06-05. Retrieved 2013-12-09.

외부 링크