Computer Science/Operating System

[OS] 페이징 (Paging) & 세그멘테이션 (Segmentation)

dbssk 2023. 6. 10. 03:16

페이징과 세그멘테이션은 메모리 관리 기법으로, 가상 메모리를 물리 메모리에 매핑하는 방식이다.
이 두 가지 기법은 주소 공간을 분할하고 관리하는 방법에 차이가 있다.

페이징 (Paging)

페이징은 가상 메모리물리 메모리를 일정한 크기의 고정된 블록인 페이지(page)로 분할한다. 가상 메모리 주소 공간은 페이지로, 물리 메모리 주소 공간은 프레임(frame)으로 나뉜다. 페이지와 프레임은 동일한 크기로 분할되며, 페이지와 프레임은 일대일로 매핑된다.

 

페이징 동작 방식

  • 가상 주소를 페이지 번호와 오프셋(offset)으로 분할한다.
  • 페이지 테이블(page table)이라는 데이터 구조를 사용하여 가상 페이지와 물리 프레임 간의 매핑 정보를 유지한다.
  • 페이지 테이블에는 페이지 번호와 해당 페이지에 대응되는 물리 프레임 번호가 저장된다.
  • 가상 주소를 물리 주소로 변환하기 위해 페이지 테이블을 조회한다. 페이지 번호를 인덱스로 사용하여 매핑 정보를 찾고, 오프셋을 물리 프레임에 더해 물리 주소를 얻는다.
  • 페이지 테이블을 통해 가상 메모리와 물리 메모리 사이의 매핑을 수행하므로, 프로세스가 실제로 사용하는 메모리의 크기보다 더 큰 가상 주소 공간을 사용할 수 있다.

 

페이징의 장점과 단점

장점

  • 외부 단편화(External Fragmentation) 방지 : 페이징은 페이지 단위로 가상 메모리와 물리 메모리를 분할하기 때문에, 메모리 공간을 고정된 크기의 페이지로 관리함으로써 외부 단편화 문제를 해결할 수 있다. 프로세스가 메모리를 요청할 때마다 페이지 크기에 맞게 할당되므로, 작은 크기의 빈 공간들이 분산되어 발생하는 외부 단편화를 최소화할 수 있다.
  • 메모리 관리 용이성 : 페이징은 페이지 테이블을 사용하여 가상 메모리와 물리 메모리 간의 매핑 정보를 유지한다. 이러한 페이지 테이블을 통해 가상 주소를 물리 주소로 변환할 수 있다. 따라서 메모리 관리가 용이하며, 가상 메모리의 크기를 동적으로 조정할 수 있다.

  • 공유 메모리 지원 : 페이징은 페이지 단위로 메모리를 분할하기 때문에, 여러 프로세스 간에 페이지를 공유할 수 있다. 동일한 페이지를 여러 프로세스가 참조하면 물리 메모리의 공간을 절약할 수 있다. 예를 들어, 여러 프로세스가 동일한 라이브러리를 사용하는 경우 해당 라이브러리 페이지를 공유함으로써 메모리 사용량을 줄일 수 있다.

 

단점

  • 내부 단편화(Internal Fragmentation) 문제 : 페이징은 페이지 크기에 따라 가상 메모리와 물리 메모리를 분할하므로, 프로세스가 페이지 크기보다 큰 크기의 메모리를 요청하는 경우 내부 단편화가 발생할 수 있다. 예를 들어, 프로세스가 페이지 크기의 일부만 사용하게 되면 해당 페이지의 나머지 공간은 낭비된다.

  • 페이지 테이블 오버헤드 : 페이징은 페이지 테이블을 사용하여 가상 주소와 물리 주소 간의 매핑 정보를 유지한다. 페이지 테이블의 크기는 가상 주소 공간의 크기에 따라 결정되며, 매우 큰 프로세스의 경우 페이지 테이블도 크기가 커지게 된다. 이로 인해 페이지 테이블 자체에 대한 오버헤드가 발생할 수 있다.

  • 추가적인 메모리 접근 시간 : 페이징을 사용하면 가상 주소를 물리 주소로 변환하기 위해 페이지 테이블을 조회해야 한다. 이 과정에서 추가적인 메모리 접근이 필요하므로 약간의 지연이 발생할 수 있다. 

 

세그멘테이션 (Segmentation)

세그멘테이션은 가상 메모리 관리 기법으로, 프로세스의 주소 공간을 서로 다른 크기의 논리적인 블록인 세그먼트(Segment)로 분할하는 방식이다. 각 세그먼트는 논리적인 의미를 가지고 있으며, 프로세스의 코드, 데이터, 스택 등과 같은 논리적인 단위로 매핑된다.

 

세그멘테이션 동작 방식

  • 세그먼트 정의
    • 프로세스의 주소 공간을 논리적인 세그먼트로 분할한다.
    • 각 세그먼트는 프로세스의 코드, 데이터, 스택 등과 같은 논리적인 단위를 나타낸다.
    • 각 세그먼트에는 크기와 기타 속성이 정의된다.

  • 세그먼트 테이블
    • 세그먼트 테이블(segment table)이라는 데이터 구조를 사용하여 가상 주소와 물리 주소 간의 매핑 정보를 유지한다.
    • 세그먼트 테이블은 세그먼트 번호와 해당 세그먼트의 크기, 기준(base) 주소, 한계(limit) 값을 포함한다.

  • 가상 주소 변환
    • 가상 주소를 세그먼트 번호와 오프셋으로 분할한다.
    • 세그먼트 번호는 세그먼트 테이블을 조회하여 해당 세그먼트의 기준 주소와 한계값을 얻는다.
    • 이를 이용하여 물리 주소를 계산한다. 
    • 가상 주소의 오프셋은 해당 세그먼트 내에서의 상대적인 위치를 나타낸다.

 

