본문 바로가기

운영체제

[OS] 메모리 관리 기법 ( Paging & Segmentation )

운영체제는 크게 페이징(Paging)과 세그멘테이션(Segmentation)을 통하여 프로세스의 메모리 공간을 관리한다.

Paging

 

https://github.com/jmxx219/CS-Study/blob/main/operating-system/%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%85%8C%EC%9D%B4%EC%85%98%EA%B3%BC%20%ED%8E%98%EC%9D%B4%EC%A7%80.md

 

페이징이란?

 

  • 하나의 프로세스가 사용하는 메모리 공간이 연속적이여야 한다는 제약을 없앤 가상 메모리 관리 기법
  • 논리 메모리를 페이지라 불리는 **고정 크기 블록**으로 분리하여 페이지를 프레임(물리 메모리)에 할당
    • 페이지 크기가 먼저 결정되고 동일한 크기의 프레임 크기가 결정된다.
  • 논리 메모리는 물리 메모리에 저장될 때 연속되어 저장되지 않고, 물리 메모리의 남는 프레임에 적절히 배치된다.
  • 이때 물리 메모리의 어디에 저장되었는지에 대한 정보는 **page table**에 저장되어 페이지 번호와 프레임을 매핑시켜준다.
    • 페이지 테이블이란?
      • 가상 주소 공간을 실제 물리적 메모리 공간에 매핑(mapping)하는데 사용

 

페이징의 장단점

장점

  • 외부 단편화(External Fragmentation) 해결
    • 외부 단편화란?
      • 세그멘테이션과 같이 가변 블록을 사용할 때 발생
      • 가변 크기의 메모리 블록을 할당하고 해제하는 과정에서 빈 공간이 여러군데 나뉘어 생기기 때문에 발생
      • 전체 메모리에는 충분한 공간이 있지만, 연속된 공간이 부족하여 큰 프로세스를 할당하지 못하는 경우를 말한다.
  • 논리 주소 공간 : 논리 주소와 물리 주소 공간을 분리함으로써 물리 메모리의 크기보다 더 큰 주소 공간을 가질 수 있다.
  • 메모리 관리가 용이하고 가상 메모리를 효과적으로 사용할 수 있다.
  • 프로세스의 연속적 배치를 요구하지 않는다.

단점

  • 내부 단편화(Internal Fragmentation) 발생
    • 내부 단편화란?
      • 페이징과 같이 고정 크기 블록을 사용할 때 발생
      • 실제로 필요한 메모리보다 더 큰 크기의 고정 크기 메모리 블록(ex.페이지)이 할당되어 메모리가 낭비될 때 발생
  • 주소 변환을 위한 추가적인 오버헤드 발생 (TLB 사용으로 완화 가능)

 

 

Segmentation

 

https://github.com/jmxx219/CS-Study/blob/main/operating-system/%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%85%8C%EC%9D%B4%EC%85%98%EA%B3%BC%20%ED%8E%98%EC%9D%B4%EC%A7%80.md

 

세그멘테이션이란?

  • 페이징처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌 서로 다른 크기의 논리적 단위로 분할하는 가상 메모리 기법
  • 프로그램을 논리적 단위 (ex. 코드, 전역 변수, 힙, 스택, 라이브러리)로 나누어 별도의 세그먼트로 관리
  • 각 논리적 단위로 분할된 세그먼트들은 메모리 내 각기 다른 위치에 할당될 수 있다.

 

세그멘테이션의 장단점

장점

  • 내부 단편화 해결
  • 논리적 구조 반영
    • 프로세스의 논리적 구조를 반영할 수 있어 더 유연하게 관리할 수 있다.
    • 필요한 만큼 동적 할당이 가능하여 메모리 낭비를 줄일 수 있다.
    • 같은 코드의 세그먼트를 여러 프로세스가 공유할 수 있다.

단점

  • 외부 단편화 존재
  • 스왑 아웃 시, 다양한 크기의 세그먼트를 스왑 영역에 미리 확보해주어야 한다.
  • 세그먼트 테이블의 관리 비용 증가
  • 동적 메모리 할당 시 세그먼트 크기를 조정해야하는 부담 발생