가상메모리

기린이·2023년 8월 22일
0

CS 지식

목록 보기
15/15

레지스터
메인메모리 physical memory 물리메모리
보조기억장치 disk

프로그램의 실행

논리주소, 물리주소

컴파일러가 만든 프로그램 실행파일(디스크에 있던)을 메인 메모리에 올린다.

cpu가 참조할 수 있는 형태로 물리 메모리에 올리는 것.

프로그램이 메모리에 올라와서 실행하게 되면
프로세스마다 독자적인 주소 공간을 생성한다.(논리주소)

논리주소공간을 메모리의 물리주소에 매핑한다. 이 작업을 주소바인딩이라고 한다.

*논리 주소 : cpu가 생성하는 주소
*물리 주소 : 메모리가 취급하는 주소

바인딩

가상 메모리 실현을 위해선 실행시간바인딩을 사용함. 이는 메모리 논리주소와 물리주소를 다르게 설정한다는 것.

주소매핑테이블을 이용해서 바인딩을 점검함.

그러기 위해선 기준 레지스터와 MMU라는 하드웨어의 도움이 필요.

기준 레지스터는 현재 프로세스의 물리적 메모리의 시작 주소가 저장되어 있음

-> 기준 레지스터와 논리적 주소를 통해 물리적 주소를 알 수 있음

즉 정리해보자면 프로그램을 실행한다는 것은 프로세스가 메모리에 올라와 독자적 저장공간을 확보받았다는 것이고, 이 프로세스의 실제 물리적 주소는 MMU,기준레지스터의 도움으로 알게된다.

스왑영역

그런데 이때 여러 프로세스를 메모리에 올려놓기 위해서 메모리 영역을 외부저장장치까지 확대한다. 이를 스왑영역(backing store)라고 한다.

실행중인 프로세스의 물리주소를 디스크로 잠시 옮겨놓는 것으로, 스왑영역은 휘발성을 가지고 공간효율성보다 시간효율성을 우선한 접근을 사용해서 일반적인 파일 입출력보다 빠르게 작동한다.

가상메모리

앞선 내용은 실행 중인 프로세스의 모든 내용을 메모리의 올려놓는 상황을 가정했다.

그렇기에 여러 프로그램을 실행하려면 사용중이지 않는 프로세스를 스왑영역으로 내보내는 작업이 빈번하게 일어나게 될 것이다. 또한 메인메모리 크기보다 큰 프로그램은 아예 실행조차 못하게 될 것이다.

그렇기에 프로세스의 모든 내용을 메인 메모리에 올리는 것이 아니라 현재 실행에 필요한 내용만 올린다면 앞선 문제를 해결할 수 있다.

이를 요구페이징 기법이라고 한다. 주소공간을 여러 페이지로 나눠서 필요한 페이지만 물리메모리에 올리는 것이다.

필요한 페이지가 물리메모리에 올라와 있는 지 구분하기 위해 유무효 비트를 사용한다.

필요한 페이지가 있는지 유무효비트를 통해 체크하고 없다면(page fault) 디스크의 스왑영역에서 필요한 페이지를 메모리에 불러온다.

최종정리

  • 각 프로그램별로 메모리에 올라와 있는 용량이 줄어들어 여러 프로그램을 동시수행이 가능하고(물론 context change가 일어날 것이다.)
  • 프로그램 단위로 스왑하는 것이 아닌 필요한 페이지만 스왑하기에 IO부하를 줄일 수 있다.

참고

https://www.youtube.com/watch?v=5pEDL6c--_k&t=215s

profile
중요한 것은 속력이 아니라 방향성, 공부하며 메모를 남기는 공간입니다.

0개의 댓글