메모리 단편화

신명철·2022년 2월 8일
0

OS

목록 보기
15/27

메모리 단편화

외부 단편화

  • 메모리가 적재되고 삭제되는 것이 반복되다 보면 어떤 가용 공간은 너무 작아져 버린다. 이렇게 메모리 가용 공간이 작은 조각들로 단편화되어서 합치면 프로세스를 할당하기에 충분하지만 실제로는 할당할 수 없는 현상을 말한다.

내부 단편화

  • 프로세스가 필요한 메모리보다 더 많은 메모리 공간이 할당되는 현상을 말한다.
    (e.g 프로세스가 4 kb 를 할당받았지만, 실제로는 1 kb 만 사용하는 경우)

단편화 해결 방법

페이징

  • 외부 단편화 문제 해결
  • 내부 단편화 문제 존재

페이징은 외부 단편화를 방지하는 방법이다. 물리 메모리프레임(Frame) 이라 불리는 같은 크기 블록으로 나누어지고, 논리 메모리페이지(Page) 라 불리는 같은 크기의 블록으로 나누어 진다.

물리 주소를 논리 주소로 변환하기 위해서 Page Table 을 사용하고 페이지 번호(p)와 페이지 오프셋(d: offset)을 활용해 주소를 변환한다. 페이징 테이블은 Frame 과 Page 를 대응시키기 위한 Page mapping 을 위해서 존재한다.

페이징을 사용함으로써 프로세스의 물리 주소 공간이 연속적이지 않아도 되게 된다. 연속적이지 않은 메모리 공간을 할당할 수 있기 때문에 외부 단편화 문제를 해결할 수 있지만, 메모리를 꽉 채워서 사용하는 것이 아니기 때문에 내부 단편화에 대한 문제가 여전히 존재한다.

e.g)

  • Page Size = 16 bytes
  • Page Table = [5,3,2,8,1,4]
  • 논리 주소 50번지는 물리 주소 몇 번지 일까?
    • 50 = 110010(2) 이고, 16bytes = 2^4 이므로 d 는 4bit를 사용하기 때문에 d = 0010(2)
    • p = 11(2) = 3(10) 이다. 이는 페이지 테이블 번호 3 을 가리키고 이는 프레임 번호 8 번이다.
    • 따라서, f = 1000(2), d = 0010(2), 물리주소 = 10000010(2) = 130(10), 8 번째 프레임의 시작 주소는 130 에서 변위 2 를 뺀 128(16x8) 번지가 된다.

세그멘테이션

  • 외부 단편화 문제 존재
  • 내부 단편화 문제 해결

페이징은 메모리를 같은 크기의 블록으로 나누는 방법이지만, 세그멘테이션은 일정하지 않은 세그먼트(segment)로 메모리를 분할하는 방법이다.

세그먼트를 메모리에 할당할 때는 페이지를 할당할 때와 같지만, 테이블이 조금 다르다. 이를 세그멘테이션 테이블이라고 한다.

세그멘테이션 테이블에는 기준(base)과 한계(limit)를 저장하고, CPU 는 (세그먼트 번호(s) 와 변위(d))를 가지고 테이블에 접근한다. 만약, 세그먼트의 크기를 넘어서는 주소가 들어오면 인터럽트가 발생해 해당 프로세스를 강제 종료시킨다.

e.g)

  • 논리주소 (2, 100) -> 물리주소 4400 (4300+100)
profile
내 머릿속 지우개

0개의 댓글