Studying/Roadmap

메모리 관리

aoaa 2022. 3. 17. 21:35

1. Memory

보통 메모리라 함은 메인 메모리인 RAM을 뜻합니다. 프로그램 실행 시 필요한 주소, 정보를 저장하고 가져다 사용할 수 있게 만드는 공간을 말하죠. 이 메모리를 관리해야하는 이유가 무엇일까요?

 컴퓨터에서 각각의 프로세스는 독립된 메모리 공간을 갖고, OS 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있습니다. OS체제만이 OS 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않기 때문에, OS에서 메모리를 관리합니다. 또한 멀티프로그래밍 환경으로 변화하면서 한정된 메모리를 효율적으로 사용해야 했고, OS가 이를 어떻게 관리하는에 대한 관리 방법이 중요해졌습니다. 

 OS의 역할은 실행파일이 로더에 의해 메모리에 올라오고 OS가 이 실행파일을 메모리의 어느 부분에 올릴 지 결정합니다. (다만 JAVA는 메모리 영역에 접근하지 않고 JVM이라는 가상 머신을 이용해 간접적으로 접근합니다.)

 

1.1 Swapping

스와핑메모리에 적재되어 있으나 현재 사용되지 않고 있는 프로세스를 관리하는 역할입니다. 

 표준 스와핑 방식으로는 round-robin과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 backing store(보조기억장치)로 내보내고 다른 프로세스의 메모리를 불러 들일 수 있습니다.

 상단의 사진과 같은 과정을 swap이라고 하는데, 주 기억장치(RAM)로 불러오는 과정을 swap-in, 보조 기억 장치로 내보내는 과정을 swap-out이라고 합니다. swap에는 큰 디스크 전송시간이 필요하기 때문에 현재에는 메모리 공간이 부족할 때 Swapping이 시작됩니다.

 

1.2 단편화 현상

 단편화 현상(fragmentation)은 메모리의 공간이 작은 조각으로 나뉘어 사용 가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태입니다.  단편화 현상은 외부와 내부로 나뉩니다. 

 외부 단편화는 메모리에 남는 공간이 3G인데, 필요한 메모리의 양도 3G여서 메모리를 할당 받을 수 있을 것 같지만, 이 남은 공간 3G가 1G*3개로 나누어져 있는 상황을 말합니다.

 내부 단편화는 1G가 필요한데 4G를 할당해주어 3G가 낭비되는 상황, 즉 고정된 길이만큼 메모리를 할당할 때 발생하는 현상입니다.

 

 여기서 짚고 넘어가야 할 부분이 있습니다. 내부 단편화는 고정 길이 메모리 할당 방식에서 무조건 발생한다는 것이죠. 레코드를 고정길이로 할당하던, 필드를 고정길이로 할당하던, OS에서 메모리를 고정길이로 할당하던, 고정길이 방식의 고질적인 문제가 바로 이 내부 단편화입니다.

 이 때, 가변 길이로 메모리를 할당하게 되면 "초기"에는 이러한 내부 단편화가 발생하지 않습니다. 하지만 메모리의 재사용과 삭제가 반복되면서 시간이 지나면 다시 내부 단편화가 발생하게됩니다. 어떤 레코드를 삭제하고 그 공간을 재사용 하려고 할 때, 재사용할 수 있는 공간이 3G인데 새로운 레코드의 길이가 2G라면 1G가의 내부 단편화가 발생합니다. 그리고 이러한 공간이 모이고 모여 외부 단편화가 발생되는 것이죠.

 

 이렇게 보면 가변과 고정 길이방식 모두 외부,내부 단편화가 발생하게 되는데 OS에서는 무슨 방식을 사용할까요?

OS에서는 주로 Paging(고정 길이 방식)을 사용합니다. 고정 길이 방식에서 주로 발생하는 내부 단편화가 비용이 더 적게 해결할 수 있다고 판단한 것이죠.

 

1.3 단편화 현상 해결 방법

외부 단편화

1) Storage compaction(압축) : 주기적으로 삭제 공간을 회수하여 메모리 공간을 정리하는 방식입니다. 비용이 많이 들어 자주 사용 할 수 없어 주로 정해진 주기에 따라 실행됩니다.

 

