-
가상메모리 : 프로세스 전체가 메모리 내 올라오지 않더라도 실행 가능하도록 하는 기법
- 사용자 프로그램이 물리 메모리의 제약에서 벗어남
=> 사용자 프로그램이 물리 메모리보다 커져도 됨(물리 메모리 크기 신경쓰지 않고 해결하고자 하는 문제에 집중 가능)
- 각 프로그램이 더 작은 메모리를 차지하기 때문에 더 많은 프로그램을 동시 수행 가능
=> 프로세스 당 메모리 사용량이 감소하고 더 많은 프로세스 수용 가능
=> 응답시간은 늘지 않으면서 CPU 이용률과 처리률이 높아짐
- 프로그램을 메모리에 올리고 swap 하는데 필요한 IO 횟수가 줄어듬
=> IO가 적게 일어나므로 더 빨리 실행 가능
-
이해하기 위한 사전 지식 필요
-
가상메모리 필요 이유?
- 여러 프로그램 활용 → 공간 부족 → 스왑영역으로 내쫓고 가져오기
- 스왑영역과 I/O, 물리메모리 크기 벗어나면 실행 불가
- 따라서 필요성이 생김
-
가상메모리, 모든 논리주소를 물리 메모리에 올려야 할까?
- 좋은 프로그램 일 수록 자주 사용되지 않는 방어나 관리 코드가 많음
- 자주 사용되지 않는 부분을 물리 메모리에 올리는 것은 비효율
- 필요한 내용만 물리 메모리에 올려두고 사용하면 좋을듯 => 가상메모리 등장
-
가상메모리 : 전체를 다 메모리에 올릴 필요 없이 필요한 부분만 메모리에 올려 실행 (실제 물리 + 개발자 논리 메모리 개념 분리)
- 요구페이징 기법을 활용하여 필요한 부분만 적재함
-
요구 페이징 기법 : 주소 공간이 여러 페이지로 나누고, 당장 필요한 페이지만 물리메모리에 올리기
- 필요한 페이지가 물리 메모리에 있는지 여부를 알기 위한 valid 비트 사용(있음 - valid 비트 / 없음 - Invalid 비트)
- Invalid 비트 : Page Fault 발생한 것으로 봄 이 경우 보조저장장치에서 해당 페이지를 가져옴
- 요구페이징 기법 과정 : 찾고자 하는 페이지가 가상 공간에 없음(Page Fault 발생) -> CPU 제어권 OS로 넘어감 -> Swap 영역에서 해당 페이지를 참고해서 물리메모리의 빈 공간에 올림
- 상대적으로 큰 공간인 Swap 영역을 활용하여 프로세스마다 가상의 주소 공간을 확보하고 필요한 페이지만 물리메모리에 올려 사용함으로 써 더 효과먹으로 물리 메모리를 사용함
- 운영체제에서는 프로그램이 물리적 메모리의 크기를 고려할 필요 없이 자기 자신만의 메모리를 사용하는 것 처럼 가정하에 프로그램 하는것을 지원