세그멘테이션의 장점과 단점

장점

  • 내부 단편화 방지 : 세그멘테이션은 프로세스의 주소 공간을 세그먼트로 분할하기 때문에, 세그먼트의 크기를 동적으로 조정하여 내부 단편화 문제를 해결할 수 있다. 각 세그먼트는 논리적인 의미를 가지므로, 해당 세그먼트에 필요한 크기만큼 메모리를 할당할 수 있다.

  • 논리적인 단위로 프로그래밍 용이성 : 세그멘테이션은 프로세스의 코드, 데이터, 스택 등과 같은 논리적인 단위를 세그먼트로 분할한다. 이를 통해 프로그램의 개발과 유지보수가 용이해지고, 프로세스 간의 데이터 공유 등 논리적인 단위별로 처리가 가능해진다.

 

단점

  • 외부 단편화 발생 가능성 : 세그멘테이션은 각 세그먼트마다 크기가 다를 수 있으므로, 프로세스가 할당받은 메모리 공간 사이에 사용하지 않는 작은 빈 공간들이 발생할 수 있다. 이러한 외부 단편화로 인해 메모리 공간을 효율적으로 사용하지 못할 수 있다.

  • 세그먼트 테이블의 크기와 오버헤드 : 세그멘테이션은 세그먼트 테이블을 사용하여 가상 주소와 물리 주소간의 매핑 정보를 유지한다. 따라서 세그먼트 테이블의 크기는 가상 주소 공간의 크기와 관련이 있다. 큰 가상 주소 공간을 다룰 경우 세그먼트 테이블의 크기가 커지며, 이는 세그멘테이션 자체에 대한 오버헤드로 작용할 수 있다.

 

연속 메모리 관리 & 불연속 메모리 관리

연속 메모리 관리

연속 메모리 관리는 프로그램 전체를 하나의 연속된 메모리 공간에 할당하는 방식이다. 주기억장치를 고정된 파티션으로 분할하거나 동적으로 파티션을 생성하여 프로세스를 할당한다.

  • 고정 분할 기법 : 주기억장치를 고정된 크기의 파티션으로 나누고, 각 파티션에 프로세스를 할당한다. 내부 단편화가 발생할 수 있으며, 파티션 크기가 프로세스 크기보다 클 경우 공간 낭비가 발생한다.

  • 동적 분할 기법 : 프로세스의 크기에 맞는 파티션을 동적으로 생성하여 할당한다. 프로세스가 요청한 크기와 동일한 파티션에 적재되며, 외부 단편화가 발생할 수 있다.

 

불연속 메모리 관리

불연속 메모리 관리는 프로세스의 주소 공간이 서로 다른 주소 영역에 할당될 수 있는 방식이다. 이를 위해 페이징 또는 세그멘테이션 기법을 사용한다.

 

단순 페이징

  • 프로세스가 페이지로 나뉘어져 있으며, 메모리도 페이지 프레임으로 나뉜다.
  • 페이지와 프레임은 고정된 크기를 가지며, 프로세스의 모든 페이지는 동일한 크기를 갖는다.
  • 외부 단편화는 발생하지 않지만, 내부 단편화가 발생할 수 있다. 

 

단순 세그멘테이션

  • 프로세스는 여러 개의 세그먼트로 구성되며, 세그먼트는 논리적인 블록으로 간주된다.
  • 각 세그먼트는 서로 다른 크기를 가지며, 메모리는 세그먼트 단위로 나뉘어진다.
  • 내부 단편화는 발생하지 않지만, 외부 단편화가 발생할 수 있다. 즉, 세그먼트들이 연속적인 공간에 배치되지 않아 메모리 내에 작은 빈 공간들이 분산될 수 있다.

 

가상 메모리 페이징(=요구 페이징)

  • 프로세스의 가상 주소 공간이 페이지로 분할되며, 실제 필요한 페이지만 메모리에 적재된다.
  • 필요한 페이지가 있을 때 자동으로 메모리에 로드되므로, 프로세스 전체를 한 번에 로드할 필요가 없다.
  • 외부 단편화는 발생하지 않는다. 페이지 테이블을 사용하여 가상 주소와 물리 주소 간의 매핑을 관리한다.

 

가상 메모리 세그멘테이션(=요구 페이징)

  • 프로세스의 가상 주소 공간이 여러 개의 세그먼트로 분할되며, 필요한 세그먼트만 메모리에 로드된다.
  • 필요한 세그먼트가 있을 때 자동으로 메모리에 로드되므로, 프로세스 전체를 한 번에 로드할 필요가 없다.
  • 내부 단편화는 발생하지 않는다. 세그먼트 테이블을 사용하여 가상 주소와 물리 주소 간의 매핑을 관리한다.

 

+ 페이지 폴트 (page fault)

  • 필요한 페이지가 현재 메모리에 로드되지 않은 상태(물리 메모리에 없는 상태)에서 접근해야 할 때 발생
  • 프로세스가 실행 중에 특정 페이지에 접근하려고 하면, 운영체제는 해당 페이지가 물리 메모리에 적재되어 있는지 확인하는데, 페이지가 메모리에 없거나 유효하지 않은 상태인 경우 페이지 폴트가 발생한다.
  • 페이지 폴트가 발생하면 실행이 중지되고, 메모리로 로드될 때까지 대기한다.

 

가상 메모리 페이징과 가상 메모리 세그멘테이션은 실제 메모리보다 큰 가상 주소 공간을 지원하고, 필요한 부분만 실제 메모리에 적재하여 효율적인 메모리 관리를 가능하게 한다.