본문 바로가기
CS/OS

[운영체제] 8. 메모리 효율적 사용(동적 적재, 동적 연결, 스와핑)

by DenverAlmighty 2024. 12. 13.

 

운영체제가 하는 일 : 자원 배분 + 자원 효율적 사용

 

1. 동적 적재 Dynamic Loading

Looad 란?
실행 파일을 메모리에 올리는 작업

cf. Boot는 OS를 메모리에 올리는 작업

 

1) 동적 적재란?

동적 적재란 프로그램 실행에 반드시 필요한 루틴/데이터만 적재하고, 필요해지면 그때 해당 부분을 올리는 것을 말한다.

 

2) 동적 적재를 사용하는 이유?

모든 루틴(오류 처리 등), 데이터(배열, 버퍼, ..) 가 다 사용되지는 않는다.

+ 자바에서 클래스들 마찬가지)

 

  • cf. <-> 정적 적재 (Static loading). 현대 운영체제는 동적 적제를 하지만 과거에는 정적 적재를 많이 했음.

 

2. 동적 연결 Dynamic Linking

1) 동적 적재란?

: 공통 라이브러리 루틴을 하나만 올리는 것을 말한다.

예) 노래 재생 + 동영상 재생 -> 소리 출력 라이브러리, 메일 전송 + FTP 파일 전송 -> 통신 연결 라이브러리

 

2) 동적 연결을 사용하는 이유?

여러 프로그램에 공통 사용되는 라이브러리(Common Library) 루틴(routine)를 메모리에 중복으로 올리는 것은 낭비이다.

그러므로 라이브러리 루틴 연결을 실행 시까지 미룬다.

 

링크는 컴파일 후 실행파일 만들기 전에 수행되는데, 이 때 링크하는 것이 아니라, 메모리에 로드된 후 링크한다.

  1. 공통되는 부분 제외하고 메모리에 올리고, 실행 후 필요할 때 라이브러리 메모리에 올린다.
  2. 그 다음 공통 라이브러리와 프로세스를 연결한다.
  3. 다른 프로세스가 공통 라이브러리 필요할 시점에 공통 라이브러리와 프로세스를 연결한다.

이렇게하면 단 하나의 라이브러리 루틴만 메모리에 적재되고, 다른 애플리케이션 실행 시 이 루틴과 연결(link)된다.

 

 

3.  스와핑 Swapping

1) 스와핑이란?

메모리에 적재되어 있으나 현재 사용되지 않는 프로세스를 디스크에 이미지로 몰아내 메모리 활용도를 높인다. (= Backing Store = Swap Device)

서버에는 파일 시스템 디스크와 별개로 Backing Store 용 디스크를 따로 두기도한다. Backing Store의 용량은 메인 메모리 사이즈와 같거나 작아도된다.(OS 만큼)

 

2) swap-out vs. swap-in

Swap-out : 메모리에 적재된 프로세스를 디스크로 몰아내는 것을 말한다.

다시 해당 프로세스를 사용하려는 경우 다시 메모리에 적재할 때 아까와 다른 위치로 올라갈 것(다른 프로세스가 사용한다면). 그러면 OS가 relocation registry에 값을 바꿔주면된다.

Swap-in : 디스크에 스왑된 프로세스를 다시 메모리에 올리는 것을 말한다.

프로세스 크기가 크면 backing store 입출력에 따른 부담이 크고 속도가 느려진다. (슈퍼컴퓨터는 디스크 대신 조금 느린 메모리를 사용하기도 한다)