가상메모리: 컴퓨터 프로그래머가 무한의 메모리가 있는 것처럼 생각하게 하여, 메모리 제약에 대한 걱정 없이 프로그래밍할 수 있도록 하는 메모리 시스템 구성 개념
일반적으로, 임의의 프로그램이 얼마나 많은 메모리를 필요로 하는지 예측할 수 없다. 특히 multi-user multi-program, multi-task 시스템에서는 더욱 그러하다. 초기 컴퓨터 시스템에서 가장 비싼 경비를 차지했던 것이 메모리였으며, 그러한 비싼 경비 때문에 많은 제약을 받았고 이를 해결하고자 하여 제안된 개념이다. 그러므로 초기 컴퓨터 시스템에서는 대규모 프로그램의 경우 overlay기술을 사용하여 프로그램을 구성하였다.
overlay: 더이상 필요없는 프로그램 모듈을 현재 수행될 프로그램 모듈로 덮어 씌워 수행시키는것. 프로그램이 끝나면 다음 프로그램으로 덮어 씌움.
cpu가 생성하는 주소는 논리 주소이고 N-bit이다. 논리 주소를 MMU가 물리 주소로 변환한다.
가상 메모리는 n+1개의 page로 구성되어있고, 논리주소로 page table(memory map)에 접근한다. page table의 물리 주소로 physical memory에 접근하는데 disk의 전체가 physical memory에 올라와 있지 않아서 그 주소에 데이터가 있을 수도 있고 없을 수도 있다. 없는 경우는 disk에서 스와핑으로 가져와서 참조한다.
demand paging: 해당 페이지가 필요할 때 그 페이지를 메모리로 swap한다. 그러므로 필요로 하지 않으면 결코 메모리로 올라오지 않는다. 요청할 때까지 메모리로 올라오지 않는다. 따라서 I/O가 적고 메모리를 적게 사용한다. 응답이 빠르고 많은 사용자들을 수용한다. segmentation을 사용한다.
anticipatory swapping: 현재 필요하지 않더라도 미리 적당량의 page 혹은 segment를 메모리 상에 가져다 놓는다. 단기 예측은 참조 지역성이 있다. 특정 위치의 가까운 부분을 다음에 접근할 확률이 놓다. (특정한 영역의 주소를 많이 접근하는 경우가 많다.) 장기 예측은 매우 어려우며 사용하지 않는다.
요청 page가 메모리 상에 존재하는지, 아니면 디스크 상에 존재하는지 판별하는 하드웨어의 지원을 필요로 한다. valid/invalid bit 기법을 이용할 수 있다.
valid/invalid bit: page table의 각 항목에 1-bit씩 연관된다. 1은 메모리에 있다는 것이고 0은 메모리에 없다는 것이다. page table은 각 항목의 valid/invalid bit는 처음에 모두 0으로 초기화된다.
만약 메모리에 페이지가 없다면
1. 논리 공간의 1번째 페이지에 있는 B를 참조하려고 하는데 page table에 없어서 page fault가 발생한다.
2. disk로 이동하여 B를 찾는다.
3. disk에 있는 B를 물리 공간으로 swap in한다. (2에 할당)
4. page fault가 발생했던 page table의 1에는 2가 들어간다.