Programming/운영체제

메모리 낭비 방지 - 동적적재, 동적연결, 스와핑

1. 동적 적재(Dynamic Loading)

적재란 실행 파일을 메모리에 올리는 것을 말한다.(O/S를 메모리에 올리는 것은 부팅)

동적 적재란 프로그램 실행에 반드시 필요한 루틴/데이터만 적재하는 것을 말한다.

 

동적 적재를 사용하는 이유

- 모든 루틴(routine)이 전부 사용되는 것은 아니다. (예: 오류처리, 오류가 발생할 때만 메모리로 올린다.)

- 모든 데이터(data)가 전부 사용되는 것은 아니다. (예: 배열, char[] buffer = new char[1000])

- 자바 : 모든 클래스가 전부 사용되는 것은 아니다.

=> 실행 시 필요하면 그때 해당 부분을 메모리에 올린다.

2. 동적 연결(Dynamic Linking)

여러 프로그램에서 공통으로 사용되는 라이브러리를 공통 라이브러리라고 한다.

동적 연결이란 오직 하나의 라이브러리 루틴만 메모리에 적재하고, 다른 애플리케이션 실행 시 이 루틴관 연결(Link)하는 방법이다.

 

동적 연결의 경우 라이브러리 루틴 연결을 애플리케이션 실행시까지 미룬다. 즉, 원래는 실행파일(.exe)을 만들기 전에 링크를 했으나, 프로세스가 실행될 때 해당 라이브러리가 없는 경우에만 링크를 한다. 

=> 메모리 절약 효과

 

Linux 운영체제의 경우 공유 라이브러리(Shared libray)Windows 운영체제의 경우 동적 연결 라이브러리(Dynamic Linking library)

 

동적 연결을 사용하는 이유

- 공통 라이브러리 루틴(library routine)을 메모리에 중복으로 올리는 것은 메모리 낭비이다.

3. 스와핑(Swapping)

메모리에 적재되어 있으나 현재는 사용되지 않고 있는 프로세스가 있을 경우, 해당 프로세스를 메모리 활용도를 높이기 위해 Backing store(=swap device)로 몰아낸다.

 

Relocation register를 사용하기 때문에 적재 위치가 변경되는 것은 무관하다.프로세스의 크기가 크면 backing store 입출력에 따른 부담이 커진다.Backing store의 크기는 보통 메인메모리의 크기로 한다.