가상 메모리

Virtual memory
가상 메모리는 DASD[a] 활성 RAM과 비활성 메모리를 결합하여 광범위한 연속 주소를 형성합니다.

가상 메모리(Virtual Memory) 또는 가상 스토리지([b]Virtual Storage)는 컴퓨터에서 실제로 사용 가능한 스토리지 리소스의 이상적인 추상화를 제공하는 메모리 관리 기술로,[3] "매우 큰 (주) 메모리 사용자에게 착각을 불러일으킨다.[4]

컴퓨터의 운영 체제는 하드웨어와 소프트웨어의 조합을 사용하여 가상 주소라고 불리는 프로그램이 사용하는 메모리 주소컴퓨터 메모리물리적 주소로 매핑합니다.주 저장소는 프로세스 또는 작업에서 볼 수 있듯이 연속 주소 공간 또는 연속 세그먼트 모음으로 나타납니다.운영 체제는 가상 주소 공간과 가상 메모리에 실제 메모리를 할당하는 작업을 관리합니다.[5]흔히 MMU(Memory Management Unit)라고 불리는 CPU의 주소 변환 하드웨어는 가상 주소를 물리적 주소로 자동 변환합니다.운영 체제 내의 소프트웨어는 디스크 스토리지와 같은 이러한 기능을 확장하여 실제 메모리 용량을 초과할 수 있는 가상 주소 공간을 제공하여 컴퓨터에 물리적으로 존재하는 것보다 더 많은 메모리를 참조할 수 있습니다.

가상 메모리의 주요 이점으로는 애플리케이션이 공유 메모리 공간을 관리할 필요가 없음, 프로세스 에 라이브러리에서 사용하는 메모리를 공유할 수 있음, 메모리 분리로 인한 보안 강화, 페이징 또는 분할 기술을 사용하여 물리적으로 사용할 수 있는 것보다 더 많은 메모리를 개념적으로 사용할 수 있음 등이 있습니다.

특성.

가상 메모리는 물리적 메모리의 단편화를 숨기면서 응용 프로그램 프로그래밍을 더 쉽게 하고, 메모리 계층을 관리하는 부담을 커널에 위임함으로써(프로그램이 명시적으로 오버레이를 처리할 필요가 없음), 그리고 각 프로세스가 자신의 전용 주소 공간에서 실행될 때,프로그램 코드를 재배치하거나 상대적인 주소 지정을 통해 메모리에 액세스할 필요가 없도록 함으로써.

메모리 가상화는 가상 메모리 개념의 일반화로 간주될 수 있습니다.

사용.

가상 메모리는 현대의 컴퓨터 아키텍처에서 필수적인 부분입니다. 구현 시 일반적으로 CPU에 내장된 메모리 관리 장치의 형태로 하드웨어 지원이 필요합니다.필요하지는 않지만 에뮬레이터가상 시스템은 하드웨어 지원을 통해 가상 메모리 구현의 성능을 높일 수 있습니다.[6]1960년대 메인프레임용과 1980년대 초중반의 개인용 컴퓨터용과 같은 오래된 운영 체제는 일반적으로 가상 메모리 기능이 없지만 1960년대 메인프레임의 주목할 만한 예외는 다음과 같습니다.[7][dubious ]

1960년대와 70년대 초반에 컴퓨터 메모리는 매우 비쌌습니다.가상 메모리의 도입은 메모리 요구량이 큰 소프트웨어 시스템이 실제 메모리가 적은 컴퓨터에서 실행할 수 있는 기능을 제공했습니다.이를 통해 절감된 비용은 모든 시스템에서 가상 메모리로 전환할 수 있는 강력한 동기를 제공했습니다.가상 주소 공간을 제공하는 기능이 추가되어 보안과 안정성이 한층 더 높아졌으며, 따라서 가상 메모리는 시장에서 더욱 매력적인 제품이 되었습니다.

가상 메모리를 지원하는 대부분의 최신 운영 체제는 자체 전용 주소 공간에서 각 프로세스를 실행하기도 합니다.따라서 각 프로그램은 가상 메모리에 단독으로 액세스할 수 있는 것으로 보입니다.그러나 일부 오래된 운영 체제(OS/VS1OS/VS2 SVS 등)와 심지어 최신 운영 체제(IBM i 등)는 가상화된 메모리로 구성된 단일 주소 공간에서 모든 프로세스를 실행하는 단일 주소 공간 운영 체제입니다.

