가상 메모리(Virtual Memory)
하나의 프로그램을 실행시킬 때 해당 프로그램 전체를 실제 메모리에 올렸었다. 하지만 가상 메모리(Virtual Memory)를 사용한다면 당장 실행에 필요한 부분만 실제 메모리에 올려서 실행하게 된다. 즉, 가상 메모리는 프로그램 전체가 아닌 필요한 일부분만 실제 메모리에 올리는 방식을 사용한다.
1) 실행에 있어서 사용되는 프로그램의 일부만 메모리에 올린다.
2) 논리적 주소 공간은 물리적 주소 공간보다 더 커질 수있다.
3) 몇몇의 프로세스는 주소 공간에 공유되어진 것을 허락한다.
4) 프로세스 생성을 더욱 효과적으로 할 수 있다.
5) 필요로 한다면 페이지는 swapped in/out 이 된다.
요구 페이징(Demand Paging)
요구 페이징은 가상 메모리가 추구하는 방식을 구현하는 기법으로 사용하는 부분만 메모리에 올리는 방법 중에 하나이다. 요구 페이징 기법을 구현하기 위해서는 하드웨어적인 지원이 필요되는데, 요구 페이징을 사용할 때 메모리에 올리려는 것이 현재 메모리에 존재하는지 디스크에 존재하는지 확인을 해야한다. 현재 메모리에 있는지 valid-invalid bit를 사용하기 때문에 하드웨어적인 지원을 받는다.
요구 페이징 장점
1) I/O 발생이 덜 일어난다.
2) 메모리를 덜 사용한다.
3) 빠른 응답이 가능해진다. (접근하는 순간 실행하기 때문에)
4) 많은 사용자를 수용할 수 있다.
Page Fault
page fault란 지금 실행시켜야 할 페이지가 실제 메모리에 올라와 있지 않는 경우를 말하며(Invaild bit를 갖는 경우), 이렇게 page fault가 일어난다면 CPU는 운영체제에게 알리고 잠시 CPU 작업을 멈춘다. 그리고 디스크에서 해당 부분을 찾아 실제 메모리의 비어있는 프레임에 올리고 페이지 테이블의 해당 비트를 vaild로 갱신한다. 이 과정을 끝마치면 명령어를 다시 실행하여 작업을 재개한다.
1. invailid 비트를 갖고 있는 페이지에 접근할 때 page fault trap이 발생된다.
2. trap이 발생되면서 운영체제는 cpu 작업을 멈춘다.
3. 요청한 페이지가 디스크에 존재하는지 확인한다. (만약 잘못된 주소 접근 또는 접근 권한이 없을 경우 abort)
4. 찾은 데이터를 프레임에 올리기위해 비어있는 프레임을 찾는다. (I/O 발생)
5. 비어있는 프레임을 찾았다면 해당 페이지 테이블을 업데이트 해준다.(프레임 번호, Valid bit)
6. page fault trap이 종료되며 CPU는 다시 작업을 재개한다.
-- 미완성--