2) 효율적인 메모리 사용을 위한 기법
(1) 동적 적재(Dynamic Loading)
: 프로그램이 실행될 때 프로그램의 모든 것이 다 한 번에 메모리에 적재(정적 적재, static loading)되는 것이 아니라 프로그램이 실행되는데 필요한 부분만 필요에 따라서 적재하는 방법이다. 사용되지 않거나 사용될 가능성이 낮은 내용은 애초에 메모리에 적재하지 않음으로써 메모리를 절약한다.
: 모든 루틴(routine)이 다 사용되는 것은 아니다.
예) 오류처리 - 예외가 발생했을 때만 필요하다.
: 모든 데이터(data)가 다 사용되는 것은 아니다.
예) 배열 - 배열의 어떤 일부는 필요할 때만 접근 하면 된다.
: 모든 클래스가 다 사용되는 것은 아니다.
예) 자바 - 특정 클래스는 필요할 때만 호출하면 된다.
파워포인트 - 파워포인트를 실행했을 때 디자인 템플릿을 미리 메모리에 올려놓을 필요는 없다. 사용자가 디자인 템플릿 사용을 요청했을 때 메모리에 올리면 된다.
(2) 동적 연결(Dynamic Linking)
: 여러 개의 프로그램이 실행될 때 다수의 프로그램이 공통으로 사용하는 라이브러리를 사용하는 프로그램의 수 만큼 메모리에 적재하는 것이 아니라 한 번만 적재하고 각 프로그램이 공동으로 해당 라이브러리를 사용할 수 있도록 함으로써 메모리를 절약할 수 있게 된다.
: printf() 함수와 관련된 라이브러리는 대부분의 프로그램이 사용줄이다. 다라서 처음 프로그램이 실행될 때 로드된 printf()함수와 관련된 라이브러리를 적재하고 이후의 프로그램들은 처음 적재된 printf()함수의 라이브러리를 공유해서 사용한다.
: 동영상 실행과 음악 실행은 소리를 재생하는 라이브러리를 공유하도록 한다.
: Email과 FTP 프로그램은 네트웍 라이브러리를 공유하도록 한다.
: dll(Dynanic Linking Library) - link를 exe 파일을 만들 때 하지 않고 메모리에 적재할 때 link를 한다.
(3) 스와핑(Swapping)
: 메모리에 적재되어져 있으나 현재 사용되지 않는 프로세스에 대해 HDD로 추출(swap-out)하거나 추출되었던 프로세스가 재사용됨에 따라 다시 메모리로 적재(swap-in)하는 것.
메모리 공간만 차지하고 사용되지 않는 프로세스를 추출함으로써 메모리를 절약할 수 있다.
: 프로세스가 매우 클경우 스와핑(out / in)에 대한 부담이 커지게 된다.
: backing store는 일반적으로 HDD의 일부 영역을 활용하지만 서버와 같은 특수한 환경에서는 별도의 전용 backing store를 사용하기도 한다.
댓글 없음:
댓글 쓰기