※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)


이전 까지 했던 말들을 생각해보면, Execution Time Binding에서는 하나의 프로그램이 address binding을 통해서 메모리에 로드되어 CPU에 의해서 실행이 된다고 했다.


다음과 같은 상황을 가정해보자. Physical Memory 10 Byte가 있다고 하자. 이 메모리에 빨간 프로그램(2바이트), 파란 프로그램(3바이트), 살색 프로그램(2바이트)이 로드되어있다고 가정해보자. 그렇다면 아래와 같이 그림이 그려질 것이다.



이러한 방법으로 쓰려다보니 굉장히 큰 문제점에 봉착하게 된다. 지금 3 바이트나 남았는데 그것들이 따로 떨어져 있어서 2바이트짜리 프로그램도 못 돌리고 있는 상황이다. 이 문제를 해결해보자. 본능적으로 어떻게 해결하면 되겠니? 아래와 같이 해결하면 될 것 같다.



이렇게 하면 3바이트 짜리 프로그램도 돌릴 수 있게 된다. 여기에서 또 하나의 문제가 있다. 바로 프로그램에서 잘 쓰지 않는 기능도 모조리 전부 다 올라와있다는 것이다. 가령, 파란 프로그램에 출력하는 기능이 있다고 하자. 그런데 그 기능은 1년에 한번 쓸까 말까 하는 기능이다. 즉, 거의 쓸모 없는 기능인데, 메모리 한칸을 떡 하니 차지하고 있다. 이 문제점도 해결해보자.


이 문제점을 해결하는 것이 Dynamic Loading이다. 즉, 프로그램의 일부만 메모리에 로딩해서 쓰라는 것이다. 나중에 사용자가 메모리에 없는 루틴을 호출하면 그 때 메모리에 올려서 사용하면 된다는 것이다. 아래의 그림과 같이 말이다.



우와 이제는 우리 Contiguous 한 메모리 배열 6개나 있다. 신난다? 아니다. Dynamic Loading을 통해 해결한 문제점은 굉장히 적절하게 해결한 것이다. 그런데 그 전에 논의되었던 문제점에 대한 해결책 즉, 모든 프로그램을 한 쪽으로 몰아버렸던 그 방법은 적절한 해결책이 아니다. 이유는 간단하다. 저것을 옮기려면 메모리 to 메모리 연산이 필요하다. CPU 입장에서 해석할 때, 이는 굉장한 시간을 요구한다. 즉, 프로그램 하나 더 쓰려다가 시간 엄청 잡아먹는 그런 비효율이 발생하게 된다. 그럼 어떻게 하는가? 간단하다.



위와 같이 메모리 상에 서로 엉키고 엉켜 있어도 실행 가능하게 만들면 그만이다. 이렇게 되면 남은 3바이트에서도 얼마든지 3바이트의 프로그램을 실행하도록 할 수 있다. 뭔가 새로운 것 같은가? 사실은 이전의 포스팅에서 언급되었던 것이다. Execution Time Binding이 바로 이것이다. 실행 시간에 필요한 것들만 로딩하는 것이다. 이것을 가능하게 하려면 하드웨어적으로 특별한 지원을 받아야 한다. 하드웨어적으로 받는 지원이 앞장에서 언급되었던 MMU이다.


다음 포스팅에서부터는 Swapping을 비롯하여 Virtual Memory의 진실을 서서히 파해쳐보자.


'System Programming' 카테고리의 다른 글

[SP] Virtual Memory  (3) 2013.04.29
[SP] Virtual Memory (Swapping)  (0) 2013.04.24
[SP] Virtual Memory (Basic Knowledge)  (6) 2013.04.23
[SP] Floating Point Number  (0) 2013.04.15
[SP] Data Representation (2's complement)  (0) 2013.04.11
Posted by 빛나유
,