매우 빠르고/또는 매우 일관된 응답 시간을 필요로 하는 임베디드 시스템 및 기타 특수 목적 컴퓨터 시스템은 감소된 결정론으로 인해 가상 메모리를 사용하지 않는 것을 선택할 수도 있고; 가상 메모리 시스템은 입력에 응답하여 원하지 않고 예측할 수 없는 지연을 발생시킬 수도 있는 예측할 수 없는 트랩을 유발할 수도 있고,특히 트랩에서 데이터를 보조 메모리에서 메인 메모리로 읽어들여야 하는 경우.가상 주소를 물리적 주소로 변환하는 하드웨어는 일반적으로 구현하는 데 상당한 칩 영역이 필요하며, 임베디드 시스템에 사용되는 모든 칩에 해당 하드웨어가 포함되어 있는 것도 아닙니다. 이러한 시스템 중 일부에서 가상 메모리를 사용하지 않는 또 다른 이유입니다.

역사

1950년대에는 모든 대형 프로그램에 오버레이와 같은 Primary 및 Secondary 스토리지 관리를 위한 로직이 포함되어야 했습니다.따라서 가상 메모리는 기본 메모리를 확장할 뿐만 아니라 프로그래머들이 가능한 한 쉽게 확장할 수 있도록 도입되었습니다.[8]멀티프로그래밍멀티태스킹을 허용하기 위해, 많은 초기 시스템들은 가상 메모리가 없는 여러 프로그램들 사이에 메모리를 나누었습니다. 예를 들어 레지스터통한 PDP-10의 초기 모델들이 그러했습니다.

가상 메모리의 개념이 1956년 독일의 물리학자 프리츠 루돌프 귄츠히(Fritz-Rudolf Güntsch)가 그의 박사 논문인 다중 비동기 회전 드럼과 자동 고속[9][10] 메모리 작동을 사용하는 디지털 컴퓨터의 논리적 설계에서 처음 개발되었다는 주장은 신중한 검토를 받지 못합니다.Güntsch가 제안한 컴퓨터는 (빌트되지는 않았지만) 드럼의 10개5 단어에 정확히 매핑된 10개5 단어의 주소 공간을 가지고 있었습니다. 즉, 주소는 실제 주소였으며 가상 메모리의 주요 특징인 간접 매핑의 형태는 없었습니다.귄츠가 발명한 것은 캐시 메모리의 한 형태였는데, 그의 고속 메모리는 드럼에서 가져온 코드나 데이터의 일부 블록의 복사본을 포함하도록 의도되었기 때문입니다.실제로 그는 다음과 같이 썼습니다(번역에[11] 인용됨)."프로그래머는 기본 메모리의 존재를 존중할 필요가 없습니다(그는 그것이 존재하는지조차 알 필요가 없습니다). 왜냐하면 한 가지 종류의 주소만이 저장공간이 있는 것처럼 프로그래밍할 수 있기 때문입니다."이는 캐시 메모리가 있는 컴퓨터의 상황과 정확히 일치하며, 그 중 가장 초기의 상업적인 예 중 하나는 IBM 시스템/360 모델 85입니다.[12]모델 85에서 모든 주소는 메인 코어 스토어를 지칭하는 실제 주소였습니다.사용자의 눈에 보이지 않는 반도체 캐시 스토어가 현재 실행 중인 프로그램에서 사용 중인 메인 스토어의 일부 내용을 보유하고 있었습니다.이는 다중 프로그래밍과 관련된 문제를 해결하기 위한 것이 아니라 성능을 향상시키기 위한 수단으로 설계된 귄츠의 시스템과 정확히 유사합니다.

맨체스터 대학 아틀라스 컴퓨터는 진정한 가상 메모리를 특징으로 하는 최초의 컴퓨터였습니다.

최초의 진정한 가상 메모리 시스템은 맨체스터 대학에서 Atlas Computer의 일부로 원-레벨 스토리지[13] 시스템을 만들기 위해 구현된 것입니다.페이징 메커니즘을 사용하여 프로그래머가 사용할 수 있는 가상 주소를 16,384 워드의 1차 코어 메모리와 98,304 워드의 2차 드럼 메모리로 구성된 실제 메모리에 매핑했습니다.[14]Atlas에 가상 메모리를 추가함으로써 다가오는 프로그래밍 문제도 해결되었습니다. 즉, 주 메모리와 보조 메모리 간의 데이터 전송을 계획 및 스케줄링하고 주 메모리의 크기를 변경할 때마다 프로그램을 다시 컴파일하는 것입니다.[15]최초의 Atlas는 1962년에 의뢰되었지만 페이징의 작업 프로토타입은 1959년에 개발되었습니다.[8]: 2 [16][17]1961년 버로우즈 코퍼레이션은 가상 메모리를 갖춘 최초의 상업용 컴퓨터인 B5000을 독자적으로 출시했습니다.[18][19]

