만족

[Operation Systems] Address Spaces 본문

[Operation Systems] Address Spaces

기타 CS 이론/Operation System Satisfaction 2018. 5. 16. 16:20

Early Systems


메모리의 관점에서, 과거의 machine들은 사용자에게 abstraction을 제공하지 못했다.


OS는 단순히 메모리의 0번지에 위치하는 library와 같은 routine의 집합체일 뿐이었다.


하나의 machine에서 하나의 program만이 실행가능했으며, 그 당시의 OS는 해야 할 일이 별로 없으니 당연스럽게도 매우 단순했었다.


Multiprocessing and Time Sharing


당연히 사용자들은 한개의 machine에서도 한개만이 아닌 여러 가지 작업들을 동시에 처리하길 원했다.


그래서 Time Sharing이라는 개념이 이 때 생겨나게 되었다.

(Time Sharing= 어떤 Computer Resource들을 여러 사용자들이나 프로세스들 간에 공유하는 것)


이 Time Sharing을 구현하는 방법 중 하나는 우리가 익히 알고 있듯이

아주 짧은 시간 단위로 process들 간에 CPU를 번갈아 가며 사용하는 방법이다.


그러나 불행하게도, CPU의 주도권을 다른 process로 넘기면서(Context Switch) register와 같은 필요한 정보들을 저장하고 불러오는 과정에서 Overhead가 발생한다는 것이다. (이것은 performance에 너무 치명적이다)


따라서 효율적인 Time Sharing의 구현은 단순히 Context Switch 뿐만 아니라 다른 요소들이 필요하다는 것을 알 수 있다.


Multiprocess 환경에선 Protection 역시 중요하다.

(어떤 process가 다른 process의 영역을 침범하지 않으면서, 자신의 영역도 침범당하지 않는 것)


우리는 이것을 명심하면서 Address Spacing 방법의 발전을 살펴볼 것이다.


What is Address Space?


OS는 각각의 process마다 Virtual Memory라는, 실제로는 존재하지 않는 Physical Memory에 대한 Abstraction을 제공한다.


이것을 Address space라고 한다.


Process의 Address Space는 해당 process의 모든 state를 포함한다.


예를 들어서, 어떤 프로세스 A의 Address Space는 code(set of instruction), stack(local variable, function chain), heap(dynamic allocation)을 포함한다.


따라서 Process A의 Address Space 는 다음과 같은 모양이 될 것이다.


당연히 이 Address Space는 Physical Address가 아닌 Virtual Address라는 것을 명심하자.


즉, 실제 Physical Memory에서는 0KB에서부터 시작하지 않음에도 OS가 제공하는 Address Space 기법을 이용하여

Process는 마치 자신만이 사용할 수 있는 공간인 것처럼 착각하게 만드는 것이다.


이것을 Virtualizing Memory 라고 한다.


그렇다면 Virtualizing의 목표는 무엇인가?


첫 번째는 Transparency(투명성)이다.

OS는 VM(Virtualizing Memory)에 관하여 program이 모르게 해야 하고, program도 그것에 대하여 알 필요가 없다.


두 번째는 Efficient(효율성)이다.

VM을 사용(구현)하는데 너무 많은 시간이 걸리거나 과도한 공간을 사용해서는 안된다.

(이것은 software만으로는 구현할 수 없다, hardware의 도움을 받아야 한다)


마지막으로 Protection 이다.

모든 process들은 isolation(고립)상태여야만 한다.

한 process는 다른 process에 영향을 미치거나 접근해서는 안된다.



그런데, 위의 배치 방법은 절대적이며(바뀔 수 없는가?) 모든 방면에서 효율적인가?


그렇지 않다, 실제로 multi-thread 환경에서는 위와 같은 배치방식은 더이상 좋은 방법이 아니다.


이 포스트에서는  Address Space가 무엇인지 Overview를 살펴보고, 그것의 자세한 원리는 다음 포스트에서 하기로 한다.


어쨌든 우리는 이제 가장 기본적인 process의 memory 형태를 알게 되었다.


------------------------------------------------------


C언어에서


int x=1;

printf("%p", &x); 


를 입력했을 때 나오는 주솟값도 physical address가 아니라 virtual address이다.



--------------------------------------------------


Reference


Operating Systems: Three Easy Pieces (Remzi H. Arpaci-Dusesdau, Andrea C. Arpaci-Dusesdau)









Comments