본문 바로가기

별걸다하는 IT/운영체제 OS

[운영체제]Dynamic Loading 동적적재 & Overlays 오버레이 (paging VMM과 차이점)

반응형

운영체제 마스터 목차 


Dynamic Loading 동적 적재란?

Dynamic loading 

프로세스가 시작될 때 그 프로셋의 주소 공간 전체를 메모리에 올려놓는 것이 아니라 메모리를 좀 더 효율적으로 사용하기 위해 필요한 루틴이 호출될 때 해당 루틴을 메모리에 적재하는 방식을 말합니다.



먼저 Loading은 메모리로 데이터를 옮기는 것을 로딩이라고 해요.

프로그램을 실행시키면 .exe에 있는 파일이 메모리에 올라가야지 실행이 되잖아요. 그것을 로딩 즉 메모리에 적재한다고 합니다.


자 우리가 전 포스팅에서 매우 자주 봤던 Address map으로 살펴봅시다


Code segment와 data segment 얘네는 실행파일에 있다고 말했죠? 

Code segment와 data segment는 파일에 있는 것을 읽어서 메모리 그림과 같은 부분에다가 Write를 써줍니다. 이 것이 로딩! 

메모리에 실행파일을 적재하는 로딩!!


heap과 stack은 프로그램이 실행되면서 커졌다가 줄어들었다가 하면서 사용된다고 전 포스팅에서 이미 배우고 왔어요~

메모리를 로딩할 땐 당연히일반적으로는 메모리에 한꺼번에 다 로딩하는 것이 일반적인 로딩인데

Dynamic loading은 이렇게 필요할 때 로딩하는 것을 동적적재라고 합니다.


정리~


The size of a process has thus been limited to the size of physical memory

프로세스의 크기는 메모리 크기보다 클 수 없어요 제한이 있죠 (프로세스를 메모리에 올려야 실행할 수 있으니까)

To obtain better memory-space utilization, we can use dynamic loading

메모리 공간을 효율적으로 사용하기 위해서 동적적재를 씁니다.

With dynamic loading, a routine is not loaded until it is called

루틴이 호출되지 않는한 적재되지 않아요


--> 이게 뭔 말이냐 하면

예를 들어 main이라는 함수와 a라고 하는 함수로 프로그램을 작성했다고 가정합시다.

그러면 제일 처음에 메모리에 main만 올려요 그리고 a를 호출하는 순간! 메모리에다가 그재서야 a를 적재합니다.

즉 필요한 시점에만 올리니까 아무래도 더 효율적으로 쓰이겠죠? 이 것을 동적 적재라 하고 

그래서 루틴이 호출될 때 메모리에 적재된다는 뜻이에요. 사용되지않는 루틴들은 결코 메모리를 점유하지 않는다는 특징이 있죠.

근데 이거는 옛날에 정말 메모리가 부족했을 때 사용된 방법이고 Virtual Memory Management가 나오면서는 더 이상 필요한 내용은 아닙니다. 하지만 많이 다른 개념과 연관되서 사용되기도 하고 중요한 개념이니 꼭 알아주세요 


동적 적재의 장점/특징

앞 내용을 이해했으면 쉬워요 정리한다고 생각하세요

A routine is loaded only when it is needed

필요할 때만 적재되서 코드 양이 많을 때 자주 호출되지 않는 루틴(ex 에러처리 루틴 등)에 특히 더 효율적이예요.

Dynamic loading does not require special support from the operating system.

It is the responsibility of the users to design their programs to take advantage of such a method.

OS의 특별한 자원을 필요로 하지 않고 프로그래의 재량에 따라 구현이 가능하답니다. (장점?이라기보단 특징인듯)


~~ 동적 적재를 이해하는 데 도움이 되셨나요?! 

중간 광고 한 후 오버레이 설명 글로 넘어갈게요. 감사합니다


Overlays 오버레이란?


Overlay도 어떻게 보면 Dynamic Loading하고 비슷한 개념이예요. 


Keep in memory only those instructions and data that are needed at any given time

- 그 때 필요한 명령어들과 데이터로 메모리를 유지해라 

비슷한 소리로 들리죠?


Implemented by user, no special support needed from operating system

예도 운영체제에 의해 이뤄지는게 아니라 유저 즉 프로그래머가 구현했던 방식이예요.


오버레이는 메모리보다 프로세스가 더 클 때 사용되는 기법입니다.


위처럼 symbol table과 common routine(공동 루틴) 그리고 pass1, pass2 등등으로 이루어진 한 프로그램이 있습니다.

pass1이 수행되고 나서 pass2이 되는 프로그램이라고 하면, 

pass1만 일단 메모리에 올린 후 pass1이 끝나면 pass2를 올려서 수행하는 기법이예요

고러면 저 흰 공간만큼의 메모리를 가지고서도 pass1+pass2를 더한 만큼의 메모리가 있어야지 돌아가는 프로그램도 수행가능한거죠. 이런 방법을 오버레이라고 합니다.


실제로 이 기법을 사용할 때는 overlay driver라는 상대적으로 작은 메모리를 차지하는 드라이버를 만들어서 사용하게 됩니다.

오버레이 드라이버가 상황에 맞춰서 pass1 또는 pass2 등을 메모리에 올렸다가 내렸다가 하는 중재자 역할을 수행해줘요.

Overlay는 현재 VMM(Virtual memory management)가 나온 뒤로는 더 이상 필요가 없는 내용이긴 하지만 한 때 정말 유용했던 기법입니다. 비록 현재 쓰이지 않는다 해도 항상 언급했듯이 이런 과거를 다 이해하고 있어야 해요.


Overlay vs Paging&VMM

뒤에 나오는 paging기법이나 VMM가 똑같은거 아닌가? 하는 오해를 할 수 있는데 둘은 다릅니다 

Overlay는 운영체제가 아니라 프로그래머가 적용하는 기법이라 프로그램의 깊은 이해를 필요로 했기도 하고 오버레이 프로그래밍 하는게 엄청 난해하고 복잡했습니다. (옛날에 한딱깔이 한다는 프로그래머들이 이 기법을 이용했다고 하네요)

Paging과 VMM은 오버레이와는 다르게 프로그래머가 직접 구현하는 게 아니고 운영체제가 관리해줘요


이런 과정을 거쳤기에 Paging기법과 VMM이 생긴거겠죠~~!

반응형
  • 대박.. 2021.06.24 02:50

    키야.. 정말 좋은 글 감사합니다!!
    이렇게 역사적으로도 기술의 발전 과정을 매번 설명해주시니 정말 최고입니다!!
    다시 한 번 정말 감사합니다! ㅎㅎ (광고 나올 때마다 열심히 누르겠습니다!!)