Virtual Memory

naeganugu·2024년 2월 26일

CS 마스터🔥

목록 보기
4/4

Virtual Memeory 기법은 운영체제가 관여하여 주소를 변환한다.

Demand Paging 이라는 건 요청이 있으면 그 페이지를 메모리에 올리겠다는 것.

이렇게 하면 장점은 다음과 같다.

  • I/O 양 감소. 필요한 것만 올리기 때문
  • Memory 사용량 감소
  • 멀티 프로그래밍 환경에서는 더 많은 사용자가 동시에 메모리에 올라갈 수 있다.
  • 더 빠른 응답 시간. 전체적인 관점에서의 의미. 여러 프로그램이 동시에 실행되고 메모리에 의미있는 정보를 올려두려면 Demand Paging이 유리. 한정된 메모리를 더 잘 사용함.

Invalid의 의미는 페이지가 물리적 메모리에 없는 경우에, 위 그림에서 A, C, F는 물리적 메모리 위에 올라와 있음. 반면 나머지 페이지들은 물리적 메모리에 올라와있지 않고 Backing store에 내려가 있다. 이런 건 Invalid로 표시되어 있다.

프로그램을 구성하는 페이지는 A부터 F까지다. G하고 H는 사용이 안되는 페이지다. 사용이 안되는 페이지도 Invalid로 표시된다. 페이지가 메모리 위에 올라가면 Invalid가 Valid로 바뀌게 된다.

page table을 보고 Invalid면 페이지가 메모리에 없다는 이야기다. 페이지를 일단 디스크에서 메모리로 올려야 한다. I/O 작업! 사용자 프로세스가 할 수 없는 일.
Invalid인 페이지에 대해서는 page fault라는 현상이 발생한다. 요청한 페이지가 메모리에 없는 경우를 page fault라고 한다. 이럴 때 CPU는 자동적으로 운영체제에 넘어가게 된다. page fault trap이라는 소프트웨어 인터럽트.

  • Invalid page에 접근하면, MMU라는 주소변환 하드웨어가 trap을 발생시킨다.
  • 운영체제로 CPU가 넘어온다. page fault handler가 실행된다.
  • 운영체제가 잘못된 요청이 아닌지 판단. 잘못된 요청이면 abort. 정상적인 메모리 요청이면 그 페이지를 디스크에서 메모리로 올려줘야 함. 비어있는 페이지 프레임이 없다면 메모리에서 페이지를 쫓아내고 새로운 페이지를 올림.
  • 디스크 I/O 할 때, I/O 요청하고 CPU 제어권 내어줌. 이후 I/O 요청이 끝났을 때, 인터럽트가 걸려서 운영체제가 CPU를 가지고 page table 엔트리에다 valid 표시를 해둔다. 그리고 나중에 page fault 났던 프로세스가 CPU를 다시 잡게 되면, 메모리 주소 변환을 하면 정상적으로 주소변환을 할 수 있다.

디스크 접근은 굉장히 오래 걸림. page fault가 얼마나 나느냐에 따라서 메모리 접근하는 시간이 크게 좌우가 된다.

어떤 페이지를 쫓아내고 새로운 페이지를 올릴 것인가. 이것이 replacement. replacement algorithm 은 가급적 page falut 비율이 낮아지도록 해야한다.

page fault가 가장 적은 알고리즘. 미래를 다 예측한 것을 기반으로 수행되는 알고리즘. 실제 시스템에서 사용될 수는 없음. 가장 먼 미래에 참조되는 페이지를 쫓아낸다. 아무리 좋은 알고리즘도 이보다 좋을 수는 없다.

FIFO 알고리즘은 먼저 메모리에 들어온 페이지를 쫓아낸다. 메모리 프레임을 늘려줬는데도 page fault가 증가할 수 있다.

제일 오래 전에 사용된 페이지를 쫓아낸다. 미래를 모르고 과거를 기반으로 판단한다.

과거 참조 횟수가 많았던 페이지는 쫓아내지 말자. 가장 참조가 적은 페이지를 쫓아내자.

profile
seungseung-zanggu

0개의 댓글