alt
Home 가상 메모리
Post
Cancel

가상 메모리


img

프로세스에 필요한 메모리 전체가 물리 메모리에 적재되지 않고도 실행할 수 있도록, 물리 메모리가상의 엄청나게 큰 메모리(가상 메모리) 로 추상화해서 사용하는 기법

  • 원래는 물리 메모리에 필요한 모든 것을 적재했었음 -> 실행할 프로그램에 필요한 메모리가 실제 물리 메모리보다 크다면 실행이 불가하다는 문제
  • 필요한 페이지만 메모리에, 나머지는 디스크(보조기억장치)에 저장하고, 논리 페이지를 물리 메모리의 프레임에 사상해주는 것은 MMU의 역할
  • 논리 메모리와 물리 메모리 개념을 분리
    • 가상 주소 공간을 제공함으로써 개발자는 물리 메모리를 신경쓰지 않고 가상 메모리만을 신경 쓰면 됨


또다른 장점: 프로세스 간 페이지 공유

  • 각 물리 메모리 페이지들은 모든 프로세스에 공유되고 있음.


가상 주소 공간

  • 한 프로세스가 메모리에 실제로 저장되는 논리적인 모습을 구현한다.
  • 가상 주소MMU(Memory Management Unit)에 의해 물리 주소로 사상(Mapping)된다.
  • e.g) 한 프로그램이 실행되며 논리 메모리로 100KB 가 요구되었다고 할 때, 실행까지에 필요한 메모리 공간(Heap영역, Stack 영역, 코드, 데이터)의 합이 40KB 라면, 실제 물리 메모리에는 40KB 만 올라가 있고, 나머지 60KB 만큼은 필요시에 물리메모리에 요구함.


요구 페이징(demand paging)

  • 프로그램 전체를 디스크에서 메모리에 적재하지 않고 초기에 필요한 것만 적재

  • 한번도 접근되지 않은 페이지는 물리 메모리에 적재되지 않음.

  • 프로세스 내 개별 페이지들은 페이저에 의해 관리됨.

  • 만약 프로세스 중 물리메모리에 올라와있지 않은 페이지가 요구되면, page fault(페이지 부재)

    • 실제로는 참조 지역성 덕분에 페이지 부재가 잦지는 않다고 함.


참조 지역성: 시간 지역성(최근에 참조된 건 곧 다시 참조될 확률 높음), 공간 지역성(참조된 주소와 인접한 주소가 다시 참조될 확률 높음)


단편화

: 프로세스가 차지하는 작은 틈이 발생해 메모리 공간이 낭비되는 것


내부 단편화, 외부 단편화

  • 내부 단편화: 메모리 할당 시 프로세스가 필요로 하는 양보다 더 크게 할당되어 공간 낭비
  • 외부 단편화: 메모리 할당 해제가 발생하면서, 서로 다른 프로세스의 공간 사이에 메모리가 비게 되는데, 다른 프로세스를 올릴 때 이 빈 공간에 나눠서 할당할 수 없어 발생하는 공간 낭비. 내부 단편화보다 치명적


페이징, 세그멘테이션

  1. 페이징
    • 물리 메모리는 균등한 사이즈의 프레임으로 나뉘게 되고, 프로세스는 프레임과 같은 균등한 사이즈의 페이지로 나뉜다. 따라서, 페이지는 작은 고정사이즈의 프로세스 조각.
    • 마지막 프레임에는 페이지가 꽉차지 않게 될 수 있고, 이 때 적은 양의 내부 단편화
    • 외부 단편화 없다.
    • 페이징 테이블 필요
  2. 세그멘테이션
    • 프로세스가 서로다른 크기의 세그먼트로 나뉜다.
    • 외부 단편화 존재
    • 세그먼트 테이블 필요



Reference)

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/OS

https://velog.io/@gimtommang11/%EA%B0%80%EC%83%81%EB%A9%94%EB%AA%A8%EB%A6%AC

https://frontalnh.github.io/2018/04/04/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/

This post is licensed under CC BY 4.0 by the author.