IBM은 CP-40CP-67에서 하이퍼바이저의 개념을 개발하였고[c], 1972년에 S/370에 Virtual Machine Facility/[21]370으로 제공하였습니다.IBM은 3081년에 370-XA의 일부로 SIE(Start Interpretive Execution) 명령을 도입하고 VM/XA 버전을 도입하여 이를 활용했습니다.

메인스트림 운영 체제에서 가상 메모리를 구현하기 전에는 많은 문제를 해결해야 했습니다.동적 주소 변환에는 비싸고 구축하기 어려운 전문 하드웨어가 필요했습니다. 초기 구현으로 메모리에 대한 액세스 속도가 약간 느려졌습니다.[8]보조 스토리지를 사용하는 새로운 시스템 전체 알고리즘은 이전에 사용된 애플리케이션별 알고리즘에 비해 효과가 떨어질 것이라는 우려가 있었습니다.1969년에 상용 컴퓨터를 위한 가상 메모리에 대한 논쟁은 끝이 났습니다.[8] David Sayre가 이끄는 IBM 연구팀은 가상 메모리 오버레이 시스템이 수동으로 제어되는 최고의 시스템보다 지속적으로 더 잘 작동한다는 것을 보여주었습니다.[22]1970년대 내내 가상 스토리지 기반 운영 체제를 실행하는 IBM 370 시리즈는 비즈니스 사용자가 가격 대비 성능이 향상된 더 적은 수의 강력한 메인프레임으로 여러 구형 시스템을 마이그레이션할 수 있는 수단을 제공했습니다.가상 메모리를 도입한 최초의 미니 컴퓨터는 노르웨이 NORD-1이었습니다. 1970년대에 다른 미니 컴퓨터들은 가상 메모리를 구현하였는데, 특히 VMS를 실행하는 VAX 모델이 그러했습니다.

가상 메모리는 인텔 80286 프로세서의 보호 모드와 함께 x86 아키텍처에 도입되었지만 세그먼트 스왑 기술은 더 큰 세그먼트 크기로 제대로 확장되지 않았습니다.인텔 80386은 기존 분할 계층 아래에 페이징 지원을 도입하여 페이지 장애 예외를 이중 장애 없이 다른 예외와 연결할 수 있게 했습니다.그러나 세그먼트 기술자를 로드하는 것은 비용이 많이 드는 작업이었기 때문에 운영 체제 설계자들은 페이징과 세그먼트화의 조합보다는 페이징에 엄격히 의존하게 되었습니다.[citation needed]

호출된 가상 메모리

현재 구현된 거의 모든 가상 메모리는 가상 주소 공간을 연속된 가상 메모리 주소 블록인 페이지로 나눕니다.현대[d] 시스템의 페이지는 보통 4 킬로바이트 이상이며, 가상 주소 범위가 크거나 실제 메모리의 양이 많은 시스템은 일반적으로 더 큰 페이지 크기를 사용합니다.[23]

페이지 테이블

페이지 테이블은 애플리케이션에서 볼 수 있는 가상 주소를 하드웨어가 명령을 처리하는 데 사용하는 물리적 주소로 변환하는 데 사용됩니다.[24] 이러한 특정 변환을 처리하는 하드웨어를 흔히 메모리 관리 장치라고 합니다.페이지 테이블의 각 항목에는 해당 페이지가 실제 메모리에 있는지 여부를 나타내는 플래그가 있습니다.실제 메모리에 있으면 페이지 테이블 항목에 페이지가 저장된 실제 메모리 주소가 포함됩니다.하드웨어에서 페이지에 대한 참조가 생성되면 해당 페이지에 대한 페이지 테이블 항목이 현재 실제 메모리에 없는 것으로 표시되면 하드웨어에서 페이지 오류 예외를 발생시켜 운영 체제의 페이징 슈퍼바이저 구성 요소를 호출합니다.

시스템은 예를 들어, 전체 시스템을 위한 하나의 페이지 테이블, 주소 공간 또는 프로세스별로 별도의 페이지 테이블, 세그먼트별로 별도의 페이지 테이블, 시스템은 세그먼트 테이블 없음, 시스템 전체를 위한 하나의 세그먼트 테이블, 주소 공간 또는 프로세스별로 별도의 세그먼트 테이블,각 주소 공간 또는 프로세스에 대한 영역 테이블 트리에서[e]영역에 대한 세그먼트 테이블을 분리합니다.페이지 테이블이 하나뿐인 경우, 동시에 실행 중인 다른 응용프로그램은 단일 범위의 가상 주소에서 서로 다른 부분을 사용합니다.페이지 또는 세그먼트 테이블이 여러 개인 경우 가상 주소 공간이 여러 개 존재하고 별도의 페이지 테이블이 있는 동시 응용 프로그램이 서로 다른 실제 주소로 리디렉션됩니다.

