
아이폰을 사용한다면 휴대폰의 아래를 swipe up 해보고, 윈도우를 사용한다면 작업 관리자를 열어보자.
메모리는 한정되어 있지만
우리는 여러 프로그램을 동시에 돌리고 싶어한다.
그렇다면 메모리 관리를 어떻게 해야 할까?
메모리를 어떻게 관리할까 하다가 생각한 아이디어가 virtualization이라고 이해하면 좋을 것 같다.
각 process에게 가상의 메모리를 제공하는 것이다.
한번에 하나의 process만 메모리에 올리는 방식

단점은 process가 OS를 destroy할 수 있다는 것이다.
무슨 말이냐면, OS는 메모리의 일부 영역을 점유하고 있어야 한다.
컴퓨터가 실행되는 동안 윈도우도 계속 실행돼야 하니까.
근데 그 영역에 대한 protection이 딱히 안된다.
무엇보다 큰 단점은, 매~우 느리다는 것이다.
한번에 여러 process를 메모리에 올리는 방식
uniprogramming 방식의 단점 때문에, multiprogramming 방식으로 간다. 이 방식을 채택함으로써 얻고자 하는 목표는 아래와 같다.
Goal
그러면 아, code는 어디부터, heap은 어디부터, stack은 어디부터 이런 주소가 정해지니까
control하기가 용이해진다.
프로그램의 실행 코드가 들어있는 공간.
How to Access?
%rip(instruction pointer or program counter 이용)
static data가 들어있는 공간. code랑 같이 생각해도 되는 듯 하다.
dynamic하게 allocated되는 공간.
OS에 의해 implicit하게 할당되고 해제된다.
등에 사용된다.
How to Access?
%rbp (base pointer of stack frame)이용
dynamic하게 allocated되는 공간.
사용자가 explicit하게 공간을 할당하고 해제할 수 있다.

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