The Abstraction: Address Spaces

yalpalyappap·2021년 1월 5일
0

Early System

초기의 컴퓨터는 메모리의 관점에서 사용자에게 많은 추상화(abstraction)를 주진 못했다.
OS는 물리적인 메모리에 올라간 라이브러리 같은 것이였고, 다른 물리적인 메모리 위치에서는 프로그램이 동작하고 있었다.

Multiprogramming And Time Sharing

시간이 지난 후 컴퓨터가 비싸짐에 따라 사람들은 컴퓨터의 resource를 효율적으로 활용하기 시작했다.
Multiprogramming의 시대가 열리면서 특정한 순간에 여러개의 프로그램이 실행될 수 있어야 했고, OS는 적절하게 프로세스들을 바꿔주어야 했다.

하지만 머지않아서 사람들은 더 많은 컴퓨터가 필요했고, 특히 batch computing의 한계를 느끼고 나서 time sharing의 시대가 오게되었다.

많은 사용자들이 적절한 시간에 컴퓨터로부터의 응답을 기다리고, 많은 작업을 동시에 수행할 수도 있기 때문에 interactivity가 중요해졌다.

하지만 메모리 크기가 커짐에 따라 time sharing은 너무 느리게되었다. register등의 상태를 저장하는 것은 그닥 오래걸리지 않았지만, 모든 메모리의 내용을 디스크에 저장하는 것이 상당히 오래걸렸다.

그래서 이를 해결하기 위해 프로세스를 메모리에 남겨두며 switching하면, OS가 time sharing을 효과적으로 수행할 수 있다.

그런데 위의 그림처럼 여러개의 프로세스가 동시에 진행될 때 어떤 프로세스가 다른 프로세스의 메모리를 침범하지 않도록 하는 protection이 가장 중요한 문제가 되었다.

프로세스가 마음대로 다른 프로세스의 메모리에 데이터를 읽거나, 쓰는것은 큰 문제가 될 수 있기 때문이다.

The Address Space

이를 위해 OS가 물리적 메모리를 사용하기 쉽도록 추상화할 필요가 있었다.

이 추상화를 address space라고 부른다.

이 address space는 실행중인 프로그램의 메모리상 위치를 나타낸다.

예를들어 프로그램의 code는 메모리의 어딘가에 위치해 있어야만 하고, 그 내용은 address space에 있다.
프로그램은 또한 stack을 함수가 불린 위치를 기억하고, 지역변수를 할당하고, 인자를 넘기고, return값을 위해서 사용한다.
또한 heap영역이 동적할당을 위해서 사용된다.

그림의 가장 상단에 code영역이 존재한다. code는 메모리에 위치하기 쉬운 static한 형태이며 프로그램을 동작하기 위해서 변하지 않는다.
그 다음으로는 프로그램이 동작함에 따라 늘어나기도 하고, 줄어들기도 하는 stack, heap영역이 있다.
stack, heap영역은 address space양 끝단에 위치해 있다. 그래서 그림에서 보면 heap은 아래로, stack은 위로 메모리의 크기를 늘릴 수 있다. 그러나 stack, heap영역의 위치는 규칙일 뿐이고 address space의 공존(co-exist)이 가능한 multi thread환경에서는 그림과같이 깔끔하게 그 영역을 나누기 어렵다.

우리가 말하는 추상화라는 것은 OS가 실행중인 프로그램에게 부여하는 것이다. 프로그램은 실제로 그림처럼 0KB~16KB에 위치해있지는 않다. 실제로는 임의의 물리적 메모리 영역에 위치해 있다.

그래서 실행중인 프로그램이 특정한 메모리 주소에 위치하고, 아주 큰 address space를 지녔다고 생각하게 하기 때문에 OS가 메모리를 가상화(virtualizing memory)한다고 말한다.

예를들어 Figure 13.2의 프로세스 A가 실제로는 320KB에 위치해 있지만 프로세스 A는 스스로가 0KB에 위치해 있다고 생각한다.

Goal

Virtual Memory(VM)의 주요 목적중 하나는 transparency이다.

OS는 실행중인 프로그램이 볼 수 없는 메모리 가상화를 해야하고, 오히려 프로그램은 마치 자신이 실제로 해당 메모리를 갖고 있는 것 처럼 동작해야한다.

VM의 또 다른 목적은 efficiency이다.

OS는 프로그램이 느려지지 않고, 가상화를 하기위해 너무 많은 메모리를 사용하지 않도록 최대한 효율적으로 가상화를 수행해야 한다.

VM 마지막 목적은 protection이다.

OS는 하나의 프로세스가 다른 프로세스로부터 보호받을 수 있도록 해야한다. 그래서 OS는 프로세스의 isolation을 보장해아한다.

출처 : OSTEP

profile
안녕하세요! 개발 공부를 하고있습니다~

0개의 댓글