8. Memory Management

운영체제 – 이화여대 KOWC 공개강의

 

프로그램이 물리적 메모리의 어디에 올라가는지를 결정하는 것이 주소 바인딩이다. 가상 주소에서 물리적 주소로 올라가는 방법이 3가지가 있다. Symbolic Address(프로그래머 입장에서는 숫자로된 주소를 사용하지 않고 Symbol로 된 주소(변수)를 사용한다. 이것이 컴파일이 되면 숫자주소가 만들어진다.)

컴파일 타임 바인딩을 쓰면 이미 컴파일 시에 결정된 주소를 물리적 메모리 주소로 지정하여 프로그램을 올려야 한다. 물리적 메모리의 다른 주소가 많이 비어있다 하더라도 항상 이 프로그램은 컴파일 시에 결정된 메모리 위치에만 프로그램을 올려야 한다. 따라서 비효율적이다. 따라서 지금의 컴퓨터 시스템에서는 컴파일 타임 바인딩을 사용하지 않는다. 예전에 컴퓨터 안에서 프로그램이 하나만 실행되는 환경에서 사용되었다. 어차피 다른 프로그램이 메모리에 같이 올라갈 일이 없었기 때문에.

로드 타임 바인딩은 프로그램이 시작되서 메모리에 올라갈 때 물리적 메모리 주소가 결정된다.

세번째 방법인 런타임 바인딩은 로드타임 바인딩 처럼 프로그램 실행시에 메모리 주소가 결정되는 것은 똑같다. 그런데 이 주소가 실행 도중에 바뀔 수가 있다. 지금의 컴퓨터 시스템은 런타임 바인딩을 지원한다. 런타임 바인딩은 하드웨어적인 지원이 필요하다(MMU- Memory Management Unit). 주소 변환을 위한 하드웨어이다.

CPU는 하드웨어이기 때문에 Physical address를 보는 것 같지만 logical address를 본다. CPU가 매번 메모리 몇 번지에 있는 내용을 달라고 요청을 하면 그때 주소변환을 해서 물리적 메모리 위치를 찾은 다음에 그 내용을 읽어 CPU에 전달을 한다.

기본적인 MMU에서는 레지스터 두 개를 이용하여 주소 변환을 하게 된다. relocation 레지스터와 limit 레지스터를 이용하여 주소를 변환한다.

 

네가지 용어 설명
Dynamic Loading – 운영체제의 지원없이 프로그래머가 구현해야 한다.(OS의 라이브러리를 통해 지원) 현재 시스템의 페이징 기법과 다이나믹 로딩은 다른 개념이다. 이러한 다이나믹 로딩 뿐만 아니라 프로그래머가 명시하지 않고 운영체제가 알아서 올려놓고 쫓아내고 이러는 것도 다이내믹 로딩이라는 용어로 섞어 쓰기도 한다.

Overlays – 다이내믹 로딩과 구분해서 살펴봐야할 용어. Overlay와 다이내믹 로딩은 개념이 같지만 역사적으로 다르다. Overlay는 초창기 컴퓨터 시스템상에서 워낙 메모리의 크기가 작기때문에 프로그램 하나를 메모리에 올려놓는 것 마저도 불가능했다. 그래서 프로그래머가 프로그램을 메모리에 올려서 실행시킬 때는 큰프로그램을 쪼개서 필요한 부분만을 메모리에 올린다. 라이브러리의 지원이 없이 프로그래머가 수작업으로 구현해야 한다.

Swapping – 컴파일 타임 바인딩과 로드 타임 바인딩에서는 swap out 되었던 프로그램이 swap in이 되려면 기존의 물리 메모리 위치와 동일한 위치로 올라와야 한다. 따라서 swapping이 효율적으로 되려면 런타임 바인딩이 지원되어야 한다.

 

 

 

Dynamic Linking – 다이나믹 링킹을 해주는 라이브러리를 쉐어드 라이브러리라고 부른다. 리눅스 환경에서는 쉐어드 오브젝트라고 부르고 윈도우즈에서는 DLL이라는 파일이 있다. Dynamic Linking Library.

물리적인 메모리를 어떻게 관리할 것인가? 에 대한 내용을 몇 시간에 걸쳐 설명한다.
고정분할 방식은 프로그램이 들어갈 사용자 메모리영역을 미리 파티션으로 나누어 놓는 것이다. 가변 분할 방식은 메모리 영역을 미리 나누어 놓지 않은 것이다. 가변 분할 방식은 프로그램이 실행될 때마다 메모리에 차곡차곡 쌓아서 실행한다.

 

 

 

댓글 남기기

Close Menu