가상 메모리
가상 메모리 또는 가상 기억 장치(문화어: 가상기억기, virtual memory, virtual storage)는 메모리 관리 기법의 하나로, 컴퓨터 시스템에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여[1] 사용자들에게 매우 큰 (주) 메모리로 보이게 만드는 것을 말한다.[2] 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다.
이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용되며, 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법으로도 사용된다.
가상적으로 주어진 주소를 가상 주소(virtual address) 또는 논리 주소(logical address) 라고 하며, 실제 메모리 상에서 유효한 주소를 물리 주소(physical address) 또는 실주소(real address)라고 한다. 가상 주소의 범위를 가상 주소 공간, 물리 주소의 범위를 물리 주소 공간이라고 한다.
가상 주소 공간은 메모리 관리 장치(MMU)에 의해서 물리 주소로 변환된다. 이 덕분에 프로그래머는 가상 주소 공간상에서 프로그램을 짜게 되어 프로그램이나 데이터가 주메모리상에 어떻게 존재하는지를 의식할 필요가 없어진다. 대부분의 현대적 아키텍처와 운영 체제는 가상 메모리 기능을 제공하며, 각 응용 프로그램에 더 적합한 메모리 관리를 위해 어도비 포토샵과 같은 일부 응용 프로그램은 스스로 가상 메모리를 관리하기도 한다.
가상 메모리의 개념은 1957년에 발표되었다. 실제 적용된 것은 맨체스터 대학교가 Atlas용으로 1961년에 개발한 것이 최초이다. 1965년에 MIT가 개발한 멀틱스 시스템 이후 본격적으로 채용되기 시작했다.
가상 메모리는 크게 나누어 세그먼트(segment) 방식과 페이징 방식의 2종류가 있다. 예를 들어 MC68000 시스템에서는 68451(세그먼트(segment) 방식)과 68851(페이징 방식) 두 가지의 MMU가 준비되어 있었다.
역사
1940년대와 1950년대에 모든 대형 프로그램들은 오버레이와 같은, 1차, 2차 기억 장치를 위한 로직을 포함해야 했다. 1차 메모리의 확장을 위해서만이 아니라, 프로그래머들이 쉽게 사용할 수 있도록 확장하기 위해서 가상 메모리가 도입되었다.[3] 멀티프로그래밍과 멀티태스킹을 허용하기 위해, 수많은 초기의 시스템들은 가상 메모리 없이 여러 프로그램들 사이에 메모리를 나누었으며, 레지스터를 경유하는 PDP-10 초기 모델을 예로 들 수 있다.
가상 메모리의 개념은 1956년 베를린 공과대학교에서 독일의 물리학자 프리츠 루돌프(Fritz-Rudolf Güntsch)가 처음 개발하였으며, 《Logical Design of a Digital Computer with Multiple Asynchronous Rotating Drums and Automatic High Speed Memory Operation》이라는 그의 박사 논문에서 6개의 100 워드 블록의 1차 코어 메모리 및 1,000개의 100 워드 블록의 주소 공간, 1차 메모리와 2차 드럼 메모리 간에 블록을 자동으로 이동하는 하드웨어를 갖춘 머신을 기술하였다.[4][5] 페이징은 160,000 워드의 1차 코어 메모리를 추가적인 96,000 워드의 2차 드럼 메모리와 병합함으로써 아틀라스 컴퓨터의 작업 메모리를 확장하는 방법의 하나로 맨체스터 대학교에서 최초로 구현되었다. 최초의 아틀라스는 1962년에 도입되었지만 작업 중인 페이징 견본은 1959년에 개발되었다.[3](p. 2)[6][7] 1961년, 버로프사는 페이징 대신 세그멘테이션을 지원하는 B5000이라는 독자적으로 가상 메모리를 갖춘 최초의 상용 컴퓨터를 출시하였다.[8][9]
인위적 연속성
인위적 연속성(artificial continuity)이란 가상기억장치의 개념에서 가상공간의 연속적 주소가 실제 물리적인 공간상에서 연속일 필요가 없다는 것을 뜻하는 말이다. 사상 표를 통해서 가상기억장치의 주소로부터 실기억장치의 주소를 알 수 있다.
같이 보기
각주
- ↑ Bhattacharjee, Abhishek; Lustig, Daniel (2017). 《Architectural and Operating System Support for Virtual Memory》. Morgan & Claypool Publishers. 1쪽. ISBN 9781627056021. 2017년 10월 16일에 확인함.
- ↑ Haldar, Sibsankar; Aravind, Alex Alagarsamy (2010). 《Operating Systems》. Pearson Education India. 269쪽. ISBN 978-8131730225. 2017년 10월 16일에 확인함.
- ↑ 가 나 Denning, Peter (1997). “Before Memory Was Virtual” (PDF). 《In the Beginning: Recollections of Software Pioneers》.
- ↑ Jessen, Elke (2004). “Origin of the Virtual Memory Concept”. 《IEEE Annals of the History of Computing》 26 (4): 71–72.
- ↑ Jessen, E. (1996). “Die Entwicklung des virtuellen Speichers” (독일어). 《Informatik-Spektrum》 (Springer Berlin / Heidelberg) 19 (4): 216–219. doi:10.1007/s002870050034. ISSN 0170-6012.
- ↑ R. J. Creasy, "The origin of the VM/370 time-sharing system", IBM Journal of Research & Development, Vol. 25, No. 5 (September 1981), p. 486
- ↑ “Atlas design includes virtual memory”. 2012년 7월 28일에 원본 문서에서 보존된 문서. 2010년 9월 21일에 확인함.
- ↑ “Ian Joyner on Burroughs B5000”. 2017년 5월 10일에 원본 문서에서 보존된 문서. 2016년 11월 4일에 확인함.
- ↑ Cragon, Harvey G. (1996). 《Memory Systems and Pipelined Processors》. Jones and Bartlett Publishers. 113쪽. ISBN 0-86720-474-5.
모듈:Authority_control 159번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
- 스크립트 오류가 있는 문서
- CS1 - 독일어 인용 (de)
- 잘못된 파일 링크가 포함된 문서
- 문화어 표기를 포함한 문서
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- 가상 메모리
- 컴퓨터 시스템