본문 바로가기

CS/운영체제

[운영체제] 메모리 단편화(memory fragmentation)

2021년 10월 29일에 작성된 글입니다.

🎞 메모리 단편화(memory fragmentation)

Process free Process free Process free Process

외부 단편화(external fragmentation)

프로그램 크기 > 분할의 크기일 때, 해당 분할이 비어 있음에도 불구하고 프로그램을 적재하지 못하기 때문에 발생하는 메모리 공간

  • 어떤 프로그램에도 배당되지 않은 빈 공간
  • 현재 상태에서 사용될 수 없는 작은 분할

내부 단편화(internal fragmentation)

프로그램 크기 < 분할의 크기일 때, 해당 분할에 프로그램을 적재하고 남는 메모리 공간

  • 하나의 분할 내부에서 발생하는 사용되지 않는 메모리 조각

압축(compaction)

Process Process Process Process      free     

외부 단편화를 해소하기 위해 프로세스가 사용하는 공간들을 한쪽으로 몰아, 자유 공간을 확보하는 방법론

  • 작업 효율이 좋지 않음

✨ 어떻게 해소하는가?

📄 페이징(paging)

프로세스의 주소 공간을 동일한(고정된) 사이즈의 페이지 단위로 나누어 물리적 메모리에 불연속적으로 저장하는 방식

  • 외부 단편화 해소
  • 메모리는 frame, 프로세스는 page라는 고정 크기로 분할
  • 하나의 프로세스가 사용하는 공간은 여러 개의 페이지로 나뉘어서 관리
  • 개별 페이지는 순서에 상관 없이 물리 메모리에 있는 프레임에 매핑(mapping)되어 저장
  • 내부 단편화 문제 비중 늘어남

🔪 세그멘테이션(segmentation)

프로세스를 서로 크기가 다른 논리적인 블록 단위 인 세그먼트(segment)로 분할하고 메모리에 배치

  • 세그먼트 테이블은 세그먼트 번호와 시작 주소, 세그먼트 크기를 엔트리로 갖음
  • 외부 단편화 문제 발생 가능

💣 segmentation fault?

C언어 쓸 때 자주 보던 거

프로그램이 허용되지 않은 메모리 영역에 접근을 시도하거나, 허용되지 않은 방법으로 메모리 영역에 접근을 시도할 경우 발생

다음과 같은 코드는 segmentation fault를 발생시킨다.

int *ptr = (int) 0x00000000;
*ptr = 1;
참고 자료