ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION932 / 1500
운영체제난이도 하5분 답변 목표 · 보강본

메모리 총 여유는 충분한데 큰 연속 영역 할당이 실패할 수 있나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

총 여유 메모리와 특정 크기의 연속 영역은 다른 조건이므로, 여유의 합계가 충분해도 큰 할당이 실패할 수 있습니다. 가변 크기 블록 사이의 빈 공간이 잘게 흩어져 큰 블록을 만들 수 없는 현상을 외부 단편화(external fragmentation)라고 하고, 요청보다 큰 블록을 받아 블록 내부에 남는 공간을 내부 단편화(internal fragmentation)라고 합니다. 먼저 실패한 할당이 연속 가상 주소를 요구하는지, 실제 물리 연속 페이지·특정 정렬·주소 공간의 큰 구간을 요구하는지부터 구분해야 합니다.

가상 연속성과 물리 연속성은 다릅니다

일반 사용자 프로세스의 큰 버퍼는 연속된 가상 주소로 보이더라도 페이지별로 서로 떨어진 물리 프레임에 매핑할 수 있습니다. 따라서 물리 RAM이 조각나 있어도 페이징을 통해 가상 할당은 성공할 수 있습니다. 반대로 DMA 장치가 하나의 연속 물리 버퍼를 요구하거나 huge page처럼 큰 단위로 매핑하려는 경로는 물리 배치 제약이 큽니다. 32비트 프로세스에서는 RAM이 남아도 가상 주소 공간의 구멍과 매핑 한도 때문에 실패할 수 있습니다. 이처럼 할당의 연속성 요구가 계층마다 다르다는 구분이 메모리 단편화(memory fragmentation) 진단의 출발점입니다.

할당자가 크기별 free list나 arena를 유지하면 작은 요청을 빠르게 처리할 수 있지만, 사용되지 않는 조각을 다른 크기의 요청에 재사용하지 못할 수 있습니다. 같은 크기의 객체를 슬랩·풀로 관리하면 외부 단편화를 줄이고 예측성을 얻지만, 풀을 오래 보유해 실제 사용량보다 큰 RSS를 만들 수 있습니다. 메모리 압축이나 페이지 이동은 큰 영역을 만들 수 있지만 이동 비용과 페이지 테이블 갱신, 지연이 발생합니다. 그러므로 ‘풀을 쓰면 낭비가 사라진다’가 아니라 어떤 크기 분포와 수명 분포에서 이득인지 보겠습니다.

실패를 재현하고 계층을 좁힙니다

실패한 요청의 크기·정렬·수명·주소 공간, 할당자 통계, 가상 매핑과 물리 페이지 상태를 기록합니다. 작은 블록과 큰 블록을 교대로 할당·해제하는 실험, 큰 객체 뒤에 작은 생존 객체를 남기는 실험을 분리하면 외부·내부 단편화와 단순 한도 초과를 구분할 수 있습니다. 변경 뒤에는 큰 할당 성공률만 보지 않고 RSS, page fault, 할당 지연과 정상 부하 p99를 함께 확인합니다.

예를 들어 총 1MiB의 빈 공간이 각각 256KiB인 네 구간으로 흩어져 있고 700KiB 요청이 연속 영역을 요구하면 가변 블록 할당자는 실패할 수 있습니다. 반대로 일반 사용자 버퍼가 700KiB의 연속 가상 주소만 요구하면 4KiB 페이지를 서로 다른 물리 프레임에 매핑해 성공할 수 있습니다. DMA용 pinned buffer나 특정 huge page 경로는 물리 연속성과 정렬을 요구할 수 있으므로, 실패한 호출의 커널 경로와 요구 조건을 먼저 확인하겠습니다.

단편화와 한도 초과를 구분하려면 살아 있는 객체를 일정하게 유지한 채 할당·해제 순서만 바꾸는 대조군이 필요합니다. 같은 크기끼리 재사용하는 풀은 외부 단편화를 줄일 수 있지만 풀의 보유량과 내부 단편화를 늘릴 수 있습니다. compaction은 살아 있는 블록이나 페이지를 옮기는 동안 CPU와 지연을 쓰고 pinned 페이지에는 적용하지 못할 수 있습니다. 변경 뒤에는 큰 할당 성공률뿐 아니라 주소 공간 map, 할당 지연, RSS와 page fault를 함께 확인하겠습니다.

가상 주소 공간의 빈 구간과 물리 프레임의 빈 공간은 각각 다른 도구로 확인합니다. mmap 실패라면 주소 공간과 정렬·예약 한도를, 물리 버퍼 실패라면 연속 페이지·고정 페이지와 커널 할당 실패를 봅니다. 실패 계층을 잘못 잡으면 RAM 증설이나 GC 조정처럼 효과 없는 처방을 선택하게 됩니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 외부·내부 단편화와 가상·물리 연속성 요구를 구분한다.
  • 풀·슬랩·압축의 이득과 메모리·지연 비용을 함께 설명한다.
  • 할당 크기·주소 공간·할당자·page fault를 계층별로 측정한다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 총 여유 메모리가 있으면 어떤 큰 할당도 성공한다고 말한다.
  • 가상 주소가 연속이면 물리 페이지도 연속이라고 단정한다.
  • 메모리 풀을 적용하면 보유 공간까지 항상 줄어든다고 말한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기