[백엔드 로드맵 - OS] 메모리 관리

Sierra·2022년 7월 26일
0

Backend-Roadmap

목록 보기
14/43
post-thumbnail

Intro

이번 주제는 메모리 관리.
운영체제에서 정말 중요한 영역이고 반드시 알아야하는 파트.

메모리 관리?

RAM 다 익선이라는 말을 들어 보았을 것이다.
OS를 통해 프로그램을 실행시키고 작업을 하려면 RAM에 프로세스로 로드 시켜야 한다.
하지만 가면 갈 수록 컴퓨터로 할 수 있는 일이 많아졌다.
10년 전만 해도 (2012년 당시로 돌아가보자. 당시 필자는 중학교 3학년이었다.) 4GB 램이면 충분했다. 윈도우즈 10은 상상도 못 하던 시절. 8GB정도 메모리를 장착하면 오 좀 많은데? 라고 얘기하던 시절. 하지만 요즘 8GB는 기본옵션이라고도 할 수 있다.

갈 수록 프로그램 자체가 요구하는 자원의 양도 많아졌다는 얘기다. 컴퓨터의 발전에 따라 이러한 중요성이 크게 부각되어졌다.

앞서 언급했듯 Swapping 이라는 기법이 있다. 불 필요한 프로세스가 메모리를 차지하고 있을 때 OS는 스케쥴러를 통해 이러한 프로세스를 보조 저장장치(SSD 등등...) 에 집어넣는다.

하지만 이럴 경우 단편화 현상이 일어날 수 있다. 단편화 현상이란 사용 가능한 메모리가 충분히 존재하지만 메모리 공간들이 작은 공간들로 나뉘어서 할당이 불가능 한 상태를 의미한다.

크게 내부 단편화 외부 단편화로 나뉜다.

  • 내부 단편화 : 프로세스가 사용하는 메모리 공간에 포함 된 남는 부분
  • 외부 단편화 : 메모리 공간 중 사용하지 못하게 되는 일부 부분

이러한 문제들을 해결하기 위해 메모리 관리 기법들이 다양하게 존재한다.

연속 메모리 할당

프로세스를 메모리에 연속적으로 할당하는 방법이다. 이 방식은 외부 단편화를 발생 시킬 수 있기에 세 가지 기법을 통해 극복한다.

  • First Fit
    • 가장 처음 만나는 메모리 빈 공간에 할당하는 것
  • Best Fit
    • 빈 메모리 공간의 크기와 프로세스의 크기 차이가 가장 적은 곳에 할당
  • Worst Fit
    • 빈 메모리 공간의 크기와 프로세스의 크기 차이가 가장 큰 곳에 프로세스를 할당

페이징

하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 방법이다.

외부 단편화와 압축 작업을 해소하기 위해 생긴 방법론으로, 물리 메모리는 Frame 이라는 고정 크기로 분리되어 있고, 논리 메모리(프로세스가 점유하는)는 페이지라 불리는 고정 크기의 블록으로 분리된다.

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

하나의 프로세스가 사용하는 공간은 여러 개의 페이지로 나뉘어서 관리되고(논리 메모리에서), 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 mapping 되어 저장된다고 볼 수 있다.

하지만 내부 단편화 문제의 비중이 늘어난다는 단점이 존재한다.

세그먼테이션

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

하지만 외부 단편화의 문제가 있을 수 있다. 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되다보니.

메모리풀

필요한 메모리 공간을 필요한 크기, 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법이다. 메모리의 할당, 해제가 잦은 경우에 효과적이지만, 미리 할당을 해 두었기 때문에 메모리 누수가 발생할 수 있다.

미리 공간을 할당 해 두고 가져다 쓰고 반납하기 때문에 외부 단편화가 발생하지 않는다. 또한 필요한 크기만큼 할당 해 두기 때문에 내부 단편화 또한 생기지 않는다.

하지만 쓰지 않는 메모리 양이 커지는경우 앞서 말했듯 메모리 누수가 발생 할 수 있다.

Outro

지금까지 메모리 관리 기법에 대해 알아보았다.
다음 포스팅은 IPC에 대해서 써 보도록 하겠다.

Reference

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

profile
블로그 이전합니다 : https://swj-techblog.vercel.app/

0개의 댓글