SDS 940과 같이 실제 메모리 크기가 더 작은 일부 이전 시스템은 주소 변환을 위해 메모리의 페이지 테이블 대신 페이지 레지스터를 사용했습니다.

페이징 슈퍼바이저

운영체제의 이 부분은 페이지 테이블과 사용 가능한 페이지 프레임 목록을 만들고 관리합니다.페이지 오류를 신속하게 해결할 수 있는 충분한 여유 페이지 프레임을 확보하기 위해, 시스템은 페이지 교체 알고리즘, 예를 들어 LRU(Lest locently used) 알고리즘을 사용하여 할당된 페이지 프레임을 주기적으로 훔칠 수 있습니다.수정된 도난당한 페이지 프레임은 사용 가능한 큐에 추가되기 전에 보조 저장소에 다시 기록됩니다.일부 시스템에서는 페이지 테이블에서 자동으로 로드되지 않는 번역 레지스터도 페이징 관리자가 관리합니다.

일반적으로 해결할 수 없는 페이지 장애는 응용프로그램의 비정상적인 종료를 초래합니다.그러나 일부 시스템에서는 응용프로그램에 이러한 오류에 대한 예외 처리기를 허용합니다.페이징 관리자는 세부 정보에 따라 페이지 장애 예외를 여러 가지 방법으로 처리할 수 있습니다.

  • 가상 주소가 올바르지 않으면 페이징 관리자가 가상 주소를 오류로 처리합니다.
  • 페이지가 유효하고 페이지 정보가 MMU에 로드되지 않으면 페이지 정보가 페이지 레지스터 중 하나에 저장됩니다.
  • 페이지가 초기화되지 않은 경우, 새로운 페이지 프레임이 할당되고 삭제될 수 있습니다.
  • 원하는 페이지가 포함된 도난당한 페이지 프레임이 있으면 해당 페이지 프레임이 재사용됩니다.
  • 읽기 방지된 페이지에 쓰기 시도로 인한 오류의 경우, 쓰기 시 복사 페이지이면 사용 가능한 페이지 프레임이 할당되고 이전 페이지의 내용이 복사됩니다. 그렇지 않으면 오류로 처리됩니다.
  • 가상 주소가 메모리 매핑 파일 또는 페이징 파일의 유효한 페이지인 경우 사용 가능한 페이지 프레임이 할당되고 페이지가 읽힙니다.

대부분의 경우 페이지 테이블에 대한 업데이트가 있을 것이며, TLB(Translation Lookaside Buffer)를 삭제한 후 시스템이 예외를 발생시키는 명령을 재시작합니다.

사용 가능한 페이지 프레임 대기열이 비어 있으면 페이징 관리자는 페이지 도용에 대해 동일한 페이지 교체 알고리즘을 사용하여 페이지 프레임을 사용 가능하게 해야 합니다.

고정된 페이지

운영 체제에는 고정된 메모리 영역이 있습니다(보조 스토리지로 스왑되지 않음).사용되는 다른 용어는 잠김, 고정 또는 유선 페이지입니다.예를 들어 인터럽트 메커니즘은 I/O 완료 및 페이지 오류와 같이 해당 핸들러에 대한 포인터 배열에 의존합니다.이러한 포인터가 포함된 페이지나 이 포인터가 호출하는 코드가 페이지화 가능한 경우, 특히 페이지 장애 중단의 경우 인터럽트 처리가 훨씬 복잡해지고 시간이 많이 소요됩니다.따라서 페이지 테이블 구조의 일부 부분은 페이지를 구성할 수 없습니다.

