Virtual Memory

이준희·2022년 7월 22일
0

OS

목록 보기
5/6

물리적인 메모리는 한개인데, 메모리를 사용할 프로세스가 많을 때 쓰이는 것이 바로 Virtual Memory이다!
OS는 물리적인 메모리를 가상화해서 각 프로세스에 메모리를 할당해주고,
실제로 메모리의 어느 부분에 저장되는 지는 OS만 알고 있다.
Process의 입장에서는 메모리를 혼자 점유하는 것으로 느끼고 있다!

Memory Virtualization의 목표

  • Transparency(투명성)
    • 프로세스들이 메모리를 공유 중인것을 몰라야 한다
    • 프로그래밍을 위해 편리한 추상화를 제공해준다
  • Efficiency(효율성)
    • OS를 거치기 때문에 속도가 느릴 수밖에 없다
    • 하지만, 메모리 공간을 효율적으로 사용할 수 있고, 시간적인 측면에서도 이점이 있다
  • Protection(안정성)
    • 다른 프로세스로부터 나의 프로세스들을 보호해준다
      • OS가 중재자 역할을 해준다(다른 Process가 메모리 어디를 쓰고 있는지 모르기 때문에 공격할 수 없다)
    • Isolation : 한 프로세스가 죽더라도 다른 프로세스에 영향을 미치지 않는다
    • 프로세스간의 메모리 공유가 편리해진다

옛날의 OS

  • 메모리에 하나의 프로세스만 사용했기 때문에 낭비가 심했다

Multiprogramming & Time Sharing

오늘날에는 여러개의 Process를 동시에 Memory에 올라오게 된다.

  • CPU는 하나이기 때문에 모든 일을 동시에 처리할 수는 없고, 빠르게 Context Switching을 한다
  • 따라서 효율성이 증가되었다
  • 하지만, 다른 프로세스로부터의 메모리 침범으로 인한 protection issue가 발생하게 되었다

Address Space

OS가 만든 가상의 메모리 공간이다.

  • Address Space는 현재 실행중인 Process의 모든 정보가 기록된다
  • Address Space의 크기는 System마다 달라진다
  • Address Space에 포함되는 것의 대표격은 다음과 같다
    • Code : 명령어들의 위치를 담고 있다
    • Heap : 동적 할당을 위한 메모리이다
    • Stack : return address와 value, 지역변수와 매개변수를 저장한다
  • 모든 Address Space의 주소는 실제 physical Memory 주소와는 연관이 없다

Address Translation

하드웨어가 Virtual Address를 Physical Address로 바꾸는 작업을 말한다.

  • 우리가 필요로 하는 정보는 Physical Address에 저장되어있다
  • OS는 하드웨어를 이용해 메모리를 관리하기 위한 작업을 한다
    • 사실상 하는 일은 어떤 주소가 비어있고, 사용중인지만 관리해준다

Assumption

실제 동작을 이해하기 위한 3가지 가정이다

  • User's Address Space가 Physical Memory에 연속적으로 존재해야 한다
  • Physical Memory가 Address Space보다 크다
  • 각각의 Address Space는 동일한 크기이다

Relocation Address Space

OS는 각 프로세스를 Physical Memory의 0번지부터 순서대로 넣는게 아닌,
임의의 곳에 집어넣는다.

Static Relocation(Software-Based Relocation)

OS가 직접 프로그램을 새로 작성해서 Memory에 집어넣는 방법

  • OS가 각각의 프로그램을 Memory에 싣기 전에 Static data와 Function을 모두 바꿔버린다
  • 장점
    • 하드웨어의 도움이 따로 필요 없다
  • 단점
    • Protection이 보장되지 않는다(Process가 OS나 다른 Process를 침범할 수 있다)
    • 모든 메모리 주소를 읽을 수 있다
    • 한번 메모리에 올리게 되면 또 바꾸기 어렵다
    • 중간에 빈 메모리들이 잘게 나눠져서 사용할 수 없다(공간이 낭비된다)

Dymanic Relocation(Hardware-Based Relocation)

MMU(Memory Management Unit)이 매 접근마다 Address Translation을 하는 방법

  • 매 접근마다 MMU가 접근 가능한 공간인지 확인하기 때문에 Protection을 할 수 있다
    • 잘못된 곳에 접근을 하면 Exception을 만들어낸다 (ex- Segmentation Fault)
  • OS가 할당 가능한 영역을 MMU에게 전달하기만 하면 된다

Base & Bound Register

  • Base Register
    • Physical Address가 어디서 시작하는 지를 담는 Register이다
  • Bound Register
    • Address Space의 크기를 담는 Register이다
    • Physical Address의 Base Register + Address Space의 크기가 될 수도 있다
  • 실제 Physical Memory의 시작 주소는 Physical Address = Virtual Address + Base Register로 정해진다
  • 이 때, Virtual Address는 0 이상 Bound Register 미만이다

OS Issues for Memory Virtualizing

OS는 Base & Bounds Approach를 구현하기 위해 아래 세 가지 행동을 해야한다

  • 프로세스가 시작될 때 : Physical Memory의 빈 공간을 찾아야 한다
  • 프로세스가 종료될 때 : 사용한 Memory를 다시 반환해야 한다
  • Context Switching이 일어날 때 : Base & Bound의 값이 바뀌어야 한다. 이 때, 저장은 Proc-Structure에 저장된다
profile
뉴비 개발자입니다!!

0개의 댓글