[OS]Virtual Memory 정리

hwi·2024년 11월 9일

OS

목록 보기
1/7

Memory Virtualization

motivation


아이폰을 사용한다면 휴대폰의 아래를 swipe up 해보고, 윈도우를 사용한다면 작업 관리자를 열어보자.

메모리는 한정되어 있지만

우리는 여러 프로그램을 동시에 돌리고 싶어한다.

그렇다면 메모리 관리를 어떻게 해야 할까?

메모리를 어떻게 관리할까 하다가 생각한 아이디어가 virtualization이라고 이해하면 좋을 것 같다.

각 process에게 가상의 메모리를 제공하는 것이다.


Uniprogramming

한번에 하나의 process만 메모리에 올리는 방식

단점은 process가 OS를 destroy할 수 있다는 것이다.

무슨 말이냐면, OS는 메모리의 일부 영역을 점유하고 있어야 한다.

컴퓨터가 실행되는 동안 윈도우도 계속 실행돼야 하니까.

근데 그 영역에 대한 protection이 딱히 안된다.

무엇보다 큰 단점은, 매~우 느리다는 것이다.

Multiprogramming

한번에 여러 process를 메모리에 올리는 방식
uniprogramming 방식의 단점 때문에, multiprogramming 방식으로 간다. 이 방식을 채택함으로써 얻고자 하는 목표는 아래와 같다.

Goal

  • Transparency : process들은 memory가 공유된다는 것을 몰라야 한다(자기한테 할당된 메모리에만 접근하게 하도록 그런 것 같음)
  • Protection : OS나 다른 process의 영역을 침범하지 말아야 함
  • Efficiency : Memory resource를 낭비하지 않아야 함
  • Sharing : cooperating process는 일정 부분을 공유해야 함

그러면 아, code는 어디부터, heap은 어디부터, stack은 어디부터 이런 주소가 정해지니까

control하기가 용이해진다.

Memory 공간 종류

Code

프로그램의 실행 코드가 들어있는 공간.

How to Access?
%rip(instruction pointer or program counter 이용)

Data

static data가 들어있는 공간. code랑 같이 생각해도 되는 듯 하다.

Stack

dynamic하게 allocated되는 공간.
OS에 의해 implicit하게 할당되고 해제된다.

  • local variable 선언
  • funciton call
  • parameter passing

등에 사용된다.

How to Access?
%rbp (base pointer of stack frame)이용

Heap

dynamic하게 allocated되는 공간.
사용자가 explicit하게 공간을 할당하고 해제할 수 있다.

예제 1

위의 예시 코드에서 각 요소들의 저장 위치는 다음과 같다.
x : Data
main() : Code
y : Stack
z : Stack
*z : heap

profile
될놈

0개의 댓글