일부 페이지는 짧은 시간 동안 고정될 수도 있고, 다른 페이지는 긴 시간 동안 고정될 수도 있으며, 다른 페이지는 영구적으로 고정되어야 할 수도 있습니다.예를 들어,

  • 페이지가 있는 보조 저장 장치에 대한 페이징 슈퍼바이저 코드와 드라이버는 영구적으로 고정되어야 합니다. 그렇지 않으면 필요한 코드를 사용할 수 없기 때문에 페이징이 작동하지 않습니다.
  • 가변적인 페이징 지연을 방지하기 위해 타이밍에 의존하는 구성 요소를 고정할 수 있습니다.
  • 직접 메모리 액세스 또는 I/O 채널을 사용하는 주변 장치에 의해 직접 액세스되는 데이터 버퍼는 I/O 작업이 진행되는 동안 고정된 페이지에 상주해야 합니다. 이는 해당 장치와 해당 장치가 연결된 버스가 물리적 메모리 주소에 위치한 데이터 버퍼를 찾을 것으로 예상되기 때문입니다. 버스의 메모리 관리 여부에 관계없이I/O를 위한 gement unit, 페이지 장애가 발생하면 전송을 중지할 수 없으며, 페이지 장애가 처리되면 다시 시작할 수 없습니다.예를 들어, 측정 센서 유닛에서 가져온 데이터인데 페이지 오류로 인해 손실된 실시간 데이터를 복구할 수 없습니다.

IBM의 System/370 및 후속 시스템용 운영 체제에서 용어는 "fixed"이며, 이러한 페이지는 장기적으로 고정될 수도 있고, 단기적으로 고정될 수도 있으며, 고정되지 않을 수도 있습니다(즉, 페이지화 가능).시스템 제어 구조는 종종 장기 고정(1초의 분수로 측정된 시간이 아니라 벽시계 시간, 즉 초 단위로 측정된 시간)되는 반면 I/O 버퍼는 일반적으로 단기 고정(일반적으로 벽시계 시간보다 상당히 적은 초 단위로 측정됨)됩니다.실제로 OS에는 이러한 단기적인 고정 데이터 버퍼(시간이 많이 소요되는 슈퍼바이저 호출 지침에 의존하지 않고 수행되는 고정)를 "고속으로 고정"할 수 있는 특별한 기능이 있습니다.

멀틱스는 "유선"이라는 용어를 사용했습니다.OpenVMS 및 Windows는 일시적으로 페이지를 호출할 수 없는 페이지(I/O 버퍼의 경우)를 "잠김"이라고 부르며, 페이지를 호출할 수 없는 페이지에 대해서는 "페이지를 호출할 수 없음"이라고 말합니다.Single UNIX 사양은 또한 다음에 대한 사양에서 "locked"라는 용어를 사용합니다.mlock(), …하는 바와 마찬가지로mlock() 많은 유닉스 계열 시스템의 man page.

