DongDD's IT

Memory Management - 정의, Basic Hardware, Address Binding, MMU, Dynamic Loading, Dynamic Linking, Shared Library 본문

운영체제

Memory Management - 정의, Basic Hardware, Address Binding, MMU, Dynamic Loading, Dynamic Linking, Shared Library

DongDD 2017. 11. 1. 15:37

Memory Management


Memory Management


Definition : Virtual memory를 Physical memory로의 변환을 관리해주는 메커니즘

- 실질적으로 사용되는 메모리 공간은 physical 메모리 크기보다 훨씬 크다.

- 이러한 메모리 사용을 관리해주기 위해 가상 메모리라는 개념을 사용하여 메모리 관리를 한다.


Basic Hardware


- Memory Protection기법 중 가장 간단한 기법

- Base Register와 limit Register 두가지를 사용해 logical address를 정의

- Base Register : Process의 시작 주소를 담고 있음

- Limit Register : Process의 크기를 가지고 있음

- CPU Scheduler가 실행을 위한 프로세스를 선택할 때 업데이트함



- 위와 같은 형태로 정상적인 address인지 확인한다.

- base register(process의 시작주소)보다 들어온 주소가 작은 경우 올바르지 못한 address라 판단한다.

- base+limit값이 address보다 작은 경우 address는 프로세스의 마지막 주소보다 큰 것이기 때문에 잘못된 address라고 판단한다.


-> Basic Hardware는 따로 메모리 접근없이 Register 두개를 사용해 빠르게 메모리 주소를 파악할 수 있다.


Address Binding


- Disk내에 저장되어있는 binary 형태의 프로그램(소스 코드)의 변수나 함수 등을 절대 주소로 변환해주는 것을 의미한다.

- Symbolic address(소스 코드 내 주소) -> relocatable address(재배치 주소, 컴파일러) -> absolute address(절대적 메모리 주소, Linkage editor)의 과정으로 변환한다.

- Address binding은 세 가지 과정에서 수행할 수 있다

1) Compile time : 메모리 주소를 미리 알아 컴파일 때 address binding을 한다면 시작 주소가 바뀔 경우 재컴파일 해야된다.

2) Load time : 컴파일 때 주소가 결정되지 않았다면 Loader에 의해 Loading될 때 재배치 주소가 결정된다.

3) Execution time : 프로세스가 실행되는 동안 메모리 세그먼트 사이의 이동이 있을 경우 실행 시간까지 address binding이 지연된다. -> MMU(Memory Management Unit)나 Address mapping table 필요


Logical address & Physical address


1) Logical address

- 가상의 주소공간으로 CPU에 의해 결정된다.

2) Physical address

- 실제 메모리에 존재하는 주소를 의미한다.

- Logical address와 Physical address는 Complie,Load time에는 같은 address binding 기술이 사용되지만 Execution time에는 다르다.

- Execution time에는 Memory Mapping table을 이용하여 Logical address로 인해 Physical address가 바뀌게 된다.


Memory Management Unit(MMU)


Definition : 가상 주소를 물리 주소로 바꿔주는 하드웨어 장치를 의미한다.


- Mapping method

1) Simple method

- relocation register가 가지고 있는 프로그램의 시작 주소에 logical address를 더해 physical address를 찾아내는 방법

- Logical address가 300이고 Relocation Register가 가지고 있는 시작 주소가 1000이라면 Physical address는 logical address(300)+relocation register(1000)으로 1300이라는 주소를 갖게 된다.


- 실제 user program에서는 logical address만 다룰 수 있다.


Dynamic Loading


- 함수들이 호출되기 전까지 load되지 않는다. -> 메모리 공간 이용률을 증가시킬 수 있다. (사용되지 않는 함수들은 Load되지 않음)

- error 처리 함수와 같이 방대한 코드에서 자주 사용되지 않는 함수가 있을 때 사용하면 좋다.

- OS가 관여하지 않고 Library에서 제공된다.


Dynamic Linking


- Linking을 Execution Time까지 미루는 방법

- 프로그램이 실행되는 도중에 다른 모듈이 필요할 때 프로그램 제어 기능에 의해 연결할 수 있게 해준다.

- 다른 프로세스로의 메모리 접근이나 동일한 주소에 여러 프로세스가 접근하는 것을 관리하기 위해 OS의 관여가 필요하다.

- Library 수정 시 재컴파일할 필요가 없다는 장점이 있다.

- Stub이라는 공간을 만들어 Shared Library나 특정 Library를 어떻게 Linking할 것인지에 대한 routine을 만든다.

- Stub은 routine의 주소로 대체되고, 그 routine을 실행한다.


Static Library & Shared Library


1) Static Library

- 미리 만들고 컴파일, 링킹한 Library를 의미한다.

- 사용시 Library호출을 하면 되고 만약 Library가 수정될 경우 재컴파일하고 링킹을 다시 해줘야 된다는 단점이 있다.

2) Shared Library

- 여러 프로세스에서 공동 이용 가능한 Library를 의미한다.

- Dynamic Linking을 통해 접근하므로 프로세스마다 메모리에 Library를 적재할 필요가 없어진다.

- Library 수정 시 재컴파일이 필요없다는 장점이 있다.

Comments