[OS] 메모리 단편화, 페이징, 세그먼테이션

mingsso·2023년 11월 19일
0

CS

목록 보기
19/30
post-custom-banner

1️⃣ 메모리 단편화란

사용가능한 메모리가 충분히 존재하지만, 메모리의 공간이 작은 조각으로 나뉘어져 할당(사용)이 불가능한 상태
시스템 성능 저하를 일으킬 수 있음 (잦은 페이지 교체 필요)



2️⃣ 메모리 단편화의 종류

내부 단편화

필요한 양보다 더 큰 메모리가 할당이 되어서, 할당된 메모리 내부에 사용하지 않는 메모리 공간이 발생한 상황

외부 단편화

메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 생겨나는데,
이러한 메모리 공간들이 많아지면서 총 사용 가능한 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황



3️⃣ 메모리 단편화의 해결방법

압축 (Compaction)

메모리 공간들을 재배치하여, 단편화로 인해 분산되어 있는 메모리 공간들을 하나로 합치는 기법
ex) 디스크 조각 모음

통합 (Coalescing)

단편화로 인해 분산된 메모리 공간들을 인접해 있는 것끼리 통합시켜 큰 메모리 공간으로 합치는 기법 (압축처럼 분산된 메모리 영역이 재배치 되진 않음)

이외 페이징과 세그멘테이션 기법이 있다



4️⃣ 페이징

가상 메모리를 페이지로 나누는 기법

이때, 가상 메모리는 물리 메모리(RAM)의 한계를 극복하기 위한 개념으로 프로그램이 필요한 데이터 및 명령을 담을 수 있는 주소 공간을 의미한다
일반적으로 디스크를 사용해 구현된다

  • 일반적으로 물리 메모리는 동일한 크기의 프레임으로, 논리 메모리는 동일한 크기의 페이지로 나눔
  • Page Table은 가상 메모리 주소를 물리 메모리 주소로 바꾸기 위한 정보를 가지고 있는 테이블을 말함

장점

  • 외부 단편화 감소: 페이지의 크기가 동일하므로, 물리 메모리에 여러 작은 공간이 존재해도 필요한 메모리 공간을 페이지 단위로 나누어 할당이 가능함
  • 효율적인 메모리 관리: 프로그램이 필요한 부분만 메모리에 적재될 수 있으며, 페이지 테이블을 통해 가상 주소를 물리 주소로 매핑할 수 있음
    즉, 사용하지 않는 프레임을 페이지에 옮기고(swap-out), 필요한 메모리를 페이지 단위로 프레임에 옮길(swap-in) 수 있음

한계

여전히 내부 단편화 문제는 발생할 수 있다
즉, 프로세스 크기가 페이지 크기의 배수가 아닐 경우 마지막 페이지는 한 프레임(페이지)를 다 채울 수 없고, 이는 메모리 낭비의 원인이 된다

페이지 단위를 작게하면 내부 단편화 문제가 감소하지만, 대신 페이지 매핑 과정이 많아져 오히려 효율이 떨어질 수 있고 페이지 테이블 크기 또한 증가한다

페이지 크기에 따른 차이

  • 페이지 크기가 작을수록
    • 내부 단편화 감소: 페이지가 작을수록 버려지는 메모리의 내부 공간도 작아짐
    • 메모리 해상도 증가: 페이지가 크면 불필요한 영역까지 함께 적재될 수 밖에 없지만, 적을수록 필요한 부분만 메모리에 적재되는 정밀도가 증가함
  • 페이지 크기가 클수록
    • Page-in, Page-out 시간 감소: 페이지가 클수록 한 번 이동해서 많은 데이터를 읽어올 수 있어 I/O 시간이 감소함
    • Page Table Size 감소: 페이지의 크기가 클수록 테이블의 row 수는 적어짐
    • Page Fault 발생 확률 감소: 페이지가 클수록 하나의 페이지 내에 많은 내용을 담고 있기 때문에, 페이지 재사용 가능성이 높아지고 메모리 지역성에 의해 페이지 부재도 덜 발생하게 됨



5️⃣ 세그먼테이션

가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하여 실제 메모리 주소로 변환하게 하는 방법

  • 프로세스를 어떻게 나누는가(고정/가변크기)를 제외하고는 페이징과 동일
  • 각 세그먼트는 연속적인 공간에 저장되어 있다.
  • 세그먼트들의 크기가 다르기 때문에 미리 분할해 둘 수 없고, 메모리에 적재될 때 할당함
  • 매핑을 위해 세그먼트 테이블 필요 (각 세그먼트의 시작 주소와 크기 정보 수록)
  • 프로세스가 필요한 메모리만큼 할당해주기 때문에 내부 단편화는 일어나지 않으나,
    각 세그먼트는 서로 다른 크기를 가지기 때문에, 중간에 프로세스가 메모리를 해제하면 생기는 작은 세그먼트에 큰 프로세스는 할당할 수 없어 외부 단편화 문제가 발생함






참고자료

https://jeong-pro.tistory.com/91
https://cocoon1787.tistory.com/859
https://velog.io/@hanhs4544/메모리-단편화Memory-Fragmentation
https://bellog.tistory.com/159
https://blog.naver.com/ruvendix/221333044853
https://jartlife.tistory.com/59

profile
🐥👩‍💻💰
post-custom-banner

0개의 댓글