가상 메모리(Virtual Memory)
메인 메모리의 크기는 한정되어 있다. 따라서 물리적이 메모리 크기보다 크기가 큰 프로세스는 실행시킬 수 없게 되는데 예를 들어 메인 메모리 크기가 100MB일 때 300MB 크기의 프로세스는 실행시킬 수 없다. 크기가 큰 프로세스를 실행시키기 위해서는 메인 메모리를 크게 키우는 방법이 있겠지만, 이것은 굉장히 비효율적이다.
따라서 나온 방법이 바로 가상 메모리(Virtual Memory)이다.
가상 메모리는 메모리 관리 기법의 하나로 매우 큰 메모리인 것처럼 보이게 만드는 것을 말한다. 즉 , 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다.
가상적으로 주어진 주소를 가상 주소(Virtual Address) 혹은 논리 주소(Logical Address)라고 하며, 실제 메모리 상 유효한 주소를 물리 주소(Physical Address)라고 한다.
가상 메모리의 장점
- 사용자 프로그램이 물리 메모리보다 커져도 된다. 즉 , 메모리 크기의 제약이 자유로워짐
- 각 사용자 프로그램이 더 적은 메모리를 차지하여 더 많은 프로그램을 동시에 수행할 수 있음
- CPU 이용률과 처리율이 높아짐
- 프로그램을 메모리에 올리고 스왑하는 필요한 입출력 횟수가 줄어듬
- 가상 메모리 파일의 공유를 쉽게 하고 공유 메모리 구현을 가능하게 한다.
- 프로세스 생성을 효율적으로 처리할 수 있는 메커니즘을 제공
요구 페이징(Demand Paging)
프로세스 실행 시 모든 부분이 필요한 것은 아니다. 따라서 실행 시 필요한 부분만 메모리에 올림으로써 메인 메모리에 올라가는 프로세스의 크기를 줄일 수 있다.
요구 페이징은 실행시킬 프로세스들을 페이징 과정을 통해 외부 단편화 문제를 해결한다. 따라서 프로세스를 페이지 단위로 나누어 실행에 필요한 부분과 필요 없는 부분으로 나누고 이때 당장 실행에 필요한 페이지만 메모리에 적재하는 기법이 요구 페이징이다. 당장 실행에 필요하지 않은 부분은 Backing Store에 저장해놓았다고 필요할 때 메모리에 올리게 된다.
Valid-Invalid Bit
: 요구 페이징 기법 사용 시 필요한 페이지가 메모리에 존재할 수도, Backing Store에 존재할 수도 있다. 이때 페이지가 메모리에 적재되어 있는지 판단할 방법이 필요한데 이 때 이용하는 것이 Valid-Invalid Bit이다.
- valid(1)는 페이지가 메모리에 존재한다는 뜻
- invalid(0)는 페이지가 메모리에 존재하지 않는다는 뜻 --> Page Fault가 발생함
Page Fault (페이지 부재)
1. 페이지 테이블을 통해 페이지를 참조하려고 하는 해당 페이지가 invalid 라면 페이지 부재 트랩을 발생
2. OS는 내부 테이블을 체크하여 invalid reference라면 프로세스를 중지, 그저 메모리에 없다면 3번 과정으로
3. 페이지가 Backing Store에 존재한다면
4. 물리 메모리에 비어있는 프레임이 존재하면 그곳에 페이지를 읽어오고 만약 비어있는 프레임이 없다면 페이지 교체 알고리즘을 통해 교체할 페이지를 골라야함
5. 페이지 테이블을 리셋 (valid-invalid bit를 valid 로 수정)
6. 다시 프로세스 실행
참고 자료
https://code-lab1.tistory.com/59
[운영체제] 가상메모리(Virtual Memory)와 요구 페이징(Demand Paging), Valid-Invalid Bit, 페이지 부재(Page Faul
가상 메모리(Virtual Memory) 메인 메모리의 크기는 한정되어 있다. 따라서 물리적인 메모리 크기보다 크기가 큰 프로세스는 실행시킬 수 없게 된다. 예를 들어 메인 메모리의 크기가 100MB 일 때 300MB
code-lab1.tistory.com