메모리 관리(Memory Management란?

Ilhwanee·2022년 9월 17일
0

CS

목록 보기
19/27
post-custom-banner

Memory Managemnet

멀티프로그래밍 환경에서 여러 프로세스들은 각각의 독립적인 메모리 영역을 가진다.
메모리는 한정되어 있기 때문에 이를 효율적으로 관리해야 하므로 메모리 관리가 필요하다.
따라서 OS는 효율적인 메모리 관리를 제공해야 한다.

OS는 프로세스에 우선순위를 정하여 우선순위가 더 높은 프로세스를 메모리에 올려야하는 경우 우선순위가 낮은 프로세스를 Disk의 Swap 영역으로 이동시키고 필요하면 다시 메모리에 올리는 Swapping을 수행한다.
이때 메모리에서 Disk로 이동하는 것을 swap-out, Disk에서 메모리로 이동하는 것을 swap-in이라고 한다.

또한 동적 적재 방법으로 메모리를 효율적으로 관리할 수 있는데, 프로세스가 원활하게 실행할 수 있도록 필요한 부분만 메모리에 올리고, 실행 시 필요한 부분은 그때 메모리에 올리는 것이다.

C언어로 만들어진 프로세스들이 메모리에 올라가는 경우 printf()와 같은 공통적인 라이브러리가 존재할 것이다.
만약 이러한 라이브러리를 각 프로세스마다 메모리에 올리면 낭비이므로, 라이브러리 루틴 연결을 실행 시까지 미루고 하나의 라이브러리 루틴만 메모리에 올려 효율적으로 관리하는 것을 동적 연결이라고 한다.

메모리에는 프로세스들이 올라왔다 사라지는 것을 반복한다.
메모리또한 주소의 연속이기 때문에 어떠한 주소 영역에 프로세스를 올렸다가 사라지기 때문에 빈 공간이 생겨난다.

가변 분할 방식이란 메모리 영역을 프로세스의 크기에 맞춰 분할하는 것이다.
메모리를 가변 분할 방식으로 관리하게 된다면 다음의 그림과 같다.

위의 그림과 같이 프로세스2가 terminated 되면 14M 만큼의 빈 영역이 생겨나지만, 새로운 프로세스4는 8M 만큼의 영역을 차지하기 때문에 6M 만큼의 빈 영역이 생긴다.

이러한 현상이 계속되면 빈 영역의 크기가 새로 올라올 프로세스의 크기보다 크지만 쪼개져 있어 새로운 프로세스를 메모리에 올릴 수 없는 외부 단편화가 발생할 수 있다.

즉, 가변 분할 방식에서는 외부 단편화가 발생한다.

가변 분할 방식에서 어느 영역에 프로세스를 올릴지는 다음과 같은 방법을 선택할 수 있다.

  • 최초 적합(First Fit)
    • 메모리를 순차적으로 탐색하여 제일 먼저 발견한 영역에 프로세스를 적재하는 방법
    • 가장 먼저 발견하면 적재하기 때문에 성능이 가장 빠름
  • 최적 적합(Best Fit)
    • 메모리를 탐색하여 빈 영역 중 가장 크기가 비슷한 영역에 프로세스를 적재하는 방법
    • 가장 적은 빈 영역이 생기기 때문에 이용률이 높음
  • 최악 적합(Worst Fit)
    • 메모리를 탐색하여 빈 영역 중 가장 크기가 큰 영역에 프로세스를 적재하는 방법

고정 분할 방식은 메모리를 정해진 개수 만큼의 영역들로 미리 나누어놓는 것이다.

만약 적재할 프로세스의 크기가 분할해 놓은 메모리의 영역보다 작다면 내부 단편화가 발생하고, 크다면 외부 단편화가 발생하게 된다.

OS는 외부 단편화를 해결하기 위해 Compaction을 사용할 수 있다.
Compaction이란 흩어져 있는 외부 단편화된 영역들을 합쳐 새로운 빈 공간으로 만드는 것이다.

위의 그림과 같이 외부 단편화로 인하여 빈 영역의 크기는 충분하지만 새로운 프로세스가 적재될 수 없는 경우에

메모리 상에 프로세스들을 재배치 시켜 외부 단편화된 영역들을 모아 하나의 빈 공간으로 만들어 새로운 프로세스가 적재될 수 있는 영역을 만든다.
프로세스들을 메모리에 재배치 하는 비용이 발생한다는 단점이 있다.



profile
블로그 이전 -> https://pppp0722.github.io
post-custom-banner

0개의 댓글