단편화 문제

내부 단편화(interal fragmentation)

  • 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상

 

외부 단편화(external fragmentation)

  • 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상

 

메모리 집약/통합

  • 외부 단편화를 해결하기 위한 방법으로 메모리 집약(Compaction)이 있으나 비용이 매우 많이 듦
  • 이외에도 인접한 외부 단편화 두 공간을 합치는 통합(coalescing) 방법도 있음


연속 할당

프로세스를 메모리에 올릴 때 주소 공간을 메모리에 연속적으로 적재하는 방식

고정 분할 방식(fixed partition allocation)

https://zangzangs.tistory.com/133#:~:text=연속할당 기법은 프로세스,분할 방식으로 나뉩니다.

  • 메모리를 미리 나누어 각 분할에 하나의 프로세스를 적재하는 방식
  • 분할의 크기는 모두 동일할 수도 있고 서로 다를 수도 있음
  • 동시에 메모리에 올릴 수 있는 프로그램의 수가 고정되어 있으며 수행 가능한 프로그램의 최대 크기가 제한되어 융통성이 떨어짐
  • 내부 단편화와 외부 단편화 문제가 발생할 수 있음

 

가변 분할 방식(variable partition allocation)

https://zangzangs.tistory.com/133#:~:text=연속할당 기법은 프로세스,분할 방식으로 나뉩니다 .

  • 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식
  • 프로그램의 크기를 고려해 메모리를 할당하고 기술적으로 관리할 수 있는 기법이 필요
  • 내부 단편화는 발생하지 않고 외부 단편화는 발생할 수 있음
  • 프로세스 종료 후 메모리에서 삭제되면 해당 공간이 비게 되면서, 새로운 프로그램을 적재하고자 할 때 어떤 가용공간에 올릴 것인지 결정하는 문제(동적 메모리 할당)가 생김

 

동적 메모리 할당 알고리즘

  • 어느 메모리 공간에 프로세스를 올려야 하는지 결정하는 알고리즘
  • Best Fit이 이론적으로는 ‘메모리’를 가장 효율적으로 활용할 수 있는 방법이지만, 그게 최선의 방법이라는 의미는 아님
  • First Fit이 가장 좋은 성능을 보임
알고리즘   동작 방식
First Fit 리스트를 순서대로 스캔하며 크기에 맞는 빈 공간을 찾음
Next Fit 빈 공간들을 기억해 두었다가 차례대로 검색을 시작
Best Fit 모든 엔트리를 탐색하여 가장 근접한 크기를 찾음
Worst fit 항상 가장 큰 빈 공간을 할당
Quick fit 자주 요청되는 공통 크기의 메모리 공간들을 서로 다른 리스트로 관리

 


불연속 할당

- 메모리를 동일한 크기의 페이지(보통 4KB)로 나누고 프로그램마다 페이지 테이블을 두어 이를 통해 메모리에 프로그램을 할당하는 것
- 자세한 주소 매핑 방법은 이쪽 포스팅을 참고

프레임과 페이지

  • 프레임: 주기억장치를 고정된 크기로 나누어 만든 파티션(물리적 개념)
  • 페이지: 프로세스를 고정된 크기로 나누어 만든 조각(논리적 개념)

 

페이징(Paging)

https://luv-n-interest.tistory.com/472

  • 메모리와 프로세스를 동일한 크기의 페이지 단위로 나누어 할당하는 것
  • 동적 메모리 할당 문제가 없어지지만 주소 변환이 복잡해짐
  • 코드, 데이터, 스택 등이 서로 다른 프레임에 쪼개질 수 있기 때문에 권한 작업이 어려워짐
  • 그림에서 p는 page number, d는 page offeset을 나타냄

 

세그멘테이션(segmentation)

https://velog.io/@kdy9kdy/CS-운영체제16-메모리

  • 의미 단위인 세그먼트로 나누는 방식으로, 크기가 동일하지 않음
  • 코드, 데이터, 스택, 힙 등은 물론, main과 같은 함수도 의미 단위로 사용할 수 있음
  • 페이징과 비슷하게 세그먼트 정보를 저장하는 세그먼트 테이블이 프로그램별로 존재하게 됨
  • 공유와 보안 측면에서 좋으며 홀 크기가 균일하지 않은 문제가 발생

 

페이지드 세그멘테이션(paged segmentation)

https://velog.io/@kdy9kdy/CS-운영체제16-메모리

  • 페이지와 세그먼트 방식을 혼합한 것으로, 한 세그먼트가 여러 개의 페이지로 구성됨
  • 홀이 생기는 문제가 없고, 메모리에 페이지 단위로 올라가기 때문에 allocation 문제가 발생하지 않음

 


References

+ Recent posts