페이징(Paging)과 세그멘테이션(Segmentation)에 대해 알아보자

페이징과 세그멘테이션

1. 메모리

페이징과 세그멘테이션에 대해 공부하기 전, 메모리에 대해 알아야 한다.

메인메모리 (주기억장치)

메인메모리(주기억장치)는 CPU가 직접 접근할 수 있는 기억ㄷ 장치로 프로세스가 실행되려면 프로세스 코드를 메인 메모리에 적재해두어야 한다. 그런데 만약 프로세스가 필요한 메모리가 메이메모리보다 크면 어떻게 될까? 이렇게 시작한 것이 바로 가상메모리이다.

가상메모리

가상메모리란 실제 물리 메모리 개념과 사용자의 논리 메모리 개념을 분리하는 것이다. 메모리 공간은 한정적이기 때문에 사용자에게 더 많은 메모리를 제공하기 위해서 가상 주소를 사용한다. 메로리 관리 장치는 가상 주소를 이용해 실제 데이터가 담겨있는 주소로 변환해준다.

가상메모리 구현

운영체제는 디스크를 보조 기억 장치로 사용한다. 메인메모리(주기억장치)와 디스크의 페이징 스페이스(보조 기억장치)를 묶어 하나의 메모리처럼 동작한다.

Swapping

CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억장치에서 내보내고(swap out) 다른 프로세스의 메모리를 불러오는(swap in) 작업을 Swap이라고 한다.

2. 메모리 관리 기법

메모리 관리 기법은 연속 메모리 관리와 불연속 메모리 관리로 나뉜다.

연속 메모리 기법

  • 프로그램 전체가 메모리에 연속적으로 할당되어야 하는 관리 기법
  • 고정 분할 기법: 메모리가 고정된 파티션으로 분할, 내부 단편화 발생
  • 동작 분할 기법: 파티션들이 동적으로 생성됨, 자신의 크기와 같은 파티션에 적재, 외부 단편화 발생

불연속 메모리 기법

  • 프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법
  • Page: 프로세스를 고정된 크기의 작은 블록으로 나누었을 때, 그 블록들을 페이지라고 함
  • Frame: 페이지 크기와 같은 주기억장치의 메모리 블록
  • Segment: 서로 다른 크기의 논리적 단위

메모리 단편화(Memory Pragmentation / 메모리 파편화)

내부 단편화

메모리가 고정된 파티션으로 분할되어 있어서 메모리를 할당할 때, 실제로 프로세스가 필요한 메모리의 크기보다 큰 메모리에 할당되어 메모리 공간이 낭비되는 상황

ex) 메모리를 10K 파티션으로 분할 -> 7K 크기의 프로세스를 할당하면 3K만큼 낭비

외부 단편화

메모리가 할당되고 해제되는 과정이 계속 발생하면, 할당된 메모리와 해제된 메모리의 사이사이에 작은 메모리가 발생한다. 작은 메모리들이 많아지면 남는 메모리의 공간은 많지만 실제로는 할당할 수 없는 상태가 발생하는데, 이를 외부 단편화라고 한다.

메모리 단편화 해결 방법 - Paging

메모리 단편화를 해걸하는 방법이 바로 Paging이다.

페이징이란, 프로세스의 논리 주소 공간을 페이지 단위로 자르고, 메모리 물리 주소 공간을 프레임 단위로 잘라 페이지를 프레임에 할당하는 것이다.

페이징 방식으로 메모리를 할당하면, 실제 프로스세가 실행될 때 각각의 페이지들이 실제 메모리의 어디에 위치하고 있는지 빠르게 알 수 있어야 한다.

또한 프로세스는 메모리 공간에 흩어져있는 페이지들로 구성하는 것이 아니라, 하나의 연속된 메모리 공간으로 이해할 수 있어야지 프로그램을 효율적으로 실행할 수 있다.

따라서 프로세스가 바라보는 메모리의 주소 공간과 실제 메모리의 주소 공간을 논리 주소와 물리 주소라는 것으로 구분하고, 그들 사이의 변환을 통해서 메모리 참조를 효율적으로 하고자 논리 주소 공간을 page table을 통해 참조 기법을 사용한다.

즉, 논리적 메모리에는 해당 프로세스를 실행시키기 위해 필요한 페이지가 있고, 페이지 테이블에는 해당 페이지가 물리적 메모리에 위치한 주소를 담고 있는 것이다.

페이징 기법은

  • 효율적인 메모리 할당
  • 프로세스의 효율적인 메모리 참조

라는 두 가지의 메모리 관리를 달성하고 있기 때문에 실제 대부분의 운영체제에서 관리하는 기본적인 메모리 관리 기법이라고 한다.

장단점

  • 논리 메모리는 물리 메모리에 저장될 때 연속되어 저장될 필요가 없고, 물리 메모리의 남는 프레임에 적절하게 배치하면 되기 때문에 외부 단편화가 생기지 않는다.
  • 프로세스의 크기가 페이지 크기의 배수가 아닐 경우 마지막 페이지에 대해 내부 단편화가 발생하고 페이지의 크기가 클수록 내부 단편화가 커진다.
  • 그렇다고 페이지 크기를 줄이면 내부 단편화 문제를 해결할 수 있지만, page mapping 과정이 많아져 효율어 떨어진다.

세그멘테이션

페이징은 프로세스를 서로 크기가 같은 논리적인 페이지 단위로 분할하는 방법이었다면, 세그멘테이션은 프로세스를 서로 크기가 다른 논리적인 블록 단위, 세그먼트로 분할하여 메모리에 저장하는 기법이다.

각 세그먼트의 크기가 다르기 때문에 프로세스가 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법이다. 페이징과 마찬가지로 mapping을 위한 segment table이 필요하다.

장단점

  • 프로세스가 필요한 메모리 공간만큼 메모리를 할당해주기 때문에 내부 단편화 문제는 발생하지 않는다.
  • 중간에 메모리를 해제하면 외부 단편화 문제가 발생할 수 있다.