[운영체제] 메모리 - 연속 메모리 할당

Local Gaji·2024년 1월 7일

운영체제

목록 보기
15/19

연속 메모리 할당
메모리에 프로세스를 그냥 통째로 순서대로 넣는 방법
간단하긴 한데..


🎈 외부 단편화 문제

메모리에 연속적으로 프로세스를 할당하는 방식에는 문제가 있다. 프로세스를 연속적으로 채워서 실행하다가, 일부 프로세스의 실행이 끝나고 빈 공간이 작게 분산되어 생기게 된다면, 큰 프로세스가 들어갈 수 없게 되어 공간이 낭비된다. 이런 현상을 외부 단편화 라고 한다.

외부 단편화를 해결하기 위해 메모리를 압축할 수 있다. 프로세스를 적당히 재배치시켜 빈 공간을 한 군데로 모으는 방식이다. 하지만 말로만 들어도 번거롭고 오래 걸릴것 같다.


🎈 메모리 할당 위치 결정

메모리의 빈 공간이 여러개일 때, 프로세스를 어떤 공간에 배치할 지 결정하는 대표적인 방식으로는 최초 적합, 최적 적합, 최악 적합 방식이 있다.


  • 최초 적합
    • 운영체제가 메모리의 빈 공간을 순서대로 탐색하다가 적재할 수 있는 공간이 보이면 바로 적재한다. 공간 탐색을 최소화 할 수 있어서 빠른 할당이 가능하다.
  • 최적 적합
    • 빈 공간을 모두 탐색해본 후, 프로세스가 들어갈 수 있는 공간 중 가장 작은 공간에 프로세스를 배치한다.
  • 최악 적합
    • 빈 공간을 모두 탐색해본 후, 프로세스가 들어갈 수 있는 공간 중 가장 넓은 공간에 프로세스를 배치한다.

그런데 어떤 프로세스는 잘 쓰이지도 않는데 계속 공간을 차지하고 있어서 다른 프로세스가 들어갈 수 없다. 얘네를 그냥 둬야할까?


🎈 스와핑

스와핑 이란?
메모리에 있는 프로세스 중 현재 실행되지 않는 프로세스는 임시로 보조 기억 장치로 쫓아낸다. 이렇게 해서 생긴 빈 공간에 또 다른 프로세스를 적재하는 방식이다.

  • 스왑 영역 : 프로세스가 쫓겨나는 보조기억장치의 일부 영역
  • 스왑 아웃 : 프로세스가 쫓겨나는 것
  • 스왑 인 : 쫓겨난 프로세스가 다시 메모리로 들어오는 것

💡 JVM과 swap은 상극
GC가 주기적으로 힙 전체를 훑는데, 힙 일부가 swap에 나가 있으면 GC가 그걸 죄다 도로 읽어오느라 엄청난 멈춤이 생긴다. 그래서 운영 JVM 서버는 보통 swap을 끄거나 swappiness를 낮게 둔다.


하지만 이렇게 열심히 쫓아내고 해도 결국 연속 할당 방식으로는 메모리보다 용량이 큰 프로세스를 적재할 수 없다. 이런 문제점들을 해결하기 위해 현대에는 페이징 이라는 기법이 널리 사용되고 있다.


0개의 댓글