가상현실(Virtual-Real Operation

OS/VS1 및 이와 유사한 OS에서 시스템 메모리의 일부 부분은 "V=R"이라고 하는 "가상 현실" 모드로 관리됩니다.이 모드에서는 모든 가상 주소가 동일한 실제 주소에 해당합니다.이 모드는 인터럽트 메커니즘, 이전 시스템의 페이징 슈퍼바이저 및 페이지 테이블, 비표준 I/O 관리를 사용하는 응용 프로그램에 사용됩니다.예를 들어, IBM의 z/OS에는 3가지 모드(가상-가상, 가상-실제 및 가상 고정)가 있습니다.[citation needed]

스레싱

페이징페이지 도용을 사용하면 "쓰레싱(thrashing)"이라는 문제가 발생할 수 있습니다. 이 경우 컴퓨터가 백업 저장소와 페이지를 주고 받는 데 부적절하게 많은 시간을 소비하므로 유용한 작업 속도가 느려집니다.작업의 작업 집합은 작업이 유용하게 진행되기 위해 메모리에 있어야 하는 최소 페이지 집합입니다.사용 가능한 메모리가 부족하여 모든 활성 프로그램의 작동 세트를 저장할 수 없을 때 스레싱이 발생합니다.실제 메모리를 추가하는 것이 가장 간단한 대응이지만 애플리케이션 설계, 스케줄링 및 메모리 사용량을 개선하는 데 도움이 될 수 있습니다.또 다른 해결책은 시스템에서 활성화된 작업의 수를 줄이는 것입니다.이것은 하나 이상의 프로세스의 전체 작업 세트를 스왑함으로써 실제 메모리에 대한 수요를 줄입니다.

시스템 스레싱은 실행 중인 소수의 프로그램에서 페이지 수요가 갑자기 급증하면서 발생하는 경우가 많습니다.스왑[26] 토큰은 가볍고 동적인 스레싱 보호 메커니즘입니다.기본 아이디어는 시스템에 토큰을 설정하는 것인데, 이 토큰은 스레싱이 발생할 때 페이지 장애가 있는 프로세스에 무작위로 부여됩니다.토큰을 가진 프로세스는 작업 세트를 구축하기 위해 더 많은 물리적 메모리 페이지를 할당할 수 있는 권한이 주어지는데, 이는 실행을 빠르게 완료하고 메모리 페이지를 다른 프로세스에 릴리스할 것으로 예상됩니다.타임 스탬프는 토큰을 하나씩 넘겨주는 데 사용됩니다.스왑 토큰의 첫 번째 버전은 리눅스 2.6에서 구현되었습니다.[27]두 번째 버전은 preempt swap-token이라고 불리며 리눅스 2.6에도 있습니다.[27]이 업데이트된 스왑 토큰 구현에서는 각 프로세스에 대해 우선 순위 카운터가 설정되어 스왑 아웃 페이지 수를 추적합니다.토큰은 항상 높은 우선 순위를 가진 프로세스에 주어지는데, 이 프로세스에는 많은 수의 스왑 아웃 페이지가 있습니다.타임 스탬프의 길이는 일정하지 않지만 우선 순위에 따라 결정됩니다. 프로세스의 스왑 아웃 페이지 수가 많을수록 타임 스탬프의 길이가 길어집니다.

세그먼트화된 가상 메모리

Burroughs B5500과 같은 일부 시스템에서는 가상 주소 공간을 가변 길이 세그먼트로 나누는 페이징 대신 세그먼트화를 사용합니다.[28]여기서 가상 주소는 세그먼트 번호와 세그먼트 내의 오프셋으로 구성됩니다.Intel 80286은 옵션으로 유사한 분할 방식을 지원하지만 거의 사용되지 않습니다.세그먼트화 및 페이징은 각 세그먼트를 페이지로 나누어 함께 사용할 수 있습니다. MulticsIBM System/38과 같은 이러한 메모리 구조를 가진 시스템은 일반적으로 메모리 보호를 제공하는 페이징 우위의 세그먼트입니다.[29][30][31]

Intel 80386 이상의 IA-32 프로세서에서 세그먼트는 32비트 선형 페이지 주소 공간에 상주합니다.세그먼트는 해당 공간 내/외부로 이동할 수 있고, 페이지는 메인 메모리를 "페이지화"하여 두 가지 수준의 가상 메모리를 제공할 수 있으며, 대신 페이징만 사용하는 운영 체제는 거의 없습니다.초기의 비하드웨어 지원 x86 가상화 솔루션은 x86 페이징이 두 개의 보호 도메인만 제공하는 반면 VMM, 게스트 OS 또는 게스트 애플리케이션 스택에는 세 개의 보호 도메인이 필요했기 때문에 페이징과 분할을 결합했습니다.[32]: 22 페이징과 세그멘테이션 시스템의 차이점은 메모리 분할뿐만 아니라 메모리 모델 시맨틱스의 일부로서 사용자 프로세스에도 세분화를 볼 수 있습니다.따라서 하나의 큰 공간처럼 보이는 기억 대신에 여러 공간으로 구성되어 있습니다.

세그먼트는 길이가 가변적이거나 주소 공간을 늘리는 간단한 방법이 아닌 중요한 결과를 가져옵니다.프로세스 메모리와 파일 시스템 간에 차별성이 없는 단일 레벨 메모리 모델을 제공할 수 있는 세그먼트화는 프로세스의 잠재적 주소 공간에 매핑된 세그먼트(파일) 목록으로만 구성됩니다.[33]

파일을 반임의 장소에 매핑할 때 파일 간 포인터가 작동하지 않으므로 mmap 및 Win32의 MapViewOfFile과 같은 호출에서 제공하는 메커니즘과 같지 않습니다.Multics에서 파일(또는 다중 세그먼트 파일의 세그먼트)은 주소 공간의 세그먼트에 매핑되므로 파일은 항상 세그먼트 경계에 매핑됩니다.파일의 연결 섹션에는 포인터를 레지스터에 로드하거나 이를 통해 간접 참조를 시도하면 트랩이 발생하는 포인터가 포함될 수 있습니다.해결되지 않은 포인터는 포인터가 참조하는 세그먼트의 이름과 세그먼트 내의 오프셋을 나타냅니다. 트랩의 핸들러는 세그먼트를 주소 공간에 매핑하고 세그먼트 번호를 포인터에 입력한 다음 포인터의 태그 필드를 변경하여 더 이상 트랩이 발생하지 않도록 한 다음 코드로 돌아갑니다.트랩이 발생했습니다. 트랩을 발생시킨 명령을 다시 executing합니다.이렇게 하면 연결기가 필요[8] 없어지며, 다른 프로세스가 동일한 파일을 개인 주소 공간의 다른 위치에 매핑할 때 작동합니다.[35]

주소 공간 스와핑

일부 운영 체제는 페이징 및 세그먼트화를 위해 보유한 모든 기능뿐만 아니라 전체 주소 공간을 스왑할 수 있습니다.이 경우 OS는 파일을 스왑하기 위해 현재 실제 메모리에 있는 페이지와 세그먼트를 씁니다.스왑 인에서 OS는 스왑 파일에서 데이터를 다시 읽지만 스왑 아웃 작업 당시 페이징된 페이지를 자동으로 다시 읽지는 않습니다.

OS/VS2 Release 2부터 z/OS까지 IBM의 MVS는 주소 공간을 스왑할 수 없음으로 표시하는 기능을 제공합니다. 주소 공간에 페이지를 고정하지 않습니다.이 작업은 프로그램 속성 테이블에 해당 기본 프로그램의 이름을 스왑 불가능[36] 플래그와 함께 입력하여 작업 기간 동안 수행할 수 있습니다.또한 SVC(Supervisor Call instruction)[38]를 사용하여 권한 코드를 사용하면 일시적으로 주소 공간을 스왑할 수 없게 만들 수 있습니다. 주소 공간 속성을 변경하려면[37] OS에서 주소 공간을 스왑한 다음 다시 스왑해야 합니다.

예를 들어 여러 작업을 동일한 영역의 스토리지에 넣고 빼는 경우에는 스왑하는 메모리 관리 하드웨어가 반드시 필요한 것은 않습니다.

참고 항목

메모들

  1. ^ 초기 시스템은 드럼을 사용했고, 현대 시스템은 디스크 또는 솔리드 스테이트 메모리를 사용했습니다.
  2. ^ IBM은 메인프레임 운영 체제에서 가상 스토리지라는 용어를 사용합니다.이 사용법은 360/67TSS부터[1] z/Architecturez/OS까지[2] 실행됩니다.
  3. ^ IBM은 이전에 360/65에 하이퍼바이저라는 용어를 사용했지만 [20]가상 메모리는 사용하지 않았습니다.
  4. ^ IBM DOS/VS, OS/VS1DOS/VS는 2KB 페이지만 지원했습니다.
  5. ^ IBM Z에는[25] 각 주소 공간에 대한 3단계 영역 트리가 있습니다.

참고문헌

  1. ^ "SYSTEM COMPONENTS: Dynamic Relocation" (PDF). System/360 Model 67 Time Sharing System Preliminary Technical Summary (PDF). IBM. 1966. p. 21. C20-1647-0.
  2. ^ "BCP (Base Control Program)" (PDF). z/OS Version 2 Release 4 z/OS Introduction and Release Guide (PDF). IBM. 22 September 2020. p. 3. GA32-0887-40.
  3. ^ Bhattacharjee, Abhishek; Lustig, Daniel (2017). Architectural and Operating System Support for Virtual Memory. Morgan & Claypool Publishers. p. 1. ISBN 9781627056021. Retrieved 16 October 2017.
  4. ^ Haldar, Sibsankar; Aravind, Alex Alagarsamy (2010). Operating Systems. Pearson Education India. p. 269. ISBN 978-8131730225. Retrieved 16 October 2017.
  5. ^ Zhou, Xiangrong; Petrov, Peter (1 December 2008). "Direct address translation for virtual memory in energy-efficient embedded systems". ACM Transactions on Embedded Computing Systems. 8 (1): 1–31. doi:10.1145/1457246.1457251. ISSN 1539-9087. S2CID 18156695.
  6. ^ "AMD-V™ Nested Paging" (PDF). AMD. Retrieved 28 April 2015.
  7. ^ "Windows Version History". Microsoft. 23 September 2011. Archived from the original on 8 January 2015. Retrieved 9 March 2015.
  8. ^ a b c d e Denning, Peter (1997). "Before Memory Was Virtual" (PDF). In the Beginning: Recollections of Software Pioneers.
  9. ^ Jessen, Elke (2004). "Origin of the Virtual Memory Concept". IEEE Annals of the History of Computing. 26 (4): 71–72.
  10. ^ Jessen, E. (1996). "Die Entwicklung des virtuellen Speichers". Informatik-Spektrum (in German). 19 (4): 216–219. doi:10.1007/s002870050034. ISSN 0170-6012. S2CID 11514875.
  11. ^ Jessen (2004).
  12. ^ Liptay, J.S. (1968), "Structural Aspects of the System/360 Model 85 – The Cache", IBM Systems Journal, 7: 15–21, doi:10.1147/sj.71.0015
  13. ^ Kilburn, T.; Edwards, D.B.G.; Lanigan, M.J.; Sumner, F.H. (1962), "One-level Storage System", IRE Trans EC-11 (2): 223–235, doi:10.1109/TEC.1962.5219356
  14. ^ "Ferranti Atlas 1 & 2 – Systems Architecture" (PDF). 12 November 2009.
  15. ^ Denning, Peter J. (1 January 2003). "Virtual memory". Encyclopedia of Computer Science. John Wiley and Sons. pp. 1832–1835. ISBN 978-0-470-86412-8. Retrieved 10 January 2023.
  16. ^ Creasy, R. J. (September 1981). "The origin of the VM/370 time-sharing system" (PDF). IBM Journal of Research & Development. 25 (5): 486. doi:10.1147/rd.255.0483.
  17. ^ "The Atlas". Archived from the original on 6 October 2014.{{cite web}}: CS1 maint : URL(링크) 부적합
  18. ^ Joyner, Ian. "Burroughs". Archived from the original on 10 May 2017.
  19. ^ Cragon, Harvey G. (1996). Memory Systems and Pipelined Processors. Jones and Bartlett Publishers. p. 113. ISBN 978-0-86720-474-2.
  20. ^ Gary R. Allred (May 1971). System/370 integrated emulation under OS and DOS (PDF). 1971 Spring Joint Computer Conference. Vol. 38. AFIPS Press. p. 164. doi:10.1109/AFIPS.1971.58. Retrieved 12 June 2022.
  21. ^ z/VM built on IBM Virtualization Technology General Information Version 4 Release 3.0 (PDF). 12 April 2002. GC24-5991-04.
  22. ^ Sayre, D. (1969). "Is automatic "folding" of programs efficient enough to displace manual?". Communications of the ACM. 12 (12): 656–660. doi:10.1145/363626.363629. S2CID 15655353.
  23. ^ Quintero, Dino; et al. (1 May 2013). IBM Power Systems Performance Guide: Implementing and Optimizing. IBM Corporation. p. 138. ISBN 978-0738437668. Retrieved 18 July 2017.
  24. ^ Sharma, Dp (2009). Foundation of Operating Systems. Excel Books India. p. 62. ISBN 978-81-7446-626-6. Retrieved 18 July 2017.
  25. ^ "Translation Tables" (PDF). z/Architecture - Principles of Operation (PDF) (Fourteenth ed.). IBM. May 2022. pp. 3-46–3-53. SA22-7832-13. Retrieved 18 January 2023.
  26. ^ Song Jiang; Xiaodong Zhang (2005). "Token-ordered LRU: an effective page replacement policy and its implementation in Linux systems". Performance Evaluation. 60 (1–4): 5–29. doi:10.1016/j.peva.2004.10.002. ISSN 0166-5316.
  27. ^ a b "Swap Token effectively minimizes system thrasing effects and is adopted in OS kernels".
  28. ^ Burroughs (1964). Burroughs B5500 Information Processing System Reference Manual (PDF). Burroughs Corporation. 1021326. Retrieved 28 November 2013.
  29. ^ GE-645 System Manual (PDF). January 1968. pp. 21–30. Retrieved 25 February 2022.
  30. ^ Corbató, F.J.; Vyssotsky, V. A. "Introduction and Overview of the Multics System". Retrieved 13 November 2007.
  31. ^ Glaser, Edward L.; Couleur, John F. & Oliver, G. A. "System Design of a Computer for Time Sharing Applications".
  32. ^ Smith, J. E.; Uhlig, R. (14 August 2005). "Virtual Machines: Architectures, Implementations and Applications, HOTCHIPS 17, Tutorial 1, part 2" (PDF).
  33. ^ Bensoussan, André; Clingen, CharlesT.; Daley, Robert C. (May 1972). "The Multics Virtual Memory: Concepts and Design". Communications of the ACM. 15 (5): 308–318. CiteSeerX 10.1.1.10.6731. doi:10.1145/355602.361306. S2CID 6434322.
  34. ^ "Multics Execution Environment". Multicians.org. Retrieved 9 October 2016.
  35. ^ Organick, Elliott I. (1972). The Multics System: An Examination of Its Structure. MIT Press. ISBN 978-0-262-15012-5.
  36. ^ 가장 중요한 요구 사항은 프로그램이 APF 승인을 받아야 한다는 것입니다.
  37. ^ 예: 선호 메모리 사용 요청
  38. ^ "Control swapping (DONTSWAP, OKSWAP, TRANSWAP)". IBM Knowledge Center. z/OS MVS Programming: Authorized Assembler Services Reference SET-WTO SA23-1375-00. 1990–2014. Retrieved 9 October 2016.

추가열람

  • Hennessy, John L.; and Patterson, David A.; 컴퓨터 아키텍처, 정량적 접근법 (ISBN 1-55860-724-2)

외부 링크