2) Coalescing(통합) : 단편화로 쪼개진 공간들 중 인접한 공간들을 합쳐 더 크게 만드는 방식입니다.

 

3) Placement strategy(배치 전략) : 배치를 잘하여 단편화의 발생 가능성을 최대한 줄이는 방식입니다.

 

4) Paging 기법 : 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법입니다. 외부 단편화와 압축 작업을 해소하기 위해 생긴 방법론으로, 물리 메모리는 Frame 이라는 고정 크기로 분리되어 있고, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 크기의 블록으로 분리됩니다.(페이지 교체 알고리즘에 들어가는 페이지)

 페이징 기법을 사용함으로써 논리 메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨으로 외부 단편화를 해결할 수 있는 큰 장점이 있습니다.

하지만 내부 단편화 문제의 비중이 늘어나게 됩니다. 예를들어 페이지 크기가 1,024B이고 프로세스 A 가 3,172B 의 메모리를 요구한다면 3 개의 페이지 프레임(1,024 * 3 = 3,072) 하고도 100B 가 남기 때문에 총 4 개의 페이지 프레임이 필요한 것입니다. 결론적으로 4 번째 페이지 프레임에는 924B(1,024 - 100)의 여유 공간이 남게 되는 내부 단편화 문제가 발생하는 것입니다.

 

 

 

내부 단편화

1) Segmentation : 페이징에서처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할 사용자가 두 개의 주소로 지정(세그먼트 번호 + 변위) 세그먼트 테이블에는 각 세그먼트의 기준(세그먼트의 시작 물리 주소)과 한계(세그먼트의 길이)를 저장합니다.

 단점은 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다 보면, 자유 공간들이 많은 수의 작은 조각들로 나누어져 못 쓰게 될 수도 있습니다.(외부 단편화)

 

 

2) 메모리 풀 : 필요한 메모리 공간을 필요한 크기, 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법입니다.

  • 메모리의 할당, 해제가 잦은 경우에 메모리 풀을 쓰면 효과적
  • 미리 할당해놓고 사용하지 않는 순간에도 계속 할당해놓으므로 메모리 누수가 있는 방식

 장점은 메모리 풀 없이 동적할당과 해제를 반복하면 메모리의 랜덤 한(실제로는 알고리즘에 의한) 위치에 할당과 해제가 반복되면서 단편화를 일으킬 수 있겠지만 미리 공간을 할당해놓고 가져다 쓰고 반납하기 때문에 할당과 해제로 인한 외부 단편화가 발생하지 않습니다. 또한 필요한 크기만큼 할당을 해놓기 때문에 내부 단편화 또한 생기지 않습니다.

 단점은 하지만 메모리 단편화로 인한 메모리 낭비량보다 메모리 풀을 만들었지만 쓰지 않았을 때 메모리 양이 커질 경우 사용하지 않아야 합니다.

 

 

 

 

 

 

 

 

 

출처

https://technote-mezza.tistory.com/92

 

[운영체제 OS] 메모리 관리란? - 이유, 방법

※ 메모리란? : 메인 메모리, RAM을 뜻한다. 프로그램 실행 시 필요한 주소, 정보들을 저장하고 가져다 사용할 수 있게 만드는 공간.  즉, 작업을 위해 사용되는 공간. 메모리 관리가 필요한 이유

technote-mezza.tistory.com

https://nevertheless-intheworld.tistory.com/8

 

메모리 단편화 현상과 해결 방법 : Memory Fragmentation

Memory Fragmentation 현상이란? (메모리 단편화) Fragmentation에는 2가지가 있는 데, 하나는 외부 단편화(external fragmentation) 이고, 다른 하나는 내부 단편화(internal fragmentation) 입니..

nevertheless-intheworld.tistory.com

 

'Studying > Roadmap' 카테고리의 다른 글

입출력 관리  (0) 2022.03.30
프로세스 간 통신  (0) 2022.03.21
스레드와 동시성  (0) 2022.03.14
프로세스 관리  (0) 2022.03.13
운영체제의 구조와 원리  (0) 2022.03.11