요즘날의 OS는 멀티 프로세스들을 CPU를 time sharing하며 실행한다.
하지만 context switch를 할 때마다 실행했던 프로세스의 메모리, 상태(PC, registers 등)들을 disk에 저장하고,
이후에 다시 실행할 때 다시 disk에서 메모리로 load하는것는 상당히 비효율적이다(특히 프로그램의 메모리가 클수록 오래걸릴것이다).
따라서 아래 13.2와 같이 프로세스의 메모리를 계속 남겨두는것이 효율적일것이다.
The Address Space
OS는 프로세스에게 이런 메모리 구조를 추상화하여 제공한다.
각 프로세스의 address space는 프로세스의 모든 메모리 정보를 저장한다.
프로그램이 실행할때 생성되는 local variable, pass parameter, return value, function call chain같은 정보들은 stack에 저장되고,
동적 할당같이 사용자가 관리하는 메모리들은 heap에 저장된다.
그림 13.3을 보면 16KB의 작은 address space가 있다.
프로그램 코드는 제일 상단(0)에 있으며, Heap과 Stack은 서로 상반된 위치에 존재하여 늘어나거나 줄어든다.
이런 address space는 OS가 running program을 위해서 제공하는 추상적인 개념이다.
실제로 이 프로그램이 메모리의 address 0에 위치하지 않는다.(추상적인 개념일 뿐이다.)
OS가 이런식으로 메모리를 virtualizing하기 때문에 running program은 프로그램이 특정 위치(address 0)에 위치해 있고 16KB의 공간을 가지고 있다고 생각하고 실행하는것이다.
13.2만 봐도 서로 다른 프로세스들이 메모리에 어떻게 위치하고 있는지 볼 수 있다.
Goals
VM의 목표는 transparency이다 : 실행되고 있는 프로그램이 메모리가 가상화되어 있는지 알 수 없어야 한다.
즉, 프로그램은 자신만의 메모리를 갖고있다고 착각하게끔 해야한다.
두번째 목표는 efficiency이다. 가상화는 시간측면에서나 공간측면에서나 효율적이어야 한다.
이에 관해서 TLB등등 여러가지 방법이 있지만 후에 다루도록 할것이다.
마지막 목표는 protection이다. OS는 다른 프로세스가 해당 프로세스의 메모리에 접근하는것을 방지해야한다.
즉, 각 프로세스는 고립된 메모리를 가질 수 있도록 해야한다.
Virtual Memory의 이 목표들을 어떻게 달성할 수 있을지는 다음 챕터부터 차차 다루도록 할 것이다.
'운영체제 > Operating Systems in Three Easy Pieces' 카테고리의 다른 글
11. Virtualization) Segmentation (1) | 2024.09.19 |
---|---|
10. Virtualization) Address Translation (3) | 2024.09.08 |
8. Virtualization) Multi-CPU Scheduling (1) | 2024.03.19 |
7. Virtualization) Lottery Scheduling (0) | 2024.03.12 |
6. Virtualization) Multi-level Feedback (0) | 2023.07.06 |