내부 단편화, 외부 단편화

김민영·2023년 2월 14일
0

CS 스터디

목록 보기
27/32

단편화

메모리에 못 쓰는 공간이 생기는 것

내부 단편화

  • 프로세스가 필요한 메모리 공간보다 많은 공간을 할당했을 때, 남는 메모리 조각
  • 프로세스들 사이에 50MB 만큼의 공간이 있는데, 30MB의 프로세스를 넣으면 20MB의 작은 빈 공간이 생김
  • 이 공간은 너무 작아서 다른 작업들이 사용하지 못함 - 메모리 낭비

외부 단편화

  • 작업보다 많은 공간이 남아있는데 실제로 그 작업을 메모리에 넣지 못하는 경우
  • 작업들 사이에 50MB 공간이 두 개가 있음
  • 총 빈 공간은 100MB인데, 두 개로 나뉘어 있어서 70MB의 프로세스를 넣지 못함.

단편화 해결 방법

페이징 - 가상메모리 사용, 외부단편화 해결, 내부단편화 존재

  • 보조기억장치를 이용한 가상메모리를 같은 크기의 블록으로 나눈 것 - 페이지
  • RAM을 페이지와 같은 크기로 나눈 것 - 프레임
  • 페이징 : 사용하지 않는 프레임을 페이지로 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮김.
    • 페이지와 프레임을 대응시키기 위해 page mapping과정 필요. paging table 만듦
  • 연속적이지 않은 공간도 활용 - 외부 단편화 해결
  • 페이지 단위에 꽉 채워 쓰는게 아니므로 내부 단편화 문제 존재
    • 페이지 단위를 작게 하면 내부 단편화 문제 해결할 수 있지만, page mapping 과정이 많아져서 효율 낮음

세그멘테이션 - 가상메모리 사용, 내부단편화 해결, 외부단편화 존재

  • 가상메모리를 크기가 다른 논리적 단위인 세그멘테이션으로 분할. 메모리를 할당해서 실제 메모리 주소로 변환.
  • 각 세그먼트는 연속적인 공간에 저장됨
  • 세그먼트 크기가 달라서 미리 분할할 수 없고, 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법
  • mapping을 위해 세그먼트 테이블 필요
  • 프로세스가 필요한 메모리만큼 할당하기 때문에 내부 단편화는 없음.
  • 중간에 프로세스가 메모리를 해제하면 외부 단편화는 있음.

메모리 풀

  • 필요한 메모리 공간을 필요한 크기, 개수만큼 사용자가 직접 지정하여 미리 할당받아 사용하고 반납하는 기법
  • 메모리풀 없이 동적할당, 해제하면 메모리의 랜덤한 위치에 할당, 해제가 반복되어 단편화가 발생할 수 있음.
  • 미리 공간을 할당해놓고 가져다쓰기 떄문에 할당, 해제로 인한 외부단편화가 없으며, 필요한 크기만큼 할당하기에 내부단편화 없음
  • 메모리 단편화로 인한 메모리 낭비량보다 메모리 풀을 만들었지만 쓰지 않았을 때 메모리 양이 커질 경우 사용하지 않기.
  • 메모리 할당, 해제가 잦은 경우에 효과적
  • 미리 할당하고 사용하지 않는 순간에도 할당하면 메모리 누수 발생 가능
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글