나의 브을로오그으

#18. 메모리 절약(Main Memory Management) 본문

Computer Science/운영체제

#18. 메모리 절약(Main Memory Management)

__jhp_+ 2022. 9. 2. 08:01

프로그램을 메모리에 올리기

- 실행파일을 메모리에 올리기

  * 메모리 몇 번지에?

  * 다중 프로그래밍 환경에서는?

- MMU 사용

  * 재배치 레지스터 (Relocation Register)

- 주소 구분 

  * 논리 주소 (logical address) vs 물리 주소 (physical address)

 

(보통 프로그램 개발 시 컴파일 > 링크 과정을 통해서 실행파일이 생성된다. 실행 파일을 메모리에 올릴때 메모리의 상황에 따라 다른 주소에 적재가 된다. 그러면 CPU는 여러 프로세스에 접근 할 때 각 프로세스가 어디에 적재되어 있는지를 알아야 한다. 그래야 접근이 가능하기 때문이다. 이를 가능하게 해주는 것이 MMU 이다.)

 

CPU가 메모리에 명령어를 읽을 때, 메모리 보호를 목적으로 CPU가 다른 프로세스의 무단 접근을 원천적으로 막기 위해 MMU의 base, limit 레지스터를 둔다. 만약 그 외부 영역에 접근하려면 MMU에서 CPU로 interrupt 신호를 보내서 강제 종료될 수 있는 interrupt routine이 실행된다.

MMU에는 base, limit외에 relocation register가 있다. 하드디스크에 있는 여러 프로그램들은 기본적으로 address 0번지에 적재되도록 설계되어 있는데, 모든 프로그램이 0번지에 적재된다면 문제가 있다. 그래서 OS에서 MMU의 relocation register에 미리 적재될 주소(예를 들면 1000번지)를 미리 넣어두고, 해당 프로그램을 1000번지에 적재한다.

이러면 CPU에서는 무조건 0번지부터 읽는데 MMU에 의해 읽을 주소가 조작되어 1000번지를 읽게 된다.

 

CPU가 보는 논리주소, MMU는 물리주소,

CPU의 논리 주소가 MMU의 relocation register에 저장된 주소에 의해 물리주소가 들어있어 논리주소가 물리주소로 변환되어 access 된다.

 

메모리 낭비 방지

- Dynamic Loading

- Dynamic Linking

- Swapping

 

동적 적재 (Dynamic Loading)

- 프로그램 실행에 반드시 필요한 루틴/데이터만 적재

  * 모든 루틴(routine)이 다 사용되는 것은 아니다. (예: 오류처리)

  * 모든 데이터(data)가 다 사용되는 것은 아니다. (예: 배열)

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

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

    * cf. 정적 적재 (Static loading)

 

동적 연결 (Dynamic Linking)

- 여러 프로그램에 공통 사용되는 라이브러리

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

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

  * 오직 하나의 라이브러리 루틴만 메모리에 적재되고,

  * 다른 애플리케이션 실행 시 이 루틴과 연결(link)된다.

     * cf. 정적 연결 (Static linking)

  * 공유 라이브러리 (shared library) - Linux 또는 (.so),

  * 동적 연결 라이브러리 (Dynamic Linking Library) - Windows (.dll)

(쉽게 말해서 특정 obj파일을 Link과정을 컴파일 후에 하는 것이 아니라, 실행파일 생성 후에 동적연결(공유) 라이브러리를 따로 메모리에 올린다. 실행 파일 전에 Link하는 것을 정적 연결이라고 하는데 과거 OS는 이렇게 했지만, 현대에는 메모리 절약을 위해 동적 연결을 한다.)

 

Swapping

- 메모리에 적재되어 있으나 현재 사용되지 않고 있는 프로세스 이미지

  * 메모리 활용도 높이기 위해 Backing store (= swap device)로 몰아내기

  * swap-in, swap-out

  * Relocation register 사용으로 적재 위치는 무관

  * 프로세스 크기가 크면 backing store(swap device) 입출력에 따른 부담 크다.

(backing store는 일부 하드디스크 영역을 나누어서 이부분에 프로세스 이미지(현재 실행중인 어떠한 상태 정보를 포함)를 저장함.

서버 컴퓨터의 경우 파일시스템, backing store 등을 위한 디스크를 따로 둔다.

슈퍼 컴퓨터의 경우 더 빠른 연산을 위해 backing store를 아예 메모리에 둔다.